@cline/core 0.0.67-nightly.1785467775 → 0.0.67-nightly.1785554076
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 +72 -72
- package/dist/hub/index.js +66 -66
- package/dist/index.js +64 -64
- package/dist/services/providers/local-provider-registry.d.ts +3 -0
- package/package.json +4 -4
package/dist/hub/daemon/entry.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{createRequire as IO}from"node:module";var{defineProperty:i3,getOwnPropertyNames:bO}=Object;var LV=Object.prototype.hasOwnProperty;function AV($){return this[$]}var M=($,Z,Q)=>{var J=bO(Z);for(let W of J)if(!LV.call($,W)&&W!=="default")i3($,W,{get:AV.bind(Z,W),enumerable:!0});if(Q){for(let W of J)if(!LV.call(Q,W)&&W!=="default")i3(Q,W,{get:AV.bind(Z,W),enumerable:!0});return Q}};var yO=($)=>$;function kO($,Z){this[$]=yO.bind(null,Z)}var w=($,Z)=>{for(var Q in Z)i3($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:kO.bind(Z,Q)})};var _2=($,Z)=>()=>($&&(Z=$($=0)),Z);var OV=IO(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as tO,captureAgentUnexpectedReasoningTokens as EV,captureTaskLifecycleEvent as Qd,SDK_ERROR_TELEMETRY_EVENT as eO,TASK_CANCELLED_EVENT as $q,TASK_FIRST_CHUNK_RECEIVED_EVENT as Zq,TASK_PROVIDER_REQUEST_STARTED_EVENT as Qq,TASK_PROVIDER_STREAM_FAILED_EVENT as Jq,TASK_PROVIDER_STREAM_STARTED_EVENT as Wq}from"@cline/shared";function n($,Z,Q){$?.capture({event:Z,properties:Q})}function
|
|
2
|
-
`,"utf8"),fN()}function $
|
|
3
|
-
`)}function wf($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let J=Pf(Q);if(J)Z.push(J)}return Z}function Pf($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let J=Q[1],W=Q[2];if(!J||!W)return;return{type:"image",mediaType:J,data:W}}return{type:"image",mediaType:"image/png",data:Z}}async function Sf($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),J=await Promise.all($.map(async(W)=>{let X=W.replace(/\\/g,"/");try{let j=await Q(W);return{type:"file",path:X,content:j}}catch(j){let Y=j instanceof Error?j.message:String(j);return{type:"file",path:X,content:`Error fetching content: ${Y}`}}}));if(J.length===0)return;return J}var $U={};w($U,{updateMcpSettingsFileSync:()=>q1,updateMcpSettingsFile:()=>M6,updateMcpServerOAuthStateAsync:()=>n5,updateMcpServerOAuthState:()=>e2,setMcpServerDisabled:()=>s2,resolveMcpServerRegistrations:()=>W1,resolveDefaultMcpSettingsPath:()=>J0,registerMcpServersFromSettingsFile:()=>$8,normalizeMcpServerOAuthState:()=>E6,loadMcpSettingsFile:()=>o2,listMcpServerOAuthStatuses:()=>a5,hasMcpSettingsFile:()=>B$,getMcpServerOAuthState:()=>t2,McpSettingsUpdateSkippedError:()=>R6,McpSettingsMutatorPurityError:()=>e$,McpSettingsLockTimeoutError:()=>$2});import{randomUUID as gC}from"node:crypto";import{existsSync as gF,mkdirSync as QX,readFileSync as vF,renameSync as XX,rmdirSync as vC,rmSync as JX,statSync as mC,unlinkSync as mF,writeFileSync as cF}from"node:fs";import{dirname as uF,join as xF}from"node:path";import{setTimeout as cC}from"node:timers/promises";import{isMcpTimeoutConfigured as uC,resolveMcpTimeoutSeconds as dC}from"@cline/shared";import{resolveMcpSettingsPath as pC}from"@cline/shared/storage";import{z as k}from"zod";function WX($){if(!$)return;if($==="http")return"streamableHttp";return $}function J0(){return pC()}function Zw($,Z){QX(uF($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{cF(Q,Z,{encoding:"utf8",flag:"wx"}),XX(Q,$)}catch(J){try{mF(Q)}catch{}throw J}}function Jw($){Atomics.wait(Qw,0,0,$)}function Ww($){return`${$}.lock`}function rF(){return`${process.pid}.${Date.now()}.${gC()}`}function nF($,Z){QX(uF($),{recursive:!0});let Q=`${$}.tmp.${Z}`;JX(Q,{recursive:!0,force:!0}),QX(Q,{recursive:!0}),cF(xF(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return XX(Q,$),{lockDir:$,ownerFile:xF($,`owner.${Z}`)}}catch(J){if(JX(Q,{recursive:!0,force:!0}),gF($))return;throw J}}function aF($,Z){let Q;try{Q=Date.now()-mC($).mtimeMs}catch(W){if(W.code==="ENOENT")return;throw W}if(Q<YX)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let J=`${$}.stale.${rF()}`;try{XX($,J)}catch(W){if(W.code==="ENOENT")return;throw W}JX(J,{recursive:!0,force:!0})}function Xw($){try{mF($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{vC($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function oF($){let Z=Ww($);if(
|
|
4
|
-
`),W}finally{VQ.delete($.lockDir),Xw($)}}function q1($,Z,Q={}){let J=jw($,Q);return sF(J,$,Z)}async function M6($,Z,Q={}){let J=await Yw($,Q);return sF(J,$,Z)}function Vw($){let Z=Kw($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Bw($,Z){let Q=JSON.stringify($),J=JSON.parse(Q),W=Z(J),X=JSON.stringify(J),j=Z($);if(JSON.stringify($)!==X)throw new e$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(W))throw new e$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function Hw($){let Z=vF($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let W=J instanceof Error?J.message:String(J);throw Error(`Failed to parse MCP settings JSON at "${$}": ${W}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function Kw($){try{return Hw($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function tF($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function Gw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function o2($={}){let Z=$.filePath??J0(),Q=vF(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(X){let j=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let W=$w.safeParse(J);if(!W.success){let X=W.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return W.data}function E6($){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 Fw($){if($===void 0)return;let Z=jX.safeParse($);if(!Z.success)return;return E6(Z.data)}function B$($={}){let Z=$.filePath??J0();return gF(Z)}function W1($={}){let Z=o2($);return Object.entries(Z.mcpServers).map(([Q,J])=>({name:Q,transport:J.transport,disabled:J.disabled,timeoutSeconds:J.timeoutSeconds,metadata:J.metadata,oauth:J.oauth}))}function s2($){let Z=$.filePath??J0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");q1(Z,(J)=>{let W=J.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...W},j=tF(X,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;Gw(X,Q,Y),J.mcpServers=X})}function t2($,Z={}){let Q=o2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return E6(Q.mcpServers[$]?.oauth)}function eF($,Z){return(Q)=>{let J=Q.mcpServers,W=tF(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);let X=Fw(W.oauth)??{},j=E6(Z(X));if(j)W.oauth=j;else delete W.oauth;return j??{}}}function e2($,Z,Q={}){let J=Q.filePath??J0();return q1(J,eF($,Z))}async function n5($,Z,Q={}){let J=Q.filePath??J0();return M6(J,eF($,Z))}function a5($={}){return W1($).map((Q)=>{let J=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:J,oauthConfigured:J&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,J)=>Q.serverName.localeCompare(J.serverName))}async function $8($,Z={}){let Q=W1(Z);for(let J of Q)await $.registerServer(J);return Q}var r5,dF,pF,jX,lC,iC,rC,nC,aC,oC,lF,sC,tC,eC,$w,R6,$2,e$,YX=1e4,iF=25,Qw,VQ;var BQ=_2(()=>{r5=k.record(k.string(),k.string()),dF=k.record(k.string(),k.unknown()),pF=k.preprocess(($)=>uC($)?dC($):void 0,k.number().optional()),jX=k.object({clientInformation:k.record(k.string(),k.unknown()).optional(),tokens:k.record(k.string(),k.unknown()).optional(),codeVerifier:k.string().optional(),discoveryState:k.record(k.string(),k.unknown()).optional(),redirectUrl:k.string().url().optional(),lastError:k.string().optional(),lastAuthenticatedAt:k.number().int().positive().optional()}).strip(),lC=k.object({type:k.literal("stdio"),command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:r5.optional()}),iC=k.object({type:k.literal("sse"),url:k.string().url(),headers:r5.optional()}),rC=k.object({type:k.literal("streamableHttp"),url:k.string().url(),headers:r5.optional()}),nC=k.discriminatedUnion("type",[lC,iC,rC]),aC=k.object({transport:nC,disabled:k.boolean().optional(),timeout:pF,metadata:dF.optional(),oauth:jX.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),oC=k.enum(["stdio","sse","http","streamableHttp"]).optional(),lF=k.object({type:k.enum(["stdio","sse","streamableHttp"]).optional(),transportType:oC,disabled:k.boolean().optional(),timeout:pF,metadata:dF.optional(),oauth:jX.optional()});sC=lF.extend({command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:r5.optional()}).superRefine(($,Z)=>{let Q=$.type??WX($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:k.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),tC=lF.extend({url:k.string().url(),headers:r5.optional()}).superRefine(($,Z)=>{let Q=$.type??WX($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:k.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??WX($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth}}),eC=k.union([aC,sC,tC]),$w=k.object({mcpServers:k.record(k.string(),eC)}).passthrough();R6=class R6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};$2=class $2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};e$=class e$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Qw=new Int32Array(new SharedArrayBuffer(4)),VQ=new Set});import{existsSync as by,mkdirSync as yy,readFileSync as ky,writeFileSync as Iy}from"node:fs";import{resolve as hy}from"node:path";import{resolveSessionDataDir as xy}from"@cline/shared/storage";import{nanoid as gy}from"nanoid";import*as vy from"node-machine-id";function v6(){if(!dD)uD=pD(),dD=!0;return uD??lD()}function o0($){let Z=$?.trim();if(Z)return Z;let Q=pD();if(Q)return Q;return lD()}function cy(){let $=vy;return $.machineIdSync??$.default?.machineIdSync}function pD(){try{let $=cy();if(!$)return;return $().trim()||void 0}catch{return}}function lD(){let $=xy(),Z=hy($,my);try{if(by(Z)){let J=ky(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${gy()}`;try{yy($,{recursive:!0}),Iy(Z,Q,"utf8")}catch{}return Q}var my="machine-id",uD,dD=!1;var F8=()=>{};class b7{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.buildAttributes(Q),j=JSON.stringify(X),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,J?{description:J}:void 0);B.addCallback((H)=>{for(let K of this.snapshotGaugeSeries($))H.observe(K.value,this.flattenProperties(K.attributes))}),this.gauges.set($,B)}V.set(j,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,J=0){if(!$)return{};let W={},X=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){W[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{W[B]=JSON.stringify(H)}catch{W[B]="[UnserializableArray]"}if(V.length>X)W[`${B}_truncated`]=!0,W[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){W[B]=V.toISOString();continue}if(V instanceof Error){W[B]=V.message;continue}if(Q.has(V)){W[B]="[Circular]";continue}if(J>=j){W[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(W,this.flattenProperties(V,B,Q,J+1));continue}if(LI(V)){W[B]=V;continue}try{W[B]=JSON.stringify(V)}catch{W[B]=String(V)}}return W}}function LI($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class y7{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordHistogram($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordGauge($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class e6{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new y7({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??v6(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,X,J,W)}recordHistogram($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,X,J,W)}recordGauge($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,X,J,W)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}var zj=_2(()=>{F8()});import{metrics as AI,trace as OI}from"@opentelemetry/api";import{logs as qI}from"@opentelemetry/api-logs";import{OTLPLogExporter as zI}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as TI}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as NI}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as fI}from"@opentelemetry/resources";import{BatchLogRecordProcessor as RI,ConsoleLogRecordExporter as MI,LoggerProvider as EI}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as CI,MeterProvider as wI,PeriodicExportingMetricReader as c_}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as PI,ConsoleSpanExporter as SI,SimpleSpanProcessor as bI}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as yI}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as kI,ATTR_SERVICE_VERSION as II}from"@opentelemetry/semantic-conventions";class u_{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 $4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=fI({[kI]:$.serviceName??"cline",...$.serviceVersion?{[II]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)AI.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)qI.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return OI.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new b7({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new e6({...$,adapters:[Z],distinctId:o0($.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=Tj(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),W=Z.map((X)=>gI(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((X)=>X!==null);if(W.length===0)return null;return new wI({resource:$,readers:W})}createTracerProvider($){let Z=Tj(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let X of Z){let j=xI(X,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)W.push(j)}if(W.length===0)return null;return new yI({resource:$,spanProcessors:W})}createLoggerProvider($){let Z=Tj(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let W=hI(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new RI(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new EI({resource:$,processors:Q})}}function k7($){let Z=new $4($),Q=Z.createTelemetryService($),J=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)J();return{provider:Z,telemetry:Q,emitProviderCreated:J}}function A$($){if($Z())return{telemetry:new u_($)};if($.enabled!==!0)return{telemetry:new e6({...$,distinctId:o0($.distinctId)})};return k7($)}function B2($){let{telemetry:Z,provider:Q,emitProviderCreated:J}=A$($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&J?{emitProviderCreated:J}:{}}}function Tj($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function hI($,Z){if($==="console")return new MI;if(!Z.endpoint)return null;let Q=Nj(Z.endpoint,"/v1/logs");return new zI({url:Q,headers:Z.headers})}function xI($,Z){if($==="console")return new bI(new SI);if(!Z.endpoint)return null;let Q=Nj(Z.endpoint,"/v1/traces");return new PI(new NI({url:Q,headers:Z.headers}))}function gI($,Z){if($==="console")return new c_({exporter:new CI,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=Nj(Z.endpoint,"/v1/metrics");return new c_({exporter:new TI({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function Nj($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}var I7=_2(()=>{O1();F8();zj()});var sL={};w(sL,{resolveCoreDistinctId:()=>o0,resolveCoreDeviceId:()=>v6,createOpenTelemetryTelemetryService:()=>k7,createConfiguredTelemetryService:()=>A$,createConfiguredTelemetryHandle:()=>B2,OpenTelemetryProvider:()=>$4,OpenTelemetryAdapter:()=>b7});var Q3=_2(()=>{F8();I7()});import{AgentRuntimeAbortError as hu}from"@cline/agents";import{initVcr as xu,resolveClineBuildEnv as gu}from"@cline/shared";import{spawn as iO}from"node:child_process";import{CLINE_RUN_AS_HUB_DAEMON_ENV as rO,readConnectorCliLaunchSpec as nO}from"@cline/shared";var TV={};w(TV,{listActiveConnectors:()=>L2});import{existsSync as hO,readdirSync as xO,readFileSync as gO}from"node:fs";import{join as qV}from"node:path";import{listConnectorCatalog as vO}from"@cline/shared";import{resolveConnectorDataDir as mO}from"@cline/shared/storage";var zV={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},cO={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 uO($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function dO($,Z){let Q;try{let V=JSON.parse(gO(Z,"utf8"));if(!V||typeof V!=="object"||Array.isArray(V))return;Q=V}catch{return}let J=typeof Q.pid==="number"?Q.pid:void 0,W=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!J||!W||!uO(J))return;let X=cO[$];if(!X)return;let j={};for(let V of X.required){let B=zV[V](Q);if(!B||typeof B==="string"&&!B.trim())return;j[V]=B}for(let V of X.optional){let B=zV[V](Q);if(B!==void 0)j[V]=B}let Y=$==="telegram"?j.botUsername:$==="discord"?j.applicationId:$==="whatsapp"&&typeof Q.instanceKey==="string"?Q.instanceKey:j.userName;if(!Y)return;return{id:`${$}:${Y}`,type:$,instanceId:Y,pid:J,hubUrl:W,...j}}function L2(){let $=[];for(let{name:Z}of vO()){let Q=qV(mO(),Z);if(!hO(Q))continue;for(let J of xO(Q)){if(!J.endsWith(".json")||J.endsWith(".threads.json"))continue;let W=dO(Z,qV(Q,J));if(W)$.push(W)}}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let J=Z.botUsername??Z.userName??"",W=Q.botUsername??Q.userName??"";return J.localeCompare(W)})}var NV={};w(NV,{removePersistedConnectorConnection:()=>o3,reconnectPersistedConnectors:()=>F4,persistConnectorConnection:()=>r3,getPersistedConnectorConnection:()=>a3,disableConnectorAutostart:()=>n3});import{withConnectorStore as G4}from"@cline/shared/db";var pO=new Set(["-i","--interactive"]);function lO($,Z){let Q=$.filter((W)=>!pO.has(W));return Q.some((W)=>W==="--cwd"||W.startsWith("--cwd="))?Q:[...Q,"--cwd",Z]}function r3($,Z,Q,J=process.cwd()){try{let W=lO(Q,J);G4((X)=>X.recordConnected($,Z,W))}catch{}}function n3($,Z){try{G4((Q)=>{if($)Q.setEnabled($,!1,Z);else Q.disableAll()})}catch{}}function a3($,Z){try{return G4((Q)=>Q.getConnection($,Z))}catch{return}}function o3($,Z){try{G4((Q)=>Q.deleteConnection($,Z))}catch{}}async function F4($){let Z=$.log??(()=>{}),Q;try{Q=G4((W)=>W.listConnections()).filter((W)=>W.enabled).map((W)=>({channel:W.channel,instanceId:W.instanceId,args:W.connectArgs}))}catch(W){return Z(`[connect] failed to read persisted connectors: ${W instanceof Error?W.message:String(W)}`),[]}let J=[];for(let W of Q){let{channel:X,instanceId:j}=W;if($.isHealthy?.(W))continue;Z(`[connect] reconnecting ${X} connector ${j}`);try{let Y=await $.start(W);if(J.push({channel:X,instanceId:j,ok:Y}),!Y)Z(`[connect] failed to reconnect ${X} connector ${j}`)}catch(Y){let V=Y instanceof Error?Y.message:String(Y);J.push({channel:X,instanceId:j,ok:!1,error:V}),Z(`[connect] failed to reconnect ${X} connector ${j}: ${V}`)}}return J}async function aO($,Z,Q,J){let{log:W,restartInstanceId:X}=J,j=J.spawnProcess??iO,Y={...process.env};return delete Y[rO],await new Promise((V)=>{let B="",H=!1,K=(G,F)=>{if(H)return;if(H=!0,F)W(F);V(G)};try{let G=j($.launcher,[...$.connectArgsPrefix,...X?["--restart-instance",X]:[],Z,...Q],{cwd:$.cwd,env:Y,stdio:["ignore","ignore","pipe"],windowsHide:!0});G.stderr?.setEncoding("utf8"),G.stderr?.on("data",(F)=>{B+=String(F)}),G.once("error",(F)=>{let U=F instanceof Error?F.message:String(F);K(!1,`[connect] failed to launch ${Z} reconnect: ${U}`)}),G.once("close",(F)=>{let U=typeof F==="number"?F:1;K(U===0,U===0?void 0:`[connect] ${Z} reconnect exited with code ${U}${B.trim()?`: ${B.trim()}`:""}`)})}catch(G){let F=G instanceof Error?G.message:String(G);K(!1,`[connect] failed to launch ${Z} reconnect: ${F}`)}})}async function fV($=(Z)=>process.stderr.write(`[hub-daemon] ${Z}
|
|
5
|
-
`)){let Z=nO(),Q=new Set;for(let J of L2())Q.add(`${J.type}\x00${J.instanceId}`);return await F4({start:async({channel:J,instanceId:W,args:X})=>{if(!Z)return $(`[connect] cannot reconnect ${J} instance ${W}: connector CLI launch information is unavailable`),!1;let j=Q.has(`${J}\x00${W}`)?W:void 0;if(j)$(`[connect] restarting surviving ${J} connector ${W} for the new hub session`);return await aO(Z,J,X,{restartInstanceId:j,log:$})},log:$})}import{normalizeProviderId as wu}from"@cline/llms";var LO={};w(LO,{LocalRuntimeHost:()=>m1});import{readdirSync as qu}from"node:fs";import{homedir as zu}from"node:os";import{isAbsolute as Tu,join as FV,resolve as UV}from"node:path";import{captureSdkError as U2,createSessionId as Nu,isLikelyAuthError as fu,normalizeUserInput as Ru}from"@cline/shared";import{setHomeDirIfUnset as Mu}from"@cline/shared/storage";var BB={};w(BB,{saveProviderOAuthCredentials:()=>O2,resolveProviderApiKeyFromSettings:()=>FJ,loginAndSaveProviderOAuthCredentials:()=>R4,isOAuthProvider:()=>S$,getProviderOAuthCredentialsFromSettings:()=>M4,getProviderAuthStorageId:()=>GJ,getProviderAuthHandler:()=>F0,getPersistedProviderApiKey:()=>h8,formatProviderOAuthApiKey:()=>UJ});import{decodeJwtPayload as dq,getClineEnvironmentConfig as YB}from"@cline/shared";var pV={};w(pV,{startClineDeviceAuth:()=>jJ,refreshClineToken:()=>
|
|
1
|
+
import{createRequire as IO}from"node:module";var{defineProperty:i3,getOwnPropertyNames:bO}=Object;var LV=Object.prototype.hasOwnProperty;function AV($){return this[$]}var M=($,Z,Q)=>{var J=bO(Z);for(let W of J)if(!LV.call($,W)&&W!=="default")i3($,W,{get:AV.bind(Z,W),enumerable:!0});if(Q){for(let W of J)if(!LV.call(Q,W)&&W!=="default")i3(Q,W,{get:AV.bind(Z,W),enumerable:!0});return Q}};var yO=($)=>$;function kO($,Z){this[$]=yO.bind(null,Z)}var w=($,Z)=>{for(var Q in Z)i3($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:kO.bind(Z,Q)})};var _2=($,Z)=>()=>($&&(Z=$($=0)),Z);var OV=IO(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as tO,captureAgentUnexpectedReasoningTokens as EV,captureTaskLifecycleEvent as Qd,SDK_ERROR_TELEMETRY_EVENT as eO,TASK_CANCELLED_EVENT as $q,TASK_FIRST_CHUNK_RECEIVED_EVENT as Zq,TASK_PROVIDER_REQUEST_STARTED_EVENT as Qq,TASK_PROVIDER_STREAM_FAILED_EVENT as Jq,TASK_PROVIDER_STREAM_STARTED_EVENT as Wq}from"@cline/shared";function n($,Z,Q){$?.capture({event:Z,properties:Q})}function BZ($){if(!$)return;return $.substring(0,Xq)}function jq($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function Yq($){return typeof $==="string"?$:$.message}function MV($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function CV($){n($,m.CLIENT.EXTENSION_ACTIVATED)}function HZ($,Z){let Q=[...Z.vcs_types],J={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:MV(Q,new Set(["git"])),has_mercurial:MV(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)J.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)J.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)J.is_remote_workspace=Z.is_remote_workspace;n($,m.WORKSPACE.INITIALIZED,J)}function KZ($,Z,Q){n($,m.WORKSPACE.INIT_ERROR,{error_type:jq(Z),error_message:BZ(Yq(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function wV($,Z){n($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function l1($,Z){n($,m.USER.AUTH_STARTED,{provider:Z})}function i1($,Z,Q){n($,m.USER.AUTH_SUCCEEDED,{provider:Z,...Q})}function r1($,Z,Q,J){n($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:BZ(Q),...J?.requestId?{request_id:J.requestId}:{}})}function C$($,Z,Q,J){n($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q,...J})}function e3($,Z,Q){n($,m.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:Z,...Q})}function PV($,Z,Q){n($,m.USER.AUTH_RUN_RETRY,{provider:Z,recovered:Q?.recovered})}function SV($,Z){n($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function bV($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function U1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({user_id:Q||Z.id,account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function GZ($,Z){n($,m.TASK.CREATED,Z)}function FZ($,Z){n($,m.TASK.RESTARTED,Z)}function U4($,Z){n($,m.TASK.COMPLETED,Z)}function w8($,Z){n($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function UZ($,Z){n($,m.TASK.TOKEN_USAGE,Z)}function DZ($,Z,Q){n($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function P8($,Z){n($,m.TASK.TOOL_USED,Z)}function _Z($,Z){n($,m.TASK.SKILL_USED,Z)}function LZ($,Z){n($,m.TASK.DIFF_EDIT_FAILED,Z)}function D4($,Z){n($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:BZ(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function AZ($,Z){n($,m.TASK.MISTAKE_LIMIT_REACHED,{...Z,timestamp:new Date().toISOString()})}function yV($,Z){n($,m.SDK.TOOL_TIMEOUT,Vq(Z))}function Vq($){let Z={};for(let[Q,J]of Object.entries($))if(J!==void 0)Z[Q]=J;return Z}function OZ($,Z,Q){n($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function qZ($,Z,Q,J){n($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:BZ(J),timestamp:new Date().toISOString()})}function zZ($,Z,Q,J,W){n($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:J,isEmpty:W,timestamp:new Date().toISOString()})}function w$($,Z){n($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function TZ($,Z){n($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function _4($,Z){n($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function NZ($,Z,Q,J){n($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:J,totalCount:Q+J,timestamp:new Date().toISOString()})}function fZ($,Z){n($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function RZ($,Z){n($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}function kV($,Z){n($,m.TASK.COMPACTION_BUDGET_EMERGENCY,{...Z,timestamp:new Date().toISOString()})}var Xq=500,m;var q0=_2(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:tO},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:Qq,PROVIDER_STREAM_STARTED:Wq,FIRST_CHUNK_RECEIVED:Zq,PROVIDER_STREAM_FAILED:Jq,CANCELLED:$q,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:eO,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as LN,readFileSync as AN,statSync as ON,writeFileSync as qN}from"node:fs";import{dirname as zN}from"node:path";import{resolveGlobalSettingsPath as kH}from"@cline/shared/storage";import{z as w1}from"zod";function tZ(){return a4.parse({})}function fN(){eZ=void 0}function RN($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function MN($){let Z;try{Z=AN($,"utf8")}catch{return tZ()}try{let Q=a4.safeParse(JSON.parse(Z));return Q.success?Q.data:tZ()}catch{return tZ()}}function EN(){let $=kH(),Z=ON($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,J=Z?.size??0,W=eZ;if(W&&W.path===$&&W.mtimeMs===Q&&W.size===J)return W;let X=RN(Z?MN($):tZ());return eZ={path:$,mtimeMs:Q,size:J,value:X},eZ}function j0(){return EN().value}function g0($,Z={}){let Q=kH(),J=j0();LN(zN(Q),{recursive:!0});let W=a4.parse($);if(!J.telemetryOptOut&&W.telemetryOptOut)bV(Z.telemetry);qN(Q,`${JSON.stringify(W,null,2)}
|
|
2
|
+
`,"utf8"),fN()}function $Q(){return j0().telemetryOptOut}function IH($,Z={}){g0({...j0(),telemetryOptOut:$},Z)}function hH(){return j0().autoUpdateEnabled}function xH($,Z={}){g0({...j0(),autoUpdateEnabled:$},Z)}function gH(){return j0().compactionStrategy??"agentic"}function vH($){g0({...j0(),compactionStrategy:$})}function mH(){let $=j0();if($.compactionEnabled===!1)return"off";return $.compactionStrategy}function cH($){let Z=j0();if($==="off"){g0({...Z,compactionEnabled:!1});return}g0({...Z,compactionEnabled:!0,compactionStrategy:$})}function uH(){return j0().planActMode}function dH($){g0({...j0(),planActMode:$})}function pH(){return j0().toolAutoApprove}function lH($){g0({...j0(),toolAutoApprove:$})}function P1($){return new Set($??j0().disabledTools??[])}function o4($){return new Set($??j0().disabledPlugins??[])}function iH($){return P1().has($)}function ZQ($){let Z=j0(),Q=new Set(Z.disabledTools??[]),J=Q.has($);if(J)Q.delete($);else Q.add($);return g0({...Z,disabledTools:[...Q]}),!J}function cJ($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let J=j0(),W=P1(J.disabledTools);for(let X of Q)if(Z)W.add(X);else W.delete(X);g0({...J,disabledTools:[...W]})}function rH($,Z){return cJ([$],Z),Z}function nH($){return o4().has($)}function aH($,Z){let Q=$.trim();if(!Q)return;let J=j0(),W=o4(J.disabledPlugins);if(Z)W.add(Q);else W.delete(Q);g0({...J,disabledPlugins:[...W]})}function QQ($,Z){let Q=o4(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J))}function Z$($,Z){let Q=P1(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J.name))}function JQ($,Z){if(!$||$.length===0)return $;let Q=P1(Z);if(Q.size===0)return $;return $.map((J)=>{if(!J.setup)return J;return{...J,setup:(W,X)=>J.setup?.({...W,registerTool:(j)=>{if(!Q.has(j.name))W.registerTool(j)}},X)}})}var yH,TN,NN,a4,eZ;var O1=_2(()=>{q0();yH=w1.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,w1.array(w1.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,J)=>Q.localeCompare(J));return Z.length>0?Z:void 0}),TN=w1.enum(["basic","agentic"]).catch("agentic"),NN=w1.enum(["plan","act"]),a4=w1.object({telemetryOptOut:w1.boolean().default(!1).catch(!1),autoUpdateEnabled:w1.boolean().default(!0).catch(!0),compactionStrategy:TN.optional(),compactionEnabled:w1.boolean().optional().catch(void 0),planActMode:NN.optional().catch(void 0),toolAutoApprove:w1.boolean().optional().catch(void 0),disabledTools:yH.optional(),disabledPlugins:yH.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.compactionEnabled!==void 0)Z.compactionEnabled=$.compactionEnabled;if($.planActMode)Z.planActMode=$.planActMode;if($.toolAutoApprove!==void 0)Z.toolAutoApprove=$.toolAutoApprove;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});var DK={};w(DK,{normalizeUserMessage:()=>Cf,buildInitialUserContent:()=>Ef});async function Ef($,Z,Q,J){let W=wf(Z),X=await Sf(Q,J);if(W.length===0&&!X)return $;let j=[{type:"text",text:$},...W];if(X)j.push(...X);return j}function Cf($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let J of Z)if(J&&typeof J==="object"&&J.type==="text"){let W=J.text;if(typeof W==="string")Q.push(W)}return Q.join(`
|
|
3
|
+
`)}function wf($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let J=Pf(Q);if(J)Z.push(J)}return Z}function Pf($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let J=Q[1],W=Q[2];if(!J||!W)return;return{type:"image",mediaType:J,data:W}}return{type:"image",mediaType:"image/png",data:Z}}async function Sf($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),J=await Promise.all($.map(async(W)=>{let X=W.replace(/\\/g,"/");try{let j=await Q(W);return{type:"file",path:X,content:j}}catch(j){let Y=j instanceof Error?j.message:String(j);return{type:"file",path:X,content:`Error fetching content: ${Y}`}}}));if(J.length===0)return;return J}var $U={};w($U,{updateMcpSettingsFileSync:()=>q1,updateMcpSettingsFile:()=>M6,updateMcpServerOAuthStateAsync:()=>n5,updateMcpServerOAuthState:()=>e2,setMcpServerDisabled:()=>s2,resolveMcpServerRegistrations:()=>W1,resolveDefaultMcpSettingsPath:()=>J0,registerMcpServersFromSettingsFile:()=>$8,normalizeMcpServerOAuthState:()=>E6,loadMcpSettingsFile:()=>o2,listMcpServerOAuthStatuses:()=>a5,hasMcpSettingsFile:()=>B$,getMcpServerOAuthState:()=>t2,McpSettingsUpdateSkippedError:()=>R6,McpSettingsMutatorPurityError:()=>e$,McpSettingsLockTimeoutError:()=>$2});import{randomUUID as gC}from"node:crypto";import{existsSync as gF,mkdirSync as QX,readFileSync as vF,renameSync as XX,rmdirSync as vC,rmSync as JX,statSync as mC,unlinkSync as mF,writeFileSync as cF}from"node:fs";import{dirname as uF,join as xF}from"node:path";import{setTimeout as cC}from"node:timers/promises";import{isMcpTimeoutConfigured as uC,resolveMcpTimeoutSeconds as dC}from"@cline/shared";import{resolveMcpSettingsPath as pC}from"@cline/shared/storage";import{z as k}from"zod";function WX($){if(!$)return;if($==="http")return"streamableHttp";return $}function J0(){return pC()}function Zw($,Z){QX(uF($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{cF(Q,Z,{encoding:"utf8",flag:"wx"}),XX(Q,$)}catch(J){try{mF(Q)}catch{}throw J}}function Jw($){Atomics.wait(Qw,0,0,$)}function Ww($){return`${$}.lock`}function rF(){return`${process.pid}.${Date.now()}.${gC()}`}function nF($,Z){QX(uF($),{recursive:!0});let Q=`${$}.tmp.${Z}`;JX(Q,{recursive:!0,force:!0}),QX(Q,{recursive:!0}),cF(xF(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return XX(Q,$),{lockDir:$,ownerFile:xF($,`owner.${Z}`)}}catch(J){if(JX(Q,{recursive:!0,force:!0}),gF($))return;throw J}}function aF($,Z){let Q;try{Q=Date.now()-mC($).mtimeMs}catch(W){if(W.code==="ENOENT")return;throw W}if(Q<YX)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let J=`${$}.stale.${rF()}`;try{XX($,J)}catch(W){if(W.code==="ENOENT")return;throw W}JX(J,{recursive:!0,force:!0})}function Xw($){try{mF($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{vC($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function oF($){let Z=Ww($);if(V7.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:rF()}}function jw($,Z){let{lockDir:Q,token:J}=oF($),W=Z.timeoutMs??YX,X=Date.now();while(!0){let j=nF(Q,J);if(j)return V7.add(Q),j;if(Date.now()-X>W)throw new $2(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);aF(Q,Z),Jw(iF)}}async function Yw($,Z){let{lockDir:Q,token:J}=oF($),W=Z.timeoutMs??YX,X=Date.now();while(!0){let j=nF(Q,J);if(j)return V7.add(Q),j;if(Date.now()-X>W)throw new $2(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);aF(Q,Z),await cC(iF)}}function sF($,Z,Q){try{let J=Vw(Z),W=Bw(J,Q);return Zw(Z,`${JSON.stringify(J,null,2)}
|
|
4
|
+
`),W}finally{V7.delete($.lockDir),Xw($)}}function q1($,Z,Q={}){let J=jw($,Q);return sF(J,$,Z)}async function M6($,Z,Q={}){let J=await Yw($,Q);return sF(J,$,Z)}function Vw($){let Z=Kw($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Bw($,Z){let Q=JSON.stringify($),J=JSON.parse(Q),W=Z(J),X=JSON.stringify(J),j=Z($);if(JSON.stringify($)!==X)throw new e$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(W))throw new e$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function Hw($){let Z=vF($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let W=J instanceof Error?J.message:String(J);throw Error(`Failed to parse MCP settings JSON at "${$}": ${W}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function Kw($){try{return Hw($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function tF($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function Gw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function o2($={}){let Z=$.filePath??J0(),Q=vF(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(X){let j=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let W=$w.safeParse(J);if(!W.success){let X=W.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return W.data}function E6($){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 Fw($){if($===void 0)return;let Z=jX.safeParse($);if(!Z.success)return;return E6(Z.data)}function B$($={}){let Z=$.filePath??J0();return gF(Z)}function W1($={}){let Z=o2($);return Object.entries(Z.mcpServers).map(([Q,J])=>({name:Q,transport:J.transport,disabled:J.disabled,timeoutSeconds:J.timeoutSeconds,metadata:J.metadata,oauth:J.oauth}))}function s2($){let Z=$.filePath??J0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");q1(Z,(J)=>{let W=J.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...W},j=tF(X,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;Gw(X,Q,Y),J.mcpServers=X})}function t2($,Z={}){let Q=o2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return E6(Q.mcpServers[$]?.oauth)}function eF($,Z){return(Q)=>{let J=Q.mcpServers,W=tF(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);let X=Fw(W.oauth)??{},j=E6(Z(X));if(j)W.oauth=j;else delete W.oauth;return j??{}}}function e2($,Z,Q={}){let J=Q.filePath??J0();return q1(J,eF($,Z))}async function n5($,Z,Q={}){let J=Q.filePath??J0();return M6(J,eF($,Z))}function a5($={}){return W1($).map((Q)=>{let J=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:J,oauthConfigured:J&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,J)=>Q.serverName.localeCompare(J.serverName))}async function $8($,Z={}){let Q=W1(Z);for(let J of Q)await $.registerServer(J);return Q}var r5,dF,pF,jX,lC,iC,rC,nC,aC,oC,lF,sC,tC,eC,$w,R6,$2,e$,YX=1e4,iF=25,Qw,V7;var B7=_2(()=>{r5=k.record(k.string(),k.string()),dF=k.record(k.string(),k.unknown()),pF=k.preprocess(($)=>uC($)?dC($):void 0,k.number().optional()),jX=k.object({clientInformation:k.record(k.string(),k.unknown()).optional(),tokens:k.record(k.string(),k.unknown()).optional(),codeVerifier:k.string().optional(),discoveryState:k.record(k.string(),k.unknown()).optional(),redirectUrl:k.string().url().optional(),lastError:k.string().optional(),lastAuthenticatedAt:k.number().int().positive().optional()}).strip(),lC=k.object({type:k.literal("stdio"),command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:r5.optional()}),iC=k.object({type:k.literal("sse"),url:k.string().url(),headers:r5.optional()}),rC=k.object({type:k.literal("streamableHttp"),url:k.string().url(),headers:r5.optional()}),nC=k.discriminatedUnion("type",[lC,iC,rC]),aC=k.object({transport:nC,disabled:k.boolean().optional(),timeout:pF,metadata:dF.optional(),oauth:jX.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),oC=k.enum(["stdio","sse","http","streamableHttp"]).optional(),lF=k.object({type:k.enum(["stdio","sse","streamableHttp"]).optional(),transportType:oC,disabled:k.boolean().optional(),timeout:pF,metadata:dF.optional(),oauth:jX.optional()});sC=lF.extend({command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:r5.optional()}).superRefine(($,Z)=>{let Q=$.type??WX($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:k.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),tC=lF.extend({url:k.string().url(),headers:r5.optional()}).superRefine(($,Z)=>{let Q=$.type??WX($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:k.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??WX($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth}}),eC=k.union([aC,sC,tC]),$w=k.object({mcpServers:k.record(k.string(),eC)}).passthrough();R6=class R6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};$2=class $2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};e$=class e$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Qw=new Int32Array(new SharedArrayBuffer(4)),V7=new Set});import{existsSync as by,mkdirSync as yy,readFileSync as ky,writeFileSync as Iy}from"node:fs";import{resolve as hy}from"node:path";import{resolveSessionDataDir as xy}from"@cline/shared/storage";import{nanoid as gy}from"nanoid";import*as vy from"node-machine-id";function v6(){if(!dD)uD=pD(),dD=!0;return uD??lD()}function o0($){let Z=$?.trim();if(Z)return Z;let Q=pD();if(Q)return Q;return lD()}function cy(){let $=vy;return $.machineIdSync??$.default?.machineIdSync}function pD(){try{let $=cy();if(!$)return;return $().trim()||void 0}catch{return}}function lD(){let $=xy(),Z=hy($,my);try{if(by(Z)){let J=ky(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${gy()}`;try{yy($,{recursive:!0}),Iy(Z,Q,"utf8")}catch{}return Q}var my="machine-id",uD,dD=!1;var F8=()=>{};class b9{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.buildAttributes(Q),j=JSON.stringify(X),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,J?{description:J}:void 0);B.addCallback((H)=>{for(let K of this.snapshotGaugeSeries($))H.observe(K.value,this.flattenProperties(K.attributes))}),this.gauges.set($,B)}V.set(j,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,J=0){if(!$)return{};let W={},X=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){W[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{W[B]=JSON.stringify(H)}catch{W[B]="[UnserializableArray]"}if(V.length>X)W[`${B}_truncated`]=!0,W[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){W[B]=V.toISOString();continue}if(V instanceof Error){W[B]=V.message;continue}if(Q.has(V)){W[B]="[Circular]";continue}if(J>=j){W[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(W,this.flattenProperties(V,B,Q,J+1));continue}if(LI(V)){W[B]=V;continue}try{W[B]=JSON.stringify(V)}catch{W[B]=String(V)}}return W}}function LI($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class y9{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordHistogram($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordGauge($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class e6{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new y9({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??v6(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,X,J,W)}recordHistogram($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,X,J,W)}recordGauge($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,X,J,W)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}var zj=_2(()=>{F8()});import{metrics as AI,trace as OI}from"@opentelemetry/api";import{logs as qI}from"@opentelemetry/api-logs";import{OTLPLogExporter as zI}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as TI}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as NI}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as fI}from"@opentelemetry/resources";import{BatchLogRecordProcessor as RI,ConsoleLogRecordExporter as MI,LoggerProvider as EI}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as CI,MeterProvider as wI,PeriodicExportingMetricReader as c_}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as PI,ConsoleSpanExporter as SI,SimpleSpanProcessor as bI}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as yI}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as kI,ATTR_SERVICE_VERSION as II}from"@opentelemetry/semantic-conventions";class u_{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 $4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=fI({[kI]:$.serviceName??"cline",...$.serviceVersion?{[II]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)AI.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)qI.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return OI.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new b9({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new e6({...$,adapters:[Z],distinctId:o0($.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=Tj(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),W=Z.map((X)=>gI(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((X)=>X!==null);if(W.length===0)return null;return new wI({resource:$,readers:W})}createTracerProvider($){let Z=Tj(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let X of Z){let j=xI(X,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)W.push(j)}if(W.length===0)return null;return new yI({resource:$,spanProcessors:W})}createLoggerProvider($){let Z=Tj(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let W=hI(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new RI(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new EI({resource:$,processors:Q})}}function k9($){let Z=new $4($),Q=Z.createTelemetryService($),J=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)J();return{provider:Z,telemetry:Q,emitProviderCreated:J}}function A$($){if($Q())return{telemetry:new u_($)};if($.enabled!==!0)return{telemetry:new e6({...$,distinctId:o0($.distinctId)})};return k9($)}function B2($){let{telemetry:Z,provider:Q,emitProviderCreated:J}=A$($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&J?{emitProviderCreated:J}:{}}}function Tj($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function hI($,Z){if($==="console")return new MI;if(!Z.endpoint)return null;let Q=Nj(Z.endpoint,"/v1/logs");return new zI({url:Q,headers:Z.headers})}function xI($,Z){if($==="console")return new bI(new SI);if(!Z.endpoint)return null;let Q=Nj(Z.endpoint,"/v1/traces");return new PI(new NI({url:Q,headers:Z.headers}))}function gI($,Z){if($==="console")return new c_({exporter:new CI,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=Nj(Z.endpoint,"/v1/metrics");return new c_({exporter:new TI({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function Nj($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}var I9=_2(()=>{O1();F8();zj()});var sL={};w(sL,{resolveCoreDistinctId:()=>o0,resolveCoreDeviceId:()=>v6,createOpenTelemetryTelemetryService:()=>k9,createConfiguredTelemetryService:()=>A$,createConfiguredTelemetryHandle:()=>B2,OpenTelemetryProvider:()=>$4,OpenTelemetryAdapter:()=>b9});var Q3=_2(()=>{F8();I9()});import{AgentRuntimeAbortError as hu}from"@cline/agents";import{initVcr as xu,resolveClineBuildEnv as gu}from"@cline/shared";import{spawn as iO}from"node:child_process";import{CLINE_RUN_AS_HUB_DAEMON_ENV as rO,readConnectorCliLaunchSpec as nO}from"@cline/shared";var TV={};w(TV,{listActiveConnectors:()=>L2});import{existsSync as hO,readdirSync as xO,readFileSync as gO}from"node:fs";import{join as qV}from"node:path";import{listConnectorCatalog as vO}from"@cline/shared";import{resolveConnectorDataDir as mO}from"@cline/shared/storage";var zV={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},cO={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 uO($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function dO($,Z){let Q;try{let V=JSON.parse(gO(Z,"utf8"));if(!V||typeof V!=="object"||Array.isArray(V))return;Q=V}catch{return}let J=typeof Q.pid==="number"?Q.pid:void 0,W=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!J||!W||!uO(J))return;let X=cO[$];if(!X)return;let j={};for(let V of X.required){let B=zV[V](Q);if(!B||typeof B==="string"&&!B.trim())return;j[V]=B}for(let V of X.optional){let B=zV[V](Q);if(B!==void 0)j[V]=B}let Y=$==="telegram"?j.botUsername:$==="discord"?j.applicationId:$==="whatsapp"&&typeof Q.instanceKey==="string"?Q.instanceKey:j.userName;if(!Y)return;return{id:`${$}:${Y}`,type:$,instanceId:Y,pid:J,hubUrl:W,...j}}function L2(){let $=[];for(let{name:Z}of vO()){let Q=qV(mO(),Z);if(!hO(Q))continue;for(let J of xO(Q)){if(!J.endsWith(".json")||J.endsWith(".threads.json"))continue;let W=dO(Z,qV(Q,J));if(W)$.push(W)}}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let J=Z.botUsername??Z.userName??"",W=Q.botUsername??Q.userName??"";return J.localeCompare(W)})}var NV={};w(NV,{removePersistedConnectorConnection:()=>o3,reconnectPersistedConnectors:()=>F4,persistConnectorConnection:()=>r3,getPersistedConnectorConnection:()=>a3,disableConnectorAutostart:()=>n3});import{withConnectorStore as G4}from"@cline/shared/db";var pO=new Set(["-i","--interactive"]);function lO($,Z){let Q=$.filter((W)=>!pO.has(W));return Q.some((W)=>W==="--cwd"||W.startsWith("--cwd="))?Q:[...Q,"--cwd",Z]}function r3($,Z,Q,J=process.cwd()){try{let W=lO(Q,J);G4((X)=>X.recordConnected($,Z,W))}catch{}}function n3($,Z){try{G4((Q)=>{if($)Q.setEnabled($,!1,Z);else Q.disableAll()})}catch{}}function a3($,Z){try{return G4((Q)=>Q.getConnection($,Z))}catch{return}}function o3($,Z){try{G4((Q)=>Q.deleteConnection($,Z))}catch{}}async function F4($){let Z=$.log??(()=>{}),Q;try{Q=G4((W)=>W.listConnections()).filter((W)=>W.enabled).map((W)=>({channel:W.channel,instanceId:W.instanceId,args:W.connectArgs}))}catch(W){return Z(`[connect] failed to read persisted connectors: ${W instanceof Error?W.message:String(W)}`),[]}let J=[];for(let W of Q){let{channel:X,instanceId:j}=W;if($.isHealthy?.(W))continue;Z(`[connect] reconnecting ${X} connector ${j}`);try{let Y=await $.start(W);if(J.push({channel:X,instanceId:j,ok:Y}),!Y)Z(`[connect] failed to reconnect ${X} connector ${j}`)}catch(Y){let V=Y instanceof Error?Y.message:String(Y);J.push({channel:X,instanceId:j,ok:!1,error:V}),Z(`[connect] failed to reconnect ${X} connector ${j}: ${V}`)}}return J}async function aO($,Z,Q,J){let{log:W,restartInstanceId:X}=J,j=J.spawnProcess??iO,Y={...process.env};return delete Y[rO],await new Promise((V)=>{let B="",H=!1,K=(G,F)=>{if(H)return;if(H=!0,F)W(F);V(G)};try{let G=j($.launcher,[...$.connectArgsPrefix,...X?["--restart-instance",X]:[],Z,...Q],{cwd:$.cwd,env:Y,stdio:["ignore","ignore","pipe"],windowsHide:!0});G.stderr?.setEncoding("utf8"),G.stderr?.on("data",(F)=>{B+=String(F)}),G.once("error",(F)=>{let U=F instanceof Error?F.message:String(F);K(!1,`[connect] failed to launch ${Z} reconnect: ${U}`)}),G.once("close",(F)=>{let U=typeof F==="number"?F:1;K(U===0,U===0?void 0:`[connect] ${Z} reconnect exited with code ${U}${B.trim()?`: ${B.trim()}`:""}`)})}catch(G){let F=G instanceof Error?G.message:String(G);K(!1,`[connect] failed to launch ${Z} reconnect: ${F}`)}})}async function fV($=(Z)=>process.stderr.write(`[hub-daemon] ${Z}
|
|
5
|
+
`)){let Z=nO(),Q=new Set;for(let J of L2())Q.add(`${J.type}\x00${J.instanceId}`);return await F4({start:async({channel:J,instanceId:W,args:X})=>{if(!Z)return $(`[connect] cannot reconnect ${J} instance ${W}: connector CLI launch information is unavailable`),!1;let j=Q.has(`${J}\x00${W}`)?W:void 0;if(j)$(`[connect] restarting surviving ${J} connector ${W} for the new hub session`);return await aO(Z,J,X,{restartInstanceId:j,log:$})},log:$})}import{normalizeProviderId as wu}from"@cline/llms";var LO={};w(LO,{LocalRuntimeHost:()=>m1});import{readdirSync as qu}from"node:fs";import{homedir as zu}from"node:os";import{isAbsolute as Tu,join as FV,resolve as UV}from"node:path";import{captureSdkError as U2,createSessionId as Nu,isLikelyAuthError as fu,normalizeUserInput as Ru}from"@cline/shared";import{setHomeDirIfUnset as Mu}from"@cline/shared/storage";var BB={};w(BB,{saveProviderOAuthCredentials:()=>O2,resolveProviderApiKeyFromSettings:()=>FJ,loginAndSaveProviderOAuthCredentials:()=>R4,isOAuthProvider:()=>S$,getProviderOAuthCredentialsFromSettings:()=>M4,getProviderAuthStorageId:()=>GJ,getProviderAuthHandler:()=>F0,getPersistedProviderApiKey:()=>h8,formatProviderOAuthApiKey:()=>UJ});import{decodeJwtPayload as dq,getClineEnvironmentConfig as YB}from"@cline/shared";var pV={};w(pV,{startClineDeviceAuth:()=>jJ,refreshClineToken:()=>wZ,loginClineOAuth:()=>L4,getValidClineCredentials:()=>A4,completeClineDeviceAuth:()=>YJ});import{decodeJwtPayload as Fq,getClineEnvironmentConfig as $J}from"@cline/shared";var RV={};w(RV,{setSdkLogger:()=>t3,sdkDebug:()=>t,hashSecret:()=>P0,getSdkLogger:()=>sO});import{createHash as oO}from"node:crypto";var s3;function t3($){s3=$}function sO(){return s3}function P0($){if(typeof $!=="string"||$.length===0)return"unset";return oO("sha256").update($).digest("hex").slice(0,8)}function t($){try{s3?.debug($)}catch{}}q0();var IV={};w(IV,{startLocalOAuthServer:()=>D1});function Bq(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function D1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",J=$.timeoutMs??300000,W=$.successHtml??Hq,X=Bq(),j=!1,Y=null,V=null,B=null,H=(F)=>{if(j)return;j=!0,X.resolve(F)},K=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},G=async()=>{return Y=setTimeout(()=>{K(),H(null)},J),X.promise};for(let F of $.ports){let U=Z.createServer((L,O)=>{try{let D=new URL(L.url||"",`http://${Q}:${F}`);if(D.pathname!==$.callbackPath){O.statusCode=404,O.end("Not found");return}let q={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(q.error){O.statusCode=400,O.end(`Authentication failed: ${q.error}`),K(),H(q);return}if(!q.code){O.statusCode=400,O.end("Missing authorization code");return}if($.expectedState&&q.state!==$.expectedState){O.statusCode=400,O.end("State mismatch");return}O.statusCode=200,O.setHeader("Content-Type","text/html; charset=utf-8"),O.end(W),K(),H(q)}catch{O.statusCode=500,O.end("Internal error")}}),_=await new Promise((L)=>{let O=(D)=>{U.off("error",O),L({bound:!1,error:D})};U.once("error",O),U.listen(F,Q,()=>{U.off("error",O),V=U,L({bound:!0})})});if(_.error){if(_.error.code==="EADDRINUSE")continue;throw K(),_.error}if(_.bound){B=F;let L=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:L})).catch(()=>{});return{callbackUrl:L,waitForCallback:G,cancelWait:()=>{K(),H(null)},close:()=>{K(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Hq=`<!DOCTYPE html>
|
|
6
6
|
<html lang="en">
|
|
7
7
|
<head>
|
|
8
8
|
<meta charset="utf-8">
|
|
@@ -43,20 +43,20 @@ import{createRequire as IO}from"node:module";var{defineProperty:i3,getOwnPropert
|
|
|
43
43
|
</div>
|
|
44
44
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
45
45
|
</body>
|
|
46
|
-
</html>`;function hV($){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 Kq($){let Q=new TextEncoder().encode($),J=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(J)}function Gq($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),hV(Z)}async function M9(){let $=Gq(),Z=hV(await Kq($));return{verifier:$,challenge:Z}}function E9($){return $.endsWith("/")?$.slice(0,-1):$}function A2($,Z){return new URL(Z,`${E9($)}/`).toString()}function S8($,Z={}){let Q=$.trim();if(!Q)return{};try{let J=new URL(Q);return{code:J.searchParams.get("code")??void 0,state:J.searchParams.get("state")??void 0,provider:Z.includeProvider?J.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[J,W]=Q.split("#",2);return{code:J||void 0,state:W||void 0}}if(Q.includes("code=")){let J=new URLSearchParams(Q);return{code:J.get("code")??void 0,state:J.get("state")??void 0,provider:Z.includeProvider?J.get("provider")??void 0:void 0}}return{code:Q}}function b8($){try{let Z=JSON.parse($),Q=Z.error,J=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:J,message:W}}catch{return{}}}function y8($,Z){return Date.now()>=$.expires-Z}async function k8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,J=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),W=await $.waitForCallback();if(Q)throw Q;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if(Z)return S8(Z,$.parseOptions);if(await J,Q)throw Q;if(Z)return S8(Z,$.parseOptions);return{}}var C9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},mV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},ZJ="https://api.workos.com",Uq="/auth",xV=Array.from({length:11},($,Z)=>48801+Z),Dq=300000,_q=30000,I8=30000,Lq=300,Aq=5;class l0 extends Error{status;errorCode;requestId;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode,this.requestId=Z?.requestId}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function Oq($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function QJ($,Z,Q={}){let J=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");let X={...Q.metadata??{},provider:Z,tokenType:$.tokenType,userInfo:$.userInfo};return delete X.startedAt,{access:$.accessToken,refresh:W,expires:Oq($.expiresAt),accountId:J??void 0,email:$.userInfo.email||Q.email,metadata:X}}async function JJ($){if(!$)return{};return typeof $==="function"?await $():$}function gV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}function qq($){return typeof $==="string"&&$.trim()||void 0}function zq($){let Z=Fq($);if(!Z)return{};return{sessionId:qq(Z.sid)}}function Tq($){let Z={},Q=$.metadata?.sessionStartedAtMs;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)Z.sessionDurationMs=Date.now()-Q;return Z}function WJ($){return{...zq($.access),...Tq($)}}async function vV($){await new Promise((Z)=>setTimeout(Z,$))}function XJ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function cV($,Z){let Q=await fetch(A2(ZJ,mV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??I8)}),J=await Q.json().catch(()=>({}));if(!Q.ok)throw new l0(`Device authorization failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error,requestId:Q.headers.get("x-request-id")??void 0});if(!J.device_code||!J.user_code||!J.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:J.device_code,userCode:J.user_code,verificationUri:J.verification_uri,verificationUriComplete:J.verification_uri_complete,expiresInSeconds:gV(J.expires_in,Lq),pollIntervalSeconds:gV(J.interval,Aq)}}async function uV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let J=await fetch(A2($.workosApiBaseUrl,mV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),W=await J.json().catch(()=>({}));if(J.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await vV(Q*1000);break}case"slow_down":{Q+=1,await vV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new l0(W.error_description||"WorkOS authorization failed",{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0});default:throw new l0(`WorkOS token polling failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function dV($,Z,Q){let J={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(A2(Z.apiBaseUrl,C9.register),{method:"POST",headers:{"Content-Type":"application/json",...await JJ(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??I8)});if(!W.ok){let j=await W.text().catch(()=>""),Y=b8(j);throw new l0(`Token registration failed: ${W.status}${Y.message?` - ${Y.message}`:""}`,{status:W.status,errorCode:Y.code,requestId:W.headers.get("x-request-id")??void 0})}let X=await W.json();return QJ(XJ(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function Nq($,Z,Q,J){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:J??Q.provider},X=await fetch(A2(Q.apiBaseUrl,C9.token),{method:"POST",headers:{"Content-Type":"application/json",...await JJ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??I8)});if(!X.ok){let Y=await X.text().catch(()=>""),V=b8(Y);throw new l0(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code,requestId:X.headers.get("x-request-id")??void 0})}let j=await X.json();return QJ(XJ(j,"Invalid token exchange response"),J??Q.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function L4($){l1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:xV,J=$.callbackPath??Uq,W=Z?null:await D1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=W?.callbackUrl||`http://127.0.0.1:${Q[0]??xV[0]}${J}`;try{let j;if(Z){let Y=$J().workOsClientId,V=await cV(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await uV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??I8,workosApiBaseUrl:ZJ,onProgress:$.callbacks.onProgress});j=await dV(B,$,$.provider)}else{let Y=new URL(A2($.apiBaseUrl,C9.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",X),Y.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await k8({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let K=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=S8(K,{includeProvider:!0});V=G.code,B=G.provider??B}if(!V)throw Error("Missing authorization code");j=await Nq(V,X,$,B)}return i1($.telemetry,$.provider??"cline",WJ(j)),U1($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw r1($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j),{requestId:j instanceof l0?j.requestId:void 0}),j}finally{W?.close()}}async function jJ($){return await cV($J().workOsClientId,$)}async function YJ($){let Z=$.provider??"cline";l1($.telemetry,Z);try{let Q=await uV({clientId:$J().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??I8,workosApiBaseUrl:ZJ}),J=await dV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return i1($.telemetry,Z,WJ(J)),U1($.telemetry,{id:J.accountId,email:J.email,provider:Z}),J}catch(Q){throw r1($.telemetry,Z,Q instanceof Error?Q.message:String(Q),{requestId:Q instanceof l0?Q.requestId:void 0}),Q}}async function w9($,Z){let Q=A2(Z.apiBaseUrl,C9.refresh);t(`cline.refresh.request url=${Q} refreshTokenHash=${P0($.refresh)}`);let J=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json",...await JJ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??I8)});if(!J.ok){let Y=await J.text().catch(()=>""),V=b8(Y),B=J.headers.get("x-request-id")??void 0;throw t(`cline.refresh.error status=${J.status} errorCode=${V.code??"none"} message=${V.message??"none"} requestId=${B??"none"}`),new l0(`Token refresh failed: ${J.status}${V.message?` - ${V.message}`:""}`,{status:J.status,errorCode:V.code,requestId:B})}let W=await J.json(),X=$.metadata?.provider??Z.provider,j=QJ(XJ(W,"Invalid token refresh response"),X,$);return t(`cline.refresh.success newAccessTokenHash=${P0(j.access)} newRefreshTokenHash=${P0(j.refresh)} expires=${j.expires}`),j}async function A4($,Z,Q){if(!$)return t("cline.getCredentials outcome=no_current_credentials"),null;let J=Q?.refreshBufferMs??Dq,W=Q?.retryableTokenGraceMs??_q,X=Q?.forceRefresh===!0;if(!X&&!y8($,J))return t(`cline.getCredentials outcome=still_valid forceRefresh=${X}`),$;t(`cline.getCredentials outcome=needs_refresh forceRefresh=${X} accessTokenHash=${P0($.access)}`);try{return await w9($,Z)}catch(j){let Y=WJ($),V=j instanceof l0&&j.requestId?{request_id:j.requestId}:{},B={status:j instanceof l0?j.status:void 0,errorCode:j instanceof l0?j.errorCode:void 0,...V,...Y,errorName:j instanceof Error?j.name:void 0};if(j instanceof l0&&j.isLikelyInvalidGrant())return t(`cline.getCredentials outcome=invalid_grant status=${j.status} errorCode=${j.errorCode??"none"}`),C$(Z.telemetry,Z.provider??"cline","invalid_grant",{status:j.status,errorCode:j.errorCode,...V,...Y}),null;if($.expires-Date.now()>W)return t(`cline.getCredentials outcome=transient_failure_kept_current error=${j instanceof Error?j.message:String(j)}`),e3(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!1}),$;throw t(`cline.getCredentials outcome=transient_failure_rethrown error=${j instanceof Error?j.message:String(j)}`),e3(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!0}),j}}q0();var iV={};w(iV,{refreshOpenAICodexToken:()=>S9,loginOpenAICodex:()=>O4,getValidOpenAICodexCredentials:()=>q4,OPENAI_CODEX_OAUTH_CONFIG:()=>K0});import{decodeJwtPayload as VJ}from"@cline/shared";import{nanoid as fq}from"nanoid";var K0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class P9 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 Rq($,Z,Q=K0.redirectUri){let J=await fetch(K0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:K0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(K0.httpTimeoutMs)});if(!J.ok)return{type:"failed"};let W=await J.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function Mq($){try{let Z=await fetch(K0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:K0.clientId}),signal:AbortSignal.timeout(K0.httpTimeoutMs)});if(!Z.ok){let J=await Z.text().catch(()=>""),W=b8(J);throw new P9(`Token refresh failed: ${Z.status}${W.message?` - ${W.message}`:""}`,{status:Z.status,errorCode:W.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof P9)throw Z;return{type:"failed"}}}async function Eq($="pi"){let{verifier:Z,challenge:Q}=await M9(),J=fq(32),W=new URL(K0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",K0.clientId),W.searchParams.set("redirect_uri",K0.redirectUri),W.searchParams.set("scope",K0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",J),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:Z,state:J,url:W.toString()}}function Cq(){try{let $=new URL(K0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):K0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:K0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:K0.callbackPort,callbackPath:"/auth/callback",redirectUri:K0.redirectUri}}}function wq($,Z){let Q=Z?VJ(Z):VJ($),J=Q?Q:VJ($),X=J?.[K0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let j=J?.organizations;if(Array.isArray(j)&&j.length>0){let V=j[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=J?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function lV($,Z){let Q=wq($.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 O4($){l1($.telemetry,"openai-codex");let Z=Cq(),{verifier:Q,state:J,url:W}=await Eq($.originator),X=await D1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:J});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let j;try{let Y=await k8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==J)throw Error("State mismatch");if(j=Y.code,!j){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=S8(H,{allowHashCodeState:!0});if(K.state&&K.state!==J)throw Error("State mismatch");j=K.code}if(!j)throw Error("Missing authorization code");let V=await Rq(j,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=lV(V);return i1($.telemetry,"openai-codex"),U1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw r1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{X.close()}}async function S9($,Z){let Q=await Mq($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let J=lV(Q,Z);if(!J.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return J}async function q4($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??K0.refreshBufferMs,J=Z?.retryableTokenGraceMs??K0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!y8($,Q))return $;try{return await S9($.refresh,$)}catch(X){if(X instanceof P9&&X.isLikelyInvalidGrant())return C$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}q0();var jB={};w(jB,{refreshOcaToken:()=>I9,loginOcaOAuth:()=>N4,getValidOcaCredentials:()=>f4,OCI_HEADER_OPC_REQUEST_ID:()=>Pq,DEFAULT_INTERNAL_OCA_BASE_URL:()=>b9,DEFAULT_INTERNAL_IDCS_URL:()=>aV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>oV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>nV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>y9,DEFAULT_EXTERNAL_IDCS_URL:()=>tV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>eV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>sV});import{decodeJwtPayload as z4}from"@cline/shared";import{nanoid as rV}from"nanoid";class BJ{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),J=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set($,{value:Z,expiresAt:Q+J})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var nV="a8331954c0cf48ba99b5dd223a14c6ea",aV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",oV="openid offline_access",b9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",sV="c1aba3deed5740659981a752714eba33",tV="https://login-ext.identity.oraclecloud.com",eV="openid offline_access",y9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Pq="opc-request-id",Sq="/auth/oca",bq=Array.from({length:11},($,Z)=>48801+Z),yq=300000,kq=30000,$B=30000,Iq=600000;class k9 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 P$={internal:{clientId:nV,idcsUrl:aV,scopes:oV,baseUrl:b9},external:{clientId:sV,idcsUrl:tV,scopes:eV,baseUrl:y9}},T4=new Map,hq=86400000,xq=300000,gq=32,HJ=new BJ(hq,gq);function ZB($){if(typeof $==="function")return $();return $??"internal"}function QB($){return{internal:{clientId:$?.internal?.clientId??P$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??P$.internal.idcsUrl,scopes:$?.internal?.scopes??P$.internal.scopes,baseUrl:$?.internal?.baseUrl??P$.internal.baseUrl},external:{clientId:$?.external?.clientId??P$.external.clientId,idcsUrl:$?.external?.idcsUrl??P$.external.idcsUrl,scopes:$?.external?.scopes??P$.external.scopes,baseUrl:$?.external?.baseUrl??P$.external.baseUrl}}}function vq($=Date.now()){let Z=$-Iq;for(let[Q,J]of T4.entries())if(J.createdAt<Z)T4.delete(Q)}function mq($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=z4(Z)?.exp;if(typeof W==="number"&&W>0)return W*1000;let j=z4(Q)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function JB($,Z,Q){let J=$.access_token;if(!J)throw Error("Token response did not include an access token");let W=$.refresh_token??Q?.refresh;if(!W)throw Error("Token response did not include a refresh token");let X=z4($.id_token),j=z4(J),Y=X?.sub??j?.sub,V=X?.email??j?.email;return{access:J,refresh:W,expires:mq($,J,$.id_token),accountId:Y??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:Y,idToken:$.id_token}}}async function WB($,Z){let Q=E9($),J=HJ.get(Q);if(J)return J;let W=`${Q}/.well-known/openid-configuration`,X=await fetch(W,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return HJ.set(Q,V,Date.now(),xq),V}let Y=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return HJ.set(Q,Y),Y}function XB($){return{code:$.error,message:$.error_description}}async function cq($){let Z=T4.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");T4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,J=await WB(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(J,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await X.json();if(!X.ok){let V=XB(j);throw new k9(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=z4(j.id_token);if(!j.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return JB(j,$.mode)}function uq($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${E9(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 N4($){l1($.telemetry,"oca");let Z=QB($.config),Q=ZB($.mode),J=$.callbackPorts?.length?$.callbackPorts:bq,W=$.callbackPath??Sq,X=$.requestTimeoutMs??$B,j=await D1({ports:J,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=j.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=rV(16),B=rV(16),{verifier:H,challenge:K}=await M9();vq(),T4.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:Y,createdAt:Date.now()});let G=uq({callbackUrl:Y,mode:Q,state:V,nonce:B,challenge:K,config:Z});$.callbacks.onAuth({url:G,instructions:"Continue the authentication process in your browser."});try{let F=await k8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),U=F.code,_=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!U){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!_||_!==V)throw Error("State mismatch");let L=await cq({code:U,state:_,mode:Q,config:Z,requestTimeoutMs:X});return i1($.telemetry,"oca"),U1($.telemetry,{id:L.accountId,email:L.email,provider:"oca"}),L}catch(F){throw r1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{j.close()}}async function I9($,Z={}){let Q=QB(Z.config),J=Z.requestTimeoutMs??$B,W=$.metadata?.mode,X=W==="internal"||W==="external"?W:ZB(Z.mode),j=X==="external"?Q.external:Q.internal,Y=await WB(j.idcsUrl,J),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(J)}),H=await B.json();if(!B.ok){let K=XB(H);throw new k9(`Token refresh failed: ${B.status}${K.message?` - ${K.message}`:""}`,{status:B.status,errorCode:K.code})}return JB(H,X,$)}async function f4($,Z,Q){if(!$)return null;let J=Z?.refreshBufferMs??Q?.refreshBufferMs??yq,W=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??kq;if(Z?.forceRefresh!==!0&&!y8($,J))return $;try{return await I9($,Q)}catch(j){if(j instanceof k9&&j.isLikelyInvalidGrant())return C$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}var h9="workos:";function pq($){let Z=$.trim();return Z.toLowerCase().startsWith(h9)?Z:`${h9}${Z}`}function lq($){let Z=$.trim();return Z.toLowerCase().startsWith(h9)?Z.slice(h9.length):Z}function iq($){let Q=dq($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function rq($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let J=iq(Z);if(J)return J;return Date.now()-1}function nq($,Z){let Q=$.auth?.accessToken?.trim(),J=$.auth?.refreshToken?.trim();if(!Q||!J)return null;let W=Z?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:J,expires:rq($,W),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function aq($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},J=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,j])=>j!==void 0)),W={...$.settings?.auth?.metadata??{},...J};if(Object.keys(W).length>0)Q.metadata=W;let X={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(X,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return X}function KJ($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let J=Q?.auth?.accessToken?.trim();if(J)return $.formatAccessToken?.(J)??J;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return aq({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function VB($){return KJ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:pq,normalizeStoredAccessToken:lq,login:({settings:Z,callbacks:Q,telemetry:J})=>L4({apiBaseUrl:Z?.baseUrl?.trim()||YB().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:J}),refresh:({settings:Z,credentials:Q,forceRefresh:J,telemetry:W})=>A4(Q,{apiBaseUrl:Z.baseUrl?.trim()||YB().apiBaseUrl,telemetry:W},{forceRefresh:J})})}var oq=[VB({providerId:"cline"}),VB({providerId:"cline-pass",storageProviderId:"cline"}),KJ({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>N4({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:J})=>f4(Z,{forceRefresh:Q,telemetry:J},{mode:$.oca?.mode,telemetry:J})}),KJ({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>O4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>q4($,{forceRefresh:Z,telemetry:Q})})],sq=new Map(oq.map(($)=>[$.providerId,$]));function F0($){return sq.get($.trim().toLowerCase())}function S$($){return F0($)!==void 0}function GJ($){return F0($)?.storageProviderId}function FJ($,Z){let Q=F0(Z),J=Q?.storageProviderId??Z,W=$.getProviderSettings(J);return Q?.getApiKey(W)??h8(Z,W)}async function R4($,Z,Q){let J=F0(Z);if(!J)throw Error(`Provider "${Z}" does not support OAuth login`);let W=$.getProviderSettings(J.storageProviderId),X=await J.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return J.saveCredentials({manager:$,settings:W,credentials:X})}function M4($,Z){let Q=F0($);if(!Q)return null;return nq(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function O2($){let Z=F0($.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 h8($,Z){let Q=F0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function UJ($,Z){let Q=F0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}q0();var eB={};w(eB,{createContextCompactionPrepareTurn:()=>y4,createCompactionStateAwarePrepareTurn:()=>k4});import{estimateRequestInputTokens as lz}from"@cline/shared";var DB={};w(DB,{projectSessionCompactionState:()=>b$,parseSessionCompactionState:()=>_1,createSessionCompactionState:()=>x8,SessionCompactionStateSchema:()=>E4});import{createHash as tq}from"node:crypto";import{formatDisplayUserInput as HB}from"@cline/shared";import{z as M1}from"zod";function eq($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var $z=M1.custom(eq),E4=M1.object({version:M1.literal(1),updated_at:M1.string().datetime(),conversation_id:M1.string().min(1).optional(),source_message_count:M1.number().int().nonnegative(),source_prefix_hash:M1.string().min(1).optional(),source_last_message_key:M1.string().min(1).optional(),messages:M1.array($z),system_prompt:M1.string().optional()});function DJ($){return JSON.parse(JSON.stringify($))}function KB($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:HB($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:HB(Z.text)}:Z)}}function GB($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function Zz($){let Z=KB($);return GB(Z.role),[["role",Z.role],["content",Z.content],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null]]}function FB($){if(!$)return"";let Z=KB($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if(GB(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function UB($,Z=$.length){let Q=tq("sha256");Q.update(`cline-session-compaction-source-v2
|
|
46
|
+
</html>`;function hV($){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 Kq($){let Q=new TextEncoder().encode($),J=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(J)}function Gq($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),hV(Z)}async function MZ(){let $=Gq(),Z=hV(await Kq($));return{verifier:$,challenge:Z}}function EZ($){return $.endsWith("/")?$.slice(0,-1):$}function A2($,Z){return new URL(Z,`${EZ($)}/`).toString()}function S8($,Z={}){let Q=$.trim();if(!Q)return{};try{let J=new URL(Q);return{code:J.searchParams.get("code")??void 0,state:J.searchParams.get("state")??void 0,provider:Z.includeProvider?J.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[J,W]=Q.split("#",2);return{code:J||void 0,state:W||void 0}}if(Q.includes("code=")){let J=new URLSearchParams(Q);return{code:J.get("code")??void 0,state:J.get("state")??void 0,provider:Z.includeProvider?J.get("provider")??void 0:void 0}}return{code:Q}}function b8($){try{let Z=JSON.parse($),Q=Z.error,J=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:J,message:W}}catch{return{}}}function y8($,Z){return Date.now()>=$.expires-Z}async function k8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,J=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),W=await $.waitForCallback();if(Q)throw Q;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if(Z)return S8(Z,$.parseOptions);if(await J,Q)throw Q;if(Z)return S8(Z,$.parseOptions);return{}}var CZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},mV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},ZJ="https://api.workos.com",Uq="/auth",xV=Array.from({length:11},($,Z)=>48801+Z),Dq=300000,_q=30000,I8=30000,Lq=300,Aq=5;class l0 extends Error{status;errorCode;requestId;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode,this.requestId=Z?.requestId}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function Oq($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function QJ($,Z,Q={}){let J=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");let X={...Q.metadata??{},provider:Z,tokenType:$.tokenType,userInfo:$.userInfo};return delete X.startedAt,{access:$.accessToken,refresh:W,expires:Oq($.expiresAt),accountId:J??void 0,email:$.userInfo.email||Q.email,metadata:X}}async function JJ($){if(!$)return{};return typeof $==="function"?await $():$}function gV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}function qq($){return typeof $==="string"&&$.trim()||void 0}function zq($){let Z=Fq($);if(!Z)return{};return{sessionId:qq(Z.sid)}}function Tq($){let Z={},Q=$.metadata?.sessionStartedAtMs;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)Z.sessionDurationMs=Date.now()-Q;return Z}function WJ($){return{...zq($.access),...Tq($)}}async function vV($){await new Promise((Z)=>setTimeout(Z,$))}function XJ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function cV($,Z){let Q=await fetch(A2(ZJ,mV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??I8)}),J=await Q.json().catch(()=>({}));if(!Q.ok)throw new l0(`Device authorization failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error,requestId:Q.headers.get("x-request-id")??void 0});if(!J.device_code||!J.user_code||!J.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:J.device_code,userCode:J.user_code,verificationUri:J.verification_uri,verificationUriComplete:J.verification_uri_complete,expiresInSeconds:gV(J.expires_in,Lq),pollIntervalSeconds:gV(J.interval,Aq)}}async function uV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let J=await fetch(A2($.workosApiBaseUrl,mV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),W=await J.json().catch(()=>({}));if(J.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await vV(Q*1000);break}case"slow_down":{Q+=1,await vV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new l0(W.error_description||"WorkOS authorization failed",{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0});default:throw new l0(`WorkOS token polling failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function dV($,Z,Q){let J={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(A2(Z.apiBaseUrl,CZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await JJ(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??I8)});if(!W.ok){let j=await W.text().catch(()=>""),Y=b8(j);throw new l0(`Token registration failed: ${W.status}${Y.message?` - ${Y.message}`:""}`,{status:W.status,errorCode:Y.code,requestId:W.headers.get("x-request-id")??void 0})}let X=await W.json();return QJ(XJ(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function Nq($,Z,Q,J){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:J??Q.provider},X=await fetch(A2(Q.apiBaseUrl,CZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await JJ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??I8)});if(!X.ok){let Y=await X.text().catch(()=>""),V=b8(Y);throw new l0(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code,requestId:X.headers.get("x-request-id")??void 0})}let j=await X.json();return QJ(XJ(j,"Invalid token exchange response"),J??Q.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function L4($){l1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:xV,J=$.callbackPath??Uq,W=Z?null:await D1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=W?.callbackUrl||`http://127.0.0.1:${Q[0]??xV[0]}${J}`;try{let j;if(Z){let Y=$J().workOsClientId,V=await cV(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await uV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??I8,workosApiBaseUrl:ZJ,onProgress:$.callbacks.onProgress});j=await dV(B,$,$.provider)}else{let Y=new URL(A2($.apiBaseUrl,CZ.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",X),Y.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await k8({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let K=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=S8(K,{includeProvider:!0});V=G.code,B=G.provider??B}if(!V)throw Error("Missing authorization code");j=await Nq(V,X,$,B)}return i1($.telemetry,$.provider??"cline",WJ(j)),U1($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw r1($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j),{requestId:j instanceof l0?j.requestId:void 0}),j}finally{W?.close()}}async function jJ($){return await cV($J().workOsClientId,$)}async function YJ($){let Z=$.provider??"cline";l1($.telemetry,Z);try{let Q=await uV({clientId:$J().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??I8,workosApiBaseUrl:ZJ}),J=await dV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return i1($.telemetry,Z,WJ(J)),U1($.telemetry,{id:J.accountId,email:J.email,provider:Z}),J}catch(Q){throw r1($.telemetry,Z,Q instanceof Error?Q.message:String(Q),{requestId:Q instanceof l0?Q.requestId:void 0}),Q}}async function wZ($,Z){let Q=A2(Z.apiBaseUrl,CZ.refresh);t(`cline.refresh.request url=${Q} refreshTokenHash=${P0($.refresh)}`);let J=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json",...await JJ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??I8)});if(!J.ok){let Y=await J.text().catch(()=>""),V=b8(Y),B=J.headers.get("x-request-id")??void 0;throw t(`cline.refresh.error status=${J.status} errorCode=${V.code??"none"} message=${V.message??"none"} requestId=${B??"none"}`),new l0(`Token refresh failed: ${J.status}${V.message?` - ${V.message}`:""}`,{status:J.status,errorCode:V.code,requestId:B})}let W=await J.json(),X=$.metadata?.provider??Z.provider,j=QJ(XJ(W,"Invalid token refresh response"),X,$);return t(`cline.refresh.success newAccessTokenHash=${P0(j.access)} newRefreshTokenHash=${P0(j.refresh)} expires=${j.expires}`),j}async function A4($,Z,Q){if(!$)return t("cline.getCredentials outcome=no_current_credentials"),null;let J=Q?.refreshBufferMs??Dq,W=Q?.retryableTokenGraceMs??_q,X=Q?.forceRefresh===!0;if(!X&&!y8($,J))return t(`cline.getCredentials outcome=still_valid forceRefresh=${X}`),$;t(`cline.getCredentials outcome=needs_refresh forceRefresh=${X} accessTokenHash=${P0($.access)}`);try{return await wZ($,Z)}catch(j){let Y=WJ($),V=j instanceof l0&&j.requestId?{request_id:j.requestId}:{},B={status:j instanceof l0?j.status:void 0,errorCode:j instanceof l0?j.errorCode:void 0,...V,...Y,errorName:j instanceof Error?j.name:void 0};if(j instanceof l0&&j.isLikelyInvalidGrant())return t(`cline.getCredentials outcome=invalid_grant status=${j.status} errorCode=${j.errorCode??"none"}`),C$(Z.telemetry,Z.provider??"cline","invalid_grant",{status:j.status,errorCode:j.errorCode,...V,...Y}),null;if($.expires-Date.now()>W)return t(`cline.getCredentials outcome=transient_failure_kept_current error=${j instanceof Error?j.message:String(j)}`),e3(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!1}),$;throw t(`cline.getCredentials outcome=transient_failure_rethrown error=${j instanceof Error?j.message:String(j)}`),e3(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!0}),j}}q0();var iV={};w(iV,{refreshOpenAICodexToken:()=>SZ,loginOpenAICodex:()=>O4,getValidOpenAICodexCredentials:()=>q4,OPENAI_CODEX_OAUTH_CONFIG:()=>K0});import{decodeJwtPayload as VJ}from"@cline/shared";import{nanoid as fq}from"nanoid";var K0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class PZ 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 Rq($,Z,Q=K0.redirectUri){let J=await fetch(K0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:K0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(K0.httpTimeoutMs)});if(!J.ok)return{type:"failed"};let W=await J.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function Mq($){try{let Z=await fetch(K0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:K0.clientId}),signal:AbortSignal.timeout(K0.httpTimeoutMs)});if(!Z.ok){let J=await Z.text().catch(()=>""),W=b8(J);throw new PZ(`Token refresh failed: ${Z.status}${W.message?` - ${W.message}`:""}`,{status:Z.status,errorCode:W.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof PZ)throw Z;return{type:"failed"}}}async function Eq($="pi"){let{verifier:Z,challenge:Q}=await MZ(),J=fq(32),W=new URL(K0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",K0.clientId),W.searchParams.set("redirect_uri",K0.redirectUri),W.searchParams.set("scope",K0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",J),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:Z,state:J,url:W.toString()}}function Cq(){try{let $=new URL(K0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):K0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:K0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:K0.callbackPort,callbackPath:"/auth/callback",redirectUri:K0.redirectUri}}}function wq($,Z){let Q=Z?VJ(Z):VJ($),J=Q?Q:VJ($),X=J?.[K0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let j=J?.organizations;if(Array.isArray(j)&&j.length>0){let V=j[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=J?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function lV($,Z){let Q=wq($.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 O4($){l1($.telemetry,"openai-codex");let Z=Cq(),{verifier:Q,state:J,url:W}=await Eq($.originator),X=await D1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:J});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let j;try{let Y=await k8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==J)throw Error("State mismatch");if(j=Y.code,!j){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=S8(H,{allowHashCodeState:!0});if(K.state&&K.state!==J)throw Error("State mismatch");j=K.code}if(!j)throw Error("Missing authorization code");let V=await Rq(j,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=lV(V);return i1($.telemetry,"openai-codex"),U1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw r1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{X.close()}}async function SZ($,Z){let Q=await Mq($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let J=lV(Q,Z);if(!J.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return J}async function q4($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??K0.refreshBufferMs,J=Z?.retryableTokenGraceMs??K0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!y8($,Q))return $;try{return await SZ($.refresh,$)}catch(X){if(X instanceof PZ&&X.isLikelyInvalidGrant())return C$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}q0();var jB={};w(jB,{refreshOcaToken:()=>IZ,loginOcaOAuth:()=>N4,getValidOcaCredentials:()=>f4,OCI_HEADER_OPC_REQUEST_ID:()=>Pq,DEFAULT_INTERNAL_OCA_BASE_URL:()=>bZ,DEFAULT_INTERNAL_IDCS_URL:()=>aV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>oV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>nV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>yZ,DEFAULT_EXTERNAL_IDCS_URL:()=>tV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>eV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>sV});import{decodeJwtPayload as z4}from"@cline/shared";import{nanoid as rV}from"nanoid";class BJ{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),J=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set($,{value:Z,expiresAt:Q+J})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var nV="a8331954c0cf48ba99b5dd223a14c6ea",aV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",oV="openid offline_access",bZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",sV="c1aba3deed5740659981a752714eba33",tV="https://login-ext.identity.oraclecloud.com",eV="openid offline_access",yZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Pq="opc-request-id",Sq="/auth/oca",bq=Array.from({length:11},($,Z)=>48801+Z),yq=300000,kq=30000,$B=30000,Iq=600000;class kZ 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 P$={internal:{clientId:nV,idcsUrl:aV,scopes:oV,baseUrl:bZ},external:{clientId:sV,idcsUrl:tV,scopes:eV,baseUrl:yZ}},T4=new Map,hq=86400000,xq=300000,gq=32,HJ=new BJ(hq,gq);function ZB($){if(typeof $==="function")return $();return $??"internal"}function QB($){return{internal:{clientId:$?.internal?.clientId??P$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??P$.internal.idcsUrl,scopes:$?.internal?.scopes??P$.internal.scopes,baseUrl:$?.internal?.baseUrl??P$.internal.baseUrl},external:{clientId:$?.external?.clientId??P$.external.clientId,idcsUrl:$?.external?.idcsUrl??P$.external.idcsUrl,scopes:$?.external?.scopes??P$.external.scopes,baseUrl:$?.external?.baseUrl??P$.external.baseUrl}}}function vq($=Date.now()){let Z=$-Iq;for(let[Q,J]of T4.entries())if(J.createdAt<Z)T4.delete(Q)}function mq($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=z4(Z)?.exp;if(typeof W==="number"&&W>0)return W*1000;let j=z4(Q)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function JB($,Z,Q){let J=$.access_token;if(!J)throw Error("Token response did not include an access token");let W=$.refresh_token??Q?.refresh;if(!W)throw Error("Token response did not include a refresh token");let X=z4($.id_token),j=z4(J),Y=X?.sub??j?.sub,V=X?.email??j?.email;return{access:J,refresh:W,expires:mq($,J,$.id_token),accountId:Y??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:Y,idToken:$.id_token}}}async function WB($,Z){let Q=EZ($),J=HJ.get(Q);if(J)return J;let W=`${Q}/.well-known/openid-configuration`,X=await fetch(W,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return HJ.set(Q,V,Date.now(),xq),V}let Y=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return HJ.set(Q,Y),Y}function XB($){return{code:$.error,message:$.error_description}}async function cq($){let Z=T4.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");T4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,J=await WB(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(J,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await X.json();if(!X.ok){let V=XB(j);throw new kZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=z4(j.id_token);if(!j.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return JB(j,$.mode)}function uq($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${EZ(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 N4($){l1($.telemetry,"oca");let Z=QB($.config),Q=ZB($.mode),J=$.callbackPorts?.length?$.callbackPorts:bq,W=$.callbackPath??Sq,X=$.requestTimeoutMs??$B,j=await D1({ports:J,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=j.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=rV(16),B=rV(16),{verifier:H,challenge:K}=await MZ();vq(),T4.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:Y,createdAt:Date.now()});let G=uq({callbackUrl:Y,mode:Q,state:V,nonce:B,challenge:K,config:Z});$.callbacks.onAuth({url:G,instructions:"Continue the authentication process in your browser."});try{let F=await k8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),U=F.code,_=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!U){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!_||_!==V)throw Error("State mismatch");let L=await cq({code:U,state:_,mode:Q,config:Z,requestTimeoutMs:X});return i1($.telemetry,"oca"),U1($.telemetry,{id:L.accountId,email:L.email,provider:"oca"}),L}catch(F){throw r1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{j.close()}}async function IZ($,Z={}){let Q=QB(Z.config),J=Z.requestTimeoutMs??$B,W=$.metadata?.mode,X=W==="internal"||W==="external"?W:ZB(Z.mode),j=X==="external"?Q.external:Q.internal,Y=await WB(j.idcsUrl,J),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(J)}),H=await B.json();if(!B.ok){let K=XB(H);throw new kZ(`Token refresh failed: ${B.status}${K.message?` - ${K.message}`:""}`,{status:B.status,errorCode:K.code})}return JB(H,X,$)}async function f4($,Z,Q){if(!$)return null;let J=Z?.refreshBufferMs??Q?.refreshBufferMs??yq,W=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??kq;if(Z?.forceRefresh!==!0&&!y8($,J))return $;try{return await IZ($,Q)}catch(j){if(j instanceof kZ&&j.isLikelyInvalidGrant())return C$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}var hZ="workos:";function pq($){let Z=$.trim();return Z.toLowerCase().startsWith(hZ)?Z:`${hZ}${Z}`}function lq($){let Z=$.trim();return Z.toLowerCase().startsWith(hZ)?Z.slice(hZ.length):Z}function iq($){let Q=dq($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function rq($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let J=iq(Z);if(J)return J;return Date.now()-1}function nq($,Z){let Q=$.auth?.accessToken?.trim(),J=$.auth?.refreshToken?.trim();if(!Q||!J)return null;let W=Z?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:J,expires:rq($,W),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function aq($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},J=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,j])=>j!==void 0)),W={...$.settings?.auth?.metadata??{},...J};if(Object.keys(W).length>0)Q.metadata=W;let X={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(X,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return X}function KJ($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let J=Q?.auth?.accessToken?.trim();if(J)return $.formatAccessToken?.(J)??J;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return aq({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function VB($){return KJ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:pq,normalizeStoredAccessToken:lq,login:({settings:Z,callbacks:Q,telemetry:J})=>L4({apiBaseUrl:Z?.baseUrl?.trim()||YB().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:J}),refresh:({settings:Z,credentials:Q,forceRefresh:J,telemetry:W})=>A4(Q,{apiBaseUrl:Z.baseUrl?.trim()||YB().apiBaseUrl,telemetry:W},{forceRefresh:J})})}var oq=[VB({providerId:"cline"}),VB({providerId:"cline-pass",storageProviderId:"cline"}),KJ({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>N4({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:J})=>f4(Z,{forceRefresh:Q,telemetry:J},{mode:$.oca?.mode,telemetry:J})}),KJ({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>O4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>q4($,{forceRefresh:Z,telemetry:Q})})],sq=new Map(oq.map(($)=>[$.providerId,$]));function F0($){return sq.get($.trim().toLowerCase())}function S$($){return F0($)!==void 0}function GJ($){return F0($)?.storageProviderId}function FJ($,Z){let Q=F0(Z),J=Q?.storageProviderId??Z,W=$.getProviderSettings(J);return Q?.getApiKey(W)??h8(Z,W)}async function R4($,Z,Q){let J=F0(Z);if(!J)throw Error(`Provider "${Z}" does not support OAuth login`);let W=$.getProviderSettings(J.storageProviderId),X=await J.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return J.saveCredentials({manager:$,settings:W,credentials:X})}function M4($,Z){let Q=F0($);if(!Q)return null;return nq(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function O2($){let Z=F0($.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 h8($,Z){let Q=F0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function UJ($,Z){let Q=F0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}q0();var eB={};w(eB,{createContextCompactionPrepareTurn:()=>y4,createCompactionStateAwarePrepareTurn:()=>k4});import{estimateRequestInputTokens as lz}from"@cline/shared";var DB={};w(DB,{projectSessionCompactionState:()=>b$,parseSessionCompactionState:()=>_1,createSessionCompactionState:()=>x8,SessionCompactionStateSchema:()=>E4});import{createHash as tq}from"node:crypto";import{formatDisplayUserInput as HB}from"@cline/shared";import{z as M1}from"zod";function eq($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var $z=M1.custom(eq),E4=M1.object({version:M1.literal(1),updated_at:M1.string().datetime(),conversation_id:M1.string().min(1).optional(),source_message_count:M1.number().int().nonnegative(),source_prefix_hash:M1.string().min(1).optional(),source_last_message_key:M1.string().min(1).optional(),messages:M1.array($z),system_prompt:M1.string().optional()});function DJ($){return JSON.parse(JSON.stringify($))}function KB($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:HB($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:HB(Z.text)}:Z)}}function GB($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function Zz($){let Z=KB($);return GB(Z.role),[["role",Z.role],["content",Z.content],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null]]}function FB($){if(!$)return"";let Z=KB($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if(GB(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function UB($,Z=$.length){let Q=tq("sha256");Q.update(`cline-session-compaction-source-v2
|
|
47
47
|
`),Q.update(`${Z}
|
|
48
48
|
`);for(let J of $.slice(0,Z))Q.update(JSON.stringify(Zz(J))),Q.update(`
|
|
49
49
|
`);return`sha256:${Q.digest("hex")}`}function x8($){let Z=$.sourceMessages.at(-1),Q=FB(Z);return E4.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:UB($.sourceMessages),...Q?{source_last_message_key:Q}:{},messages:DJ($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function b$($,Z){if(!($.source_message_count<=Z.length))return;let J=!!$.source_prefix_hash&&UB(Z,$.source_message_count)===$.source_prefix_hash,W=Z[$.source_message_count-1],X=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&FB(W)===$.source_last_message_key;if(!(J||X))return;return[...DJ($.messages),...DJ(Z.slice($.source_message_count))]}function _1($){let Z=E4.safeParse($);return Z.success?Z.data:void 0}import{createHandlerAsync as Sz}from"@cline/llms";var OB={};w(OB,{resolveMessageDisplayRole:()=>_J,isUserRunMessage:()=>LJ,getUserRunSpan:()=>E1,countUserRunMessages:()=>y$});import{formatDisplayUserInput as _B}from"@cline/shared";var Qz=new Set(["auto_compaction","compaction_budget_emergency","completion_reminder","loop_detection_notice","manual_compaction","mistake_stop_notice","recovery_notice"]);function LB($){switch($){case"user":case"assistant":case"tool":case"system":case"status":case"error":return $;default:return"assistant"}}function AB($){return $.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?$.metadata:void 0}function Jz($){let Z=$?.userRunSpan;return typeof Z==="number"&&Number.isInteger(Z)&&Z>=0?Z:void 0}function Wz($){if(typeof $.content==="string")return{hasAttachment:!1,text:$.content};if(!Array.isArray($.content))return{hasAttachment:!1,text:"unknown"};let Z=!1,Q=!1,J=[];for(let W of $.content){if(!W||typeof W!=="object"||Array.isArray(W))continue;let X=W;if(X.type==="text"&&typeof X.text==="string")J.push(X.text);else if(X.type==="tool_result"||X.type==="tool-result")Q=!0;else if(X.type==="file"||X.type==="image")Z=!0}return{hasAttachment:Z&&!Q,text:J.join(`
|
|
50
|
-
`)}}function Xz($){let Z=_B($);return Z.startsWith("[TASK RESUMPTION]")||Z==="The user approved switching to act mode. Continue with the approved plan now."}function _J($){let Z=LB($.role),Q=AB($),J=typeof Q?.displayRole==="string"?Q.displayRole.trim().toLowerCase():"";if(J==="system"||J==="status"||J==="error")return J;return Z}function E1($){if(LB($.role)!=="user")return 0;let Z=AB($),Q=typeof Z?.kind==="string"?Z.kind:void 0,J=Jz(Z);if(Q==="compaction"||Q==="compaction_summary")return J??1;if(J!==void 0)return J;if(Q&&Qz.has(Q))return 0;let W=Wz($);if(!W.hasAttachment&&!_B(W.text))return 0;if(!W.hasAttachment&&Xz(W.text))return 0;return 1}function LJ($){return E1($)>0}function y$($){let Z=0;for(let Q of $??[])Z+=E1(Q);return Z}function jz($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function qB($){return $.map((Z)=>({...Z,content:Array.isArray(Z.content)?Z.content.map((Q)=>({...Q})):Z.content,...Z.metadata?{metadata:{...Z.metadata}}:{}}))}function C1($){try{return JSON.stringify($).length}catch{return String($).length}}function
|
|
50
|
+
`)}}function Xz($){let Z=_B($);return Z.startsWith("[TASK RESUMPTION]")||Z==="The user approved switching to act mode. Continue with the approved plan now."}function _J($){let Z=LB($.role),Q=AB($),J=typeof Q?.displayRole==="string"?Q.displayRole.trim().toLowerCase():"";if(J==="system"||J==="status"||J==="error")return J;return Z}function E1($){if(LB($.role)!=="user")return 0;let Z=AB($),Q=typeof Z?.kind==="string"?Z.kind:void 0,J=Jz(Z);if(Q==="compaction"||Q==="compaction_summary")return J??1;if(J!==void 0)return J;if(Q&&Qz.has(Q))return 0;let W=Wz($);if(!W.hasAttachment&&!_B(W.text))return 0;if(!W.hasAttachment&&Xz(W.text))return 0;return 1}function LJ($){return E1($)>0}function y$($){let Z=0;for(let Q of $??[])Z+=E1(Q);return Z}function jz($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function qB($){return $.map((Z)=>({...Z,content:Array.isArray(Z.content)?Z.content.map((Q)=>({...Q})):Z.content,...Z.metadata?{metadata:{...Z.metadata}}:{}}))}function C1($){try{return JSON.stringify($).length}catch{return String($).length}}function xZ($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function fB($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function gZ($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q.role==="user"&&!fB(Q))return Z}return-1}function Yz($){for(let Z=0;Z<$.length;Z+=1){let Q=$[Z];if(Q.role==="user"&&!fB(Q))return Z}return-1}function OJ($){let Z=new Set;if(!Array.isArray($.content))return Z;for(let Q of $.content)if(Q.type==="tool_use")Z.add(Q.id);else if(Q.type==="tool_result")Z.add(Q.tool_use_id);return Z}function Vz($){let Z=new Map;for(let Q=0;Q<$.length;Q+=1)for(let J of OJ($[Q])){let W=Z.get(J);if(W)W.add(Q);else Z.set(J,new Set([Q]))}return Z}function AJ($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!Array.isArray(J.content))continue;if(J.content.some((W)=>W.type==="tool_use"&&!Z.has(W.id)))return Q}return $.length}function Bz($,Z){let Q=Vz($),J=new Set,W=[Z];while(W.length>0){let X=W.shift();if(X===void 0||J.has(X))continue;J.add(X);for(let j of OJ($[X]))for(let Y of Q.get(j)??[])if(!J.has(Y))W.push(Y)}return J}function Hz($){return $.type==="image"||$.type==="redacted_thinking"}function Kz($){return $.type==="image"}function Gz($,Z,Q){if(Z.dropThinkingBlocks&&$.type==="thinking")return!0;return Z.dropUnsafeOutsideLiveTail&&!Q&&Hz($)}function zB($,Z,Q,J="over_budget"){let W=[],X=[];for(let j=0;j<$.length;j+=1){let Y=$[j];if(Array.isArray(Y.content)&&Y.content.length===0){Q.push({kind:"dropped_message",path:{messageIndex:Z[j]},reason:J,originalSize:C1(Y),finalSize:0});continue}W.push(Y),X.push(Z[j])}return{messages:W,originalIndexes:X}}function Fz($,Z,Q,J,W,X){return $.map((j,Y)=>{if(!Array.isArray(j.content))return j;let V=!1,B=Y===J||Y>=W,H=j.content.flatMap((K,G)=>{if(Gz(K,X,B))return V=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:G},reason:"unsafe_to_truncate",originalSize:C1(K),finalSize:0}),[];if(K.type==="tool_result"&&Array.isArray(K.content)){let F=K.content.filter((U)=>{if(X.dropUnsafeOutsideLiveTail&&!B&&Kz(U))return!1;return!0});if(F.length!==K.content.length){V=!0;let U={...K,content:F};return Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:G},reason:"unsafe_to_truncate",originalSize:C1(K),finalSize:C1(U)}),[U]}}return[K]});return V?{...j,content:H}:j})}function Uz($,Z,Q){return $.map((J,W)=>{if(!Array.isArray(J.content))return J;let X=!1,j=J.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return X=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[W],blockIndex:V},reason:"unsafe_to_truncate",originalSize:C1(Y),finalSize:0}),!1});return X?{...J,content:j}:J})}function g8($,Z){if(Z<=0)return"";if($.length<=Z)return $;if(Z<=16)return $.slice(0,Math.max(1,Z));let Q=`
|
|
51
51
|
...[truncated ${$.length-Z} chars]`,J=Math.max(1,Z-Q.length),W=`
|
|
52
|
-
...[truncated ${$.length-J} chars]`;return`${$.slice(0,J)}${W}`}function TB($,Z){if(typeof $==="string")return g8($,Z);let Q=Z;return $.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};return J}if(J.type==="text"){let W=g8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=g8(J.content,Q);return Q-=W.length,{...J,content:W}}return J})}function Dz($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function _z($,Z){if(typeof $.content==="string")return{...$,content:g8($.content,Z)};let Q=Z;return{...$,content:$.content.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};if(J.type==="tool_result")return{...J,content:TB(J.content,0)};return J}if(J.type==="text"){let W=g8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=g8(J.content,Q);return Q-=W.length,{...J,content:W}}if(J.type==="tool_result"){let W=TB(J.content,Q);return Q-=Dz(W),{...J,content:W}}return J})}}function Lz($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function Az($,Z,Q){return{messages:$.filter((J,W)=>!Q.has(W)),originalIndexes:Z.filter((J,W)=>!Q.has(W))}}function Oz($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function NB($,Z){return Z>=0&&$.has(Z)}function C4($){let Z=[],Q=[],J=jz($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:qB($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:
|
|
52
|
+
...[truncated ${$.length-J} chars]`;return`${$.slice(0,J)}${W}`}function TB($,Z){if(typeof $==="string")return g8($,Z);let Q=Z;return $.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};return J}if(J.type==="text"){let W=g8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=g8(J.content,Q);return Q-=W.length,{...J,content:W}}return J})}function Dz($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function _z($,Z){if(typeof $.content==="string")return{...$,content:g8($.content,Z)};let Q=Z;return{...$,content:$.content.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};if(J.type==="tool_result")return{...J,content:TB(J.content,0)};return J}if(J.type==="text"){let W=g8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=g8(J.content,Q);return Q-=W.length,{...J,content:W}}if(J.type==="tool_result"){let W=TB(J.content,Q);return Q-=Dz(W),{...J,content:W}}return J})}}function Lz($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function Az($,Z,Q){return{messages:$.filter((J,W)=>!Q.has(W)),originalIndexes:Z.filter((J,W)=>!Q.has(W))}}function Oz($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function NB($,Z){return Z>=0&&$.has(Z)}function C4($){let Z=[],Q=[],J=jz($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:qB($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:xZ($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let W=qB($.messages),X=W.map((B,H)=>H);if(J.dropThinkingBlocks){let B=zB(Uz(W,X,Z),X,Z,"unsafe_to_truncate");W=B.messages,X=B.originalIndexes}let j=J.protectLatestTypedUser?gZ(W):-1,Y=J.protectLiveTailFromDrop?AJ(W):W.length;if(J.dropUnsafeOutsideLiveTail){let B=zB(Fz(W,X,Z,j,Y,J),X,Z);W=B.messages,X=B.originalIndexes}let V=xZ(W,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:W,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q};for(let B=W.length-1;B>=0&&V>$.targetTokens;B-=1){let H=gZ(W);if(B===H)continue;if(J.protectLiveTailFromDrop&&B>=AJ(W))continue;if(!Lz(W[B]))continue;let K=C1(W[B]),G=Math.max(1,K/Math.max(1,$.estimateMessageTokens(W[B]))),F=Math.max(16,Math.floor($.targetTokens*G/Math.max(1,W.length)));W[B]=_z(W[B],F),Z.push({kind:"truncated_text",path:{messageIndex:X[B]},reason:"over_budget",originalSize:K,finalSize:C1(W[B])}),V=xZ(W,$.estimateMessageTokens)}for(let B=0;B<W.length&&V>$.targetTokens;){let H=Yz(W),K=gZ(W),G=J.protectLiveTailFromDrop?AJ(W):W.length;if(B===H||B===K){Z.push({kind:"preserved",path:{messageIndex:X[B]},reason:"protected_live_tail",originalSize:C1(W[B]),finalSize:C1(W[B])}),B+=1;continue}let F=Bz(W,B);if(NB(F,H)){B+=1;continue}if(NB(F,K)){B+=1;continue}if(Oz(F,G)){B+=1;continue}for(let _ of F)Z.push({kind:"dropped_message",path:{messageIndex:X[_]},reason:F.size>1||OJ(W[_]).size>0?"tool_pair_boundary":"over_budget",originalSize:C1(W[_]),finalSize:0});let U=Az(W,X,F);W=U.messages,X=U.originalIndexes,V=xZ(W,$.estimateMessageTokens)}if(V>$.targetTokens)return Q.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:W,actions:Z,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Q};return{status:"ok",messages:W,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q}}import{CHARS_PER_TOKEN as kd,estimateTokens as vZ}from"@cline/shared";var wB=128000,qz=0.9,z2=0.9,PB=0.7,SB=20000,RB=1024,MB=2000,bB=2000;function EB($){return typeof $==="number"&&Number.isFinite($)&&$>0}function b4($){let Z=EB($.contextWindow)?$.contextWindow:void 0,Q=EB($.maxInputTokens)?$.maxInputTokens:void 0;if(Q!==void 0)return Z===void 0?Q:Math.min(Q,Z);return Z===void 0?void 0:Z*qz}function S4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
53
53
|
...[truncated ${$.length-Z} chars]`}function zz($){let Z=Tz($);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}">
|
|
54
54
|
${Q.content}
|
|
55
55
|
</file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
|
|
56
56
|
`)}function Tz($){if(typeof $==="string")return S4($,MB);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:S4(Z.text,MB)};case"file":return{...Z,content:S4(Z.content,bB)};case"image":return Z;default:return Z}})}function Nz($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function yB($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${S4(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${Nz(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${zz(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${S4(Q.content,bB)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
|
|
57
57
|
`)}function kB($){return $.map(yB).join(`
|
|
58
58
|
|
|
59
|
-
`).trim()}function IB(){let $=new WeakMap;return(Z)=>{let Q=Z,J=$.get(Q);if(typeof J==="number")return J;let W;try{W=JSON.stringify(Z)}catch{W=yB(Z)}let X=
|
|
59
|
+
`).trim()}function IB(){let $=new WeakMap;return(Z)=>{let Q=Z,J=$.get(Q);if(typeof J==="number")return J;let W;try{W=JSON.stringify(Z)}catch{W=yB(Z)}let X=vZ(W.length);return $.set(Q,X),X}}function qJ($){return $.metadata?.kind==="compaction_summary"}function zJ($){if(!qJ($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",displayRole:"system",userRunSpan:typeof Z.userRunSpan==="number"&&Number.isInteger(Z.userRunSpan)&&Z.userRunSpan>=0?Z.userRunSpan:1,summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function fz($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function n1($){return $.role==="user"&&!fz($)&&!qJ($)}function Rz($){for(let Z=$.length-1;Z>=0;Z-=1)if(n1($[Z]))return Z;return 0}function hB($){for(let Z=$.length-1;Z>=0;Z-=1)if(qJ($[Z]))return Z;return-1}function Mz($){return $.role==="assistant"||n1($)}function xB($,Z,Q){let J=0,W=$.length;for(let Y=$.length-1;Y>=0;Y-=1)if(J+=Q($[Y]),W=Y,J>=Z)break;if(W<=0)return 0;let X=Rz($),j=X>0?Math.min(W,X):W;while(j>0&&!Mz($[j]))j-=1;return j}function q2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>q2(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let J of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...q2(Z[J]));if(Array.isArray(Z.files)){for(let J of Z.files)if(J&&typeof J==="object")Q.push(...q2(J.path))}if(Array.isArray(Z.file_paths))Q.push(...q2(Z.file_paths));return Q}return[]}function w4($,Z){let Q=new Set($);for(let J of Z){let W=J.trim();if(!W)continue;Q.add(W)}return[...Q].sort((J,W)=>J.localeCompare(W))}function TJ($){let Z=[],Q=[];for(let J of $){let W=zJ(J);if(W){Z=w4(Z,W.details.readFiles),Q=w4(Q,W.details.modifiedFiles);continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="file"){Z=w4(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let j=q2(X.input);if(X.name==="read_files"){Z=w4(Z,j);continue}if(X.name==="editor"||X.name==="apply_patch")Q=w4(Q,j)}}return{readFiles:Z,modifiedFiles:Q}}var CB=100;function NJ($){return $.readFiles.length>0||$.editedFiles.length>0||$.commands.length>0}function P4($,Z){let Q=Z.trim();if(Q&&!$.includes(Q))$.push(Q)}function Ez($){if($.length<=CB)return $;return`${$.slice(0,CB)}...`}function Cz($){let Z=typeof $.path==="string"?$.path.trim():"";if(!Z)return;let{start_line:Q,end_line:J}=$;if(typeof Q==="number"&&typeof J==="number")return`${Z}:${Q}-${J}`;return Z}function wz($){let Z=typeof $==="string"?$:$.map((W)=>W.type==="text"?W.text:W.type==="file"?W.content:"").join(`
|
|
60
60
|
`);try{let W=JSON.parse(Z);if(W&&typeof W.result==="string")Z=W.result}catch{}let{POSITIVE_INFINITY:Q,NEGATIVE_INFINITY:J}=Number;for(let W of Z.matchAll(/(?:^|\n|\\n)[-+](\d+): /g)){let X=Number(W[1]);if(!Number.isFinite(X))continue;Q=Math.min(Q,X),J=Math.max(J,X)}return Q<=J?{start:Q,end:J}:void 0}function fJ($){let Z=[],Q=[],J=[],W=new Map;for(let X of $){if(!Array.isArray(X.content))continue;for(let j of X.content){if(j.type==="tool_use"){let Y=j.input??{};if(j.name==="read_files"){if(Array.isArray(Y.files)){for(let V of Y.files)if(V&&typeof V==="object"){let B=Cz(V);if(B)P4(Z,B)}}else for(let V of q2(Y))P4(Z,V);continue}if(j.name==="editor"||j.name==="apply_patch"){let V=q2(Y)[0];if(V)W.set(j.id,V);continue}if(j.name==="run_commands"){let V=Array.isArray(Y.commands)?Y.commands:[];for(let B of V)if(typeof B==="string"&&B.trim())P4(J,Ez(B.trim()))}continue}if(j.type==="tool_result"){let Y=W.get(j.tool_use_id);if(!Y)continue;let V=wz(j.content);P4(Q,V?`${Y}:${V.start}-${V.end}`:Y),W.delete(j.tool_use_id)}}}for(let X of W.values())P4(Q,X);return{readFiles:Z,editedFiles:Q,commands:J}}function gB($){return[`Files read:
|
|
61
61
|
${$.readFiles.join(`
|
|
62
62
|
`)}`,`Files edited:
|
|
@@ -97,7 +97,7 @@ ${$.conversationText||"(empty)"}`),Z.join(`
|
|
|
97
97
|
|
|
98
98
|
`)}function mB($){let Z=$.summarizer,Q=(W)=>{if(W.providerId==="openai-codex"){let{maxOutputTokens:X,...j}=W;return{...j,thinking:!1}}return{...W,maxOutputTokens:W.maxOutputTokens??RB,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let J=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...J??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??J?.apiKey,baseUrl:Z.baseUrl??J?.baseUrl,headers:Z.headers??J?.headers,modelInfo:Z.modelInfo??J?.modelInfo,knownModels:Z.knownModels??J?.knownModels,maxOutputTokens:Z.maxOutputTokens??RB})}function cB($){return{role:"user",content:[{type:"text",text:`Context summary:
|
|
99
99
|
|
|
100
|
-
${$.summary}`}],metadata:{kind:"compaction_summary",displayRole:"system",userRunSpan:$.userRunSpan,summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var MJ=1024;function bz($){let Z=b4({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(Z!==void 0)return Z;let Q=$.knownModels?.[$.modelId];return b4({maxInputTokens:Q?.maxInputTokens,contextWindow:Q?.contextWindow})}function yz($){return C4({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function kz($){let Z=await Sz($.providerConfig),Q="";for await(let J of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(J.type==="text"){Q+=J.text;continue}if(J.type==="done"&&!J.success&&J.error)throw Error(J.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function Iz($){try{return JSON.stringify($).length}catch{return String($).length}}async function uB($){let Z=$.context.messages;if(Z.length<2)return;let Q=xB(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let J=Z.slice(0,Q),W=hB(J),X=W>=0?zJ(J[W])?.summary:void 0,j=W>=0?J.slice(W+1):J;if(j.length===0)return;let Y=TJ(J),V=mB({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=bz(V),H=$.summarizer===void 0,K=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,MJ);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:MJ});let G=B??(H?K:MJ),F=
|
|
100
|
+
${$.summary}`}],metadata:{kind:"compaction_summary",displayRole:"system",userRunSpan:$.userRunSpan,summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var MJ=1024;function bz($){let Z=b4({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(Z!==void 0)return Z;let Q=$.knownModels?.[$.modelId];return b4({maxInputTokens:Q?.maxInputTokens,contextWindow:Q?.contextWindow})}function yz($){return C4({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function kz($){let Z=await Sz($.providerConfig),Q="";for await(let J of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(J.type==="text"){Q+=J.text;continue}if(J.type==="done"&&!J.success&&J.error)throw Error(J.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function Iz($){try{return JSON.stringify($).length}catch{return String($).length}}async function uB($){let Z=$.context.messages;if(Z.length<2)return;let Q=xB(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let J=Z.slice(0,Q),W=hB(J),X=W>=0?zJ(J[W])?.summary:void 0,j=W>=0?J.slice(W+1):J;if(j.length===0)return;let Y=TJ(J),V=mB({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=bz(V),H=$.summarizer===void 0,K=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,MJ);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:MJ});let G=B??(H?K:MJ),F=vZ(RJ({previousSummary:X,conversationText:"",fileOps:Y}).length),U=G-F;if(U<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:G,summaryRequestOverheadTokens:F});return}let _=yz({messages:j,targetTokens:U,estimateMessageTokens:$.estimateMessageTokens});if(_.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:_.warnings.map((S)=>S.code),summaryInputEstimatedTokens:_.estimatedTokens,targetTokens:U,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let L=TJ(_.messages),O=kB(_.messages),D=RJ({previousSummary:X,conversationText:O,fileOps:L});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:J.length,newMessagesToFold:j.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:O.length,summaryRequestChars:D.length,summaryRequestEstimatedTokens:vZ(D.length),newMessagesJsonChars:Iz(j),summaryInputEstimatedTokens:_.estimatedTokens,summaryInputActions:_.actions.length,summaryInputWarnings:_.warnings.map((S)=>S.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:G,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let q=await kz({providerConfig:V,request:D,logger:$.logger});if(!q.trim())return;let T=vB(q,L),z=Z.reduce((S,y)=>S+$.estimateMessageTokens(y),0),A=[cB({summary:T,fileOps:L,tokensBefore:z,userRunSpan:y$(J)}),...Z.slice(Q)],R=A.reduce((S,y)=>S+$.estimateMessageTokens(y),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:A.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:z,tokensAfter:R,maxInputTokens:$.context.budget.request.maxInputTokens});let N=_.actions.filter((S)=>S.reason==="over_budget"||S.reason==="tool_pair_boundary").length;return{messages:A,budget:{policyIntent:"agentic_summary",actionCount:N,warningCount:_.warnings.length,liveTailHandling:_.liveTailHandling}}}function dB($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function hz($){if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q)}}function xz($,Z){return JSON.stringify($)!==JSON.stringify(Z)}var gz=3;function pB($){if($.role!=="assistant")return;if(typeof $.content==="string")return $.content.trim()||void 0;return $.content.filter((Q)=>Q.type==="text").map((Q)=>Q.text.trim()).filter(Boolean).join(`
|
|
101
101
|
`)||void 0}function lB($,Z){let Q=Z.length>0?`
|
|
102
102
|
|
|
103
103
|
Your recent responses:
|
|
@@ -105,17 +105,17 @@ ${Z.join(`
|
|
|
105
105
|
---
|
|
106
106
|
`)}`:"";return{type:"text",text:`<SYSTEM_NOTICE>
|
|
107
107
|
Earlier context was compacted. Summary of your actions after the request above:
|
|
108
|
-
${gB($)}${Q}</SYSTEM_NOTICE>`}}function m9($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function vz($,Z){let Q=new Map;Z.forEach((B,H)=>{if(B.id)Q.set(B.id,H)});let J=(B)=>B.id?Q.get(B.id):void 0,W=new Set;for(let B=Z.length-1;B>=0&&W.size<gz;B-=1)if(pB(Z[B]))W.add(B);let X=(B,H)=>{let K=[];for(let G=B;G<H;G+=1){if(!W.has(G))continue;let F=pB(Z[G]);if(F)K.push(F)}return K},j=-1;for(let B=$.length-1;B>=0;B-=1)if(n1($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!n1($[V])){let K=J($[V]);Y.push({message:$[V],firstOriginalIndex:K,lastOriginalIndex:K,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&n1($[B+1]))B+=1;let H=$[V];if(B>V){let K=[],G=0;for(let F=V;F<=B;F+=1){if(G+=E1($[F]),F>V){let U=J($[F-1]),_=J($[F]);if(U!==void 0&&_!==void 0&&_>U+1){let L=fJ(Z.slice(U+1,_)),O=X(U+1,_);if(NJ(L)||O.length>0)K.push(lB(L,O))}}K.push(...m9($[F],F===j))}H={...$[V],content:K,metadata:{...$[V].metadata,userRunSpan:G}}}else{let K=m9(H,V===j);if(Array.isArray(H.content)&&K.length!==H.content.length)H={...H,content:K}}Y.push({message:H,firstOriginalIndex:J($[V]),lastOriginalIndex:J($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let H=Y[B];if(!H.isTypedUser||H.lastOriginalIndex===void 0)continue;let K=Y[B+1],G=K?K.firstOriginalIndex:Z.length;if(G===void 0||G<=H.lastOriginalIndex+1)continue;let F=fJ(Z.slice(H.lastOriginalIndex+1,G)),U=X(H.lastOriginalIndex+1,G);if(!NJ(F)&&U.length===0)continue;H.message={...H.message,content:[...m9(H.message,!0),lB(F,U)]}}return Y.map((B)=>B.message)}function iB($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function mz($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let J of $){let W=J.metrics;if(!W)continue;Z=!0,Q.inputTokens+=W.inputTokens??0,Q.outputTokens+=W.outputTokens??0,Q.cacheReadTokens+=W.cacheReadTokens??0,Q.cacheWriteTokens+=W.cacheWriteTokens??0,Q.cost+=W.cost??0}return Z?Q:void 0}function cz($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function uz($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var rB="preserved";function nB($){return $.metadata?.compaction===rB}function dz($){if(nB($))return $;return{...$,metadata:{...$.metadata,compaction:rB}}}function pz($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function aB($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let J=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),W=[];for(let A=0;A<Z.length;A+=1)if(n1(Z[A]))W.push(A);let X=new Map;for(let A of W){let R=hz(Z[A]);if(R)X.set(A,R)}if(X.size===0)return;let j=W[W.length-1],Y=0;for(let[A,R]of X)Y+=Q({...R,content:m9(R,A===j)});let V=new Set;for(let A=0;A<Z.length;A+=1){if(X.has(A))continue;if(nB(Z[A]))V.add(A),Y+=Q(Z[A])}let B=new Set;{let A=Z.length,R=0;for(let N=Z.length-1;N>j;N-=1){if(V.has(N))break;let S=Q(Z[N]);if(Y+R+S>J)break;R+=S,A=N}while(A<Z.length&&Z[A].role!=="assistant")A+=1;for(let N=A;N<Z.length;N+=1)B.add(N),Y+=Q(Z[N])}let H=new Map;for(let A=W.length-2;A>=0;A-=1){let R=W[A]+1,N=W[A+1];for(let S=N-1;S>=R;S-=1){let y=Z[S];if(V.has(S))break;if(y.role!=="assistant")continue;if(Array.isArray(y.content)&&y.content.some((c)=>c.type==="tool_use"))continue;let s=pz(y);if(s){let c=Q(s);if(Y+c<=J)H.set(S,s),Y+=c}break}}let K=[];for(let A=0;A<Z.length;A+=1){let R=X.get(A);if(R){K.push(R);continue}if(V.has(A)||B.has(A)){K.push(Z[A]);continue}let N=H.get(A);if(N)K.push(N)}let G=dB(Z,$.estimateMessageTokens),F=Math.min(Math.max(J,Y),Math.max(1,$.context.budget.messages.triggerTokens)),U=C4({messages:K,targetTokens:F,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(U.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:U.warnings.map((A)=>A.code),projectedTokens:U.estimatedTokens,targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens});let _=vz(U.messages,Z);if(!xz(Z,_))return;let L=uz(_[0]),O=cz(L.usageBefore,mz(Z)),D={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":"auto_compaction",displayRole:"system",messagesRemoved:L.messagesRemoved+(Z.length-_.length),...O?{usageBefore:O}:{}},q=_.map((A,R)=>{if(R===0&&n1(A))return iB({...A,metadata:{...A.metadata,...D,userRunSpan:E1(A)}});return iB(n1(A)?A:dz(A))}),T=dB(q,$.estimateMessageTokens),z=U.actions.filter((A)=>A.reason==="over_budget"||A.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:q.length,messagesRemoved:Z.length-q.length,tokensBefore:G,tokensAfter:T,budgetStatus:U.status,budgetActions:z,budgetWarnings:U.warnings.map((A)=>A.code),targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:q,budget:{policyIntent:"basic_compaction_projection",actionCount:z,warningCount:U.warnings.length,liveTailHandling:U.liveTailHandling}}}var iz=0.5;function rz($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function nz($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function tB($){try{return JSON.stringify($).length}catch{return String($).length}}function az($){let Z=0,Q=0,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result")continue;let j=tB(X.content);Z+=1,Q+=j,J=Math.max(J,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:J}}var oB={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>aB({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:J,logger:W})=>uB({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??SB,$.budget.messages.targetTokens),estimateMessageTokens:J,logger:W})};function oz($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function sz($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*iz):Math.floor($.triggerTokens*PB),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function sB($,Z){return Math.max(1,Math.floor($-Z))}function tz($){let Z=0,Q=!1;for(let J of $)if(J.role==="user")Q=!0;else if(J.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function y4($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let J=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=IB(),X=Q?.strategy??"agentic",j=oB[X],Y=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((r,O0)=>r+W(O0),0),K=lz({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),G=B.messages.reduce((r,O0)=>r+W(O0),0),F=Math.max(0,K-H),U=b4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??wB,_=U*z2,L=sB(_,F),O=K>=_;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:K,apiMessageTokens:H,messageInputTokens:G,requestOverheadTokens:F,maxInputTokens:U,requestTriggerTokens:_,messageTriggerTokens:L,thresholdRatio:z2,shouldCompact:O,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:tB(B.apiMessages),...az(B.apiMessages)}),Y==="auto"&&!O)return;let D,q;if(Y==="auto")D=sz({maxInputTokens:U,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:_,messagePairCount:tz(B.messages)}),q=sB(D,F);else q=oz({messageInputTokens:G,messageTriggerTokens:L,manualTargetRatio:Z.manualTargetRatio}),D=F+q;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:K,maxInputTokens:U,triggerTokens:_,targetTokens:D,overheadTokens:F,thresholdRatio:z2,utilizationRatio:U>0?K/U:0},messages:{inputTokens:G,triggerTokens:L,targetTokens:q}}},z=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:z,reason:z,phase:"started",iteration:B.iteration,triggerTokens:_,targetTokens:D,maxInputTokens:U,messageTargetTokens:q});let A=B.messages.length,R=Date.now(),N={context:T,providerConfig:{...J,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:W,logger:$.logger},S=V,y;if(Q?.compact)y=await Q.compact(T);else try{y=await j(N)}catch(r){if(X!=="agentic"||rz(r,B.abortSignal))throw r;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...nz(r)}),S="basic",y=await oB.basic(N)}let s=Date.now()-R,c=$.sessionId??B.conversationId,b={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(y?.messages){let r=y.messages.reduce((N$,f$)=>N$+W(f$),0),O0=F+r;if($.logger?.log("Context compaction completed",{severity:"info",strategy:S,maxInputTokens:U,messageInputTokens:G,apiInputTokens:H,requestInputTokens:K,requestOverheadTokens:F,afterMessageTokens:r,afterRequestTokens:O0,tokensSaved:K-O0,utilizationBefore:`${(K/U*100).toFixed(1)}%`,utilizationAfter:`${(O0/U*100).toFixed(1)}%`,thresholdTrigger:`${(z2*100).toFixed(1)}%`,messagesBefore:A,messagesAfter:y.messages.length,messagesRemoved:A-y.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:z,reason:z,phase:"completed",iteration:B.iteration,tokensBefore:K,tokensAfter:O0,messagesBefore:A,messagesAfter:y.messages.length,maxInputTokens:U}),f9($.telemetry,{ulid:c,strategy:S,mode:Y,messagesBefore:A,messagesAfter:y.messages.length,messagesRemoved:A-y.messages.length,tokensBefore:K,tokensAfter:O0,tokensSaved:K-O0,triggerTokens:_,maxInputTokens:U,thresholdRatio:z2,durationMs:s,provider:$.providerId,modelId:$.modelId,...b}),y.budget&&(y.budget.actionCount>0||y.budget.warningCount>0))kV($.telemetry,{ulid:c,strategy:S,mode:Y,policyIntent:y.budget.policyIntent,actionCount:y.budget.actionCount,warningCount:y.budget.warningCount,liveTailHandling:y.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...b}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:y.budget.policyIntent,actionCount:y.budget.actionCount,warningCount:y.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:z,reason:z,phase:"skipped",iteration:B.iteration,maxInputTokens:U}),R9($.telemetry,{ulid:c,strategy:S,mode:Y,reason:"no_result",tokensBefore:K,triggerTokens:_,maxInputTokens:U,thresholdRatio:z2,durationMs:s,provider:$.providerId,modelId:$.modelId,...b});return y}}function k4($){return async(Z)=>{let Q=$.getState?.(),J=Q?b$(Q,Z.messages):void 0;if(Q&&J){let X=$.compact?await $.compact({...Z,messages:J,apiMessages:J}):void 0;if(X?.messages){let j=X.systemPrompt??Q.system_prompt,Y=x8({sourceMessages:Z.messages,compactedMessages:X.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...X,...j!==void 0?{systemPrompt:j}:{}}}return{messages:J,...X?.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let W=$.compact?await $.compact(Z):void 0;if(W?.messages){let X=x8({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:W.systemPrompt});await $.saveState?.(X,Z.messages)}return W}}var iK={};w(iK,{zodToJsonSchema:()=>LR,validateWithZod:()=>_R,truncateCommandOutput:()=>R2,resolveToolRoutingConfig:()=>n8,resolveToolPresetName:()=>$$,resolveCoreSelectedToolIds:()=>GZ,getCoreHeadlessToolNames:()=>Q5,getCoreDefaultEnabledToolIds:()=>KZ,getCoreBuiltinToolCatalog:()=>g2,getCoreAcpToolNames:()=>FZ,createWebFetchTool:()=>bJ,createWebFetchExecutor:()=>r4,createToolPoliciesWithPreset:()=>o9,createSubmitAndExitTool:()=>hJ,createSkillsTool:()=>E2,createShellTool:()=>p4,createShellExecutor:()=>M2,createSearchTool:()=>SJ,createSearchExecutor:()=>i4,createReadFilesTool:()=>PJ,createFileReadExecutor:()=>l4,createEditorTool:()=>kJ,createEditorExecutor:()=>P2,createDefaultToolsWithPreset:()=>s9,createDefaultTools:()=>g$,createDefaultShellExecutor:()=>n4,createDefaultExecutors:()=>i8,createBuiltinTools:()=>v2,createAskQuestionTool:()=>IJ,createApplyPatchTool:()=>yJ,createApplyPatchExecutor:()=>w2,computePatchChanges:()=>d8,WebFetchRequestSchema:()=>EJ,ToolPresets:()=>Q1,TEAM_TOOL_NAMES:()=>s8,SubmitInputSchema:()=>d4,StructuredCommandInputSchema:()=>N2,SkillsInputSchema:()=>c4,SearchCodebaseInputSchema:()=>h4,RunCommandsInputSchema:()=>x4,ReadFilesInputSchema:()=>I4,ReadFileRequestSchema:()=>d9,PatchActionType:()=>C2,PATCH_MARKERS:()=>d,MAX_COMMAND_OUTPUT_CHARS:()=>o1,FetchWebContentInputSchema:()=>g4,EditFileInputSchema:()=>v4,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>r8,CommandExitError:()=>s1,AskQuestionInputSchema:()=>u4,ApplyPatchInputSchema:()=>m4,ALL_DEFAULT_TOOL_NAMES:()=>k$});import{validateWithZod as _R,zodToJsonSchema as LR}from"@cline/shared";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"},k$=[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];q0();import{createTool as h$,getDefaultShell as VT,getShellKind as BT,validateWithZod as x$,zodToJsonSchema as t1}from"@cline/shared";import{spawn as GH}from"node:child_process";import{StringDecoder as WT}from"node:string_decoder";import{getDefaultShell as XT,getShellArgs as jT}from"@cline/shared";import{validateWithZod as $T}from"@cline/shared";import{z as E}from"zod";var I$=6000,T2=E.string().describe("The absolute path of a text file to read content from"),c9=E.object({start_line:E.coerce.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:E.coerce.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),d9=E.object({path:T2,start_line:c9.shape.start_line,end_line:c9.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),I4=E.object({files:E.array(d9).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),$H={start_line:c9.shape.start_line,end_line:c9.shape.end_line},v8=E.union([d9,E.object({file_path:T2,...$H}).transform(({file_path:$,...Z})=>({path:$,...Z})),E.object({filePath:T2,...$H}).transform(({filePath:$,...Z})=>({path:$,...Z}))]),ZH=E.union([I4,v8,E.array(v8),E.array(E.string()),E.string(),E.object({files:E.array(E.union([T2,v8]))}),E.object({files:v8}),E.object({files:T2}),E.object({file_paths:E.array(T2)}),E.object({file_paths:E.string()}),E.object({paths:E.array(E.union([T2,v8]))}),E.object({paths:v8}),E.object({paths:E.string()})]),h4=E.object({queries:E.array(E.string()).describe("Array of regex search queries to execute")}),QH=E.union([h4,E.array(E.string()),E.string(),E.object({queries:E.string()})]),u9=E.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${I$*2} characters) to avoid timeouts.`),N2=E.object({command:E.string().min(1).describe("The executable to run directly without shell parsing."),args:E.array(E.string()).optional().describe("Optional argv list passed directly to the executable.")}),JH=E.union([u9,N2]),x4=E.object({commands:E.array(u9).describe("Array of complete shell command strings to execute.")}),ez=E.object({commands:E.array(JH)}),WH=E.union([x4,ez,E.object({commands:JH}),E.array(N2),N2,E.object({command:u9}),E.object({cmd:u9}),E.array(E.string()),E.string()]),EJ=E.object({url:E.string().describe("The URL to fetch"),prompt:E.string().min(2).describe("Analysis prompt for the fetched content")}),g4=E.object({requests:E.array(EJ).describe("Array of the URLs for the web fetch requests")}),v4=E.object({path:E.string().min(1).describe("The absolute path for the action to be performed on"),old_text:E.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${I$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:E.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${I$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:E.coerce.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),m4=E.object({input:E.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),XH=E.union([m4,E.string()]),c4=E.object({skill:E.string().min(1).describe("Name of the skill to execute."),args:E.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),u4=E.object({question:E.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:E.array(E.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),d4=E.object({summary:E.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:E.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
|
|
108
|
+
${gB($)}${Q}</SYSTEM_NOTICE>`}}function mZ($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function vz($,Z){let Q=new Map;Z.forEach((B,H)=>{if(B.id)Q.set(B.id,H)});let J=(B)=>B.id?Q.get(B.id):void 0,W=new Set;for(let B=Z.length-1;B>=0&&W.size<gz;B-=1)if(pB(Z[B]))W.add(B);let X=(B,H)=>{let K=[];for(let G=B;G<H;G+=1){if(!W.has(G))continue;let F=pB(Z[G]);if(F)K.push(F)}return K},j=-1;for(let B=$.length-1;B>=0;B-=1)if(n1($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!n1($[V])){let K=J($[V]);Y.push({message:$[V],firstOriginalIndex:K,lastOriginalIndex:K,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&n1($[B+1]))B+=1;let H=$[V];if(B>V){let K=[],G=0;for(let F=V;F<=B;F+=1){if(G+=E1($[F]),F>V){let U=J($[F-1]),_=J($[F]);if(U!==void 0&&_!==void 0&&_>U+1){let L=fJ(Z.slice(U+1,_)),O=X(U+1,_);if(NJ(L)||O.length>0)K.push(lB(L,O))}}K.push(...mZ($[F],F===j))}H={...$[V],content:K,metadata:{...$[V].metadata,userRunSpan:G}}}else{let K=mZ(H,V===j);if(Array.isArray(H.content)&&K.length!==H.content.length)H={...H,content:K}}Y.push({message:H,firstOriginalIndex:J($[V]),lastOriginalIndex:J($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let H=Y[B];if(!H.isTypedUser||H.lastOriginalIndex===void 0)continue;let K=Y[B+1],G=K?K.firstOriginalIndex:Z.length;if(G===void 0||G<=H.lastOriginalIndex+1)continue;let F=fJ(Z.slice(H.lastOriginalIndex+1,G)),U=X(H.lastOriginalIndex+1,G);if(!NJ(F)&&U.length===0)continue;H.message={...H.message,content:[...mZ(H.message,!0),lB(F,U)]}}return Y.map((B)=>B.message)}function iB($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function mz($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let J of $){let W=J.metrics;if(!W)continue;Z=!0,Q.inputTokens+=W.inputTokens??0,Q.outputTokens+=W.outputTokens??0,Q.cacheReadTokens+=W.cacheReadTokens??0,Q.cacheWriteTokens+=W.cacheWriteTokens??0,Q.cost+=W.cost??0}return Z?Q:void 0}function cz($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function uz($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var rB="preserved";function nB($){return $.metadata?.compaction===rB}function dz($){if(nB($))return $;return{...$,metadata:{...$.metadata,compaction:rB}}}function pz($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function aB($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let J=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),W=[];for(let A=0;A<Z.length;A+=1)if(n1(Z[A]))W.push(A);let X=new Map;for(let A of W){let R=hz(Z[A]);if(R)X.set(A,R)}if(X.size===0)return;let j=W[W.length-1],Y=0;for(let[A,R]of X)Y+=Q({...R,content:mZ(R,A===j)});let V=new Set;for(let A=0;A<Z.length;A+=1){if(X.has(A))continue;if(nB(Z[A]))V.add(A),Y+=Q(Z[A])}let B=new Set;{let A=Z.length,R=0;for(let N=Z.length-1;N>j;N-=1){if(V.has(N))break;let S=Q(Z[N]);if(Y+R+S>J)break;R+=S,A=N}while(A<Z.length&&Z[A].role!=="assistant")A+=1;for(let N=A;N<Z.length;N+=1)B.add(N),Y+=Q(Z[N])}let H=new Map;for(let A=W.length-2;A>=0;A-=1){let R=W[A]+1,N=W[A+1];for(let S=N-1;S>=R;S-=1){let y=Z[S];if(V.has(S))break;if(y.role!=="assistant")continue;if(Array.isArray(y.content)&&y.content.some((c)=>c.type==="tool_use"))continue;let s=pz(y);if(s){let c=Q(s);if(Y+c<=J)H.set(S,s),Y+=c}break}}let K=[];for(let A=0;A<Z.length;A+=1){let R=X.get(A);if(R){K.push(R);continue}if(V.has(A)||B.has(A)){K.push(Z[A]);continue}let N=H.get(A);if(N)K.push(N)}let G=dB(Z,$.estimateMessageTokens),F=Math.min(Math.max(J,Y),Math.max(1,$.context.budget.messages.triggerTokens)),U=C4({messages:K,targetTokens:F,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(U.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:U.warnings.map((A)=>A.code),projectedTokens:U.estimatedTokens,targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens});let _=vz(U.messages,Z);if(!xz(Z,_))return;let L=uz(_[0]),O=cz(L.usageBefore,mz(Z)),D={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":"auto_compaction",displayRole:"system",messagesRemoved:L.messagesRemoved+(Z.length-_.length),...O?{usageBefore:O}:{}},q=_.map((A,R)=>{if(R===0&&n1(A))return iB({...A,metadata:{...A.metadata,...D,userRunSpan:E1(A)}});return iB(n1(A)?A:dz(A))}),T=dB(q,$.estimateMessageTokens),z=U.actions.filter((A)=>A.reason==="over_budget"||A.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:q.length,messagesRemoved:Z.length-q.length,tokensBefore:G,tokensAfter:T,budgetStatus:U.status,budgetActions:z,budgetWarnings:U.warnings.map((A)=>A.code),targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:q,budget:{policyIntent:"basic_compaction_projection",actionCount:z,warningCount:U.warnings.length,liveTailHandling:U.liveTailHandling}}}var iz=0.5;function rz($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function nz($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function tB($){try{return JSON.stringify($).length}catch{return String($).length}}function az($){let Z=0,Q=0,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result")continue;let j=tB(X.content);Z+=1,Q+=j,J=Math.max(J,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:J}}var oB={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>aB({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:J,logger:W})=>uB({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??SB,$.budget.messages.targetTokens),estimateMessageTokens:J,logger:W})};function oz($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function sz($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*iz):Math.floor($.triggerTokens*PB),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function sB($,Z){return Math.max(1,Math.floor($-Z))}function tz($){let Z=0,Q=!1;for(let J of $)if(J.role==="user")Q=!0;else if(J.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function y4($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let J=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=IB(),X=Q?.strategy??"agentic",j=oB[X],Y=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((r,O0)=>r+W(O0),0),K=lz({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),G=B.messages.reduce((r,O0)=>r+W(O0),0),F=Math.max(0,K-H),U=b4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??wB,_=U*z2,L=sB(_,F),O=K>=_;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:K,apiMessageTokens:H,messageInputTokens:G,requestOverheadTokens:F,maxInputTokens:U,requestTriggerTokens:_,messageTriggerTokens:L,thresholdRatio:z2,shouldCompact:O,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:tB(B.apiMessages),...az(B.apiMessages)}),Y==="auto"&&!O)return;let D,q;if(Y==="auto")D=sz({maxInputTokens:U,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:_,messagePairCount:tz(B.messages)}),q=sB(D,F);else q=oz({messageInputTokens:G,messageTriggerTokens:L,manualTargetRatio:Z.manualTargetRatio}),D=F+q;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:K,maxInputTokens:U,triggerTokens:_,targetTokens:D,overheadTokens:F,thresholdRatio:z2,utilizationRatio:U>0?K/U:0},messages:{inputTokens:G,triggerTokens:L,targetTokens:q}}},z=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:z,reason:z,phase:"started",iteration:B.iteration,triggerTokens:_,targetTokens:D,maxInputTokens:U,messageTargetTokens:q});let A=B.messages.length,R=Date.now(),N={context:T,providerConfig:{...J,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:W,logger:$.logger},S=V,y;if(Q?.compact)y=await Q.compact(T);else try{y=await j(N)}catch(r){if(X!=="agentic"||rz(r,B.abortSignal))throw r;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...nz(r)}),S="basic",y=await oB.basic(N)}let s=Date.now()-R,c=$.sessionId??B.conversationId,b={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(y?.messages){let r=y.messages.reduce((N$,f$)=>N$+W(f$),0),O0=F+r;if($.logger?.log("Context compaction completed",{severity:"info",strategy:S,maxInputTokens:U,messageInputTokens:G,apiInputTokens:H,requestInputTokens:K,requestOverheadTokens:F,afterMessageTokens:r,afterRequestTokens:O0,tokensSaved:K-O0,utilizationBefore:`${(K/U*100).toFixed(1)}%`,utilizationAfter:`${(O0/U*100).toFixed(1)}%`,thresholdTrigger:`${(z2*100).toFixed(1)}%`,messagesBefore:A,messagesAfter:y.messages.length,messagesRemoved:A-y.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:z,reason:z,phase:"completed",iteration:B.iteration,tokensBefore:K,tokensAfter:O0,messagesBefore:A,messagesAfter:y.messages.length,maxInputTokens:U}),fZ($.telemetry,{ulid:c,strategy:S,mode:Y,messagesBefore:A,messagesAfter:y.messages.length,messagesRemoved:A-y.messages.length,tokensBefore:K,tokensAfter:O0,tokensSaved:K-O0,triggerTokens:_,maxInputTokens:U,thresholdRatio:z2,durationMs:s,provider:$.providerId,modelId:$.modelId,...b}),y.budget&&(y.budget.actionCount>0||y.budget.warningCount>0))kV($.telemetry,{ulid:c,strategy:S,mode:Y,policyIntent:y.budget.policyIntent,actionCount:y.budget.actionCount,warningCount:y.budget.warningCount,liveTailHandling:y.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...b}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:y.budget.policyIntent,actionCount:y.budget.actionCount,warningCount:y.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:z,reason:z,phase:"skipped",iteration:B.iteration,maxInputTokens:U}),RZ($.telemetry,{ulid:c,strategy:S,mode:Y,reason:"no_result",tokensBefore:K,triggerTokens:_,maxInputTokens:U,thresholdRatio:z2,durationMs:s,provider:$.providerId,modelId:$.modelId,...b});return y}}function k4($){return async(Z)=>{let Q=$.getState?.(),J=Q?b$(Q,Z.messages):void 0;if(Q&&J){let X=$.compact?await $.compact({...Z,messages:J,apiMessages:J}):void 0;if(X?.messages){let j=X.systemPrompt??Q.system_prompt,Y=x8({sourceMessages:Z.messages,compactedMessages:X.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...X,...j!==void 0?{systemPrompt:j}:{}}}return{messages:J,...X?.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let W=$.compact?await $.compact(Z):void 0;if(W?.messages){let X=x8({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:W.systemPrompt});await $.saveState?.(X,Z.messages)}return W}}var iK={};w(iK,{zodToJsonSchema:()=>LR,validateWithZod:()=>_R,truncateCommandOutput:()=>R2,resolveToolRoutingConfig:()=>n8,resolveToolPresetName:()=>$$,resolveCoreSelectedToolIds:()=>GQ,getCoreHeadlessToolNames:()=>Q5,getCoreDefaultEnabledToolIds:()=>KQ,getCoreBuiltinToolCatalog:()=>g2,getCoreAcpToolNames:()=>FQ,createWebFetchTool:()=>bJ,createWebFetchExecutor:()=>r4,createToolPoliciesWithPreset:()=>oZ,createSubmitAndExitTool:()=>hJ,createSkillsTool:()=>E2,createShellTool:()=>p4,createShellExecutor:()=>M2,createSearchTool:()=>SJ,createSearchExecutor:()=>i4,createReadFilesTool:()=>PJ,createFileReadExecutor:()=>l4,createEditorTool:()=>kJ,createEditorExecutor:()=>P2,createDefaultToolsWithPreset:()=>sZ,createDefaultTools:()=>g$,createDefaultShellExecutor:()=>n4,createDefaultExecutors:()=>i8,createBuiltinTools:()=>v2,createAskQuestionTool:()=>IJ,createApplyPatchTool:()=>yJ,createApplyPatchExecutor:()=>w2,computePatchChanges:()=>d8,WebFetchRequestSchema:()=>EJ,ToolPresets:()=>Q1,TEAM_TOOL_NAMES:()=>s8,SubmitInputSchema:()=>d4,StructuredCommandInputSchema:()=>N2,SkillsInputSchema:()=>c4,SearchCodebaseInputSchema:()=>h4,RunCommandsInputSchema:()=>x4,ReadFilesInputSchema:()=>I4,ReadFileRequestSchema:()=>dZ,PatchActionType:()=>C2,PATCH_MARKERS:()=>d,MAX_COMMAND_OUTPUT_CHARS:()=>o1,FetchWebContentInputSchema:()=>g4,EditFileInputSchema:()=>v4,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>r8,CommandExitError:()=>s1,AskQuestionInputSchema:()=>u4,ApplyPatchInputSchema:()=>m4,ALL_DEFAULT_TOOL_NAMES:()=>k$});import{validateWithZod as _R,zodToJsonSchema as LR}from"@cline/shared";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"},k$=[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];q0();import{createTool as h$,getDefaultShell as VT,getShellKind as BT,validateWithZod as x$,zodToJsonSchema as t1}from"@cline/shared";import{spawn as GH}from"node:child_process";import{StringDecoder as WT}from"node:string_decoder";import{getDefaultShell as XT,getShellArgs as jT}from"@cline/shared";import{validateWithZod as $T}from"@cline/shared";import{z as E}from"zod";var I$=6000,T2=E.string().describe("The absolute path of a text file to read content from"),cZ=E.object({start_line:E.coerce.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:E.coerce.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),dZ=E.object({path:T2,start_line:cZ.shape.start_line,end_line:cZ.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),I4=E.object({files:E.array(dZ).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),$H={start_line:cZ.shape.start_line,end_line:cZ.shape.end_line},v8=E.union([dZ,E.object({file_path:T2,...$H}).transform(({file_path:$,...Z})=>({path:$,...Z})),E.object({filePath:T2,...$H}).transform(({filePath:$,...Z})=>({path:$,...Z}))]),ZH=E.union([I4,v8,E.array(v8),E.array(E.string()),E.string(),E.object({files:E.array(E.union([T2,v8]))}),E.object({files:v8}),E.object({files:T2}),E.object({file_paths:E.array(T2)}),E.object({file_paths:E.string()}),E.object({paths:E.array(E.union([T2,v8]))}),E.object({paths:v8}),E.object({paths:E.string()})]),h4=E.object({queries:E.array(E.string()).describe("Array of regex search queries to execute")}),QH=E.union([h4,E.array(E.string()),E.string(),E.object({queries:E.string()})]),uZ=E.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${I$*2} characters) to avoid timeouts.`),N2=E.object({command:E.string().min(1).describe("The executable to run directly without shell parsing."),args:E.array(E.string()).optional().describe("Optional argv list passed directly to the executable.")}),JH=E.union([uZ,N2]),x4=E.object({commands:E.array(uZ).describe("Array of complete shell command strings to execute.")}),ez=E.object({commands:E.array(JH)}),WH=E.union([x4,ez,E.object({commands:JH}),E.array(N2),N2,E.object({command:uZ}),E.object({cmd:uZ}),E.array(E.string()),E.string()]),EJ=E.object({url:E.string().describe("The URL to fetch"),prompt:E.string().min(2).describe("Analysis prompt for the fetched content")}),g4=E.object({requests:E.array(EJ).describe("Array of the URLs for the web fetch requests")}),v4=E.object({path:E.string().min(1).describe("The absolute path for the action to be performed on"),old_text:E.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${I$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:E.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${I$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:E.coerce.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),m4=E.object({input:E.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),XH=E.union([m4,E.string()]),c4=E.object({skill:E.string().min(1).describe("Name of the skill to execute."),args:E.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),u4=E.object({question:E.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:E.array(E.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),d4=E.object({summary:E.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:E.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
|
|
109
109
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
110
|
-
IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function f2($){if($ instanceof Error)return $.message;return String($)}function YH($){if(typeof $.old_text==="string"&&$.old_text.length>I$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${I$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>I$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${I$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class m8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function a1($,Z,Q){return Promise.race([$,new Promise((J,W)=>{setTimeout(()=>W(new m8(Q,Z)),Z)})])}function
|
|
110
|
+
IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function f2($){if($ instanceof Error)return $.message;return String($)}function YH($){if(typeof $.old_text==="string"&&$.old_text.length>I$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${I$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>I$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${I$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class m8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function a1($,Z,Q){return Promise.race([$,new Promise((J,W)=>{setTimeout(()=>W(new m8(Q,Z)),Z)})])}function pZ($){let{path:Z,start_line:Q,end_line:J}=$;if(Q==null&&J==null)return Z;return`${Z}:${Q??1}-${J??"EOF"}`}function VH($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}var ZT=new Set(["start_line","end_line"]);function QT($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let Z=Object.keys($);return Z.length>0&&Z.every((Q)=>ZT.has(Q))}function jH($){let Z=[];for(let Q of $){if(QT(Q)){let J=Z[Z.length-1];if(typeof J==="string"){Z[Z.length-1]={path:J,...Q};continue}if(J!==null&&typeof J==="object"&&!Array.isArray(J)&&"path"in J&&Object.keys(Q).every((W)=>!(W in J))){Z[Z.length-1]={...J,...Q};continue}}Z.push(Q)}return Z}function BH($){if(Array.isArray($))return jH($);if($!==null&&typeof $==="object")for(let Z of["files","paths"]){let Q=$[Z];if(Array.isArray(Q))return{...$,[Z]:jH(Q)}}return $}function HH($){let Z=$T(WH,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function JT($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((J)=>/[\s"]/u.test(J)?JSON.stringify(J):J);return`${$.command} ${Q.join(" ")}`}var CJ=200;function KH($){let Z=JT($);if(Z.length<=CJ)return Z;let Q=Z.length-CJ;return`${Z.slice(0,CJ)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var o1=48000;function R2($,Z={}){let Q=Z.maxChars??48000,J=Z.totalChars??$.length;if($.length<=Q&&J<=Q)return $;let W=Math.ceil(Q/2),X=Math.max(1,Q-W);return`${$.slice(0,W)}
|
|
111
111
|
[... output truncated: ${J} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
|
|
112
|
-
`+$.slice(-X)}var c8=2000,wJ=2000,
|
|
112
|
+
`+$.slice(-X)}var c8=2000,wJ=2000,lZ=48000,u8=48000;class s1 extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function FH($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),J=new WT("utf8"),W="",X="",j=0,Y=(V)=>{if(!V)return;j+=V.length;let B=Z-W.length;if(B>0){W+=V.slice(0,B),X=(X+V.slice(B)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){Y(J.write(V))},snapshot(){return Y(J.end()),{text:W+X,totalChars:j,dropped:j>W.length+X.length}}}}function YT($,Z,Q,J,W){if(Z.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((X,j)=>{let Y=process.platform==="win32",V=GH($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=FH(J),K=FH(J),G=!1,F=!1,U=(T)=>{if(F)return;F=!0,T()},_=async()=>{if(!B)return;if(Y){await new Promise((T)=>{let z=!1,A,R=()=>{if(z)return;z=!0,clearTimeout(N),T()};try{A=GH("taskkill.exe",["/PID",String(B),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{V.kill(),T();return}let N=setTimeout(()=>{A.kill(),V.kill(),R()},5000);A.once("error",()=>{V.kill(),R()}),A.once("close",(S)=>{if(S!==0)V.kill();R()})});return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},L,O=()=>q(Error("Command was aborted")),D=()=>{clearTimeout(L),Z.signal?.removeEventListener("abort",O)},q=(T)=>{if(G||F)return;G=!0,D(),_().finally(()=>U(()=>j(T)))};if(L=setTimeout(()=>q(new m8(`Command timed out after ${Q}ms`,Q)),Q),Z.signal){if(Z.signal.addEventListener("abort",O,{once:!0}),Z.signal.aborted)O()}V.stdout?.on("data",(T)=>{H.append(T)}),V.stderr?.on("data",(T)=>{K.append(T)}),V.on("close",(T)=>{if(D(),G)return;let z=H.snapshot(),A=K.snapshot();if(T!==0){let R=T??1,N=W?z.text+(A.text?`
|
|
113
113
|
[stderr]
|
|
114
114
|
${A.text}`:""):z.text,S=z.dropped||W&&A.dropped,y=W?z.totalChars+A.totalChars:z.totalChars;if(S||N.length>J)N=R2(N,{maxChars:J,totalChars:y});let s=N.length>0?`[Command exited with code ${R}]
|
|
115
115
|
${N}`:`[Command exited with code ${R}]`;U(()=>j(new s1(R,s)))}else{let R=W?z.text+(A.text?`
|
|
116
116
|
[stderr]
|
|
117
117
|
${A.text}`:""):z.text;if(z.dropped||W&&A.dropped||R.length>J){let S=W?z.totalChars+A.totalChars:z.totalChars;R=R2(R,{maxChars:J,totalChars:S})}U(()=>X(R))}}),V.on("error",(T)=>{if(D(),G)return;U(()=>j(Error(`Failed to execute command: ${T.message}`)))})})}function M2($={}){let{shell:Z=XT(process.platform),timeoutMs:Q=30000,env:J={},combineOutput:W=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??o1;return(j,Y,V)=>{let B=typeof j!=="string";return YT({executable:B?j.command:Z,args:B?j.args??[]:jT(Z,j),cwd:Y,env:J},V,Q,X,W)}}function UH($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function HT($,Z,Q){yV($,{tool_name:"run_commands",effective_timeout_ms:Q.effectiveTimeoutMs,timeout_source:Q.timeoutSource,command_count:Q.commandCount,duration_ms:Q.durationMs,ulid:Z.sessionId,mode:UH(Z,"mode"),source:UH(Z,"source"),session_id:Z.sessionId,agent_id:Z.agentId,conversation_id:Z.conversationId,run_id:Z.runId,iteration:Z.iteration,tool_call_id:Z.toolCallId})}function KT($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function GT($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let J=$[Q],W=KT(J);if(!W){Z.push(J);continue}let X=$.findIndex((Y,V)=>V>Q&&Y.trim()===W);if(X===-1){Z.push(J);continue}let j=[J];while(Q<X){Q+=1;let Y=$[Q];j.push(Y)}Z.push(j.join(`
|
|
118
|
-
`))}return Z}function FT($){let Z=[],Q=[],J=()=>{if(Q.length>0)Z.push(...GT(Q)),Q=[]};for(let W of $){if(typeof W==="string"){Q.push(W);continue}J(),Z.push(W)}return J(),Z}async function UT($,Z){let{executor:Q,cwd:J,context:W,timeoutMs:X,timeoutSource:j,telemetry:Y}=Z;return Promise.all($.map(async(V)=>{let B=Date.now(),H=KH(V);try{let K=await a1(Q(V,J,W),X,`Command timed out after ${X}ms`);return{query:H,result:K,success:!0}}catch(K){if(K instanceof m8)HT(Y,W,{effectiveTimeoutMs:K.timeoutMs,timeoutSource:j,commandCount:$.length,durationMs:Date.now()-B});if(K instanceof s1)return{query:H,result:K.output,error:K.message,success:!1};let G=f2(K);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function PJ($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return h$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${c8} lines / ~${Math.round(
|
|
118
|
+
`))}return Z}function FT($){let Z=[],Q=[],J=()=>{if(Q.length>0)Z.push(...GT(Q)),Q=[]};for(let W of $){if(typeof W==="string"){Q.push(W);continue}J(),Z.push(W)}return J(),Z}async function UT($,Z){let{executor:Q,cwd:J,context:W,timeoutMs:X,timeoutSource:j,telemetry:Y}=Z;return Promise.all($.map(async(V)=>{let B=Date.now(),H=KH(V);try{let K=await a1(Q(V,J,W),X,`Command timed out after ${X}ms`);return{query:H,result:K,success:!0}}catch(K){if(K instanceof m8)HT(Y,W,{effectiveTimeoutMs:K.timeoutMs,timeoutSource:j,commandCount:$.length,durationMs:Date.now()-B});if(K instanceof s1)return{query:H,result:K.output,error:K.message,success:!1};let G=f2(K);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function PJ($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return h$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${c8} lines / ~${Math.round(lZ/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:t1(I4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,W)=>{let X=x$(ZH,BH(J)),j;if(typeof X==="string")j=[{path:X}];else if(Array.isArray(X))j=X.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in X)j=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)j=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)j=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else j=[X];return Promise.all(j.map(async(Y)=>{let V=VH(Y);if(V)return{query:pZ(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await a1($(Y,W),Q,`File read timed out after ${Q}ms`);return{query:pZ(Y),result:B,success:!0}}catch(B){let H=f2(B);return{query:pZ(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function SJ($,Z={}){let Q=Z.searchTimeoutMs??30000,J=Z.cwd??process.cwd();return h$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(u8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:t1(h4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,X)=>{let j=x$(QH,W),Y=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(Y.map(async(V)=>{try{let B=await a1($(V,J,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let H=f2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var DH="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function DT($,Z){if($==="powershell"||$==="cmd"){let J=$==="powershell"?"PowerShell":"cmd.exe",W=$==="powershell"?"';'":"'&&'";return"Run non-interactive shell commands from the root of the workspace in Windows environment. "+DH+`Output beyond ~${Math.round(o1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${J}; quote paths and arguments for ${J} and use ${W} to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`}let Q=$==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":Z?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+DH+Q+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(o1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function p4($,Z={}){let Q=Z.bashTimeoutMs??30000,J=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=Z.cwd??process.cwd(),X=process.platform==="win32",j=Z.shell,Y=typeof j==="function"?j:()=>j??VT(process.platform),V=()=>DT(BT(Y()),X),B=h$({name:"run_commands",description:V(),inputSchema:t1(x4),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(H,K)=>{let G=FT(HH(H));return UT(G,{executor:$,cwd:W,context:K,timeoutMs:Q,timeoutSource:J,telemetry:Z.telemetry})}});if(typeof j==="function")Object.defineProperty(B,"description",{get:V,enumerable:!0});return B}function bJ($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return h$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:t1(g4),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(J,W)=>{let X=x$(g4,J);return Promise.all(X.requests.map(async(j)=>{try{let Y=await a1($(j.url,j.prompt,W),Q,`Web fetch timed out after ${Q}ms`);return{query:j.url,result:Y,success:!0}}catch(Y){let V=f2(Y);return{query:j.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var _T=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
|
|
119
119
|
|
|
120
120
|
*** Begin Patch
|
|
121
121
|
*** Update File: path/to/file.ts
|
|
@@ -174,12 +174,12 @@ ${Q.context}`)}return Z.join(`
|
|
|
174
174
|
`:`
|
|
175
175
|
`}function OH($,Z){return $.split(/\r\n|\n/).join(Z)}function ST($,Z,Q){let J=$.split(/\r\n|\n/),W=Z.split(/\r\n|\n/),X=0;while(X<J.length&&X<W.length&&J[X]===W[X])X++;let j=J.length,Y=W.length;while(j>X&&Y>X&&J[j-1]===W[Y-1])j--,Y--;let V=j-X,B=Y-X,H=V,K=B;if(V+B>Q)H=Math.min(V,Math.max(Math.ceil(Q/2),Q-B)),K=Math.min(B,Q-H);let G=["```diff"];for(let _=X;_<X+H;_++)G.push(`-${_+1}: ${J[_]}`);for(let _=X;_<X+K;_++)G.push(`+${_+1}: ${W[_]}`);let F=V-H,U=B-K;if(F>0||U>0)G.push(`... diff truncated (${F} more removed, ${U} more added lines) ...`);return G.push("```"),G.join(`
|
|
176
176
|
`)}async function bT($,Z,Q){return await A1.mkdir(L1.dirname($),{recursive:!0}),await A1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function yT($){try{return await A1.access($),!0}catch{return!1}}async function kT($,Z,Q,J,W){let X=await A1.readFile($,J),j=qH(X),Y=OH(Z,j),V=OH(Q??"",j),B=PT(X,Y);if(B===0)throw Error(`No replacement performed: text not found in ${$}.`);if(B>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let H=X.replace(Y,()=>V);await A1.writeFile($,H,{encoding:J});let K=ST(X,H,W);return`Edited ${$}
|
|
177
|
-
${K}`}async function IT($,Z,Q,J){let W=await A1.readFile($,J),X=qH(W),j=W.split(/\r\n|\n/),Y=j.length+1;if(Z<1||Z>Y)throw Error(`Invalid insert_line: ${Z}. insert_line must be a positive one-based boundary line in the range 1-${Y}. Use ${Y} to append at EOF.`);let V=Z-1;return j.splice(V,0,...Q.split(/\r\n|\n/)),await A1.writeFile($,j.join(X),{encoding:J}),`Inserted content at line ${Z} in ${$}.`}function P2($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:J=200}=$;return async(W,X,j)=>{let Y=wT(X,W.path,Q);if(W.insert_line!=null)return IT(Y,W.insert_line,W.new_text,Z);if(!await yT(Y))return bT(Y,W.new_text,Z);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return kT(Y,W.old_text,W.new_text,Z,J)}}import{createReadStream as hT}from"node:fs";import*as
|
|
177
|
+
${K}`}async function IT($,Z,Q,J){let W=await A1.readFile($,J),X=qH(W),j=W.split(/\r\n|\n/),Y=j.length+1;if(Z<1||Z>Y)throw Error(`Invalid insert_line: ${Z}. insert_line must be a positive one-based boundary line in the range 1-${Y}. Use ${Y} to append at EOF.`);let V=Z-1;return j.splice(V,0,...Q.split(/\r\n|\n/)),await A1.writeFile($,j.join(X),{encoding:J}),`Inserted content at line ${Z} in ${$}.`}function P2($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:J=200}=$;return async(W,X,j)=>{let Y=wT(X,W.path,Q);if(W.insert_line!=null)return IT(Y,W.insert_line,W.new_text,Z);if(!await yT(Y))return bT(Y,W.new_text,Z);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return kT(Y,W.old_text,W.new_text,Z,J)}}import{createReadStream as hT}from"node:fs";import*as iZ from"node:fs/promises";import*as v$ from"node:path";import{createInterface as xT}from"node:readline";import{resolveExistingFilePath as gT}from"@cline/shared/storage";var vT=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),mT={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},zH=1e8,cT=50000;function TH($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function uT($,Z,Q,J,W,X){if(X?.aborted)throw TH(X);let j=Math.max(J??1,1),Y=W??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:j+cT-1,H=[],K=0,G=0,F=!1,U=!1,_=Number.isFinite(Y)?Math.min(Y,j+c8-1):j+c8-1,L=Q?String(_).length+3:0,O=hT($,{encoding:Z}),D=xT({input:O,crlfDelay:Number.POSITIVE_INFINITY}),q=X?()=>O.destroy(TH(X)):void 0;if(X&&q)X.addEventListener("abort",q,{once:!0});try{for await(let S of D){if(G+=1,G>Y){G=Y;break}if(!V&&F&&G>=B){U=!0;break}if(G<j||F)continue;if(H.length>=c8){F=!0;continue}let y=S;if(y.length>wJ)y=`${y.slice(0,wJ)} [line truncated]`;let s=K+y.length+L+1;if(s>lZ&&H.length>0){F=!0;continue}H.push({lineNumber:G,text:y}),K=s}}finally{if(X&&q)X.removeEventListener("abort",q);D.close(),O.destroy()}let T=String(H[H.length-1]?.lineNumber??G).length,z=H.map(({lineNumber:S,text:y})=>Q?`${String(S).padStart(T," ")} | ${y}`:y).join(`
|
|
178
178
|
`),A=H[H.length-1]?.lineNumber;if(A===void 0)return z;let R=Math.min(Y,G);if(A>=R)return z;let N=U?`${G}+ lines`:R;return`${z}
|
|
179
179
|
|
|
180
|
-
[Showing lines ${j}-${A} of ${N}. Use start_line/end_line to read other sections.]`}function l4($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:J}={...mT,...$};return async(W,X)=>{let{path:j,start_line:Y,end_line:V}=W,B=v$.isAbsolute(j)?v$.normalize(j):v$.resolve(process.cwd(),j),H=gT(B)??B,K=v$.extname(H).toLowerCase(),G=vT.get(K),F=await
|
|
181
|
-
`).filter((L)=>L.trim());for(let L of _){if(U.length>=Q)break;let O=JSON.parse(L);if(O.type==="match"){let D=O.data,q=[];if(O.data.submatches&&O.data.submatches.length>0){let T=O.data.submatches[0];U.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:q})}}else if(O.type==="context"&&U.length>0){let D=U[U.length-1],q=O.data.line_number===D.line?">":" ";D.context.push(`${q} ${O.data.line_number}: ${O.data.lines?.text??O.data.line?.text??""}`)}}G(U.length>0?U:null)}catch{G(null)}return}G(null)}),Y.on("error",()=>{G(null)})})}function FN($,Z,Q,J){let W=$.split("/"),X=W[W.length-1]??"";if(W.length-1>J)return!1;for(let V=0;V<W.length-1;V++)if(Z.has(W[V]??""))return!1;let Y=
|
|
182
|
-
`))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let U=[],_=0,L=await e1(B);for(let D of L){if(H.signal?.aborted)throw Error("Search operation aborted");if(!FN(D,j,Y,X))continue;if(U.length>=J)break;_++;let q=
|
|
180
|
+
[Showing lines ${j}-${A} of ${N}. Use start_line/end_line to read other sections.]`}function l4($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:J}={...mT,...$};return async(W,X)=>{let{path:j,start_line:Y,end_line:V}=W,B=v$.isAbsolute(j)?v$.normalize(j):v$.resolve(process.cwd(),j),H=gT(B)??B,K=v$.extname(H).toLowerCase(),G=vT.get(K),F=await iZ.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(G){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let U=await iZ.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:U.toString("base64"),mediaType:G}]}if(F.size>zH)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${zH} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return uT(H,Q,J,Y,V,X.signal)}}import{spawn as PH}from"node:child_process";import*as SH from"node:fs/promises";import*as aZ from"node:path";var CH={};w(CH,{prewarmFileIndex:()=>nZ,getFileIndex:()=>e1,enrichPromptWithMentions:()=>l8});import{spawn as dT}from"node:child_process";import{readdir as pT}from"node:fs/promises";import mJ from"node:path";import{isMainThread as RH,parentPort as NH,Worker as lT}from"node:worker_threads";var iT=15000,rT=600000,nT=1000,aT=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function fH($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var p8=new Map;function oT(){if(!RH)return!1;return!0}function sT($){if(p8.size<=1)return;for(let[Z,Q]of p8.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>rT)p8.delete(Z)}}function tT($,Z){return mJ.relative($,Z).split(mJ.sep).join("/")}async function eT($){let Q=(await new Promise((J,W)=>{let X=dT("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",Y="";X.stdout.on("data",(V)=>{j+=V.toString()}),X.stderr.on("data",(V)=>{Y+=V.toString()}),X.on("error",W),X.on("close",(V)=>{if(V===0){J(j);return}W(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>J.replace(/\\/g,"/"));return new Set(Q)}async function MH($,Z,Q){let J;try{J=await pT(Z,{withFileTypes:!0})}catch(W){if(fH(W))return;throw W}for(let W of J){let X=mJ.join(Z,W.name);if(W.isDirectory()){if(aT.has(W.name))continue;try{await MH($,X,Q)}catch(j){if(fH(j))continue;throw j}continue}if(W.isFile())Q.add(tT($,X))}}async function $N($){let Z=new Set;return await MH($,$,Z),Z}async function rZ($){try{return await eT($)}catch{return $N($)}}function ZN(){if(RH||!NH)return;let $=NH;$.on("message",(Z)=>{if(Z.type!=="index")return;rZ(Z.cwd).then((Q)=>{let J={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(J)}).catch((Q)=>{let J={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(J)})})}class EH{worker=new lT(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((W,X)=>{let j=setTimeout(()=>{this.pending.delete(Z),W(null)},nT);j.unref(),this.pending.set(Z,{resolve:(Y)=>{clearTimeout(j),W(Y)},reject:(Y)=>{clearTimeout(j),X(Y)}})}),J={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(J),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}ZN();var vJ;function QN(){if(!oT())return null;if(vJ===void 0)vJ=new EH;return vJ}async function JN($){let Z=QN();if(!Z)return rZ($);try{let Q=await Z.requestIndex($);if(Q===null)return rZ($);return new Set(Q)}catch{return rZ($)}}async function e1($,Z={}){let Q=Z.ttlMs??iT,J=Date.now();sT(J);let W=p8.get($);if(W&&Q>0&&J-W.lastBuiltAt<=Q&&W.files.size>0)return W.lastAccessedAt=J,W.files;if(W?.pending)return W.lastAccessedAt=J,W.pending;let X=JN($).then((j)=>{return p8.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return p8.set($,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:J,pending:X}),X}async function nZ($,Z={}){await e1($,{...Z,ttlMs:0})}import{stat as WN}from"node:fs/promises";import S2 from"node:path";var XN=/[),.:;!?`'"]+$/,jN=/^[(`'"]+/;function YN($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let J of Z){let W=(J[2]??"").trim();if(W.length===0)continue;let X=W.replace(jN,"").replace(XN,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function VN($,Z){let Q=$.replace(/\\/g,"/"),J=S2.isAbsolute(Q)?S2.resolve(Q):S2.resolve(Z,Q),W=S2.relative(Z,J);if(W.startsWith("..")||S2.isAbsolute(W))return;return W.split(S2.sep).join("/")}async function l8($,Z,Q={}){let J=YN($);if(J.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:X,maxTotalBytes:j}=Q,Y=await e1(Z,{ttlMs:Q.ttlMs}),V=[],B=[],H=[],K=0;for(let G of J){if(W&&H.length>=W){B.push(G);continue}let F=VN(G,Z);if(!F||!Y.has(F)){B.push(G);continue}if(!X||!j){V.push(F);continue}let U=S2.join(Z,F);try{if(!(await WN(U)).isFile()){B.push(G);continue}let L=K+X;if(L>j){B.push(G);continue}K=L,V.push(F)}catch{B.push(G)}}return{prompt:$,mentions:J,matchedFiles:V,ignoredMentions:B}}var BN=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],HN=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],b2=null;function KN(){if(b2!==null)return Promise.resolve(b2);return new Promise(($)=>{let Z=PH("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{b2=Q===0,$(b2)}),Z.on("error",()=>{b2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(b2===null)b2=!1,$(!1)},1000)})}function GN($,Z,Q,J,W=5000,X){return new Promise((j)=>{let Y=PH("rg",["--json",`--context=${J}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},K=setTimeout(()=>{if(!B)B=!0,H(),j(null)},W),G=(F)=>{if(!B)B=!0,clearTimeout(K),H(),j(F)};if(X?.aborted){H(),j(null);return}X?.addEventListener("abort",()=>{G(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let U=[],_=V.split(`
|
|
181
|
+
`).filter((L)=>L.trim());for(let L of _){if(U.length>=Q)break;let O=JSON.parse(L);if(O.type==="match"){let D=O.data,q=[];if(O.data.submatches&&O.data.submatches.length>0){let T=O.data.submatches[0];U.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:q})}}else if(O.type==="context"&&U.length>0){let D=U[U.length-1],q=O.data.line_number===D.line?">":" ";D.context.push(`${q} ${O.data.line_number}: ${O.data.lines?.text??O.data.line?.text??""}`)}}G(U.length>0?U:null)}catch{G(null)}return}G(null)}),Y.on("error",()=>{G(null)})})}function FN($,Z,Q,J){let W=$.split("/"),X=W[W.length-1]??"";if(W.length-1>J)return!1;for(let V=0;V<W.length-1;V++)if(Z.has(W[V]??""))return!1;let Y=aZ.posix.extname(X).slice(1).toLowerCase();return Q.has(Y)||!Y&&!X.startsWith(".")}function i4($={}){let{includeExtensions:Z=BN,excludeDirs:Q=HN,maxResults:J=100,contextLines:W=2,maxDepth:X=20}=$,j=new Set(Q),Y=new Set(Z.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let K=await KN(),G=null;if(K)G=await GN(V,B,J,W,5000,H.signal);if(G){let D=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${V}`,""];for(let q of G)D.push(`${q.file}:${q.line}:${q.column}`),D.push(...q.context),D.push("");if(G.length>=J)D.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return wH(D.join(`
|
|
182
|
+
`))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let U=[],_=0,L=await e1(B);for(let D of L){if(H.signal?.aborted)throw Error("Search operation aborted");if(!FN(D,j,Y,X))continue;if(U.length>=J)break;_++;let q=aZ.join(B,D);try{let z=(await SH.readFile(q,"utf-8")).split(`
|
|
183
183
|
`);for(let A=0;A<z.length;A++){let R=z[A];F.lastIndex=0;let N=F.exec(R);while(N!==null){if(U.length>=J)break;let S=Math.max(0,A-W),y=Math.min(z.length-1,A+W),s=[];for(let c=S;c<=y;c++){let b=c===A?">":" ";s.push(`${b} ${c+1}: ${z[c]}`)}if(U.push({file:D,line:A+1,column:N.index+1,match:N[0],context:s}),N.index===F.lastIndex)F.lastIndex++;N=F.exec(R)}}}catch{}}if(U.length===0)return`No results found for pattern: ${V}
|
|
184
184
|
Searched ${_} files.`;let O=[`Found ${U.length} result${U.length===1?"":"s"} for pattern: ${V}`,`Searched ${_} files.`,""];for(let D of U)O.push(`${D.file}:${D.line}:${D.column}`),O.push(...D.context),O.push("");if(U.length>=J)O.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return wH(O.join(`
|
|
185
185
|
`))}}function wH($){if($.length<=u8)return $;let Z=Math.ceil(u8/2),Q=Math.max(1,u8-Z);return`${$.slice(0,Z)}
|
|
@@ -190,7 +190,7 @@ Searched ${_} files.`;let O=[`Found ${U.length} result${U.length===1?"":"s"} for
|
|
|
190
190
|
|
|
191
191
|
`).trim()}function r4($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:J="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:X=!0}=$;return async(j,Y,V)=>{let B;try{B=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,K=setTimeout(()=>H.abort(),Z),G;if(V.signal)G=()=>H.abort(),V.signal.addEventListener("abort",G);try{let F=await fetch(j,{method:"GET",headers:{"User-Agent":J,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...W},redirect:X?"follow":"manual",signal:H.signal});if(clearTimeout(K),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let U=F.headers.get("content-type")||"",_=F.body?.getReader();if(!_)throw Error("Failed to read response body");let L=[],O=0;while(!0){let{done:R,value:N}=await _.read();if(R)break;if(O+=N.length,O>Q)throw _.cancel(),Error(`Response too large: exceeded ${Q} bytes`);L.push(N)}let D=new Uint8Array(O),q=0;for(let R of L)D.set(R,q),q+=R.length;let T=new TextDecoder("utf-8").decode(D),z;if(U.includes("text/html")||U.includes("application/xhtml"))z=UN(T);else if(U.includes("application/json"))try{let R=JSON.parse(T);z=JSON.stringify(R,null,2)}catch{z=T}else z=T;let A=[`URL: ${j}`,`Content-Type: ${U}`,`Size: ${O} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)A.push(`
|
|
192
192
|
[Content truncated: showing first 50000 of ${z.length} characters]`);return A.push("","--- Analysis Request ---",`Prompt: ${Y}`),A.join(`
|
|
193
|
-
`)}catch(F){if(clearTimeout(K),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&G)V.signal.removeEventListener("abort",G)}}}function n4($={}){return M2($)}function i8($={}){return{readFile:l4($.fileRead),search:i4($.search),bash:n4($.bash),webFetch:r4($.webFetch),applyPatch:w2($.applyPatch),editor:P2($.editor)}}var DN={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},r8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function bH($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((J)=>Q.includes(J.toLowerCase()))}function _N($,Z,Q,J){if($.mode&&$.mode!=="any"&&$.mode!==J)return!1;return bH(Z,$.providerIdIncludes)&&bH(Q,$.modelIdIncludes)}function n8($,Z,Q,J){if(!J||J.length===0)return{};let W=new Map;for(let j of J){if(!_N(j,$,Z,Q))continue;for(let Y of j.disableTools??[])W.set(Y,!1);for(let Y of j.enableTools??[])W.set(Y,!0)}let X={};for(let[j,Y]of W.entries())X[DN[j]]=Y;return X}var Q1={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function $$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function o9($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let J of k$)Q[J]=Z;return Q}function s9($,Z){let Q=Q1[$],{enableSpawnAgent:J,enableAgentTeams:W,...X}=Q;return g$({...X,...Z})}import{createTool as lf,zodToJsonSchema as rf}from"@cline/shared";import{z as $W}from"zod";O1();import{createAgentRuntime as bf}from"@cline/agents";import{createContributionRegistry as yf,isLikelyAuthError as kf,mergeModelOptions as _K}from"@cline/shared";import{createGateway as xN,createHandlerAsync as gN,hasRegisteredHandler as vN,MODEL_COLLECTIONS_BY_PROVIDER_ID as mN,normalizeProviderId as cN}from"@cline/llms";import{EMPTY_CONTENT_TEXT as CN}from"@cline/shared";function wN($){let Z=SN($.content),Q=[],J=$.id??kN(),W=0,X=[],j=$.role==="user"&&typeof $.metadata?.userRunSpan==="number"&&Number.isInteger($.metadata.userRunSpan)&&$.metadata.userRunSpan>=0?$.metadata.userRunSpan:void 0,Y=!1,V=(K)=>{if(j===void 0)return $.metadata;if(K&&!Y)return Y=!0,$.metadata;return{...$.metadata,userRunSpan:0}},B=()=>{if(X.length===0)return;let K=W===0?J:`${J}_part_${W}`;W+=1,Q.push({id:K,role:$.role,content:X.map(bN),createdAt:$.ts??Date.now(),metadata:V(!0),modelInfo:$.modelInfo,metrics:oH($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:J,role:$.role,content:[{type:"text",text:CN}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:oH($.metrics)}),Q;let H=Z.length===1&&Z[0].type==="tool_result";for(let K of Z){if(K.type!=="tool_result"){X.push(K);continue}B();let G=`_tool_${K.tool_use_id}`;Q.push({id:H||J.endsWith(G)?J:`${J}${G}`,role:"tool",content:[tH(K)],createdAt:$.ts??Date.now(),metadata:V(!1)})}return B(),Q}function WZ($){return $.flatMap(wN)}function PN($){let Z=$.content.map(eH).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:yN($.metrics)}}function a8($){return $.map(PN)}function XZ($){let Z=[];for(let Q of $){let J=Q.content.map(eH).filter((j)=>j!==void 0),W=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(W==="user"&&J.length>0&&J.every((j)=>j.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((j)=>j.type==="tool_result")){X.content.push(...J);continue}Z.push({role:W,content:J})}return Z}function SN($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function bN($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return tH($)}}function tH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function eH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function oH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function yN($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var sH=0;function kN(){return sH+=1,`msg_${Date.now().toString(36)}_${sH.toString(36)}`}function IN($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:hN($),error:$.error}];default:return[]}}function hN($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function $K($){return{async*stream(Z){let Q=!1,J=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(Z.signal);let X=XZ(Z.messages),j=Z.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of W.createMessage(Z.systemPrompt??"",X,j))for(let V of IN(Y)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")J=!0;yield V}if(!Q)yield{type:"finish",reason:J?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function uN($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function dN($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function pN($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(dN($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return uN(Z)}function lN($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function uJ($){let Z=$.providerConfig,Q=Z?.knownModels?Z.knownModels:$.knownModels??mN[$.providerId]?.models??void 0,J=lN(Z?.maxInputTokens),W=Z?.modelInfo&&Z.modelInfo.id===$.modelId?Z.modelInfo:void 0;if(J===void 0&&!W)return Q;return{...Q??{},[$.modelId]:{...Q?.[$.modelId],...J!==void 0?{contextWindow:J,maxInputTokens:J}:{},...W,id:$.modelId}}}function iN($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function rN($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:iN(Z.capabilities),reasoningOptions:Z.reasoningOptions,metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function ZK($,Z,Q){let J=$.providerConfig,W=J?.providerId===$.providerId?J:void 0,X={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:uJ($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(vN(cN(X.providerId)))return $K(()=>gN(X));return xN({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,timeoutMs:X.timeoutMs,fetch:X.fetch,options:pN(X),models:X.knownModels?Object.entries(X.knownModels).map(([j,Y])=>rN(j,Y)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens,temperature:X.temperature})}q0();import{createMediaBudgetState as nN,IMAGE_OMITTED_PLACEHOLDER as QK,normalizeUserInput as JK,resolveMediaBudget as aN,validateAndReserveImageMedia as oN}from"@cline/shared";var sN=8000,tN=50000,eN=6000000,$f=200000,Zf=12000,Qf=65536,t4=2000,WK=40000,Jf=8,dJ={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Wf=new Set(["read","read_files"]),y2="[outdated - see the latest file content]",XK="Tool execution was interrupted before a result was produced.",jK=($)=>`
|
|
193
|
+
`)}catch(F){if(clearTimeout(K),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&G)V.signal.removeEventListener("abort",G)}}}function n4($={}){return M2($)}function i8($={}){return{readFile:l4($.fileRead),search:i4($.search),bash:n4($.bash),webFetch:r4($.webFetch),applyPatch:w2($.applyPatch),editor:P2($.editor)}}var DN={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},r8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function bH($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((J)=>Q.includes(J.toLowerCase()))}function _N($,Z,Q,J){if($.mode&&$.mode!=="any"&&$.mode!==J)return!1;return bH(Z,$.providerIdIncludes)&&bH(Q,$.modelIdIncludes)}function n8($,Z,Q,J){if(!J||J.length===0)return{};let W=new Map;for(let j of J){if(!_N(j,$,Z,Q))continue;for(let Y of j.disableTools??[])W.set(Y,!1);for(let Y of j.enableTools??[])W.set(Y,!0)}let X={};for(let[j,Y]of W.entries())X[DN[j]]=Y;return X}var Q1={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function $$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function oZ($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let J of k$)Q[J]=Z;return Q}function sZ($,Z){let Q=Q1[$],{enableSpawnAgent:J,enableAgentTeams:W,...X}=Q;return g$({...X,...Z})}import{createTool as lf,zodToJsonSchema as rf}from"@cline/shared";import{z as $W}from"zod";O1();import{createAgentRuntime as bf}from"@cline/agents";import{createContributionRegistry as yf,isLikelyAuthError as kf,mergeModelOptions as _K}from"@cline/shared";import{createGateway as xN,createHandlerAsync as gN,hasRegisteredHandler as vN,MODEL_COLLECTIONS_BY_PROVIDER_ID as mN,normalizeProviderId as cN}from"@cline/llms";import{EMPTY_CONTENT_TEXT as CN}from"@cline/shared";function wN($){let Z=SN($.content),Q=[],J=$.id??kN(),W=0,X=[],j=$.role==="user"&&typeof $.metadata?.userRunSpan==="number"&&Number.isInteger($.metadata.userRunSpan)&&$.metadata.userRunSpan>=0?$.metadata.userRunSpan:void 0,Y=!1,V=(K)=>{if(j===void 0)return $.metadata;if(K&&!Y)return Y=!0,$.metadata;return{...$.metadata,userRunSpan:0}},B=()=>{if(X.length===0)return;let K=W===0?J:`${J}_part_${W}`;W+=1,Q.push({id:K,role:$.role,content:X.map(bN),createdAt:$.ts??Date.now(),metadata:V(!0),modelInfo:$.modelInfo,metrics:oH($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:J,role:$.role,content:[{type:"text",text:CN}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:oH($.metrics)}),Q;let H=Z.length===1&&Z[0].type==="tool_result";for(let K of Z){if(K.type!=="tool_result"){X.push(K);continue}B();let G=`_tool_${K.tool_use_id}`;Q.push({id:H||J.endsWith(G)?J:`${J}${G}`,role:"tool",content:[tH(K)],createdAt:$.ts??Date.now(),metadata:V(!1)})}return B(),Q}function WQ($){return $.flatMap(wN)}function PN($){let Z=$.content.map(eH).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:yN($.metrics)}}function a8($){return $.map(PN)}function XQ($){let Z=[];for(let Q of $){let J=Q.content.map(eH).filter((j)=>j!==void 0),W=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(W==="user"&&J.length>0&&J.every((j)=>j.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((j)=>j.type==="tool_result")){X.content.push(...J);continue}Z.push({role:W,content:J})}return Z}function SN($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function bN($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return tH($)}}function tH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function eH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function oH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function yN($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var sH=0;function kN(){return sH+=1,`msg_${Date.now().toString(36)}_${sH.toString(36)}`}function IN($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:hN($),error:$.error}];default:return[]}}function hN($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function $K($){return{async*stream(Z){let Q=!1,J=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(Z.signal);let X=XQ(Z.messages),j=Z.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of W.createMessage(Z.systemPrompt??"",X,j))for(let V of IN(Y)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")J=!0;yield V}if(!Q)yield{type:"finish",reason:J?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function uN($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function dN($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function pN($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(dN($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return uN(Z)}function lN($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function uJ($){let Z=$.providerConfig,Q=Z?.knownModels?Z.knownModels:$.knownModels??mN[$.providerId]?.models??void 0,J=lN(Z?.maxInputTokens),W=Z?.modelInfo&&Z.modelInfo.id===$.modelId?Z.modelInfo:void 0;if(J===void 0&&!W)return Q;return{...Q??{},[$.modelId]:{...Q?.[$.modelId],...J!==void 0?{contextWindow:J,maxInputTokens:J}:{},...W,id:$.modelId}}}function iN($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function rN($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:iN(Z.capabilities),reasoningOptions:Z.reasoningOptions,metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function ZK($,Z,Q){let J=$.providerConfig,W=J?.providerId===$.providerId?J:void 0,X={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:uJ($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(vN(cN(X.providerId)))return $K(()=>gN(X));return xN({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,timeoutMs:X.timeoutMs,fetch:X.fetch,options:pN(X),models:X.knownModels?Object.entries(X.knownModels).map(([j,Y])=>rN(j,Y)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens,temperature:X.temperature})}q0();import{createMediaBudgetState as nN,IMAGE_OMITTED_PLACEHOLDER as QK,normalizeUserInput as JK,resolveMediaBudget as aN,validateAndReserveImageMedia as oN}from"@cline/shared";var sN=8000,tN=50000,eN=6000000,$f=200000,Zf=12000,Qf=65536,t4=2000,WK=40000,Jf=8,dJ={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Wf=new Set(["read","read_files"]),y2="[outdated - see the latest file content]",XK="Tool execution was interrupted before a result was produced.",jK=($)=>`
|
|
194
194
|
|
|
195
195
|
...[truncated ${$} chars]...
|
|
196
196
|
|
|
@@ -210,19 +210,19 @@ Searched ${_} files.`;let O=[`Found ${U.length} result${U.length===1?"":"s"} for
|
|
|
210
210
|
|
|
211
211
|
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
212
212
|
|
|
213
|
-
`;function HK($=process.env){return{maxToolResultChars:BK($[dJ.maxToolResultChars]),maxTotalTextBytes:BK($[dJ.maxTotalTextBytes]),minOutdatedRewriteBytes:Vf($[dJ.minOutdatedRewriteBytes])}}class lJ{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=s4($.maxToolResultChars,sN),this.maxFileContentChars=s4($.maxFileContentChars,tN),this.maxTotalTextBytes=s4($.maxTotalTextBytes,eN),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=s4($.maxAssistantTextChars,$f),this.maxAssistantToolMarkupChars=s4($.maxAssistantToolMarkupChars,Zf),this.minOutdatedRewriteBytes=Bf($.minOutdatedRewriteBytes,Qf)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let Y=JK(W.content);if(Y!==W.content)return{...W,content:Y}}if(W.role==="assistant"&&typeof W.content==="string"){let Y=this.truncateAssistantText(W.content);if(Y!==W.content)return{...W,content:Y}}return W}let X=!1,j=W.content.map((Y)=>{let V=this.transformBlock(Y,W.role);if(V!==Y)X=!0;return V});return X?{...W,content:j}:W}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let W=JK($.text);if(W!==$.text)return{...$,text:W};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=o8($.content,this.maxFileContentChars,jK);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.committedOutdatedRewrites.get($.tool_use_id);if(W&&W.size>0){let j=this.getReadLocators($).filter((Y)=>W.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)J=this.replaceOutdatedReadContent(J,j)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let W=0;W<J.content.length;W++){let X=J.content[W];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${W}`);else if(X.type==="tool_use"){let j=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(X.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(X.id,Y)}}else if(X.type==="tool_result"){let j=this.resolveToolName(X);if(!this.isReadTool(j)||X.is_error===!0)continue;let Y=this.getReadLocators(X);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let j=this.resolveToolName(X);if(!this.isReadTool(j))continue;Q.add(X.tool_use_id);let Y=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let K of this.getReadLocators(X)){let G=this.toReadLocatorKey(K);if(!this.isOutdatedReadLocator(K,X.tool_use_id))continue;if(B.add(G),!Y?.has(G))V.add(G)}if(Y){for(let K of Y)if(!B.has(K))Y.delete(K);if(Y.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let K of V)H.add(K);J+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let W of this.committedOutdatedRewrites.keys())if(!Q.has(W))this.committedOutdatedRewrites.delete(W);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[W,X]of Z){let j=this.committedOutdatedRewrites.get(W);if(!j)j=new Set,this.committedOutdatedRewrites.set(W,j);for(let Y of X)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),W=(V)=>{let B;try{B=JSON.parse(V)}catch{return J||Q.length===0?Y0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],K=0;for(let G of H){let F=this.extractLocatorFromResultEntry(G);if(F&&Z.has(this.toReadLocatorKey(F)))K+=this.providerBoundEntryBytes(G)}return K};if(typeof $==="string")return W($);let X=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,X);let Y=0;for(let V of $)if(V.type==="text")Y+=W(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=Y0(V.data)}else if(m$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=Y0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return Y0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,W=!1,X=()=>{if(J.size===0)return;j(this.createMissingToolResultMessage(J)),J.clear(),W=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},W=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,J)),J.size>0)J.clear(),W=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},J);if(j(H),J.size>0)J.clear();W=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...Y,content:B}:Y;if(j(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,J)}continue}X(),j(Y)}return X(),W?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${XK} Tool: ${$}.`:XK}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let W of Z.files){let X=this.extractLocatorFromReadRequest(W);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let W of Z.file_paths)if(typeof W==="string"&&W.length>0)Q.push({path:W,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(m$(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let W=this.extractLocatorFromResultEntry(J);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),J=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??y2;let W=0;for(let X of $)if(X.type==="text")W+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!J.has(X.path))return X;return{...X,content:y2}}if(X.type==="image"){if(W===0)return X;return W-=1,{type:"text",text:y2}}if(m$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let j=this.replaceOutdatedInString(X.text,Q);if(j===null)return{...X,text:y2};return j===X.text?X:{...X,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],W=0;for(let X of J){if(!X||typeof X!=="object")continue;let j=X,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=y2;else if(typeof J.content==="string")J.content=y2;else J.result=y2;return J}isReadTool($){return!!$&&Wf.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(m$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;return W});return Z?Q:$}if($!==null&&typeof $==="object"){if(iJ($))return $;let Z=!1,Q={};for(let[J,W]of Object.entries($)){let X=this.truncateNestedStrings(W);if(X!==W)Z=!0;Q[J]=X}return Z?Q:$}return $}truncateMiddle($){return o8($,this.maxToolResultChars,jK)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return o8($,this.maxAssistantToolMarkupChars,jf);return o8($,this.maxAssistantTextChars,Xf)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(Yf))if(Z+=1,Z>=Jf)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((X)=>Kf(X))}}),J=this.collectTruncationCandidates(Q);for(let W of J){if(Z<=this.maxTotalTextBytes)break;let X=W.byteLength;if(X<=W.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(W.minBytes,X-j),V=Hf(W.get(),Y,W.makeMarker);W.set(V),Z-=X-Y0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=Y0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=Y0(J.text);else if(J.type==="thinking")Z+=Y0(J.thinking);else if(J.type==="file")Z+=Y0(J.content);else if(J.type==="tool_use")Z+=jZ(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=Y0(J.content);else for(let W of J.content)if(W.type==="text")Z+=Y0(W.text);else if(W.type==="file")Z+=Y0(W.content);else if(m$(W))Z+=jZ(W)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:Y0(J.content),minBytes:WK,makeMarker:YK,get:()=>J.content,set:(W)=>{J.content=W}});continue}if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type==="tool_use"){YZ(W.input,Q);continue}if(J.role==="assistant"&&W.type==="text"){Z.push({byteLength:Y0(W.text),minBytes:WK,makeMarker:YK,get:()=>W.text,set:(X)=>{W.text=X}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){Z.push({byteLength:Y0(W.content),minBytes:t4,makeMarker:e4,get:()=>W.content,set:(X)=>{W.content=X}});continue}for(let X of W.content)if(X.type==="text")Z.push({byteLength:Y0(X.text),minBytes:t4,makeMarker:e4,get:()=>X.text,set:(j)=>{X.text=j}});else if(X.type==="file")Z.push({byteLength:Y0(X.content),minBytes:t4,makeMarker:e4,get:()=>X.content,set:(j)=>{X.content=j}});else if(m$(X))YZ(X,Z)}}return Z.sort((J,W)=>W.byteLength-J.byteLength),Q.sort((J,W)=>W.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=nN(),J=!1,W=$.map((X)=>{if(!Array.isArray(X.content))return X;let j=!1,Y=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)j=!0;return B});if(!j)return X;return J=!0,{...X,content:Y}});return J?W:$}resolveMediaBudget(){return aN(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(pJ($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,W=$.content.map((X)=>{let j=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(j!==X)J=!0;return j});return J?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(pJ($))return this.limitImageContent($,Z,Q);if(m$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(pJ($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,W=$.map((X)=>{let j=this.limitNestedMedia(X,Z,Q);if(j!==X)J=!0;return j});return J?W:$}if($!==null&&typeof $==="object"){let J=!1,W={};for(let[X,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)J=!0;W[X]=Y}return J?W:$}return $}limitImageContent($,Z,Q){if(!KK($))return{type:"text",text:QK};let J=oN($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:QK};return{...$,data:J.base64,mediaType:J.mediaType}}}var VK=String.raw`[\|\uFF5C]`,Yf=new RegExp(String.raw`<\s*(?:${VK}\s*)?DSML\s*(?:${VK}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Y0($){return Buffer.byteLength($,"utf8")}function BK($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Vf($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function s4($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Bf($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function o8($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),W=Math.max(0,Math.floor((Z-J.length)/2)),X=Math.max(0,$.length-W*2),j=Q(X),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${j}${B}`}function Hf($,Z,Q){if(Y0($)<=Z)return $;let J=0,W=$.length,X=o8($,0,Q);while(J<=W){let j=J+W>>>1,Y=o8($,j,Q);if(Y0(Y)<=Z)X=Y,J=j+1;else W=j-1}return X}function Kf($){if($.type==="tool_use")return{...$,input:VZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>m$(Z)?VZ(Z):{...Z})}}function m$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function pJ($){return $!==null&&typeof $==="object"&&$.type==="image"}function KK($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function iJ($){return KK($)}function jZ($){if(typeof $==="string")return Y0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=jZ(Q);return Z}if($!==null&&typeof $==="object"){if(iJ($))return 0;let Z=0;for(let Q of Object.values($))Z+=jZ(Q);return Z}return 0}function YZ($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:Y0(Q),minBytes:t4,makeMarker:e4,get:()=>$[J],set:(W)=>{$[J]=W}});else YZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(iJ($))return;let Q=$;for(let J of Object.keys(Q)){let W=Q[J];if(typeof W==="string")Z.push({byteLength:Y0(W),minBytes:t4,makeMarker:e4,get:()=>Q[J],set:(X)=>{Q[J]=X}});else YZ(W,Z)}}}function VZ($){if(Array.isArray($))return $.map(VZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=VZ(J);return Z}return $}function rJ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class nJ{messages=[];conversationId=rJ();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=rJ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=rJ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function GK($){let{agentConfig:Z}=$,Q=Gf(Z),J=Ff(Z),W=$.hooks,X=Uf(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function Gf($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function Ff($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function Uf($){if($===void 0)return;return $>=2?"parallel":"sequential"}var FK={};w(FK,{normalizeConnectionUpdate:()=>k2,buildConnectionUpdate:()=>aJ});function aJ($){let Z={};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function k2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function Df(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function _f($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function oJ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(oJ);let Z={};for(let Q of Object.keys($).sort())Z[Q]=oJ($[Q]);return Z}function Lf($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(oJ($))}catch{return String($)}}function Af($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var UK={softThreshold:3,hardThreshold:5};class sJ{config;state=Df();constructor($){this.config={softThreshold:$?.softThreshold??UK.softThreshold,hardThreshold:$?.hardThreshold??UK.hardThreshold}}inspect($){let Z=Lf($.input),Q=Af(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){_f(this.state)}}class tJ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let W={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(W);let X=await qf(W,this.options.onLimitReached);if(X.action==="continue"){let j=X.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:X.reason?.trim()||void 0,message:Of({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:X.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function Of($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function qf($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function zf($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function Tf($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function Nf($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function ff($){return $.content.find((Z)=>Z.type==="tool-result")}function Rf($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Mf($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class eJ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:zf($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=Tf($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=Nf($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=ff($.message),W=J?.output,X=Mf(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,Y=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:Rf($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function If($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function hf($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function xf($,Z){let Q=$.trim(),J=Z.map((W)=>W.trim()).filter(Boolean).join(`
|
|
213
|
+
`;function HK($=process.env){return{maxToolResultChars:BK($[dJ.maxToolResultChars]),maxTotalTextBytes:BK($[dJ.maxTotalTextBytes]),minOutdatedRewriteBytes:Vf($[dJ.minOutdatedRewriteBytes])}}class lJ{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=s4($.maxToolResultChars,sN),this.maxFileContentChars=s4($.maxFileContentChars,tN),this.maxTotalTextBytes=s4($.maxTotalTextBytes,eN),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=s4($.maxAssistantTextChars,$f),this.maxAssistantToolMarkupChars=s4($.maxAssistantToolMarkupChars,Zf),this.minOutdatedRewriteBytes=Bf($.minOutdatedRewriteBytes,Qf)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let Y=JK(W.content);if(Y!==W.content)return{...W,content:Y}}if(W.role==="assistant"&&typeof W.content==="string"){let Y=this.truncateAssistantText(W.content);if(Y!==W.content)return{...W,content:Y}}return W}let X=!1,j=W.content.map((Y)=>{let V=this.transformBlock(Y,W.role);if(V!==Y)X=!0;return V});return X?{...W,content:j}:W}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let W=JK($.text);if(W!==$.text)return{...$,text:W};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=o8($.content,this.maxFileContentChars,jK);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.committedOutdatedRewrites.get($.tool_use_id);if(W&&W.size>0){let j=this.getReadLocators($).filter((Y)=>W.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)J=this.replaceOutdatedReadContent(J,j)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let W=0;W<J.content.length;W++){let X=J.content[W];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${W}`);else if(X.type==="tool_use"){let j=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(X.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(X.id,Y)}}else if(X.type==="tool_result"){let j=this.resolveToolName(X);if(!this.isReadTool(j)||X.is_error===!0)continue;let Y=this.getReadLocators(X);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let j=this.resolveToolName(X);if(!this.isReadTool(j))continue;Q.add(X.tool_use_id);let Y=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let K of this.getReadLocators(X)){let G=this.toReadLocatorKey(K);if(!this.isOutdatedReadLocator(K,X.tool_use_id))continue;if(B.add(G),!Y?.has(G))V.add(G)}if(Y){for(let K of Y)if(!B.has(K))Y.delete(K);if(Y.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let K of V)H.add(K);J+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let W of this.committedOutdatedRewrites.keys())if(!Q.has(W))this.committedOutdatedRewrites.delete(W);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[W,X]of Z){let j=this.committedOutdatedRewrites.get(W);if(!j)j=new Set,this.committedOutdatedRewrites.set(W,j);for(let Y of X)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),W=(V)=>{let B;try{B=JSON.parse(V)}catch{return J||Q.length===0?Y0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],K=0;for(let G of H){let F=this.extractLocatorFromResultEntry(G);if(F&&Z.has(this.toReadLocatorKey(F)))K+=this.providerBoundEntryBytes(G)}return K};if(typeof $==="string")return W($);let X=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,X);let Y=0;for(let V of $)if(V.type==="text")Y+=W(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=Y0(V.data)}else if(m$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=Y0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return Y0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,W=!1,X=()=>{if(J.size===0)return;j(this.createMissingToolResultMessage(J)),J.clear(),W=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},W=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,J)),J.size>0)J.clear(),W=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},J);if(j(H),J.size>0)J.clear();W=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...Y,content:B}:Y;if(j(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,J)}continue}X(),j(Y)}return X(),W?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${XK} Tool: ${$}.`:XK}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let W of Z.files){let X=this.extractLocatorFromReadRequest(W);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let W of Z.file_paths)if(typeof W==="string"&&W.length>0)Q.push({path:W,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(m$(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let W=this.extractLocatorFromResultEntry(J);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),J=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??y2;let W=0;for(let X of $)if(X.type==="text")W+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!J.has(X.path))return X;return{...X,content:y2}}if(X.type==="image"){if(W===0)return X;return W-=1,{type:"text",text:y2}}if(m$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let j=this.replaceOutdatedInString(X.text,Q);if(j===null)return{...X,text:y2};return j===X.text?X:{...X,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],W=0;for(let X of J){if(!X||typeof X!=="object")continue;let j=X,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=y2;else if(typeof J.content==="string")J.content=y2;else J.result=y2;return J}isReadTool($){return!!$&&Wf.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(m$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;return W});return Z?Q:$}if($!==null&&typeof $==="object"){if(iJ($))return $;let Z=!1,Q={};for(let[J,W]of Object.entries($)){let X=this.truncateNestedStrings(W);if(X!==W)Z=!0;Q[J]=X}return Z?Q:$}return $}truncateMiddle($){return o8($,this.maxToolResultChars,jK)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return o8($,this.maxAssistantToolMarkupChars,jf);return o8($,this.maxAssistantTextChars,Xf)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(Yf))if(Z+=1,Z>=Jf)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((X)=>Kf(X))}}),J=this.collectTruncationCandidates(Q);for(let W of J){if(Z<=this.maxTotalTextBytes)break;let X=W.byteLength;if(X<=W.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(W.minBytes,X-j),V=Hf(W.get(),Y,W.makeMarker);W.set(V),Z-=X-Y0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=Y0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=Y0(J.text);else if(J.type==="thinking")Z+=Y0(J.thinking);else if(J.type==="file")Z+=Y0(J.content);else if(J.type==="tool_use")Z+=jQ(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=Y0(J.content);else for(let W of J.content)if(W.type==="text")Z+=Y0(W.text);else if(W.type==="file")Z+=Y0(W.content);else if(m$(W))Z+=jQ(W)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:Y0(J.content),minBytes:WK,makeMarker:YK,get:()=>J.content,set:(W)=>{J.content=W}});continue}if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type==="tool_use"){YQ(W.input,Q);continue}if(J.role==="assistant"&&W.type==="text"){Z.push({byteLength:Y0(W.text),minBytes:WK,makeMarker:YK,get:()=>W.text,set:(X)=>{W.text=X}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){Z.push({byteLength:Y0(W.content),minBytes:t4,makeMarker:e4,get:()=>W.content,set:(X)=>{W.content=X}});continue}for(let X of W.content)if(X.type==="text")Z.push({byteLength:Y0(X.text),minBytes:t4,makeMarker:e4,get:()=>X.text,set:(j)=>{X.text=j}});else if(X.type==="file")Z.push({byteLength:Y0(X.content),minBytes:t4,makeMarker:e4,get:()=>X.content,set:(j)=>{X.content=j}});else if(m$(X))YQ(X,Z)}}return Z.sort((J,W)=>W.byteLength-J.byteLength),Q.sort((J,W)=>W.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=nN(),J=!1,W=$.map((X)=>{if(!Array.isArray(X.content))return X;let j=!1,Y=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)j=!0;return B});if(!j)return X;return J=!0,{...X,content:Y}});return J?W:$}resolveMediaBudget(){return aN(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(pJ($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,W=$.content.map((X)=>{let j=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(j!==X)J=!0;return j});return J?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(pJ($))return this.limitImageContent($,Z,Q);if(m$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(pJ($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,W=$.map((X)=>{let j=this.limitNestedMedia(X,Z,Q);if(j!==X)J=!0;return j});return J?W:$}if($!==null&&typeof $==="object"){let J=!1,W={};for(let[X,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)J=!0;W[X]=Y}return J?W:$}return $}limitImageContent($,Z,Q){if(!KK($))return{type:"text",text:QK};let J=oN($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:QK};return{...$,data:J.base64,mediaType:J.mediaType}}}var VK=String.raw`[\|\uFF5C]`,Yf=new RegExp(String.raw`<\s*(?:${VK}\s*)?DSML\s*(?:${VK}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Y0($){return Buffer.byteLength($,"utf8")}function BK($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Vf($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function s4($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Bf($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function o8($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),W=Math.max(0,Math.floor((Z-J.length)/2)),X=Math.max(0,$.length-W*2),j=Q(X),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${j}${B}`}function Hf($,Z,Q){if(Y0($)<=Z)return $;let J=0,W=$.length,X=o8($,0,Q);while(J<=W){let j=J+W>>>1,Y=o8($,j,Q);if(Y0(Y)<=Z)X=Y,J=j+1;else W=j-1}return X}function Kf($){if($.type==="tool_use")return{...$,input:VQ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>m$(Z)?VQ(Z):{...Z})}}function m$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function pJ($){return $!==null&&typeof $==="object"&&$.type==="image"}function KK($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function iJ($){return KK($)}function jQ($){if(typeof $==="string")return Y0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=jQ(Q);return Z}if($!==null&&typeof $==="object"){if(iJ($))return 0;let Z=0;for(let Q of Object.values($))Z+=jQ(Q);return Z}return 0}function YQ($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:Y0(Q),minBytes:t4,makeMarker:e4,get:()=>$[J],set:(W)=>{$[J]=W}});else YQ(Q,Z)});return}if($!==null&&typeof $==="object"){if(iJ($))return;let Q=$;for(let J of Object.keys(Q)){let W=Q[J];if(typeof W==="string")Z.push({byteLength:Y0(W),minBytes:t4,makeMarker:e4,get:()=>Q[J],set:(X)=>{Q[J]=X}});else YQ(W,Z)}}}function VQ($){if(Array.isArray($))return $.map(VQ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=VQ(J);return Z}return $}function rJ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class nJ{messages=[];conversationId=rJ();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=rJ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=rJ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function GK($){let{agentConfig:Z}=$,Q=Gf(Z),J=Ff(Z),W=$.hooks,X=Uf(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function Gf($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function Ff($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function Uf($){if($===void 0)return;return $>=2?"parallel":"sequential"}var FK={};w(FK,{normalizeConnectionUpdate:()=>k2,buildConnectionUpdate:()=>aJ});function aJ($){let Z={};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function k2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function Df(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function _f($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function oJ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(oJ);let Z={};for(let Q of Object.keys($).sort())Z[Q]=oJ($[Q]);return Z}function Lf($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(oJ($))}catch{return String($)}}function Af($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var UK={softThreshold:3,hardThreshold:5};class sJ{config;state=Df();constructor($){this.config={softThreshold:$?.softThreshold??UK.softThreshold,hardThreshold:$?.hardThreshold??UK.hardThreshold}}inspect($){let Z=Lf($.input),Q=Af(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){_f(this.state)}}class tJ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let W={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(W);let X=await qf(W,this.options.onLimitReached);if(X.action==="continue"){let j=X.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:X.reason?.trim()||void 0,message:Of({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:X.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function Of($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function qf($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function zf($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function Tf($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function Nf($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function ff($){return $.content.find((Z)=>Z.type==="tool-result")}function Rf($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Mf($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class eJ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:zf($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=Tf($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=Nf($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=ff($.message),W=J?.output,X=Mf(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,Y=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:Rf($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function If($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function hf($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function xf($,Z){let Q=$.trim(),J=Z.map((W)=>W.trim()).filter(Boolean).join(`
|
|
214
214
|
|
|
215
215
|
`);if(Q&&J)return`${Q}
|
|
216
216
|
|
|
217
|
-
${J}`;return Q||J}function gf($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function vf($,Z){return $.filter((Q)=>gf(Q.name,Z))}function mf($,Z){return Z$(vf($,Z))}function cf($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let J of Z){let W=await J.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let J of Z)await J.afterRun?.(Q)},beforeModel:async(Q)=>{let J=Q.request,W;for(let X of Z){let j=await X.beforeModel?.({...Q,request:J});if(!j)continue;if(j.stop)return j;W={...W,...j,options:_K(W?.options,j.options)},J={...J,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:_K(J.options,j.options)}:{}}}return W},afterModel:async(Q)=>{for(let J of Z){let W=await J.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let J=Q.input,W;for(let X of Z){let j=await X.beforeTool?.({...Q,input:J});if(!j)continue;if(j.stop||j.skip)return j;if(W={...W,...j},Object.hasOwn(j,"input"))J=j.input}return W},afterTool:async(Q)=>{let J=Q.result,W;for(let X of Z){let j=await X.afterTool?.({...Q,result:J});if(!j)continue;if(j.stop)return j;if(W={...W,...j},j.result)J=j.result}return W},onEvent:async(Q)=>{for(let J of Z)await J.onEvent?.(Q)}}}class c${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 eJ;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??bf,this.conversation=new nJ($.initialMessages),this.messageBuilder=new lJ(HK()),this.contributionRegistry=yf({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 tJ({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(X)=>{A9(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:X.reason,consecutiveMistakes:X.consecutiveMistakes,maxConsecutiveMistakes:X.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(X)=>this.emitLegacyEvent(X),log:(X,j,Y)=>uf(this.logger,X,j,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let J=$.execution?.loopDetection;this.loopDetectionDisabled=J===!1;let W=J===!1||J===void 0?void 0:J;this.loopTracker=new sJ(W)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((J)=>J.name)),Q=[...this.config.tools];for(let J of $)if(!Z.has(J.name))Q.push(J),Z.add(J.name);this.config={...this.config,tools:Q}}updateConnection($){let Z=k2($),Q={...this.config};if(Z.providerId!==void 0)Q.providerId=Z.providerId;if(Z.modelId!==void 0)Q.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.headers=Z.headers;if(Z.providerConfig!==void 0)Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.reasoningEffort=void 0,Q.thinkingBudgetTokens=void 0}this.config=Q}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await hf(Z);if(Q)$.push(Q)}return xf(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunWithAuthRetry($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunWithAuthRetry($){let Z=await this.executeRunInternal($);if(Z.finishReason!=="error"||!this.config.onAuthError||!kf(Z.text))return Z;if(!await this.config.onAuthError().catch(()=>!1))return Z;let J=await this.executeRunInternal({isContinue:!0});return PV(this.telemetry,this.config.providerId,{recovered:J.finishReason!=="error"}),J}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let D=await pf(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let J=await this.composeSystemPrompt(),W=ZK(this.config,this.logger,this.telemetry),X=new Map;for(let D of this.contributionRegistry.getRegisteredTools())X.set(D.name,D);let j=mf([...X.values()],this.config.toolPolicies),Y=new Map;for(let D of j)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=LK(this.config),H=Array.from(Y.values()),K=WZ(this.conversation.getMessages()),G=GK({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:K,systemPrompt:J}),F=this.createAgentRuntimeImpl(G);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let U=F.subscribe((D)=>{this.handleRuntimeEvent(D)}),_,L;try{if($.isContinue)_=await F.continue(void 0);else _=await F.run("")}catch(D){L=D instanceof Error?D:Error(String(D))}finally{U();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(_&&_.messages.length>0){let D=a8(_.messages);this.conversation.replaceMessages(D)}let O=new Date;try{return this.buildLegacyResult({runResult:_,thrownError:L,startedAt:Z,endedAt:O})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=cf([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let J=Q?.messages??Z.request.messages,W=await this.prepareMessagesForModelRequest(J);return{...Q,messages:W}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(J)=>{let W=a8(J.messages),X=await this.prepareProviderMessagesForApi(W),j=await Q({agentId:J.agentId,conversationId:J.conversationId??this.conversation.getConversationId(),parentAgentId:J.parentAgentId??null,iteration:J.iteration,messages:W,apiMessages:X,abortSignal:J.signal??new AbortController().signal,systemPrompt:J.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:J.emitStatusNotice});if(!j)return;return{...j.messages?{messages:WZ(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(XZ($));return WZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let J of Q)Z=await J.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,J=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((V)=>V.type==="tool-result"),X=W?.type==="tool-result"&&W.isError===!0,j=X?If(W?.type==="tool-result"?W.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:J,output:W?.type==="tool-result"?W.output:void 0,error:j,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(Y),X){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let J=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${J?`: ${J}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(a8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),J=a8(Z).filter((W)=>!W.id||!Q.has(W.id));if(J.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...J])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let J=this.loopTracker.inspect({name:$,input:Z});if(J.kind==="ok")return;if(J.kind==="soft"){if(J.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:J.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:J,endedAt:W}=$,X=W.getTime()-J.getTime(),j=Q?"error":df(Z),Y=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,B=Z?a8(Z.messages):this.conversation.getMessages(),H=LK(this.config);if(Q)throw Q;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:J,endedAt:W,durationMs:X}}}function uf($,Z,Q,J){if(!$)return;if(Z==="debug"){$.debug(Q,J);return}if(Z==="error"&&$.error){$.error(Q,J);return}let W=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...J,severity:W})}function df($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function pf($,Z,Q,J){let{buildInitialUserContent:W}=await Promise.resolve().then(() => DK);return W($,Z,Q,J)}function LK($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=uJ($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as AK}from"@cline/shared";function OK($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return AK({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
218
|
-
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function qK($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return AK({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function u$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,onAuthError:Z.onAuthError,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function I2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?OK($.prompt,Z):qK($.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 d$($){let Z=I2($),Q=new c$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var nf=$W.object({systemPrompt:$W.string().describe("System prompt defining the sub-agent's behavior"),task:$W.string().describe("Task for the sub-agent to complete")});function p$($){return lf({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:rf(nf),execute:async(Z,Q)=>{let J=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],W=d$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:J,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=W.getAgentId(),j=W.getConversationId(),Y=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z})}catch{}try{let V=await W.run(Z.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as z0,TEAM_AWAIT_TIMEOUT_MS as af,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as of,TEAM_RUN_TEXT_PREVIEW_LIMIT as sf,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as tf,TeamAttachOutcomeFragmentInputSchema as zK,TeamAwaitRunsInputSchema as TK,TeamBroadcastInputSchema as NK,TeamBroadcastToolResultSchema as ef,TeamCancelRunInputSchema as fK,TeamCancelRunToolResultSchema as $R,TeamCleanupInputSchema as RK,TeamCleanupToolResultSchema as ZR,TeamCreateOutcomeInputSchema as MK,TeamCreateOutcomeToolResultSchema as QR,TeamFinalizeOutcomeInputSchema as EK,TeamFinalizeOutcomeToolResultSchema as JR,TeamListOutcomesInputSchema as CK,TeamListRunsInputSchema as wK,TeamMailboxMessageToolResultSchema as WR,TeamMissionLogInputSchema as PK,TeamMissionLogToolResultSchema as XR,TeamOutcomeFragmentToolResultSchema as SK,TeamOutcomeToolResultSchema as jR,TeamReadMailboxInputSchema as bK,TeamReviewOutcomeFragmentInputSchema as yK,TeamRunTaskInputSchema as kK,TeamRunTaskToolResultSchema as ZW,TeamRunToolSummarySchema as QW,TeamSendMessageInputSchema as IK,TeamSendMessageToolResultSchema as YR,TeamShutdownTeammateInputSchema as hK,TeamSimpleAgentStatusToolResultSchema as xK,TeamSpawnTeammateInputSchema as gK,TeamStatusInputSchema as vK,TeamStatusToolResultSchema as VR,TeamTaskInputSchema as mK,TeamTaskToolResultSchema as Z5,validateWithZod as g,zodToJsonSchema as T0}from"@cline/shared";function cK($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function h2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function BR($){let Z=$.result;if(!Z)return;return{textPreview:cK(Z.text,sf),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 BZ($){return $?.toISOString()}function JW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:cK($.message,of),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:BZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:BZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:BZ($.heartbeatAt),lastProgressAt:BZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:BR($)}}function HR($){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 s8=["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 uK($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...x2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:I2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function t8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,J=x2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;uK({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),W.push(X.agentId)}return{tools:J,restoredFromPersistence:Q,restoredTeammates:W}}function x2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,J=$.includeManagementTools??!0,W=[];if(Q)W.push(z0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:T0(gK),execute:async(j)=>{let Y=g(gK,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(uK({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!J)$.onLeadToolsUnlocked?.(x2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return g(xK,{agentId:Y.agentId,status:"spawned"})}}));if(!J)return W;W.push(z0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:T0(hK),execute:async(j)=>{let Y=g(hK,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),g(xK,{agentId:Y.agentId,status:"stopped"})}})),W.push(z0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:T0(vK),execute:async(j)=>{return g(vK,j),g(VR,$.runtime.getSnapshot())}})),W.push(z0({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:T0(mK),execute:async(j)=>{let Y=g(mK,j);switch(Y.action){case"create":{let V=new Set(tf.create??[]),B=Object.entries(j).filter(([K,G])=>V.has(K)&&G!=null).map(([K])=>K),H=$.runtime.createTask({title:h2(Y.title,"title"),description:h2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return g(Z5,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return g(Z5,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(h2(Y.taskId,"taskId"),$.requesterId);return g(Z5,{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(h2(Y.taskId,"taskId"),$.requesterId,h2(Y.summary,"summary"));return g(Z5,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(h2(Y.taskId,"taskId"),$.requesterId,h2(Y.reason,"reason"));return g(Z5,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return W.push(z0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:T0(kK),execute:async(j)=>{let Y=g(kK,j);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return g(ZW,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(Y.agentId);if(V){let H=await V;return g(ZW,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>g(ZW,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(Y.agentId)});return X.set(Y.agentId,B),await B}})),W.push(z0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:T0(fK),execute:async(j)=>{let Y=g(fK,j),V=$.runtime.cancelRun(Y.runId,Y.reason);return g($R,{runId:V.id,status:V.status})}})),W.push(z0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:T0(wK),execute:async(j)=>g(QW.array(),$.runtime.listRuns(g(wK,j)).map(JW))})),W.push(z0({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:T0(TK),timeoutMs:af,execute:async(j)=>{let Y=g(TK,j);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return HR(H),g(QW,JW(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((K)=>`${K.id}:${K.status}${K.error?`(${K.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return g(QW.array(),V.map(JW))}})),W.push(z0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:T0(IK),execute:async(j)=>{let Y=g(IK,j),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return g(YR,{id:V.id,toAgentId:V.toAgentId})}})),W.push(z0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:T0(NK),execute:async(j)=>{let Y=g(NK,j),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return g(ef,{delivered:V.length})}})),W.push(z0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:T0(bK),execute:async(j)=>{let Y=g(bK,j);return g(WR.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),W.push(z0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:T0(PK),execute:async(j)=>{let Y=g(PK,j),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return g(XR,{id:V.id})}})),W.push(z0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:T0(RK),execute:async(j)=>{if(g(RK,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),g(ZR,{status:"cleaned"})}})),W.push(z0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:T0(MK),execute:async(j)=>{let Y=g(MK,j),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return g(QR,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),W.push(z0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:T0(zK),execute:async(j)=>{let Y=g(zK,j),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return g(SK,{fragmentId:V.id,status:V.status})}})),W.push(z0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:T0(yK),execute:async(j)=>{let Y=g(yK,j),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return g(SK,{fragmentId:V.id,status:V.status})}})),W.push(z0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:T0(EK),execute:async(j)=>{let Y=g(EK,j),V=$.runtime.finalizeOutcome(Y.outcomeId);return g(JR,{outcomeId:V.id,status:V.status})}})),W.push(z0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:T0(CK),execute:async(j)=>{return g(CK,j),g(jR.array(),$.runtime.listOutcomes())}})),W}function HZ($){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 dK($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var KR=[{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:p$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...s8]}],GR={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function FR($){return $==="plan"||$==="yolo"?$:"act"}function lK($){let Z=FR($.mode),Q=Q1[$$({mode:Z})],J=n8($.providerId??"",$.modelId??"",Z,r8);return{mode:Z,flags:{...Q,...J,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function pK($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=lK(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let J=GR[$];return J?Q[J]===!0:!1}function UR($,Z){if($.id==="editor"){let{flags:Q}=lK(Z),J=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:pK($.id,Z),headlessToolNames:[J?"apply_patch":"editor"]}}return{...$,defaultEnabled:pK($.id,Z)}}function g2($={}){return KR.map((Z)=>UR(Z,$))}function KZ($={}){return g2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function GZ($){if(!$.enabled)return new Set;let Z=g2($.availabilityContext),Q=new Set(Z.map((J)=>J.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((J)=>J.defaultEnabled).map((J)=>J.id));for(let J of $.allowlist)if(!Q.has(J))throw Error(`Unknown tool "${J}". Available tools: ${Z.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function Q5($,Z={}){return g2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function FZ($,Z={}){return Q5($,Z)}import{getDefaultShell as DR}from"@cline/shared";function v2($={}){let{executorOptions:Z={},executors:Q,...J}=$,W=J.shell??Z.bash?.shell??DR(process.platform),X={...Z,bash:{...Z.bash,shell:W}},j={...i8(X),...Q??{}};return g$({...J,shell:W,executors:j})}import{mkdirSync as zR,writeFileSync as TR}from"node:fs";import{dirname as NR}from"node:path";import{normalizeUserInput as fR,stripModeNotices as RR}from"@cline/shared";import{nanoid as MR}from"nanoid";var rK={};w(rK,{sanitizeSessionToken:()=>m2,parseTeamTaskSubSessionId:()=>$6,parseSubSessionId:()=>W5,makeTeamTaskSubSessionId:()=>J5,makeSubSessionId:()=>e8,deriveSubsessionStatus:()=>X5});import{nanoid as AR}from"nanoid";function m2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function e8($,Z){let Q=m2($),J=m2(Z),W=`${Q}__${J}`;return W.length>180?W.slice(0,180):W}function J5($,Z){let Q=m2($),J=m2(Z);return`${Q}__teamtask__${J}__${AR(6)}`}function $6($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+12),X=W.lastIndexOf("__");if(X<=0)return null;let j=W.slice(0,X),Y=W.slice(X+2);if(!J||!j||!Y)return null;return{rootSessionId:J,agentId:j,teamTaskId:Y}}function W5($){if($6($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+Z.length);if(!J||!W)return null;return{rootSessionId:J,agentId:W}}function X5($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as Q0}from"zod";var oK={};w(oK,{isTerminalSessionStatus:()=>aK,isNonTerminalSessionStatus:()=>_0,SessionSource:()=>L0,SESSION_STATUSES:()=>j5,NON_TERMINAL_SESSION_STATUSES:()=>nK});import{SESSION_STATUS_VALUES as OR}from"@cline/shared";var j5=OR,nK=["idle","running","pending"];function aK($){return!nK.includes($)}function _0($){return!aK($)}var L0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var qR=Q0.enum(j5),i0=Q0.object({version:Q0.literal(1),session_id:Q0.string().min(1),source:Q0.string().min(1),pid:Q0.number().int(),started_at:Q0.string().min(1),ended_at:Q0.string().min(1).optional(),exit_code:Q0.number().int().nullable().optional(),status:qR,interactive:Q0.boolean(),provider:Q0.string().min(1),model:Q0.string().min(1),cwd:Q0.string().min(1),workspace_root:Q0.string().min(1),team_name:Q0.string().min(1).optional(),enable_tools:Q0.boolean(),enable_spawn:Q0.boolean(),enable_teams:Q0.boolean(),prompt:Q0.string().optional(),metadata:Q0.record(Q0.string(),Q0.unknown()).optional(),messages_path:Q0.string().min(1).optional(),compaction_path:Q0.string().min(1).optional()});function sK($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function XW($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let J=[],W=new Set;for(let X of Q){if(W.has(X.name))continue;W.add(X.name),J.push(X)}return J}function tK($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function Q$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function WW($,Z){let Q={...$};Q.id=Q$(Q.id)??MR();let J=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:Q$(J?.id)??Q$(Q.modelId)??Q$(Z?.id),provider:Q$(J?.provider)??Q$(Q.providerId)??Q$(Z?.provider),family:Q$(J?.family)??Q$(Z?.family)};if(delete Q.providerId,delete Q.modelId,W.id&&W.provider)Q.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete Q.modelInfo;return Q}function UZ($){return $.map((Z)=>WW(Z))}function DZ($,Z,Q=[]){let J=$.map((V,B)=>{let H=Q[B],G=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return WW(G)}),W=Q.length,X=[];for(let V=W;V<J.length;V+=1)if(J[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...J].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return J;X.push(J.length-1-V)}let j=X[X.length-1],Y=X.some((V)=>J[V]?.metrics);for(let V of X){let B=J[V],H=B.metrics;if(!H&&V===j&&!Y){let K=Z.usage;H={inputTokens:K.inputTokens,outputTokens:K.outputTokens,cacheReadTokens:K.cacheReadTokens??0,cacheWriteTokens:K.cacheWriteTokens??0,cost:K.totalCost}}J[V]={...WW(B,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??Z.endedAt.getTime()}}return J}function Y5($){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 ER=120;function c2($){let Z=$?.trim();return Z?Z.slice(0,ER):void 0}function jW($){let Z=RR(fR($??"")).trim();if(!Z)return;return c2(Z.split(`
|
|
219
|
-
`)[0]?.trim())}function l$($){if(!$)return;let Z={...$},Q=c2(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 V5($){let Z=l$($.metadata)??{},Q=$.title!==void 0?c2($.title):jW($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function YW($){let Z=$6($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=W5($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function VW($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:
|
|
220
|
-
`,"utf8")}function $G($,Z){return i0.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 ZG($,Z,Q){let J=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let X=await Z(W);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(J+=1,J>=Q)return X;continue}return X}}q0();var QG={};w(QG,{summarizeUsageFromMessages:()=>Q6,sumUsageTotals:()=>B5,getCurrentContextSize:()=>BW,createInitialAccumulatedUsage:()=>w0,accumulateUsageTotals:()=>N0});function w0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function N0($,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 B5($){let Z=w0();for(let Q of $)Z=N0(Z,Q);return Z}function Z6($){return typeof $==="number"&&Number.isFinite($)?$:0}function Q6($){let Z=w0();for(let Q of $){let J=Q.metrics;if(!J)continue;Z=N0(Z,{inputTokens:Z6(J.inputTokens),outputTokens:Z6(J.outputTokens),cacheReadTokens:Z6(J.cacheReadTokens),cacheWriteTokens:Z6(J.cacheWriteTokens),totalCost:Z6(J.cost)})}return Z}function BW($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let J=Z6(Q.metrics?.inputTokens);return J>0?J:void 0}return}function CR($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let J=Q.trim();return J.length>0?J:void 0}function HW($){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 J$($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,J=$.teamRole,W="root";if(J==="teammate")W="team_teammate";else if(J==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:Z,agentKind:W,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:J,teamAgentId:$.teamAgentId?.trim()||void 0}}function wR($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function PR($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let J=Q?.trim();if(J)return J}return $.isPrimaryAgentEvent?"root":"unknown"}function KW($,Z,Q){let{sessionId:J,config:W,liveSession:X,emit:j}=$,Y=W.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=HW(Z),K=J$({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let G=CR(Z.input);if(G)_9(Y,{ulid:J,skillName:G,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...K})}if(Z.type==="content_end"&&Z.contentType==="tool"){let G=Z.toolName??"unknown",F=!Z.error;if(P8(Y,{ulid:J,tool:G,autoApproved:void 0,success:F,modelId:W.modelId,provider:W.providerId,...K}),!F&&(G==="editor"||G==="apply_patch"))L9(Y,{ulid:J,modelId:W.modelId,provider:W.providerId,errorType:Z.error,...K})}if(Z.type==="notice"&&Z.reason==="api_error")D4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.message,...K});if(Z.type==="error")D4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.error?.message??"unknown error",...K});if(Z.type==="usage"&&X?.turnUsageBaseline){let G=wR(Z);if(B){X.turnPrimaryUsage=N0(X.turnPrimaryUsage??w0(),G);let U=N0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(J,U),w8(Y,{ulid:J,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...K}),U9(Y,{ulid:J,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:W.modelId,...K})}else{let U=PR({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),_=X.turnUsageByAgent??new Map;X.turnUsageByAgent=_,_.set(U,N0(_.get(U)??w0(),G))}let F=N0(X.turnPrimaryUsage??w0(),B5(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(J,N0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.persistMessages(J,X?.agent.getMessages()??[],X?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:J,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:J,stream:"agent",chunk:tK(Z),ts:Date.now()}})}function W$($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as pE}from"@cline/llms";import{hasRuntimeConfigExtension as lE}from"@cline/shared";var J6="0.0.67-nightly.1785467775";var H5={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:J6,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};O1();import{existsSync as zZ,readFileSync as AM,statSync as OM}from"node:fs";import{basename as qM,dirname as OZ,join as TZ,resolve as qZ}from"node:path";import{discoverPluginModulePaths as zM,resolveConfiguredPluginModulePaths as MG,resolvePluginConfigSearchPaths as TM,SKILLS_CONFIG_DIRECTORY_NAME as NM}from"@cline/shared/storage";import{resolve as oR}from"node:path";import{normalizePluginManifest as sR}from"@cline/shared";import{existsSync as S0,readFileSync as X6}from"node:fs";import{builtinModules as SR,createRequire as DW}from"node:module";import{dirname as i$,extname as G5,isAbsolute as bR,resolve as o}from"node:path";import{fileURLToPath as XG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as yR}from"@cline/shared";var jG=i$(XG(import.meta.url)),kR=DW(import.meta.url),IR=o(jG,"..","..","..","..",".."),GW=gR(IR),hR=["@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"],_W=new Set(SR.flatMap(($)=>[$,$.replace(/^node:/,"")])),K5=new Set(yR),xR=["development","node","import","require","default"];function gR($){let Z={},Q={"@cline/sdk":o($,"packages/sdk/src/index.ts"),"@cline/agents":o($,"packages/agents/src/index.ts"),"@cline/core":o($,"packages/core/src/index.ts"),"@cline/llms":o($,"packages/llms/src/index.ts"),"@cline/shared":o($,"packages/shared/src/index.ts"),"@cline/shared/storage":o($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":o($,"packages/shared/src/db/index.ts")};for(let[J,W]of Object.entries(Q))if(S0(W))Z[J]=W;for(let J of["agents","core","llms","shared"]){let W=o($,"packages",J),X=o(W,"package.json");if(!S0(X))continue;try{let j=JSON.parse(X6(X,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let Y=o(W,j.exports);if(S0(Y))Z[j.name]=Y;continue}if(typeof j.exports!=="object")continue;for(let[Y,V]of Object.entries(j.exports)){let B=vR(W,V);if(!B)continue;let H=Y==="."?j.name:`${j.name}/${Y.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function vR($,Z){let Q=LW(Z);if(!Q)return null;let J=YG($,Q);for(let W of J)if(S0(W))return W;return null}function LW($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let J of xR){let W=LW(Q[J],Z);if(W)return W}return null}function YG($,Z){let Q=Z.replace(/^\.\//,""),J=[o($,Z)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[o($,`${W}.ts`),o($,`${W}.tsx`),o($,`${W}.mts`),o($,`${W}.cts`),...J]}return J}function mR($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function _Z($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function W6($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function cR($){let Z=W6($);if($===Z)return".";return`.${$.slice(Z.length)}`}function VG($){return W6($).startsWith("@cline/")}function FW($,Z){let Q=W6(Z),J=i$($);while(!0){let W=o(J,"node_modules",Q);if(S0(W)||S0(o(W,"package.json")))return!0;let X=o(J,"..");if(X===J)return!1;J=X}}function WG($){return UW($)!==null}function UW($){try{return kR.resolve($)}catch{}return uR($)}function uR($){let Z=W6($),Q=BG(Z);if(!Q)return null;let J=o(Q,"package.json");try{let W=JSON.parse(X6(J,"utf8")),X=cR($),j=X==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,X)?W.exports[X]:void 0,Y=LW(j)??(X==="."&&typeof W.main==="string"?W.main:null);if(!Y)return null;let V=o(Q,Y),B=[V,...YG(Q,Y).filter((H)=>H!==V)];for(let H of B)if(S0(H))return H;return null}catch{return null}}function dR(){let $=[jG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(i$(i$(Z)));let Q=process.execPath?.trim();if(Q)$.push(i$(Q));return[...new Set($.map((J)=>o(J)))]}function pR($,Z){let Q=$;while(!0){let J=o(Q,"package.json");if(S0(J))try{if(JSON.parse(X6(J,"utf8")).name===Z)return Q}catch{}let W=o(Q,"node_modules",Z,"package.json");if(S0(W))return i$(W);let X=o(Q,"..");if(X===Q)return null;Q=X}}function BG($){for(let Z of dR()){let Q=pR(Z,$);if(Q)return Q}return null}function lR($){let Q=i$($);for(let J=0;J<4;J++){let W=o(Q,"package.json");if(S0(W))try{let j=JSON.parse(X6(W,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let X=o(Q,"..");if(X===Q)return!1;Q=X}return!1}function HG($,Z){let Q=Z.startsWith("file:")?XG(Z):bR(Z)?Z:o(i$($),Z);if(S0(Q)&&K5.has(G5(Q)))return Q;for(let J of K5){let W=`${Q}${J}`;if(S0(W))return W}for(let J of K5){let W=o(Q,`index${J}`);if(S0(W))return W}return null}function KG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let J of Q)for(let W of $.matchAll(J)){let X=W[1];if(X)Z.add(X)}return[...Z]}function iR($){return G5($)!==".ts"}function GG($,Z,Q=new Set){if(Q.has($)||!S0($))return;if(Q.add($),!K5.has(G5($)))return;let J=X6($,"utf8"),W=iR($);for(let X of KG(J)){if(X.startsWith("node:")||_W.has(X))continue;if(_Z(X)){if(!W)continue;if(Object.hasOwn(GW,X)||Object.hasOwn(GW,W6(X))||FW($,X)||VG(X)&&WG(X)||Z&&WG(X))continue;throw Error(`Cannot find module '${W6(X)}'`)}let j=HG($,X);if(j)GG(j,Z,Q)}}function FG($,Z=new Set,Q=new Set){if(Z.has($)||!S0($))return Q;if(Z.add($),!K5.has(G5($)))return Q;let J=X6($,"utf8");for(let W of KG(J)){if(Q.add(W),_Z(W))continue;let X=HG($,W);if(X)FG(X,Z,Q)}return Q}function rR($,Z){let Q=DW($),J={},W=FG($),X=new Set(hR);for(let[j,Y]of Object.entries(GW)){try{Q.resolve(j);continue}catch{}J[j]=Y}for(let j of W)if(_Z(j)&&(VG(j)||Z))X.add(j);for(let j of X){if(Object.hasOwn(J,j)||FW($,j))continue;let Y=UW(j);if(Y)J[j]=Y}if(!Z)return J;for(let j of W){if(!_Z(j)||Object.hasOwn(J,j)||FW($,j)||j.startsWith("node:")||_W.has(j))continue;let Y=UW(j);if(Y)J[j]=Y}return J}function nR($){let Z=G5($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var u2;function aR(){if(u2!==void 0)return u2;let $=BG("jiti");if(!$)return u2=null,null;let Z=o($,"dist","babel.cjs");if(!S0(Z))return u2=null,null;try{let J=DW(Z)(Z);u2=typeof J==="function"?J:null}catch{u2=null}return u2}async function UG($,Z={}){let Q=!lR($);GG($,Q);let J=rR($,Q),W=mR(J),X=await import("jiti"),j=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!j)throw Error("Unable to load jiti");let Y=Object.entries(W).filter(([,K])=>nR(K)).map(([K])=>K),V=aR(),B=V?(K)=>V({...K,interopDefault:!0}):void 0;return await j($,{alias:W,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[..._W],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function DG($,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 AW($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function tR($,Z){if(!_G($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!AW($.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")&&!AW($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!AW($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function eR($,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"`);tR($,Z)}async function F5($,Z={}){let Q=oR(Z.cwd??process.cwd(),$),J=await UG(Q,{useCache:Z.useCache}),W=Z.exportName??"plugin",X=J.default??J[W];eR(X,Q);let j=X,Y=j.setup,V=Y?(B,H)=>{let K={...Z.session,...H.session},G={...H,session:Object.keys(K).length>0?K:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return Y(B,G)}:void 0;return{...j,manifest:sR(j.manifest),setup:V}}async function LZ($,Z={}){return(await d2($,Z)).plugins}async function d2($,Z={}){let Q=[],J=[],W=new Map,X=0;for(let Y of $)try{let V=await F5(Y,Z);if(!DG(V.manifest,Z))continue;let B=W.get(V.name);if(B)J.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});W.set(V.name,{plugin:V,pluginPath:Y,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let j=[...W.values()].sort((Y,V)=>Y.order-V.order);return{plugins:j.map((Y)=>Y.plugin),pluginPaths:j.map((Y)=>Y.pluginPath),failures:Q,warnings:J}}import{existsSync as fW}from"node:fs";import{createRequire as NG}from"node:module";import{dirname as AZ,join as Y6}from"node:path";import{fileURLToPath as WM}from"node:url";var qG={};w(qG,{resolveSubprocessRuntimeExecutable:()=>qW,buildSubprocessSandboxCommand:()=>OG,SubprocessSandbox:()=>j6,CLINE_JS_RUNTIME_PATH_ENV:()=>AG});import{spawn as $M}from"node:child_process";import{basename as ZM}from"node:path";import{augmentNodeCommandForDebug as QM,withResolvedClineBuildEnv as JM}from"@cline/shared";function OW($){if($ instanceof Error)return $;return Error(String($))}var AG="CLINE_JS_RUNTIME_PATH";function LG($){let Z=$?.trim();if(!Z)return!1;let Q=ZM(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function qW($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[AG]?.trim();if(Q)return Q;let J=$.execPath?.trim()||process.execPath;if(LG(J))return J;for(let W of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=W?.trim();if(X&&LG(X))return X}return"node"}function OG($,Z={}){let Q=qW({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return QM([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class j6{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=OG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=$M(Z[0]??qW(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:JM(process.env),windowsHide:!0});this.process=Q;let J="",W=(X)=>{let j=J+X;J=j.length>4000?j.slice(-4000):j};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{W(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${OW(X).message}`))}),Q.on("exit",(X,j)=>{this.process=null;let Y=J.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(j)})${Y?`: ${Y}`:""}`))})}async call($,Z,Q={}){this.start();let J=this.process;if(!J||J.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,X={type:"call",id:W,method:$,args:Z};return await new Promise((j,Y)=>{let V={resolve:(B)=>j(B),reject:Y};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,V);try{J.send(X,(B)=>{if(!B)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${OW(B).message}`))})}catch(B){this.clearPendingRequest(W),Y(OW(B))}})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function XM($){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 U5($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function jM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function YM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=NG($).resolve(`${jM()}/package.json`),J=Y6(AZ(Q),"extensions","plugin-sandbox-bootstrap.js");return fW(J)?J:void 0}catch{return}}function VM(){let $=process.execPath?.trim();if(!$)return;let Z=Y6(AZ(AZ($)),"extensions","plugin-sandbox-bootstrap.js");return fW(Z)?Z:void 0}function BM(){let $=AZ(WM(import.meta.url)),Z=NG(import.meta.url),Q=[Y6($,"plugin-sandbox-bootstrap.js"),Y6($,"extensions","plugin-sandbox-bootstrap.js"),Y6($,"agents","plugin-sandbox-bootstrap.js"),YM(),VM()];for(let X of Q.filter((j)=>typeof j==="string"))if(fW(X))return{file:X};let J=Y6($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(J)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(J)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
221
|
-
`)}}var zW=BM();function TW($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let J=process.env[Q];if(J){let W=Number(J);if(Number.isInteger(W)&&W>0)return W}}return Z}async function V6($){let Z=new j6({name:"plugin-sandbox",..."file"in zW?{bootstrapFile:zW.file}:{bootstrapScript:zW.script},onEvent:$.onEvent}),Q=TW($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),J=TW($.hookTimeoutMs,3000),W=TW($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger),telemetryEnabled:$.telemetryAvailable===!0},j,Y=()=>{return j??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{j=void 0}),j},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(K){throw await Z.shutdown().catch(()=>{}),K}let B=V.plugins.map(XM);return{extensions:B.map((K)=>{let G={name:K.name,__clinePluginPath:K.pluginPath,manifest:K.manifest,setup:(F)=>{KM(F,Z,K,W,Y),GM(F,Z,K,W,Y),FM(F,Z,K,W,Y),DM(F,Z,K,W,Y),UM(F,K)}};return G.hooks=LM(Z,K,J,Y),G}),failures:V.failures,pluginPaths:B.map((K)=>K.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function HM($){let Z=$ instanceof Error?$.message:String($);return/cyclic|circular|bigint/i.test(Z)}function NW($,Z=new WeakSet){if($===null||typeof $!=="object")return typeof $==="function"||typeof $==="symbol"||typeof $==="bigint"?void 0:$;if(Z.has($))return;let Q=$;if(typeof Q.toJSON==="function")try{return Q.toJSON()}catch{return}Z.add($);try{if(Array.isArray($))return $.map((W)=>NW(W,Z)??null);let J={};for(let[W,X]of Object.entries($)){let j=NW(X,Z);if(j!==void 0)J[W]=j}return J}finally{Z.delete($)}}var zG=new Set;function fG($,Z,Q){let J=`${$}:${Z}`;if(zG.has(J))return;zG.add(J);let W=Q instanceof Error?Q.message:String(Q);console.warn(`[plugin-sandbox] ${$} "${Z}" received a payload that is not JSON-serializable (${W}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function RG($,Z,Q){try{return await $(Z)}catch(J){if(!HM(J))throw J;return Q(J),await $(NW(Z))}}function KM($,Z,Q,J,W){for(let X of Q.contributions?.tools??[]){let j={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(Y,V)=>{return await RG(async(H)=>{let{input:K,context:G}=H;try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}catch(F){if(!U5(F))throw F;return await W(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}},{input:Y,context:V},(H)=>fG("tool",X.name,H))}};$.registerTool(j)}}function GM($,Z,Q,J,W){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(j)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}catch(Y){if(!U5(Y))throw Y;return await W(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}}})}function FM($,Z,Q,J,W){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}catch(j){if(!U5(j))throw j;return await W(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}}:X.content??""})}function UM($,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 DM($,Z,Q,J,W){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(j){try{let Y=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return TG(Y)?Y:j}catch(Y){if(!U5(Y))throw Y;await W();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return TG(V)?V:j}}})}function TG($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function _M($,Z,Q,J,W){return async(X)=>{return await RG(async(Y)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}catch(V){if(!U5(V))throw V;return await W(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}},X,(Y)=>fG("hook",Q,Y))}}function LM($,Z,Q,J){let W={};for(let X of Z.hooks??[])W[X]=_M($,Z.pluginId,X,Q,J);return Object.keys(W).length>0?W:void 0}var MW="package.json",fM="package";function D5($){return TM($)}function _5($){return zM($)}function RM($){try{return
|
|
222
|
-
`).filter(Boolean);await Promise.allSettled(W.map((X)=>p2($,["update-ref","-d",X])))}catch{}}async function yG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((J)=>p2($,["update-ref",`refs/cline/checkpoints/${Z}/${J.runCount}`,J.ref])))}function IM($,Z){let Q=$.findIndex((J)=>J.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((J,W)=>W===Q?Z:J)}function kG($){let Z,Q,J=async()=>{if(Z!==void 0)return Z;try{Z=(await p2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},W=async(X)=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:X});if(!await J())return;let j=async(H)=>{try{let G=(await p2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:X,kind:"commit"}}catch(K){CW($.logger,`${H}: ${K instanceof Error?K.message:String(K)}`);return}},Y=`${SG}${$.sessionId} run=${X}`,V="";try{V=(await p2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return CW($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),j("Checkpoint HEAD fallback failed")}if(!V)return j("Checkpoint HEAD fallback failed");let B=`refs/cline/checkpoints/${$.sessionId}/${X}`;try{await p2($.cwd,["update-ref",B,V])}catch(H){CW($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:V,createdAt:Date.now(),runCount:X,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId==null)Q=X.messages.length;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1)return;let j=X.messages.slice(Q??Math.max(0,X.messages.length-1));if(Q=void 0,y$(j)<1)return;let Y=y$(X.messages);if(Y<1)return;let V=await W(Y);if(!V)return;let B=await $.readSessionMetadata(),H=kM(B);if(H?.latest.ref===V.ref)return;let K=IM(H?.history??[],V);await $.writeSessionMetadata({...B??{},checkpoint:{latest:V,history:K}});return}}}import{appendFileSync as aM,readFileSync as oM}from"node:fs";import{join as sM}from"node:path";import{augmentNodeCommandForDebug as tM}from"@cline/shared";import{ensureHookLogDir as hG}from"@cline/shared/storage";function H6($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as hM,readdirSync as xM}from"node:fs";import{basename as gM,extname as vM,join as mM}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as
|
|
223
|
-
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),W=J.length>0?J[J.length-1]:Z;try{return{parsedJson:JSON.parse(W)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function IG($,Z){let Q=$ instanceof Error?$:Error(String($)),J=Q,W=Z.join(" ");if(J.code==="EACCES"){let j=Error(`Failed to execute hook command "${W}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return j.code=J.code,j}let X=Error(`Failed to execute hook command "${W}": ${Q.message}`);return X.code=J.code,X}async function nM($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((J,W)=>{let X=!1,j=(B)=>{if(X)return;X=!0,B()},Y=(B)=>{let H=B.code;return H==="EPIPE"||H==="EOF"||H==="ERR_STREAM_DESTROYED"},V=(B)=>{if(Y(B)){j(J);return}j(()=>W(B))};Q.on("error",V),Q.once("close",()=>Q.off("error",V)),Q.end(Z,(B)=>{if(B){if(Y(B)){j(J);return}j(()=>W(B));return}j(J)})})}async function Y$($,Z){let Q=lM(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let J=!!Z.detached,W=pM(Q[0],Q.slice(1),{cwd:Z.cwd,env:iM(Z.env),stdio:J?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J,windowsHide:!0}),X="",j="",Y=!1,V;if(!J&&(!W.stdout||!W.stderr))throw W.kill("SIGKILL"),Error("runSubprocessEvent failed to create stdout/stderr pipes");W.stdout?.on("data",(K)=>{X+=K.toString()}),W.stderr?.on("data",(K)=>{j+=K.toString()});let B=new Promise((K,G)=>{W.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:W.pid??void 0,detached:J})}catch{}K()}),W.once("error",(F)=>G(IG(F,Q)))}),H=new Promise((K,G)=>{W.once("error",(F)=>{if(V)clearTimeout(V);G(IG(F,Q))}),W.once("close",(F)=>{if(V)clearTimeout(V);let{parsedJson:U,parseError:_}=rM(X);K({exitCode:F,stdout:X,stderr:j,parsedJson:U,parseError:_,timedOut:Y})})});if(J)H.catch(()=>{return});if(!J&&(Z.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,W.kill("SIGKILL")},Z.timeoutMs);if(await Promise.race([Promise.all([B,nM(W,JSON.stringify($))]),H]),J){W.unref();return}return await H}function
|
|
217
|
+
${J}`;return Q||J}function gf($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function vf($,Z){return $.filter((Q)=>gf(Q.name,Z))}function mf($,Z){return Z$(vf($,Z))}function cf($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let J of Z){let W=await J.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let J of Z)await J.afterRun?.(Q)},beforeModel:async(Q)=>{let J=Q.request,W;for(let X of Z){let j=await X.beforeModel?.({...Q,request:J});if(!j)continue;if(j.stop)return j;W={...W,...j,options:_K(W?.options,j.options)},J={...J,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:_K(J.options,j.options)}:{}}}return W},afterModel:async(Q)=>{for(let J of Z){let W=await J.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let J=Q.input,W;for(let X of Z){let j=await X.beforeTool?.({...Q,input:J});if(!j)continue;if(j.stop||j.skip)return j;if(W={...W,...j},Object.hasOwn(j,"input"))J=j.input}return W},afterTool:async(Q)=>{let J=Q.result,W;for(let X of Z){let j=await X.afterTool?.({...Q,result:J});if(!j)continue;if(j.stop)return j;if(W={...W,...j},j.result)J=j.result}return W},onEvent:async(Q)=>{for(let J of Z)await J.onEvent?.(Q)}}}class c${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 eJ;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??bf,this.conversation=new nJ($.initialMessages),this.messageBuilder=new lJ(HK()),this.contributionRegistry=yf({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 tJ({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(X)=>{AZ(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:X.reason,consecutiveMistakes:X.consecutiveMistakes,maxConsecutiveMistakes:X.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(X)=>this.emitLegacyEvent(X),log:(X,j,Y)=>uf(this.logger,X,j,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let J=$.execution?.loopDetection;this.loopDetectionDisabled=J===!1;let W=J===!1||J===void 0?void 0:J;this.loopTracker=new sJ(W)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((J)=>J.name)),Q=[...this.config.tools];for(let J of $)if(!Z.has(J.name))Q.push(J),Z.add(J.name);this.config={...this.config,tools:Q}}updateConnection($){let Z=k2($),Q={...this.config};if(Z.providerId!==void 0)Q.providerId=Z.providerId;if(Z.modelId!==void 0)Q.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.headers=Z.headers;if(Z.providerConfig!==void 0)Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.reasoningEffort=void 0,Q.thinkingBudgetTokens=void 0}this.config=Q}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await hf(Z);if(Q)$.push(Q)}return xf(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunWithAuthRetry($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunWithAuthRetry($){let Z=await this.executeRunInternal($);if(Z.finishReason!=="error"||!this.config.onAuthError||!kf(Z.text))return Z;if(!await this.config.onAuthError().catch(()=>!1))return Z;let J=await this.executeRunInternal({isContinue:!0});return PV(this.telemetry,this.config.providerId,{recovered:J.finishReason!=="error"}),J}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let D=await pf(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let J=await this.composeSystemPrompt(),W=ZK(this.config,this.logger,this.telemetry),X=new Map;for(let D of this.contributionRegistry.getRegisteredTools())X.set(D.name,D);let j=mf([...X.values()],this.config.toolPolicies),Y=new Map;for(let D of j)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=LK(this.config),H=Array.from(Y.values()),K=WQ(this.conversation.getMessages()),G=GK({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:K,systemPrompt:J}),F=this.createAgentRuntimeImpl(G);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let U=F.subscribe((D)=>{this.handleRuntimeEvent(D)}),_,L;try{if($.isContinue)_=await F.continue(void 0);else _=await F.run("")}catch(D){L=D instanceof Error?D:Error(String(D))}finally{U();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(_&&_.messages.length>0){let D=a8(_.messages);this.conversation.replaceMessages(D)}let O=new Date;try{return this.buildLegacyResult({runResult:_,thrownError:L,startedAt:Z,endedAt:O})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=cf([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let J=Q?.messages??Z.request.messages,W=await this.prepareMessagesForModelRequest(J);return{...Q,messages:W}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(J)=>{let W=a8(J.messages),X=await this.prepareProviderMessagesForApi(W),j=await Q({agentId:J.agentId,conversationId:J.conversationId??this.conversation.getConversationId(),parentAgentId:J.parentAgentId??null,iteration:J.iteration,messages:W,apiMessages:X,abortSignal:J.signal??new AbortController().signal,systemPrompt:J.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:J.emitStatusNotice});if(!j)return;return{...j.messages?{messages:WQ(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(XQ($));return WQ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let J of Q)Z=await J.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,J=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((V)=>V.type==="tool-result"),X=W?.type==="tool-result"&&W.isError===!0,j=X?If(W?.type==="tool-result"?W.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:J,output:W?.type==="tool-result"?W.output:void 0,error:j,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(Y),X){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let J=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${J?`: ${J}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(a8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),J=a8(Z).filter((W)=>!W.id||!Q.has(W.id));if(J.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...J])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let J=this.loopTracker.inspect({name:$,input:Z});if(J.kind==="ok")return;if(J.kind==="soft"){if(J.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:J.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:J,endedAt:W}=$,X=W.getTime()-J.getTime(),j=Q?"error":df(Z),Y=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,B=Z?a8(Z.messages):this.conversation.getMessages(),H=LK(this.config);if(Q)throw Q;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:J,endedAt:W,durationMs:X}}}function uf($,Z,Q,J){if(!$)return;if(Z==="debug"){$.debug(Q,J);return}if(Z==="error"&&$.error){$.error(Q,J);return}let W=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...J,severity:W})}function df($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function pf($,Z,Q,J){let{buildInitialUserContent:W}=await Promise.resolve().then(() => DK);return W($,Z,Q,J)}function LK($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=uJ($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as AK}from"@cline/shared";function OK($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return AK({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
218
|
+
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function qK($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return AK({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function u$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,onAuthError:Z.onAuthError,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function I2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?OK($.prompt,Z):qK($.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 d$($){let Z=I2($),Q=new c$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var nf=$W.object({systemPrompt:$W.string().describe("System prompt defining the sub-agent's behavior"),task:$W.string().describe("Task for the sub-agent to complete")});function p$($){return lf({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:rf(nf),execute:async(Z,Q)=>{let J=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],W=d$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:J,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=W.getAgentId(),j=W.getConversationId(),Y=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z})}catch{}try{let V=await W.run(Z.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as z0,TEAM_AWAIT_TIMEOUT_MS as af,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as of,TEAM_RUN_TEXT_PREVIEW_LIMIT as sf,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as tf,TeamAttachOutcomeFragmentInputSchema as zK,TeamAwaitRunsInputSchema as TK,TeamBroadcastInputSchema as NK,TeamBroadcastToolResultSchema as ef,TeamCancelRunInputSchema as fK,TeamCancelRunToolResultSchema as $R,TeamCleanupInputSchema as RK,TeamCleanupToolResultSchema as ZR,TeamCreateOutcomeInputSchema as MK,TeamCreateOutcomeToolResultSchema as QR,TeamFinalizeOutcomeInputSchema as EK,TeamFinalizeOutcomeToolResultSchema as JR,TeamListOutcomesInputSchema as CK,TeamListRunsInputSchema as wK,TeamMailboxMessageToolResultSchema as WR,TeamMissionLogInputSchema as PK,TeamMissionLogToolResultSchema as XR,TeamOutcomeFragmentToolResultSchema as SK,TeamOutcomeToolResultSchema as jR,TeamReadMailboxInputSchema as bK,TeamReviewOutcomeFragmentInputSchema as yK,TeamRunTaskInputSchema as kK,TeamRunTaskToolResultSchema as ZW,TeamRunToolSummarySchema as QW,TeamSendMessageInputSchema as IK,TeamSendMessageToolResultSchema as YR,TeamShutdownTeammateInputSchema as hK,TeamSimpleAgentStatusToolResultSchema as xK,TeamSpawnTeammateInputSchema as gK,TeamStatusInputSchema as vK,TeamStatusToolResultSchema as VR,TeamTaskInputSchema as mK,TeamTaskToolResultSchema as Z5,validateWithZod as g,zodToJsonSchema as T0}from"@cline/shared";function cK($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function h2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function BR($){let Z=$.result;if(!Z)return;return{textPreview:cK(Z.text,sf),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 BQ($){return $?.toISOString()}function JW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:cK($.message,of),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:BQ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:BQ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:BQ($.heartbeatAt),lastProgressAt:BQ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:BR($)}}function HR($){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 s8=["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 uK($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...x2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:I2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function t8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,J=x2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;uK({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),W.push(X.agentId)}return{tools:J,restoredFromPersistence:Q,restoredTeammates:W}}function x2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,J=$.includeManagementTools??!0,W=[];if(Q)W.push(z0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:T0(gK),execute:async(j)=>{let Y=g(gK,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(uK({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!J)$.onLeadToolsUnlocked?.(x2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return g(xK,{agentId:Y.agentId,status:"spawned"})}}));if(!J)return W;W.push(z0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:T0(hK),execute:async(j)=>{let Y=g(hK,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),g(xK,{agentId:Y.agentId,status:"stopped"})}})),W.push(z0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:T0(vK),execute:async(j)=>{return g(vK,j),g(VR,$.runtime.getSnapshot())}})),W.push(z0({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:T0(mK),execute:async(j)=>{let Y=g(mK,j);switch(Y.action){case"create":{let V=new Set(tf.create??[]),B=Object.entries(j).filter(([K,G])=>V.has(K)&&G!=null).map(([K])=>K),H=$.runtime.createTask({title:h2(Y.title,"title"),description:h2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return g(Z5,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return g(Z5,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(h2(Y.taskId,"taskId"),$.requesterId);return g(Z5,{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(h2(Y.taskId,"taskId"),$.requesterId,h2(Y.summary,"summary"));return g(Z5,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(h2(Y.taskId,"taskId"),$.requesterId,h2(Y.reason,"reason"));return g(Z5,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return W.push(z0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:T0(kK),execute:async(j)=>{let Y=g(kK,j);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return g(ZW,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(Y.agentId);if(V){let H=await V;return g(ZW,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>g(ZW,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(Y.agentId)});return X.set(Y.agentId,B),await B}})),W.push(z0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:T0(fK),execute:async(j)=>{let Y=g(fK,j),V=$.runtime.cancelRun(Y.runId,Y.reason);return g($R,{runId:V.id,status:V.status})}})),W.push(z0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:T0(wK),execute:async(j)=>g(QW.array(),$.runtime.listRuns(g(wK,j)).map(JW))})),W.push(z0({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:T0(TK),timeoutMs:af,execute:async(j)=>{let Y=g(TK,j);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return HR(H),g(QW,JW(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((K)=>`${K.id}:${K.status}${K.error?`(${K.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return g(QW.array(),V.map(JW))}})),W.push(z0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:T0(IK),execute:async(j)=>{let Y=g(IK,j),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return g(YR,{id:V.id,toAgentId:V.toAgentId})}})),W.push(z0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:T0(NK),execute:async(j)=>{let Y=g(NK,j),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return g(ef,{delivered:V.length})}})),W.push(z0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:T0(bK),execute:async(j)=>{let Y=g(bK,j);return g(WR.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),W.push(z0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:T0(PK),execute:async(j)=>{let Y=g(PK,j),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return g(XR,{id:V.id})}})),W.push(z0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:T0(RK),execute:async(j)=>{if(g(RK,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),g(ZR,{status:"cleaned"})}})),W.push(z0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:T0(MK),execute:async(j)=>{let Y=g(MK,j),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return g(QR,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),W.push(z0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:T0(zK),execute:async(j)=>{let Y=g(zK,j),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return g(SK,{fragmentId:V.id,status:V.status})}})),W.push(z0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:T0(yK),execute:async(j)=>{let Y=g(yK,j),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return g(SK,{fragmentId:V.id,status:V.status})}})),W.push(z0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:T0(EK),execute:async(j)=>{let Y=g(EK,j),V=$.runtime.finalizeOutcome(Y.outcomeId);return g(JR,{outcomeId:V.id,status:V.status})}})),W.push(z0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:T0(CK),execute:async(j)=>{return g(CK,j),g(jR.array(),$.runtime.listOutcomes())}})),W}function HQ($){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 dK($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var KR=[{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:p$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...s8]}],GR={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function FR($){return $==="plan"||$==="yolo"?$:"act"}function lK($){let Z=FR($.mode),Q=Q1[$$({mode:Z})],J=n8($.providerId??"",$.modelId??"",Z,r8);return{mode:Z,flags:{...Q,...J,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function pK($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=lK(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let J=GR[$];return J?Q[J]===!0:!1}function UR($,Z){if($.id==="editor"){let{flags:Q}=lK(Z),J=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:pK($.id,Z),headlessToolNames:[J?"apply_patch":"editor"]}}return{...$,defaultEnabled:pK($.id,Z)}}function g2($={}){return KR.map((Z)=>UR(Z,$))}function KQ($={}){return g2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function GQ($){if(!$.enabled)return new Set;let Z=g2($.availabilityContext),Q=new Set(Z.map((J)=>J.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((J)=>J.defaultEnabled).map((J)=>J.id));for(let J of $.allowlist)if(!Q.has(J))throw Error(`Unknown tool "${J}". Available tools: ${Z.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function Q5($,Z={}){return g2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function FQ($,Z={}){return Q5($,Z)}import{getDefaultShell as DR}from"@cline/shared";function v2($={}){let{executorOptions:Z={},executors:Q,...J}=$,W=J.shell??Z.bash?.shell??DR(process.platform),X={...Z,bash:{...Z.bash,shell:W}},j={...i8(X),...Q??{}};return g$({...J,shell:W,executors:j})}import{mkdirSync as zR,writeFileSync as TR}from"node:fs";import{dirname as NR}from"node:path";import{normalizeUserInput as fR,stripModeNotices as RR}from"@cline/shared";import{nanoid as MR}from"nanoid";var rK={};w(rK,{sanitizeSessionToken:()=>m2,parseTeamTaskSubSessionId:()=>$6,parseSubSessionId:()=>W5,makeTeamTaskSubSessionId:()=>J5,makeSubSessionId:()=>e8,deriveSubsessionStatus:()=>X5});import{nanoid as AR}from"nanoid";function m2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function e8($,Z){let Q=m2($),J=m2(Z),W=`${Q}__${J}`;return W.length>180?W.slice(0,180):W}function J5($,Z){let Q=m2($),J=m2(Z);return`${Q}__teamtask__${J}__${AR(6)}`}function $6($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+12),X=W.lastIndexOf("__");if(X<=0)return null;let j=W.slice(0,X),Y=W.slice(X+2);if(!J||!j||!Y)return null;return{rootSessionId:J,agentId:j,teamTaskId:Y}}function W5($){if($6($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+Z.length);if(!J||!W)return null;return{rootSessionId:J,agentId:W}}function X5($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as Q0}from"zod";var oK={};w(oK,{isTerminalSessionStatus:()=>aK,isNonTerminalSessionStatus:()=>_0,SessionSource:()=>L0,SESSION_STATUSES:()=>j5,NON_TERMINAL_SESSION_STATUSES:()=>nK});import{SESSION_STATUS_VALUES as OR}from"@cline/shared";var j5=OR,nK=["idle","running","pending"];function aK($){return!nK.includes($)}function _0($){return!aK($)}var L0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var qR=Q0.enum(j5),i0=Q0.object({version:Q0.literal(1),session_id:Q0.string().min(1),source:Q0.string().min(1),pid:Q0.number().int(),started_at:Q0.string().min(1),ended_at:Q0.string().min(1).optional(),exit_code:Q0.number().int().nullable().optional(),status:qR,interactive:Q0.boolean(),provider:Q0.string().min(1),model:Q0.string().min(1),cwd:Q0.string().min(1),workspace_root:Q0.string().min(1),team_name:Q0.string().min(1).optional(),enable_tools:Q0.boolean(),enable_spawn:Q0.boolean(),enable_teams:Q0.boolean(),prompt:Q0.string().optional(),metadata:Q0.record(Q0.string(),Q0.unknown()).optional(),messages_path:Q0.string().min(1).optional(),compaction_path:Q0.string().min(1).optional()});function sK($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function XW($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let J=[],W=new Set;for(let X of Q){if(W.has(X.name))continue;W.add(X.name),J.push(X)}return J}function tK($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function Q$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function WW($,Z){let Q={...$};Q.id=Q$(Q.id)??MR();let J=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:Q$(J?.id)??Q$(Q.modelId)??Q$(Z?.id),provider:Q$(J?.provider)??Q$(Q.providerId)??Q$(Z?.provider),family:Q$(J?.family)??Q$(Z?.family)};if(delete Q.providerId,delete Q.modelId,W.id&&W.provider)Q.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete Q.modelInfo;return Q}function UQ($){return $.map((Z)=>WW(Z))}function DQ($,Z,Q=[]){let J=$.map((V,B)=>{let H=Q[B],G=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return WW(G)}),W=Q.length,X=[];for(let V=W;V<J.length;V+=1)if(J[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...J].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return J;X.push(J.length-1-V)}let j=X[X.length-1],Y=X.some((V)=>J[V]?.metrics);for(let V of X){let B=J[V],H=B.metrics;if(!H&&V===j&&!Y){let K=Z.usage;H={inputTokens:K.inputTokens,outputTokens:K.outputTokens,cacheReadTokens:K.cacheReadTokens??0,cacheWriteTokens:K.cacheWriteTokens??0,cost:K.totalCost}}J[V]={...WW(B,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??Z.endedAt.getTime()}}return J}function Y5($){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 ER=120;function c2($){let Z=$?.trim();return Z?Z.slice(0,ER):void 0}function jW($){let Z=RR(fR($??"")).trim();if(!Z)return;return c2(Z.split(`
|
|
219
|
+
`)[0]?.trim())}function l$($){if(!$)return;let Z={...$},Q=c2(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 V5($){let Z=l$($.metadata)??{},Q=$.title!==void 0?c2($.title):jW($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function YW($){let Z=$6($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=W5($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function VW($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:UQ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function eK($,Z,Q){zR(NR($),{recursive:!0}),TR($,`${JSON.stringify(VW({updatedAt:Z,context:Q,messages:[]}),null,2)}
|
|
220
|
+
`,"utf8")}function $G($,Z){return i0.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 ZG($,Z,Q){let J=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let X=await Z(W);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(J+=1,J>=Q)return X;continue}return X}}q0();var QG={};w(QG,{summarizeUsageFromMessages:()=>Q6,sumUsageTotals:()=>B5,getCurrentContextSize:()=>BW,createInitialAccumulatedUsage:()=>w0,accumulateUsageTotals:()=>N0});function w0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function N0($,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 B5($){let Z=w0();for(let Q of $)Z=N0(Z,Q);return Z}function Z6($){return typeof $==="number"&&Number.isFinite($)?$:0}function Q6($){let Z=w0();for(let Q of $){let J=Q.metrics;if(!J)continue;Z=N0(Z,{inputTokens:Z6(J.inputTokens),outputTokens:Z6(J.outputTokens),cacheReadTokens:Z6(J.cacheReadTokens),cacheWriteTokens:Z6(J.cacheWriteTokens),totalCost:Z6(J.cost)})}return Z}function BW($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let J=Z6(Q.metrics?.inputTokens);return J>0?J:void 0}return}function CR($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let J=Q.trim();return J.length>0?J:void 0}function HW($){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 J$($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,J=$.teamRole,W="root";if(J==="teammate")W="team_teammate";else if(J==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:Z,agentKind:W,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:J,teamAgentId:$.teamAgentId?.trim()||void 0}}function wR($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function PR($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let J=Q?.trim();if(J)return J}return $.isPrimaryAgentEvent?"root":"unknown"}function KW($,Z,Q){let{sessionId:J,config:W,liveSession:X,emit:j}=$,Y=W.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=HW(Z),K=J$({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let G=CR(Z.input);if(G)_Z(Y,{ulid:J,skillName:G,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...K})}if(Z.type==="content_end"&&Z.contentType==="tool"){let G=Z.toolName??"unknown",F=!Z.error;if(P8(Y,{ulid:J,tool:G,autoApproved:void 0,success:F,modelId:W.modelId,provider:W.providerId,...K}),!F&&(G==="editor"||G==="apply_patch"))LZ(Y,{ulid:J,modelId:W.modelId,provider:W.providerId,errorType:Z.error,...K})}if(Z.type==="notice"&&Z.reason==="api_error")D4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.message,...K});if(Z.type==="error")D4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.error?.message??"unknown error",...K});if(Z.type==="usage"&&X?.turnUsageBaseline){let G=wR(Z);if(B){X.turnPrimaryUsage=N0(X.turnPrimaryUsage??w0(),G);let U=N0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(J,U),w8(Y,{ulid:J,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...K}),UZ(Y,{ulid:J,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:W.modelId,...K})}else{let U=PR({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),_=X.turnUsageByAgent??new Map;X.turnUsageByAgent=_,_.set(U,N0(_.get(U)??w0(),G))}let F=N0(X.turnPrimaryUsage??w0(),B5(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(J,N0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.persistMessages(J,X?.agent.getMessages()??[],X?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:J,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:J,stream:"agent",chunk:tK(Z),ts:Date.now()}})}function W$($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as pE}from"@cline/llms";import{hasRuntimeConfigExtension as lE}from"@cline/shared";var J6="0.0.67-nightly.1785554076";var H5={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:J6,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};O1();import{existsSync as zQ,readFileSync as AM,statSync as OM}from"node:fs";import{basename as qM,dirname as OQ,join as TQ,resolve as qQ}from"node:path";import{discoverPluginModulePaths as zM,resolveConfiguredPluginModulePaths as MG,resolvePluginConfigSearchPaths as TM,SKILLS_CONFIG_DIRECTORY_NAME as NM}from"@cline/shared/storage";import{resolve as oR}from"node:path";import{normalizePluginManifest as sR}from"@cline/shared";import{existsSync as S0,readFileSync as X6}from"node:fs";import{builtinModules as SR,createRequire as DW}from"node:module";import{dirname as i$,extname as G5,isAbsolute as bR,resolve as o}from"node:path";import{fileURLToPath as XG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as yR}from"@cline/shared";var jG=i$(XG(import.meta.url)),kR=DW(import.meta.url),IR=o(jG,"..","..","..","..",".."),GW=gR(IR),hR=["@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"],_W=new Set(SR.flatMap(($)=>[$,$.replace(/^node:/,"")])),K5=new Set(yR),xR=["development","node","import","require","default"];function gR($){let Z={},Q={"@cline/sdk":o($,"packages/sdk/src/index.ts"),"@cline/agents":o($,"packages/agents/src/index.ts"),"@cline/core":o($,"packages/core/src/index.ts"),"@cline/llms":o($,"packages/llms/src/index.ts"),"@cline/shared":o($,"packages/shared/src/index.ts"),"@cline/shared/storage":o($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":o($,"packages/shared/src/db/index.ts")};for(let[J,W]of Object.entries(Q))if(S0(W))Z[J]=W;for(let J of["agents","core","llms","shared"]){let W=o($,"packages",J),X=o(W,"package.json");if(!S0(X))continue;try{let j=JSON.parse(X6(X,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let Y=o(W,j.exports);if(S0(Y))Z[j.name]=Y;continue}if(typeof j.exports!=="object")continue;for(let[Y,V]of Object.entries(j.exports)){let B=vR(W,V);if(!B)continue;let H=Y==="."?j.name:`${j.name}/${Y.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function vR($,Z){let Q=LW(Z);if(!Q)return null;let J=YG($,Q);for(let W of J)if(S0(W))return W;return null}function LW($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let J of xR){let W=LW(Q[J],Z);if(W)return W}return null}function YG($,Z){let Q=Z.replace(/^\.\//,""),J=[o($,Z)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[o($,`${W}.ts`),o($,`${W}.tsx`),o($,`${W}.mts`),o($,`${W}.cts`),...J]}return J}function mR($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function _Q($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function W6($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function cR($){let Z=W6($);if($===Z)return".";return`.${$.slice(Z.length)}`}function VG($){return W6($).startsWith("@cline/")}function FW($,Z){let Q=W6(Z),J=i$($);while(!0){let W=o(J,"node_modules",Q);if(S0(W)||S0(o(W,"package.json")))return!0;let X=o(J,"..");if(X===J)return!1;J=X}}function WG($){return UW($)!==null}function UW($){try{return kR.resolve($)}catch{}return uR($)}function uR($){let Z=W6($),Q=BG(Z);if(!Q)return null;let J=o(Q,"package.json");try{let W=JSON.parse(X6(J,"utf8")),X=cR($),j=X==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,X)?W.exports[X]:void 0,Y=LW(j)??(X==="."&&typeof W.main==="string"?W.main:null);if(!Y)return null;let V=o(Q,Y),B=[V,...YG(Q,Y).filter((H)=>H!==V)];for(let H of B)if(S0(H))return H;return null}catch{return null}}function dR(){let $=[jG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(i$(i$(Z)));let Q=process.execPath?.trim();if(Q)$.push(i$(Q));return[...new Set($.map((J)=>o(J)))]}function pR($,Z){let Q=$;while(!0){let J=o(Q,"package.json");if(S0(J))try{if(JSON.parse(X6(J,"utf8")).name===Z)return Q}catch{}let W=o(Q,"node_modules",Z,"package.json");if(S0(W))return i$(W);let X=o(Q,"..");if(X===Q)return null;Q=X}}function BG($){for(let Z of dR()){let Q=pR(Z,$);if(Q)return Q}return null}function lR($){let Q=i$($);for(let J=0;J<4;J++){let W=o(Q,"package.json");if(S0(W))try{let j=JSON.parse(X6(W,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let X=o(Q,"..");if(X===Q)return!1;Q=X}return!1}function HG($,Z){let Q=Z.startsWith("file:")?XG(Z):bR(Z)?Z:o(i$($),Z);if(S0(Q)&&K5.has(G5(Q)))return Q;for(let J of K5){let W=`${Q}${J}`;if(S0(W))return W}for(let J of K5){let W=o(Q,`index${J}`);if(S0(W))return W}return null}function KG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let J of Q)for(let W of $.matchAll(J)){let X=W[1];if(X)Z.add(X)}return[...Z]}function iR($){return G5($)!==".ts"}function GG($,Z,Q=new Set){if(Q.has($)||!S0($))return;if(Q.add($),!K5.has(G5($)))return;let J=X6($,"utf8"),W=iR($);for(let X of KG(J)){if(X.startsWith("node:")||_W.has(X))continue;if(_Q(X)){if(!W)continue;if(Object.hasOwn(GW,X)||Object.hasOwn(GW,W6(X))||FW($,X)||VG(X)&&WG(X)||Z&&WG(X))continue;throw Error(`Cannot find module '${W6(X)}'`)}let j=HG($,X);if(j)GG(j,Z,Q)}}function FG($,Z=new Set,Q=new Set){if(Z.has($)||!S0($))return Q;if(Z.add($),!K5.has(G5($)))return Q;let J=X6($,"utf8");for(let W of KG(J)){if(Q.add(W),_Q(W))continue;let X=HG($,W);if(X)FG(X,Z,Q)}return Q}function rR($,Z){let Q=DW($),J={},W=FG($),X=new Set(hR);for(let[j,Y]of Object.entries(GW)){try{Q.resolve(j);continue}catch{}J[j]=Y}for(let j of W)if(_Q(j)&&(VG(j)||Z))X.add(j);for(let j of X){if(Object.hasOwn(J,j)||FW($,j))continue;let Y=UW(j);if(Y)J[j]=Y}if(!Z)return J;for(let j of W){if(!_Q(j)||Object.hasOwn(J,j)||FW($,j)||j.startsWith("node:")||_W.has(j))continue;let Y=UW(j);if(Y)J[j]=Y}return J}function nR($){let Z=G5($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var u2;function aR(){if(u2!==void 0)return u2;let $=BG("jiti");if(!$)return u2=null,null;let Z=o($,"dist","babel.cjs");if(!S0(Z))return u2=null,null;try{let J=DW(Z)(Z);u2=typeof J==="function"?J:null}catch{u2=null}return u2}async function UG($,Z={}){let Q=!lR($);GG($,Q);let J=rR($,Q),W=mR(J),X=await import("jiti"),j=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!j)throw Error("Unable to load jiti");let Y=Object.entries(W).filter(([,K])=>nR(K)).map(([K])=>K),V=aR(),B=V?(K)=>V({...K,interopDefault:!0}):void 0;return await j($,{alias:W,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[..._W],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function DG($,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 AW($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function tR($,Z){if(!_G($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!AW($.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")&&!AW($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!AW($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function eR($,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"`);tR($,Z)}async function F5($,Z={}){let Q=oR(Z.cwd??process.cwd(),$),J=await UG(Q,{useCache:Z.useCache}),W=Z.exportName??"plugin",X=J.default??J[W];eR(X,Q);let j=X,Y=j.setup,V=Y?(B,H)=>{let K={...Z.session,...H.session},G={...H,session:Object.keys(K).length>0?K:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return Y(B,G)}:void 0;return{...j,manifest:sR(j.manifest),setup:V}}async function LQ($,Z={}){return(await d2($,Z)).plugins}async function d2($,Z={}){let Q=[],J=[],W=new Map,X=0;for(let Y of $)try{let V=await F5(Y,Z);if(!DG(V.manifest,Z))continue;let B=W.get(V.name);if(B)J.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});W.set(V.name,{plugin:V,pluginPath:Y,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let j=[...W.values()].sort((Y,V)=>Y.order-V.order);return{plugins:j.map((Y)=>Y.plugin),pluginPaths:j.map((Y)=>Y.pluginPath),failures:Q,warnings:J}}import{existsSync as fW}from"node:fs";import{createRequire as NG}from"node:module";import{dirname as AQ,join as Y6}from"node:path";import{fileURLToPath as WM}from"node:url";var qG={};w(qG,{resolveSubprocessRuntimeExecutable:()=>qW,buildSubprocessSandboxCommand:()=>OG,SubprocessSandbox:()=>j6,CLINE_JS_RUNTIME_PATH_ENV:()=>AG});import{spawn as $M}from"node:child_process";import{basename as ZM}from"node:path";import{augmentNodeCommandForDebug as QM,withResolvedClineBuildEnv as JM}from"@cline/shared";function OW($){if($ instanceof Error)return $;return Error(String($))}var AG="CLINE_JS_RUNTIME_PATH";function LG($){let Z=$?.trim();if(!Z)return!1;let Q=ZM(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function qW($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[AG]?.trim();if(Q)return Q;let J=$.execPath?.trim()||process.execPath;if(LG(J))return J;for(let W of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=W?.trim();if(X&&LG(X))return X}return"node"}function OG($,Z={}){let Q=qW({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return QM([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class j6{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=OG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=$M(Z[0]??qW(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:JM(process.env),windowsHide:!0});this.process=Q;let J="",W=(X)=>{let j=J+X;J=j.length>4000?j.slice(-4000):j};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{W(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${OW(X).message}`))}),Q.on("exit",(X,j)=>{this.process=null;let Y=J.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(j)})${Y?`: ${Y}`:""}`))})}async call($,Z,Q={}){this.start();let J=this.process;if(!J||J.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,X={type:"call",id:W,method:$,args:Z};return await new Promise((j,Y)=>{let V={resolve:(B)=>j(B),reject:Y};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,V);try{J.send(X,(B)=>{if(!B)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${OW(B).message}`))})}catch(B){this.clearPendingRequest(W),Y(OW(B))}})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function XM($){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 U5($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function jM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function YM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=NG($).resolve(`${jM()}/package.json`),J=Y6(AQ(Q),"extensions","plugin-sandbox-bootstrap.js");return fW(J)?J:void 0}catch{return}}function VM(){let $=process.execPath?.trim();if(!$)return;let Z=Y6(AQ(AQ($)),"extensions","plugin-sandbox-bootstrap.js");return fW(Z)?Z:void 0}function BM(){let $=AQ(WM(import.meta.url)),Z=NG(import.meta.url),Q=[Y6($,"plugin-sandbox-bootstrap.js"),Y6($,"extensions","plugin-sandbox-bootstrap.js"),Y6($,"agents","plugin-sandbox-bootstrap.js"),YM(),VM()];for(let X of Q.filter((j)=>typeof j==="string"))if(fW(X))return{file:X};let J=Y6($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(J)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(J)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
221
|
+
`)}}var zW=BM();function TW($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let J=process.env[Q];if(J){let W=Number(J);if(Number.isInteger(W)&&W>0)return W}}return Z}async function V6($){let Z=new j6({name:"plugin-sandbox",..."file"in zW?{bootstrapFile:zW.file}:{bootstrapScript:zW.script},onEvent:$.onEvent}),Q=TW($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),J=TW($.hookTimeoutMs,3000),W=TW($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger),telemetryEnabled:$.telemetryAvailable===!0},j,Y=()=>{return j??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{j=void 0}),j},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(K){throw await Z.shutdown().catch(()=>{}),K}let B=V.plugins.map(XM);return{extensions:B.map((K)=>{let G={name:K.name,__clinePluginPath:K.pluginPath,manifest:K.manifest,setup:(F)=>{KM(F,Z,K,W,Y),GM(F,Z,K,W,Y),FM(F,Z,K,W,Y),DM(F,Z,K,W,Y),UM(F,K)}};return G.hooks=LM(Z,K,J,Y),G}),failures:V.failures,pluginPaths:B.map((K)=>K.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function HM($){let Z=$ instanceof Error?$.message:String($);return/cyclic|circular|bigint/i.test(Z)}function NW($,Z=new WeakSet){if($===null||typeof $!=="object")return typeof $==="function"||typeof $==="symbol"||typeof $==="bigint"?void 0:$;if(Z.has($))return;let Q=$;if(typeof Q.toJSON==="function")try{return Q.toJSON()}catch{return}Z.add($);try{if(Array.isArray($))return $.map((W)=>NW(W,Z)??null);let J={};for(let[W,X]of Object.entries($)){let j=NW(X,Z);if(j!==void 0)J[W]=j}return J}finally{Z.delete($)}}var zG=new Set;function fG($,Z,Q){let J=`${$}:${Z}`;if(zG.has(J))return;zG.add(J);let W=Q instanceof Error?Q.message:String(Q);console.warn(`[plugin-sandbox] ${$} "${Z}" received a payload that is not JSON-serializable (${W}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function RG($,Z,Q){try{return await $(Z)}catch(J){if(!HM(J))throw J;return Q(J),await $(NW(Z))}}function KM($,Z,Q,J,W){for(let X of Q.contributions?.tools??[]){let j={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(Y,V)=>{return await RG(async(H)=>{let{input:K,context:G}=H;try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}catch(F){if(!U5(F))throw F;return await W(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}},{input:Y,context:V},(H)=>fG("tool",X.name,H))}};$.registerTool(j)}}function GM($,Z,Q,J,W){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(j)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}catch(Y){if(!U5(Y))throw Y;return await W(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}}})}function FM($,Z,Q,J,W){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}catch(j){if(!U5(j))throw j;return await W(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}}:X.content??""})}function UM($,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 DM($,Z,Q,J,W){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(j){try{let Y=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return TG(Y)?Y:j}catch(Y){if(!U5(Y))throw Y;await W();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return TG(V)?V:j}}})}function TG($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function _M($,Z,Q,J,W){return async(X)=>{return await RG(async(Y)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}catch(V){if(!U5(V))throw V;return await W(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}},X,(Y)=>fG("hook",Q,Y))}}function LM($,Z,Q,J){let W={};for(let X of Z.hooks??[])W[X]=_M($,Z.pluginId,X,Q,J);return Object.keys(W).length>0?W:void 0}var MW="package.json",fM="package";function D5($){return TM($)}function _5($){return zM($)}function RM($){try{return zQ($)&&OM($).isDirectory()}catch{return!1}}function EW($){let Z=[],Q=new Set;for(let J of $){let W=qQ(J);if(Q.has(W))continue;Q.add(W),Z.push(W)}return Z}function EG($){let Z=EW($);return QQ(Z)}function CG($){return D5($).flatMap((Z)=>_5(Z)).filter((Z)=>zQ(Z))}function MM($,Z){let Q=[];for(let J of $)try{Q.push(...MG([J],Z))}catch{}return Q}function RW($){return typeof $==="object"&&$!==null}function EM($){try{let Z=JSON.parse(AM(TQ($,MW),"utf8"));if(!RW(Z)||!RW(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let J=[];for(let W of Q){if(typeof W==="string"){J.push(W);continue}if(!RW(W)||!Array.isArray(W.paths))continue;for(let X of W.paths)if(typeof X==="string")J.push(X)}return J}catch{return[]}}function wG($,Z){let Q=qQ(Z);return EM($).some((J)=>qQ($,J)===Q)}function CM($,Z){return qM($)===fM&&zQ(TQ(OQ($),MW))&&wG(OQ($),Z)}function wM($){let Z=qQ($),Q=[],J=OQ(Z);while(!0){if(CM(J,Z)){Q.push(J);break}if(zQ(TQ(J,MW))){if(wG(J,Z))Q.push(J);break}let W=OQ(J);if(W===J)break;J=W}return EW(Q)}function X$($={}){let Z=$.cwd??process.cwd(),Q=CG($.workspacePath),J=MG($.pluginPaths??[],Z);return EG([...J,...Q])}function PM($={}){let Z=$.cwd??process.cwd(),Q=CG($.workspacePath),J=MM($.pluginPaths??[],Z);return EG([...J,...Q])}function j$($){let Z=[];for(let Q of $)for(let J of wM(Q)){let W=TQ(J,NM);if(RM(W))Z.push(W)}return EW(Z)}function PG($={}){return j$(PM($))}async function B6($={}){let Z=X$($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let J=await d2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:J.plugins,failures:J.failures,pluginPaths:J.pluginPaths,warnings:J.warnings}}let Q=await V6({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,telemetryAvailable:Boolean($.telemetry),providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as SM}from"node:child_process";import{promisify as bM}from"node:util";var yM=bM(SM),SG="cline checkpoint session=";function bG($){return $.includes(SG)}function CW($,Z){$?.log(Z,{severity:"warn"})}function kM($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let J=Q.latest,W=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")return;return{latest:J,history:W}}async function p2($,Z){let Q=await yM("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function wW($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:J}=await p2($,["for-each-ref","--format=%(refname)",Q]),W=J.trim().split(`
|
|
222
|
+
`).filter(Boolean);await Promise.allSettled(W.map((X)=>p2($,["update-ref","-d",X])))}catch{}}async function yG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((J)=>p2($,["update-ref",`refs/cline/checkpoints/${Z}/${J.runCount}`,J.ref])))}function IM($,Z){let Q=$.findIndex((J)=>J.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((J,W)=>W===Q?Z:J)}function kG($){let Z,Q,J=async()=>{if(Z!==void 0)return Z;try{Z=(await p2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},W=async(X)=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:X});if(!await J())return;let j=async(H)=>{try{let G=(await p2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:X,kind:"commit"}}catch(K){CW($.logger,`${H}: ${K instanceof Error?K.message:String(K)}`);return}},Y=`${SG}${$.sessionId} run=${X}`,V="";try{V=(await p2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return CW($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),j("Checkpoint HEAD fallback failed")}if(!V)return j("Checkpoint HEAD fallback failed");let B=`refs/cline/checkpoints/${$.sessionId}/${X}`;try{await p2($.cwd,["update-ref",B,V])}catch(H){CW($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:V,createdAt:Date.now(),runCount:X,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId==null)Q=X.messages.length;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1)return;let j=X.messages.slice(Q??Math.max(0,X.messages.length-1));if(Q=void 0,y$(j)<1)return;let Y=y$(X.messages);if(Y<1)return;let V=await W(Y);if(!V)return;let B=await $.readSessionMetadata(),H=kM(B);if(H?.latest.ref===V.ref)return;let K=IM(H?.history??[],V);await $.writeSessionMetadata({...B??{},checkpoint:{latest:V,history:K}});return}}}import{appendFileSync as aM,readFileSync as oM}from"node:fs";import{join as sM}from"node:path";import{augmentNodeCommandForDebug as tM}from"@cline/shared";import{ensureHookLogDir as hG}from"@cline/shared/storage";function H6($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as hM,readdirSync as xM}from"node:fs";import{basename as gM,extname as vM,join as mM}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as NQ,resolveHooksConfigSearchPaths as cM}from"@cline/shared/storage";function L5($){return cM($)}var K6;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(K6||={});var A5={["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"},uM=new Map(Object.values(K6).map(($)=>[$.toLowerCase(),$])),dM=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function O5($){let Z=vM($).toLowerCase();if(!dM.has(Z))return;let Q=gM($,Z).trim().toLowerCase();return uM.get(Q)}function r$($){let Z=[],Q=new Set,J=L5($).filter((W)=>hM(W));for(let W of J)try{for(let X of xM(W,{withFileTypes:!0})){if(!X.isFile())continue;let j=O5(X.name);if(!j)continue;let Y=mM(W,X.name);if(Q.has(Y))continue;Q.add(Y),Z.push({fileName:j,hookEventName:A5[j],path:Y})}}catch{}return Z.sort((W,X)=>W.path.localeCompare(X.path))}import{spawn as pM}from"node:child_process";import{augmentNodeCommandForDebug as lM,withResolvedClineBuildEnv as iM}from"@cline/shared";function rM($){let Z=$.trim();if(!Z)return{};let J=Z.split(`
|
|
223
|
+
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),W=J.length>0?J[J.length-1]:Z;try{return{parsedJson:JSON.parse(W)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function IG($,Z){let Q=$ instanceof Error?$:Error(String($)),J=Q,W=Z.join(" ");if(J.code==="EACCES"){let j=Error(`Failed to execute hook command "${W}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return j.code=J.code,j}let X=Error(`Failed to execute hook command "${W}": ${Q.message}`);return X.code=J.code,X}async function nM($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((J,W)=>{let X=!1,j=(B)=>{if(X)return;X=!0,B()},Y=(B)=>{let H=B.code;return H==="EPIPE"||H==="EOF"||H==="ERR_STREAM_DESTROYED"},V=(B)=>{if(Y(B)){j(J);return}j(()=>W(B))};Q.on("error",V),Q.once("close",()=>Q.off("error",V)),Q.end(Z,(B)=>{if(B){if(Y(B)){j(J);return}j(()=>W(B));return}j(J)})})}async function Y$($,Z){let Q=lM(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let J=!!Z.detached,W=pM(Q[0],Q.slice(1),{cwd:Z.cwd,env:iM(Z.env),stdio:J?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J,windowsHide:!0}),X="",j="",Y=!1,V;if(!J&&(!W.stdout||!W.stderr))throw W.kill("SIGKILL"),Error("runSubprocessEvent failed to create stdout/stderr pipes");W.stdout?.on("data",(K)=>{X+=K.toString()}),W.stderr?.on("data",(K)=>{j+=K.toString()});let B=new Promise((K,G)=>{W.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:W.pid??void 0,detached:J})}catch{}K()}),W.once("error",(F)=>G(IG(F,Q)))}),H=new Promise((K,G)=>{W.once("error",(F)=>{if(V)clearTimeout(V);G(IG(F,Q))}),W.once("close",(F)=>{if(V)clearTimeout(V);let{parsedJson:U,parseError:_}=rM(X);K({exitCode:F,stdout:X,stderr:j,parsedJson:U,parseError:_,timedOut:Y})})});if(J)H.catch(()=>{return});if(!J&&(Z.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,W.kill("SIGKILL")},Z.timeoutMs);if(await Promise.race([Promise.all([B,nM(W,JSON.stringify($))]),H]),J){W.unref();return}return await H}function fQ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))Z[Q]=typeof J==="string"?J:JSON.stringify(J);return Z}function q5($,Z,Q){let J=Q instanceof Error?`: ${Q.message}`:"",W=`${Z}${J}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function eM($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
|
|
224
224
|
`),J=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:J.length>0?J:void 0}}function $E($){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 PW($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function b0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",J={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:J,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}async function SW($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await Y$($,Z)}catch(Q){let J=JE(Z.command,process.platform,Q);if(!J)throw Q;return await Y$($,{...Z,command:J})}}function ZE($){try{let Q=oM($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let J=Q.slice(2).trim();if(!J)return;let W=J.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function QE($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function JE($,Z=process.platform,Q){if(Z!=="win32"||!QE(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function xG($){if($.length===0)return;let[Z,...Q]=$,J=Z.replace(/\\/g,"/").toLowerCase(),W=J.split("/").at(-1)??J;if(W==="env")return xG(Q);if(W==="bash"||W==="sh"||W==="zsh")return[W,...Q];if(W==="python3"||W==="python")return process.platform==="win32"?["py","-3",...Q]:[W,...Q];return $}function WE($){let Z=ZE($);if(Z&&Z.length>0)return[...xG(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 tM(["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 XE($){let Z={};for(let Q of r$($)){if(!Q.hookEventName)continue;let J=Q.hookEventName,W=Z[J]??[];W.push(WE(Q.path)),Z[J]=W}return Z}async function jE($){let Z;for(let Q of $.commands){let J=Q.join(" ");try{let W=await SW($.payload,{command:Q,cwd:$.cwd,env:process.env,detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){q5($.logger,`hook command timed out: ${J}`);continue}if(W?.parseError){q5($.logger,`hook command returned invalid JSON control output: ${J} (${W.parseError})`);continue}Z=eM(Z,$E(W?.parsedJson))}catch(W){q5($.logger,`hook command failed: ${J}`,W)}}return Z}async function l2($){if($.detached){for(let Z of $.commands){let Q=Z.join(" ");SW($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:!0}).catch((J)=>{q5($.logger,`hook command failed: ${Q}`,J)})}return}await Promise.all($.commands.map(async(Z)=>{let Q=Z.join(" ");try{await SW($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:$.detached})}catch(J){q5($.logger,`hook command failed: ${Q}`,J)}}))}function n$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function bW($,Z){return{...n$($.snapshot),userMessage:Z}}function gG($){return{...n$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function vG($){return{...n$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function mG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function YE($){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 G6($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(J)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...J})}
|
|
225
|
-
`,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??sM(hG(),"hooks.jsonl");hG(j),aM(j,W,"utf8")};return{beforeRun:async(J)=>{let W=bW(J,"");Q({...b0(W,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(J)=>{let W=gG(J);Q({...b0(W,Z),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:fZ(W.call.input)}});return},afterTool:async(J)=>{let W=vG(J);Q({...b0(W,Z),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:fZ(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:J,result:W})=>{let X=n$(J);if(W.status==="completed"){Q({...b0(X,Z),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||PW(W.error?.message)){Q({...b0(X,Z),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...b0(X,Z),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(J)=>{if(J.type!=="message-added"||J.message.role!=="user")return;let W=bW({snapshot:J.snapshot},mG(J.message.content));Q({...b0(W,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function z5($){let Z=XE($.workspacePath);if(!Object.values(Z).some((K)=>K.length>0))return;let J=async(K,G)=>{let F=Z[G]??[];if(F.length===0)return;await l2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:G==="agent_resume"?{...b0(K,$),hookName:G,taskResume:{taskMetadata:{},previousState:{}}}:{...b0(K,$),hookName:G,taskStart:{taskMetadata:{}}}})},W=async(K)=>{let G=Z.prompt_submit??[];if(G.length>0)await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"prompt_submit",userPromptSubmit:{prompt:K.userMessage,attachments:[]}}})},X=async(K)=>{let G=Z.tool_call??[];if(G.length===0)return;return jE({commands:G,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...b0(K,$),hookName:"tool_call",iteration:K.iteration,tool_call:{id:K.call.id,name:K.call.name,input:K.call.input},preToolUse:{toolName:K.call.name,parameters:fZ(K.call.input)}}})},j=async(K)=>{let G=Z.tool_result??[];if(G.length===0)return;await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"tool_result",iteration:K.iteration,tool_result:K.record,postToolUse:{toolName:K.record.name,parameters:fZ(K.record.input),result:typeof K.record.output==="string"?K.record.output:JSON.stringify(K.record.output),success:!K.record.error,executionTimeMs:K.record.durationMs}}})},Y=async(K)=>{let G=Z.agent_end??[];if(G.length===0)return;await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_end",iteration:K.iteration,turn:K.turn,taskComplete:{taskMetadata:{}}}})},V=async(K)=>{let G=Z.agent_error??[];if(G.length===0)return;await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_error",iteration:K.iteration,error:{name:K.error.name,message:K.error.message,stack:K.error.stack}}})},B=async(K)=>{if(PW(K.reason)){let F=Z.agent_abort??[];if(F.length>0)await l2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_abort",reason:K.reason,taskCancel:{taskMetadata:{}}}})}let G=Z.session_shutdown??[];if(G.length===0)return;await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"session_shutdown",reason:K.reason}})},H={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)H.beforeRun=async(K)=>{let G=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await J(n$(K.snapshot),G);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(K)=>{if(K.type!=="message-added"||K.message.role!=="user")return;await W(bW({snapshot:K.snapshot},mG(K.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(K)=>{let G=await X(gG(K));return YE(G)};if((Z.tool_result?.length??0)>0)H.afterTool=async(K)=>{await j(vG(K));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:K,result:G})=>{if(G.status!=="completed")return;await Y({...n$(K),iteration:G.iterations,turn:{outputText:G.outputText,status:G.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let K=H.afterRun;H.afterRun=async(G)=>{await K?.(G);let{snapshot:F,result:U}=G;if(U.status==="aborted"||PW(U.error?.message)){await B({...n$(F),reason:U.error?.message});return}if(U.error)await V({...n$(F),iteration:U.iterations,error:U.error})}}return H}function F6($){return H6("core.hook_config_files",z5($))}function i2($,Z){let Q=$.map((J)=>J[Z]).filter((J)=>typeof J==="function");if(Q.length===0)return;return async(J)=>{let W;for(let X of Q){let j=await X(J);if(!j||typeof j!=="object")continue;let Y=j;W={...W??{},...Y,stop:W?.stop===!0||Y.stop===!0?!0:Y.stop,options:W?.options||Y.options?{...W?.options??{},...Y.options??{}}:void 0}}return W}}function r2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:i2(Z,"beforeRun"),afterRun:i2(Z,"afterRun"),beforeModel:i2(Z,"beforeModel"),afterModel:i2(Z,"afterModel"),beforeTool:i2(Z,"beforeTool"),afterTool:i2(Z,"afterTool"),onEvent:i2(Z,"onEvent")}}var cG={};w(cG,{normalizeRuntimeCapabilities:()=>y0});function y0(...$){let Z,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)Z={...Z??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let J=Z&&Object.keys(Z).length>0;if(!J&&!Q)return;return{...J?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var oG={};w(oG,{toProviderConfig:()=>J1,emptyStoredProviderSettings:()=>s$,StoredProviderSettingsSchema:()=>L6,StoredProviderSettingsEntrySchema:()=>rZ,ProviderSettingsSchemaTyped:()=>_6});import{z as o$}from"zod";var aG={};w(aG,{toProviderConfig:()=>J1,safeParseSettings:()=>iZ,safeCreateProviderConfig:()=>uW,parseSettings:()=>lZ,normalizeProviderId:()=>D6,isBuiltInProviderId:()=>mW,createProviderConfig:()=>cW,SapSettingsSchema:()=>uZ,ReasoningSettingsSchema:()=>gZ,ProviderSettingsSchema:()=>a$,ProviderProtocolSchema:()=>IZ,ProviderIdSchema:()=>M5,ProviderClientSchema:()=>hZ,OcaSettingsSchema:()=>dZ,ModelCatalogSettingsSchema:()=>pZ,GcpSettingsSchema:()=>mZ,BUILT_IN_PROVIDER_IDS:()=>vW,BUILT_IN_PROVIDER:()=>R5,AzureSettingsSchema:()=>cZ,AwsSettingsSchema:()=>vZ,AuthSettingsSchema:()=>xZ});import*as v0 from"@cline/llms";import{ReasoningLevelSchema as hE}from"@cline/shared";import{z as P}from"zod";var nG={};w(nG,{resolveProviderConfig:()=>f5,getProviderConfig:()=>kZ,getLiveModelsCatalog:()=>U6,clearPublicModelsCatalogCache:()=>PE,clearPrivateModelsCatalogCache:()=>gW,clearLiveModelsCatalogCache:()=>xW,OPENAI_COMPATIBLE_PROVIDERS:()=>N5,DEFAULT_MODELS_CATALOG_URL:()=>PZ});import*as Z0 from"@cline/llms";function yW($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let J of[Q.id,Q.name,Q.model])if(typeof J==="string"&&J.trim())return J.trim()}return""}).filter((Z)=>Z.length>0)}function VE($,Z){let Q=yW($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let J=$,W=yW(J.data??J.models);if(W.length>0)return W;if(J.models&&typeof J.models==="object"&&!Array.isArray(J.models)){let j=Object.keys(J.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let X=J.providers?.[Z];if(X&&typeof X==="object"){let Y=yW(X.models??X);if(Y.length>0)return Y}return[]}async function RZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return VE(await Q.json(),Z)}function uG($){return $.replace(/\/+$/,"")}function MZ($,Z,Q){let J=Q?.trim();if(!J)return;let W=$?.trim();if(!W||!Z?.trim())return J;try{let X=new URL(J),j=new URL(Z),Y=new URL(W);if(X.origin!==j.origin)return J;let V=uG(j.pathname),B=uG(Y.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=X.pathname;return Y.search=X.search,Y.hash=X.hash,Y.toString()}catch{return J}}function BE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function HE($){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 KE=Object.values(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:BE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pG=Object.fromEntries(KE.map(($)=>[$.id,$]));function GE($){return pG[$]}function FE(){return Object.fromEntries(Object.entries(pG).filter(([,$])=>HE($)))}function lG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var PZ="https://models.dev/api.json",UE=600000,iG=300000,DE=5000,wZ=new Map,T5=new Map,kW=new Map,EZ=new Map;async function _E(){return Z0.getGeneratedProviderModels()}async function LE($,Z={},Q={},J={},W={},X={}){if($==="litellm")return Z0.sortModelsByReleaseDate(J);let j=await _E(),Y=Z0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>j[K]??{}));if(Boolean(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return Z0.sortModelsByReleaseDate({...W,...X});if($==="openai-codex")return Z0.sortModelsByReleaseDate({...Z,...Z0.filterOpenAICodexModels(Q),...W,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...X};let H=Z0.sortModelsByReleaseDate({...V,...Z,...Q,...J,...W});if($==="cline")return Z0.sortModelsByReleaseDate({...Z0.preferCanonicalModelIds(H,Z0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return Z0.sortModelsByReleaseDate({...H,...X})}function AE($,Z){let Q=Z0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((J)=>Z[J]??{}))}function SZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function hW($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function OE($){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 qE($,Z){return`${$}:${SZ(Z.baseUrl)}:${OE(hW(Z)??"")}`}async function bZ($,Z,Q=DE){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await fetch($,{...Z,signal:J.signal})}finally{clearTimeout(W)}}function n2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function yZ($,Z){let Q=["streaming","tools"];return n2(Q,"images",Boolean(Z.supportsImages)),n2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),n2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function zE($,Z){let Q=await bZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];X[Y]=yZ(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function dG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function TE($,Z){let Q=await bZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;X[Y]=yZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function NE($,Z){let J=`${(SZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await bZ(J,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let j=(await W.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],K=V.supported_sampling_parameters??[],G=V.input_modalities??[],F=["streaming"];n2(F,"tools",H.includes("tools")),n2(F,"reasoning",H.includes("reasoning")),n2(F,"temperature",K.includes("temperature")),n2(F,"images",G.includes("image"));let U={input:dG(V.pricing?.prompt),output:dG(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:U.input!==void 0||U.output!==void 0?U:void 0,status:"active"}}return Y}function fE($){let Z=SZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function RE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function ME($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,J=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${J}`}async function EE($,Z){let Q=fE($.baseUrl),J=[],W=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of RE(Q))for(let[j,Y]of W)try{let V=await bZ(X,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],K={};for(let G of H){let F=G.model_name?.trim(),_=G.litellm_params?.model?.trim()||F;if(!_)continue;let L=G.model_info,O=yZ(_,{name:F??_,maxTokens:L?.max_output_tokens??L?.max_tokens,maxInputTokens:L?.max_input_tokens??L?.max_tokens,supportsImages:L?.supports_vision,supportsPromptCache:L?.supports_prompt_caching,supportsReasoning:L?.supports_reasoning});if(K[_]=O,F)K[F]={...O,id:F,name:F}}return K}J.push(`${new URL(X).pathname} (${j}): ${await ME(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);J.push(`${new URL(X).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${J.join("; ")}`)}var rG={baseten:zE,hicap:TE,litellm:EE,poolside:NE},IW=new Map,CZ=new Map;function CE($,Z){return`${$}:${SZ(Z.baseUrl)}`}async function wE($,Z,Q){let J=Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=MZ(Q.baseUrl,J?.provider.baseUrl,J?.provider.modelsSourceUrl);if(!W)return{};let X=Z?.cacheTtlMs??iG,j=CE($,Q),Y=Date.now(),V=IW.get(j);if(V&&V.expiresAt>Y)return V.data;let B=CZ.get(j);if(B)return B;let H=RZ(W,$).then((K)=>{let G=Object.fromEntries(K.map((F)=>[F,yZ(F,{name:F})]));return IW.set(j,{data:G,expiresAt:Y+X}),G}).finally(()=>{CZ.delete(j)});return CZ.set(j,H),H}function PE(){IW.clear(),CZ.clear()}async function SE($,Z){let Q=hW(Z);if(!Q)return{};let J=rG[$];if(!J)return{};return J(Z,Q)}function bE($,Z,Q){if(!Q)return!1;if(!rG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(hW(Q))}async function yE($,Z,Q){let J=Z?.cacheTtlMs??iG,W=qE($,Q),X=Date.now(),j=kW.get(W);if(j&&j.expiresAt>X)return j.data;let Y=EZ.get(W);if(Y)return Y;let V=SE($,Q).then((B)=>{return kW.set(W,{data:B,expiresAt:X+J}),B}).finally(()=>{EZ.delete(W)});return EZ.set(W,V),V}async function kE($){return Z0.fetchLiveProviderModels($,globalThis.fetch)}async function U6($={}){let Z=$.url??PZ,Q=$.cacheTtlMs??UE,J=Date.now(),W=wZ.get(Z);if(W&&W.expiresAt>J)return W.data;let X=T5.get(Z);if(X)return X;let j=kE(Z).then((Y)=>{return wZ.set(Z,{data:Y,expiresAt:J+Q}),Y}).finally(()=>{T5.delete(Z)});return T5.set(Z,j),j}function xW($){if($){wZ.delete($),T5.delete($);return}wZ.clear(),T5.clear()}function gW(){kW.clear(),EZ.clear()}function IE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:lG(Q.capabilities)}]))}var N5=IE(FE());function kZ($){let Z=GE($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:lG(Z.capabilities)}}async function f5($,Z,Q){let J=kZ($);if(!J)return;try{let W=Z?.loadLatestOnInit?await U6(Z):void 0,X=W?AE($,W):{},j=Q&&bE($,Z,Q)?await yE($,Z,Q):{},V=Boolean(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:J.modelId,baseUrl:J.baseUrl}:Q,B=V?await wE($,Z,V).catch(()=>({})):{},H=await LE($,J.knownModels,X,j,B,Q?.knownModels);return{...J,knownModels:H}}catch(W){if(Z?.failOnError)throw W;if($==="litellm")return{...J,knownModels:{}};return J}}var R5=v0.BUILT_IN_PROVIDER,vW=v0.BUILT_IN_PROVIDER_IDS,mW=v0.isBuiltInProviderId,D6=v0.normalizeProviderId,M5=P.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),IZ=P.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),hZ=P.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),xZ=P.object({apiKey:P.string().optional(),accessToken:P.string().optional(),refreshToken:P.string().optional(),expiresAt:P.number().int().positive().optional(),accountId:P.string().optional(),organizationId:P.string().optional(),organizationName:P.string().optional(),memberId:P.string().optional(),metadata:P.record(P.string(),P.unknown()).optional()}),gZ=P.object({enabled:P.boolean().optional(),effort:hE.optional(),budgetTokens:P.number().int().positive().optional()}),vZ=P.object({accessKey:P.string().optional(),secretKey:P.string().optional(),sessionToken:P.string().optional(),region:P.string().optional(),profile:P.string().optional(),authentication:P.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:P.boolean().optional(),useCrossRegionInference:P.boolean().optional(),useGlobalInference:P.boolean().optional(),endpoint:P.string().url().optional(),customModelBaseId:P.string().optional()}),mZ=P.object({projectId:P.string().optional(),region:P.string().optional()}),cZ=P.object({apiVersion:P.string().optional(),useIdentity:P.boolean().optional()}),uZ=P.object({clientId:P.string().optional(),clientSecret:P.string().optional(),tokenUrl:P.string().url().optional(),resourceGroup:P.string().optional(),deploymentId:P.string().optional(),useOrchestrationMode:P.boolean().optional(),api:P.enum(["orchestration","foundation-models"]).optional(),defaultSettings:P.record(P.string(),P.unknown()).optional()}),dZ=P.object({mode:P.enum(["internal","external"]).optional(),usePromptCache:P.boolean().optional()}),pZ=P.object({loadLatestOnInit:P.boolean().optional(),loadPrivateOnAuth:P.boolean().optional(),url:P.string().url().optional(),cacheTtlMs:P.number().int().positive().optional(),failOnError:P.boolean().optional()}),a$=P.object({provider:M5,apiKey:P.string().optional(),auth:xZ.optional(),model:P.string().optional(),protocol:IZ.optional(),client:hZ.optional(),routingProviderId:M5.optional(),maxTokens:P.number().int().positive().optional(),contextWindow:P.number().int().positive().optional(),baseUrl:P.string().url().optional(),headers:P.record(P.string(),P.string()).optional(),timeout:P.number().int().positive().optional(),reasoning:gZ.optional(),aws:vZ.optional(),gcp:mZ.optional(),azure:cZ.optional(),sap:uZ.optional(),oca:dZ.optional(),region:P.string().optional(),apiLine:P.enum(["china","international"]).optional(),capabilities:P.array(P.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:pZ.optional()});function lZ($){return a$.parse($)}function iZ($){return a$.safeParse($)}function xE($){return $.protocol==="openai-responses"||$.client==="openai"}function J1($,Z={}){let Q=$.provider,J=D6(Q),W=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",j=X==="none"?void 0:X,Y=N5[J],V=Object.assign({},...v0.resolveProviderModelCatalogKeys(J).map((_)=>v0.getGeneratedModelsForProvider(_))),B=Object.keys(V)[0],H=h8(J,$),K=$.baseUrl??v0.resolveProviderApiLineBaseUrl(J,$.apiLine)??(J==="oca"?$.oca?.mode==="internal"?b9:y9:Y?.baseUrl),G=$.routingProviderId??(xE($)&&J!==R5.OPENAI_NATIVE?R5.OPENAI_NATIVE:void 0),F=W?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,U={providerId:Q,clientType:$.client,routingProviderId:G,modelId:$.model??Y?.modelId??B??"default",...W?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:K,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(U).filter(([_,L])=>L!==void 0))}function cW($){let Z=lZ($);return J1(Z)}function uW($){let Z=iZ($);if(Z.success)return{success:!0,config:J1(Z.data)};return{success:!1,error:Z.error}}var _6=a$;var rZ=o$.object({settings:a$,updatedAt:o$.string().datetime(),tokenSource:o$.enum(["manual","oauth","migration"]).default("manual")}),L6=o$.object({version:o$.literal(1),lastUsedProvider:o$.string().min(1).optional(),providers:o$.record(o$.string(),rZ)});function s$(){return{version:1,providers:{}}}O1();var WF={};w(WF,{InMemoryWorkspaceManager:()=>O6});import{upsertWorkspaceInfo as mE,WorkspaceManifestSchema as iW}from"@cline/shared";var JF={};w(JF,{withSessionGitMetadata:()=>aZ,readSessionGitMetadata:()=>ZF,readGitWorkspaceState:()=>pW,normalizeWorkspacePath:()=>S1,hasCurrentSessionGitMetadata:()=>dW,generateWorkspaceInfoWithDiagnostics:()=>E5,generateWorkspaceInfo:()=>A6,buildWorkspaceMetadataWithInfo:()=>lW,buildWorkspaceMetadata:()=>C5});import{basename as gE,resolve as vE}from"node:path";import{performance as sG}from"node:perf_hooks";import{processWorkspaceInfo as eG}from"@cline/shared";import $F from"simple-git";function ZF($){let Z=$?.git;if(!Z||typeof Z!=="object"||Array.isArray(Z))return{};let Q=Z;return{...typeof Q.url==="string"&&Q.url.trim()?{url:Q.url.trim()}:{},...typeof Q.branch==="string"&&Q.branch.trim()?{branch:Q.branch.trim()}:{}}}function aZ($,Z){let Q={...$??{}};if(!Z.url&&!Z.branch)return delete Q.git,Object.keys(Q).length>0?Q:void 0;let W={...Q.git&&typeof Q.git==="object"&&!Array.isArray(Q.git)?Q.git:{}};if(Z.url)W.url=Z.url;else delete W.url;if(Z.branch)W.branch=Z.branch;else delete W.branch;return Q.git=W,Q}function dW($,Z){let Q=ZF($);return Q.url===Z.url&&Q.branch===Z.branch}function QF($){let Z=$.find(({name:Q})=>Q==="origin")??$[0];return(Z?.refs.fetch||Z?.refs.push)?.trim()||void 0}function S1($){return vE($)}async function A6($){return(await E5($)).info}function tG($){let Z=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(Z)}function nZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function E5($){let Z=S1($),Q={rootPath:Z,hint:gE(Z)},J={},W;try{let X=$F({baseDir:Z});if(!await X.checkIsRepo())return{info:Q,vcsType:"none",gitState:J};try{let Y=await X.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let K=H.refs.fetch||H.refs.push;return`${H.name}: ${K}`});Q.associatedRemoteUrls=V;let B=QF(Y);if(B)J.url=B}}catch(Y){W??=nZ(Y)}try{let Y=(await X.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){if(!tG(Y))W??=nZ(Y)}try{let Y=(await X.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y,J.branch=Y}catch(Y){if(!tG(Y))W??=nZ(Y)}return{info:Q,vcsType:"git",gitState:J,error:W}}catch(X){return{info:Q,vcsType:"none",gitState:J,error:nZ(X)}}}async function pW($){try{let Z=$F({baseDir:S1($)});if(!await Z.checkIsRepo())return{};let[Q,J]=await Promise.all([Z.getRemotes(!0),Z.branch()]),W=QF(Q),X=J.current.trim();return{...W?{url:W}:{},...X?{branch:X}:{}}}catch{return}}async function C5($){let Z=await A6($);return eG(Z)}async function lW($){let Z=sG.now(),Q=await E5($),J=sG.now()-Z,W=Q.info;return{workspaceInfo:W,workspaceMetadata:eG(W),durationMs:J,vcsType:Q.vcsType,gitState:Q.gitState,initError:Q.error}}class O6{manifest;listeners=new Set;constructor($){this.manifest=iW.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await A6($);return this.manifest=mE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=S1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=iW.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let J=await this.addWorkspacePath(Z);return this.manifest=iW.parse({...this.manifest,currentWorkspacePath:J.rootPath}),this.emit({type:"workspace_switched",workspace:J}),J}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=S1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}q0();import{createHash as cE}from"node:crypto";var XF=new Set,jF=new Set;function uE($){return cE("sha256").update($).digest("hex")}function dE($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function YF($){if(!$.telemetry)return;let Z=uE($.rootPath),Q=$.rootCount??1;if(!XF.has(Z))XF.add(Z),H9($.telemetry,{root_count:Q,vcs_types:dE($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!jF.has(Z)){jF.add(Z);let J=Error($.initError.message);J.name=$.initError.errorType||"Error",K9($.telemetry,J,{fallback_to_single_root:!0,workspace_count:Q})}}function iE($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function rE($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let J=$.slice(0,3).map(iE).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${J}${W}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function nE($,Z){let Q=typeof $.thinking==="boolean",J=typeof $.reasoningEffort==="string";if(!Q&&!J)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...J?{effort:$.reasoningEffort}:{}}}function VF($,Z){return lE($,Z)}function aE($,Z,Q,J,W,X){let j=J.getProviderSettings($.providerId),Y=W||j?.modelCatalog?{...W??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=pE({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:L0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:J6,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),H={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:nE($,j?.reasoning),modelCatalog:Y},K={...J1(H),...V??{}};if(B)K.headers=B;if($.knownModels)K.knownModels=$.knownModels;if($.extensionContext)K.extensionContext=$.extensionContext;let F=$.fetch??K.fetch??X;if(F)K.fetch=F;return K}async function BF($){let{input:Z,sessionId:Q,providerSettingsManager:J,defaultTelemetry:W,defaultLogger:X,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:H,createSubAgentLifecycleCallbacks:K,createSpawnTool:G,localRuntime:F,readSessionMetadata:U,writeSessionMetadata:_}=$,L=W$(Z.config),{modelCatalogDefaults:O,userInstructionService:D,configExtensions:q,onTeamRestored:T,...z}=F??{},A=Object.keys(z).length>0?z:void 0,{workspaceInfo:R,workspaceMetadata:N,gitState:S,durationMs:y,vcsType:s,initError:c}=await lW(L),b=A?.extensionContext,r={...b??{},workspace:{...R,...b?.workspace??{}},session:{...b?.session??{},sessionId:Q},logger:b?.logger??A?.logger??X,telemetry:b?.telemetry??A?.telemetry??W};YF({telemetry:r.telemetry,rootPath:R.rootPath,workspaceInfo:R,rootCount:1,vcsType:s,durationMs:y,initError:c,featureFlagEnabled:!0});let O0=F6({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:A?.logger,workspaceInfo:R}),N$=sK(A?.hooks)?void 0:G6({rootSessionId:Q,workspacePath:L,workspaceInfo:R}),f$=r2([A?.hooks,N$]),X0;if(VF(q,"plugins"))try{X0=await B6({pluginPaths:A?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:R,session:r.session,client:r.client,user:r.user,logger:r.logger,telemetry:r.telemetry,automation:r.automation}),rE(X0.failures,X0.warnings,A?.logger)}catch(C0){let D2=C0 instanceof Error?C0.message:String(C0);A?.logger?.log?.(`plugin loading failed; continuing without plugins (${D2})`)}let R$=XW(O0?[O0]:void 0,XW(A?.extensions,JZ(X0?.extensions))),f1=VF(q,"plugins")?j$(X0?.pluginPaths??[]):void 0,p0={...Z.config,...A??{},sessionId:Q,hooks:f$,extensions:R$,extensionContext:r,telemetry:r.telemetry,logger:r.logger},M$=aE(p0,Q,Z.source,J,O,V),M0=r2([p0.hooks,p0.checkpoint?.enabled===!0?kG({cwd:p0.cwd,sessionId:Q,logger:p0.logger,createCheckpoint:p0.checkpoint?.createCheckpoint,readSessionMetadata:U,writeSessionMetadata:_}):void 0]),I0={...p0,providerConfig:M$,workspaceMetadata:N,hooks:M0},R1=Z.toolPolicies??p0.toolPolicies??Y,u=y0(j,Z.capabilities),x0=u?.requestToolApproval,h=u?.toolExecutors,H0=K?.(I0),E0=new O6({currentWorkspacePath:R.rootPath,workspaces:{[R.rootPath]:R}});return{effectiveInput:Z,config:I0,providerConfig:M$,workspaceMetadata:N,workspaceInfo:R,gitState:S,extensions:R$,hooks:M0,toolPolicies:R1,requestToolApproval:x0,pluginSandboxShutdown:X0?.shutdown,runtimeBuilderInput:{config:I0,hooks:M0,extensions:R$,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:H0?.onSubAgentEvent,onSubAgentStart:H0?.onSubAgentStart,onSubAgentEnd:H0?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:f1,configExtensions:q,toolExecutors:h,toolPolicies:R1,workspaceManager:E0,logger:I0.logger,telemetry:I0.telemetry,requestToolApproval:x0}}}import{existsSync as oZ,mkdirSync as oE,readdirSync as sE,rmdirSync as tE,rmSync as eE,unlinkSync as $C}from"node:fs";import{dirname as HF,join as w5}from"node:path";function V0(){return new Date().toISOString()}function P5($){if(!$||!oZ($))return;try{$C($)}catch{}}function ZC($){let Z=$6($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=W5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class rW{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return w5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!oZ(Z))oE(Z,{recursive:!0});return Z}sessionMessagesPath($){return w5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return w5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return w5(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!oZ(Z)){Z=HF(Z);continue}try{if(sE(Z).length>0)break;tE(Z)}catch{break}Z=HF(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!oZ($))return;try{eE($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:J,fileStem:W}=ZC($),X=this.sessionArtifactsDir(J);return{messagesPath:w5(X,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as QC}from"@cline/shared/storage";q0();function KF($,Z,Q,J,W){if(Q)F9($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});else G9($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});JC($.telemetry,{workspacePath:J})}function JC($,Z){let Q=QC("Hooks"),J=r$(Z.workspacePath),W=new Map;for(let X of J){let j=X.hookEventName??"unknown",Y=W.get(j)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;W.set(j,Y)}for(let[X,j]of W.entries())N9($,X,j.global,j.workspace)}function GF($,Z){for(let Q of Z.mentions)z9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)O9($,"file",Q.length);for(let Q of Z.ignoredMentions)q9($,"file","not_found",Q)}var _O={};w(_O,{ProviderSettingsManager:()=>K1});import{chmodSync as AO,existsSync as WV,mkdirSync as sc,readFileSync as tc,renameSync as ec,rmSync as $u,writeFileSync as Zu}from"node:fs";import{basename as OO,dirname as XV}from"node:path";import{resolveProviderSettingsPath as Qu}from"@cline/shared/storage";var f={};w(f,{writeModelsFileSync:()=>e7,writeHubDiscovery:()=>MQ,writeGlobalSettings:()=>g0,withHubStartupLock:()=>EQ,verifyHubConnection:()=>y1,updateMcpSettingsFileSync:()=>q1,updateMcpSettingsFile:()=>M6,updateMcpServerOAuthStateAsync:()=>n5,updateMcpServerOAuthState:()=>e2,updateLocalProvider:()=>S3,uninstallPlugin:()=>l7,uninstallMarketplaceSkill:()=>_3,uninstallMarketplacePlugin:()=>L3,uninstallMarketplaceMcpServerFromSettings:()=>U3,uninstallMarketplaceEntry:()=>AY,truncateNotificationBody:()=>h7,truncateCommandOutput:()=>R2,trimMessagesBeforeUserRun:()=>C7,toggleDisabledTool:()=>ZZ,toTeamProgressLifecycleEvent:()=>d6,toProviderConfig:()=>J1,toHubStatusUrl:()=>hX,toHubHealthUrl:()=>CQ,toHookConfigFileName:()=>O5,syncStoredProviderRegistration:()=>SY,syncPluginMcpServersToSettings:()=>d7,summarizeUsageFromMessages:()=>Q6,stripUtf8Bom:()=>nc,stopLocalHubServerGracefully:()=>nX,startLocalOAuthServer:()=>D1,startHubWebSocketServer:()=>T8,startHubServer:()=>nL,startClineDeviceAuth:()=>jJ,splitCoreSessionConfig:()=>Q7,spawnDetachedHubServerWithRetry:()=>I6,spawnDetachedHubServer:()=>uX,setToolAutoApproveGlobally:()=>lH,setTelemetryOptOutGlobally:()=>IH,setSdkLogger:()=>t3,setPlanActModeGlobally:()=>dH,setMcpServerDisabled:()=>s2,setDisabledTools:()=>cJ,setDisabledPlugin:()=>aH,setCompactionStrategyGlobally:()=>vH,setCompactionModeGlobally:()=>cH,setAutoUpdateEnabledGlobally:()=>xH,sendHubCommand:()=>l_,sdkDebug:()=>t,saveProviderOAuthCredentials:()=>O2,saveLocalProviderSettings:()=>gY,saveLocalProviderOAuthCredentials:()=>uY,sanitizeSessionToken:()=>m2,safeParseSettings:()=>iZ,safeCreateProviderConfig:()=>uW,runSubprocessEvent:()=>Y$,runHook:()=>o6,reviveTeamStateDates:()=>HZ,restartLocalHubIfIdleAfterStartupTimeout:()=>yQ,resolveWorkspaceHubOwnerContext:()=>GD,resolveWorkflowsConfigSearchPaths:()=>c5,resolveSkillsConfigSearchPaths:()=>v5,resolveSharedHubOwnerContext:()=>a0,resolveSessionBackend:()=>Dj,resolveRulesConfigSearchPaths:()=>m5,resolveProviderConfig:()=>f5,resolveProviderApiKeyFromSettings:()=>FJ,resolveProductionHubOwnerContext:()=>B1,resolvePluginSkillDirectoriesFromPaths:()=>j$,resolvePluginConfigSearchPaths:()=>D5,resolveModelsRegistryPath:()=>u1,resolveMessageDisplayRole:()=>_J,resolveMcpServerRegistrations:()=>W1,resolveMarketplaceMcpServerName:()=>r7,resolveLocalClineAuthToken:()=>pY,resolveHubUrl:()=>fj,resolveHubOwnerContext:()=>F$,resolveHubEndpointOptions:()=>V1,resolveHubBuildId:()=>RQ,resolveHooksConfigSearchPaths:()=>L5,resolveDisabledToolNames:()=>P1,resolveDisabledPluginPaths:()=>o4,resolveDefaultMcpSettingsPath:()=>J0,resolveDefaultHubPort:()=>k6,resolveDefaultHubPathname:()=>cX,resolveDefaultHubHost:()=>mX,resolveCoreSelectedToolIds:()=>GZ,resolveCoreDistinctId:()=>o0,resolveCoreDeviceId:()=>v6,resolveCompatibleLocalHubUrl:()=>_7,resolveClineDir:()=>VD,resolveClineDataDir:()=>Y8,resolveAndLoadAgentPlugins:()=>B6,resolveAgentPluginPaths:()=>X$,requestHubShutdown:()=>D7,requestDesktopToolApproval:()=>QY,removePluginMcpServersFromSettings:()=>p7,removePersistedConnectorConnection:()=>o3,rememberRecoverableLocalHubUrl:()=>X2,registerRemoteConfigSessionBlobUpload:()=>X3,registerMcpServersFromSettingsFile:()=>$8,registerDisposable:()=>ic,refreshProviderModelsFromSource:()=>vY,refreshOpenAICodexToken:()=>S9,refreshOcaToken:()=>I9,refreshClineToken:()=>w9,reconnectPersistedConnectors:()=>F4,readToolAutoApproveGlobally:()=>pH,readSessionCheckpointHistory:()=>L8,readRemoteConfigSessionBlobUploadMetadata:()=>rj,readPlanActModeGlobally:()=>uH,readModelsFileSync:()=>K4,readHubDiscovery:()=>R0,readGlobalSettings:()=>j0,readCompactionStrategyGlobally:()=>gH,readCompactionModeGlobally:()=>mH,readBearerToken:()=>tQ,projectSessionCompactionState:()=>b$,probeHubServer:()=>U$,probeHubConnection:()=>p_,prewarmFileIndex:()=>n9,prewarmDetachedHubServer:()=>PQ,prepareRemoteConfigCoreIntegration:()=>aj,persistConnectorConnection:()=>r3,parseWorkflowConfigFromMarkdown:()=>g5,parseUserCommandEnvelope:()=>lc,parseSkillConfigFromMarkdown:()=>h5,parseSettings:()=>lZ,parseSessionCompactionState:()=>_1,parseRuleConfigFromMarkdown:()=>x5,parsePluginSource:()=>M3,parseMcpInstallArgs:()=>u7,parseHookEventPayload:()=>a6,parseConfiguredAgentConfig:()=>q7,normalizeWorkspacePath:()=>S1,normalizeUserInput:()=>pc,normalizeSdkError:()=>dc,normalizeRuntimeCapabilities:()=>y0,normalizeProviderId:()=>D6,normalizeOAuthProvider:()=>mY,normalizeHubWebSocketUrl:()=>j2,noopBasicLogger:()=>uc,migrateLegacyProviderSettings:()=>X9,mergeRulesForSystemPrompt:()=>f6,mergeAgentHooks:()=>r2,marketplaceEntryKey:()=>LY,markLocalProviderEnabled:()=>IY,makeTeamTaskSubSessionId:()=>J5,makeSubSessionId:()=>e8,loginOpenAICodex:()=>O4,loginOcaOAuth:()=>N4,loginLocalProvider:()=>cY,loginClineOAuth:()=>L4,loginAndSaveProviderOAuthCredentials:()=>R4,loginAndSaveLocalProviderOAuthCredentials:()=>dY,loadOpenTelemetryAdapter:()=>Hc,loadMcpSettingsFile:()=>o2,loadLlmsConfigFromFile:()=>ZV,loadConfiguredAgentConfigs:()=>m6,loadAgentPluginsFromPathsWithDiagnostics:()=>d2,loadAgentPluginsFromPaths:()=>LZ,loadAgentPluginFromPath:()=>F5,listSessionHistoryFromBackend:()=>bX,listPluginToolsWithDiagnostics:()=>_Q,listPluginTools:()=>t5,listMcpServerOAuthStatuses:()=>a5,listLocalProviders:()=>hY,listHookConfigFiles:()=>r$,listActiveConnectors:()=>L2,isUserRunMessage:()=>LJ,isToolDisabledGlobally:()=>iH,isTelemetryOptedOutGlobally:()=>$Z,isSessionNotFoundError:()=>G$,isRuleEnabled:()=>jQ,isPluginDisabledGlobally:()=>nH,isOfficialPluginSlug:()=>R3,isOAuthProvider:()=>S$,isMarketplaceSkillInstalled:()=>D3,isLocalHubOrigin:()=>ij,isLocalHubHostName:()=>eQ,isHubReconnectableTransportError:()=>iX,isHubCommandTimeoutError:()=>bQ,isDiscoveryFilePresent:()=>HD,isClinePassLimitMessage:()=>wc,isClinePassLimitError:()=>Cc,isClineOrgIndividualInferenceSubscriptionMessage:()=>Ec,isClineOrgIndividualInferenceSubscriptionError:()=>Mc,isClineNotSubscribedMessage:()=>Rc,isClineNotSubscribedError:()=>fc,isClineModelNotFoundMessage:()=>Nc,isClineFreeModelLimitMessage:()=>Tc,isClineFreeModelLimitError:()=>zc,isClineAccountActionRequest:()=>sZ,isBuiltInProviderId:()=>mW,isAutoUpdateEnabledGlobally:()=>hH,installPlugin:()=>fY,installMcpServer:()=>JY,identifyAccount:()=>U1,hashSecret:()=>P0,hasMcpSettingsFile:()=>B$,getValidOpenAICodexCredentials:()=>q4,getValidOcaCredentials:()=>f4,getValidClineCredentials:()=>A4,getUserRunSpan:()=>E1,getProviderOAuthCredentialsFromSettings:()=>M4,getProviderConfigFields:()=>lY,getProviderConfig:()=>kZ,getProviderAuthStorageId:()=>GJ,getProviderAuthHandler:()=>F0,getPersistedProviderApiKey:()=>h8,getPersistedConnectorConnection:()=>a3,getMcpServerOAuthState:()=>t2,getMarketplaceSkillCandidates:()=>n7,getLocalProviderModels:()=>xY,getLiveModelsCatalog:()=>U6,getGlobalMarketplaceSkillPaths:()=>a7,getFileIndex:()=>e1,getCurrentContextSize:()=>BW,getCoreHeadlessToolNames:()=>Q5,getCoreDefaultEnabledToolIds:()=>KZ,getCoreBuiltinToolCatalog:()=>g2,getCoreAcpToolNames:()=>FZ,getClinePassSubscriptionUrl:()=>qc,getClineOrgIndividualInferenceSubscriptionMessage:()=>Oc,getClineNotSubscribedMessage:()=>Ac,getClineDefaultSystemPrompt:()=>Pc,generateWorkspaceInfoWithDiagnostics:()=>E5,generateWorkspaceInfo:()=>A6,formatRulesForSystemPrompt:()=>N6,formatProviderOAuthApiKey:()=>UJ,formatDisplayUserInput:()=>cc,findInstalledGlobalMarketplaceSkillName:()=>o7,findCheckpointForRun:()=>r6,filterExtensionToolRegistrations:()=>JZ,filterDisabledTools:()=>Z$,filterDisabledPluginPaths:()=>QZ,fetchClineRecommendedModels:()=>eY,extractClinePassLimitMessage:()=>Lc,extractClineFreeModelLimitResetTime:()=>_c,executeClineAccountAction:()=>tZ,ensureHubWebSocketServer:()=>$3,ensureHubServer:()=>aL,ensureDetachedHubServer:()=>AD,ensureCustomProvidersLoadedSync:()=>Q9,ensureCustomProvidersLoaded:()=>J9,ensureCompatibleLocalHubUrl:()=>H8,enrichPromptWithMentions:()=>l8,emptyWorkspaceManifest:()=>gc,emptyStoredProviderSettings:()=>s$,discoverPluginModulePaths:()=>_5,disablePluginMcpServersInSettings:()=>YY,disableConnectorAutostart:()=>n3,deriveSubsessionStatus:()=>X5,deleteLocalProvider:()=>b3,defineLlmsConfig:()=>$V,createWorkflowsConfigDefinition:()=>p5,createUserInstructionConfigService:()=>t$,createToolPoliciesWithPreset:()=>o9,createTool:()=>xc,createTeamName:()=>V3,createSubprocessHooks:()=>pQ,createSpawnAgentTool:()=>p$,createSkillsConfigDefinition:()=>u5,createShellTool:()=>p4,createShellExecutor:()=>M2,createSessionHost:()=>i6,createSessionCompactionState:()=>x8,createRuntimeHost:()=>i6,createRulesConfigDefinition:()=>d5,createRestoredCheckpointMetadata:()=>E7,createRemoteConfigSessionMessagesArtifactUploader:()=>nj,createProviderConfig:()=>cW,createOpenTelemetryTelemetryService:()=>k7,createOAuthClientCallbacks:()=>q6,createMcpTools:()=>S6,createLocalHubScheduleRuntimeHandlers:()=>Z3,createLlmsSdk:()=>JV,createInitialAccumulatedUsage:()=>w0,createInMemoryHubOwnerContext:()=>BD,createHubServerUrl:()=>z1,createHubAuthToken:()=>fQ,createHookConfigFileHooks:()=>z5,createHookConfigFileExtension:()=>F6,createHookAuditHooks:()=>G6,createEditorExecutor:()=>P2,createDisabledMcpToolPolicy:()=>s5,createDisabledMcpToolPolicies:()=>DQ,createDelegatedAgentConfigProvider:()=>u$,createDelegatedAgent:()=>d$,createDefaultToolsWithPreset:()=>s9,createDefaultTools:()=>g$,createDefaultShellExecutor:()=>n4,createDefaultMcpServerClientFactory:()=>w6,createDefaultExecutors:()=>i8,createCoreSettingsService:()=>Q8,createCoreSessionSnapshot:()=>k1,createContributionRegistry:()=>hc,createContextCompactionPrepareTurn:()=>y4,createConfiguredTelemetryService:()=>A$,createConfiguredTelemetryHandle:()=>B2,createConfiguredAgentTools:()=>c6,createCompactionStateAwarePrepareTurn:()=>k4,createClineTelemetryServiceMetadata:()=>Ic,createClineTelemetryServiceConfig:()=>kc,createCheckpointComparePlan:()=>mQ,createBuiltinTools:()=>v2,createApplyPatchExecutor:()=>w2,createAgentTeamsTools:()=>x2,createAgentRuntime:()=>oc,createAgentHooksExtension:()=>H6,countUserRunMessages:()=>y$,connectToHub:()=>iQ,computePatchChanges:()=>d8,completeClineDeviceAuth:()=>YJ,compareCheckpointToWorkspace:()=>w7,collectPluginMcpOAuthCandidates:()=>E3,clearPrivateModelsCatalogCache:()=>gW,clearLiveModelsCatalogCache:()=>xW,clearHubDiscovery:()=>n0,captureWorkspacePathResolved:()=>wV,captureWorkspaceInitialized:()=>H9,captureWorkspaceInitError:()=>K9,captureToolUsage:()=>P8,captureTokenUsage:()=>U9,captureTaskRestarted:()=>F9,captureTaskCreated:()=>G9,captureTaskCompleted:()=>U4,captureSubagentExecution:()=>_4,captureSkillUsed:()=>_9,captureSdkError:()=>yc,captureProviderConfigured:()=>SV,captureProviderApiError:()=>D4,captureModeSwitch:()=>D9,captureMistakeLimitReached:()=>A9,captureMentionUsed:()=>O9,captureMentionSearchResults:()=>z9,captureMentionFailed:()=>q9,captureHookDiscovery:()=>N9,captureExtensionActivated:()=>CV,captureDiffEditFailure:()=>L9,captureConversationTurnEvent:()=>w8,captureCompactionSkipped:()=>R9,captureCompactionExecuted:()=>f9,captureAuthSucceeded:()=>i1,captureAuthStarted:()=>l1,captureAuthLoggedOut:()=>C$,captureAuthFailed:()=>r1,captureAgentUnexpectedReasoningTokens:()=>EV,captureAgentTeamCreated:()=>T9,captureAgentCreated:()=>w$,buildWorkspaceMetadata:()=>C5,buildTeamProgressSummary:()=>u6,buildSdkErrorProperties:()=>Sc,buildRemoteConfigSessionBlobUploadMetadata:()=>J3,buildMcpInstallTransport:()=>B3,buildDelegatedAgentConfig:()=>I2,buildConnectionUpdate:()=>aJ,buildConfiguredAgentToolName:()=>z7,buildConfiguredAgentToolDescriptors:()=>T7,buildCheckpointWorkspaceDiff:()=>cQ,bootstrapAgentTeams:()=>t8,authorizeMcpServerOAuth:()=>GQ,augmentMcpTimeoutError:()=>H$,addLocalProvider:()=>kY,accumulateUsageTotals:()=>N0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>I5,UnifiedConfigFileWatcher:()=>a2,ToolPresets:()=>Q1,TelemetryService:()=>e6,TelemetryLoggerSink:()=>y7,TEAM_TOOL_NAMES:()=>s8,SubprocessSandbox:()=>j6,StructuredCommandInputSchema:()=>N2,StoredProviderSettingsSchema:()=>L6,StoredProviderSettingsEntrySchema:()=>rZ,SqliteTeamStore:()=>N8,SqliteSessionStore:()=>x1,SessionVersioningService:()=>K2,SessionVersioningError:()=>u0,SessionSource:()=>L0,SessionNotFoundError:()=>K$,SapSettingsSchema:()=>uZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>k5,SESSION_STATUSES:()=>j5,SESSION_NOT_FOUND_ERROR_CODE:()=>J8,SDK_ERROR_TELEMETRY_EVENT:()=>rc,RuntimeOAuthTokenManager:()=>j4,RpcClineAccountService:()=>b5,RemoteRuntimeHost:()=>g6,ReasoningSettingsSchema:()=>gZ,RULES_CONFIG_DIRECTORY_NAME:()=>XQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W3,ProviderSettingsSchema:()=>a$,ProviderSettingsManager:()=>K1,ProviderProtocolSchema:()=>IZ,ProviderIdSchema:()=>M5,ProviderClientSchema:()=>hZ,PatchActionType:()=>C2,PATCH_MARKERS:()=>d,OpenTelemetryProvider:()=>$4,OcaSettingsSchema:()=>dZ,OPENAI_COMPATIBLE_PROVIDERS:()=>N5,OAuthReauthRequiredError:()=>f8,NodeHubClient:()=>T1,NoOpFeatureFlagsProvider:()=>_8,NativeHubTransportAdapter:()=>m7,ModelCatalogSettingsSchema:()=>pZ,McpSettingsUpdateSkippedError:()=>R6,McpSettingsMutatorPurityError:()=>e$,McpSettingsLockTimeoutError:()=>$2,MAX_COMMAND_OUTPUT_CHARS:()=>o1,LocalRuntimeHost:()=>m1,Llms:()=>Kc,InMemoryWorkspaceManager:()=>O6,InMemoryMcpManager:()=>Z8,HubUIClient:()=>Ej,HubTransportError:()=>m0,HubSessionClient:()=>Mj,HubServerTransport:()=>Q4,HubScheduleService:()=>t6,HubScheduleCommandService:()=>s6,HubRuntimeHost:()=>D$,HubCommandError:()=>h6,HookEventPayloadSchema:()=>dQ,HookEventNameSchema:()=>uQ,HookConfigFileName:()=>K6,HOOK_CONFIG_FILE_EVENT_MAP:()=>A5,HOOKS_CONFIG_DIRECTORY_NAME:()=>NZ,GlobalSettingsSchema:()=>a4,GcpSettingsSchema:()=>mZ,FileTeamPersistenceStore:()=>h3,FeatureFlagsService:()=>D8,FeatureFlagDefaultValue:()=>mc,FEATURE_FLAGS:()=>vc,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d3,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>X4,DefaultLlmsSdk:()=>Y9,DEFAULT_MODELS_CATALOG_URL:()=>PZ,DEFAULT_HUB_PORT:()=>gX,DEFAULT_HUB_PATHNAME:()=>vX,DEFAULT_HUB_HOST:()=>xX,CoreSettingsService:()=>Z2,CoreSessionService:()=>v1,ContributionRegistry:()=>bc,CommandExitError:()=>s1,ClinePassLimitError:()=>Dc,ClineOrgIndividualInferenceSubscriptionError:()=>Uc,ClineNotSubscribedError:()=>Fc,ClineFreeModelLimitError:()=>Gc,ClineCore:()=>P7,ClineAccountService:()=>S5,ChatViewStateSchema:()=>sY,ChatSummarySchema:()=>u3,ChatSessionStatusSchema:()=>g3,ChatSessionConfigSchema:()=>x3,ChatMessageSchema:()=>c3,ChatMessageRoleSchema:()=>v3,ChatMessageImageSchema:()=>m3,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>j9,BrowserWebSocketHubAdapter:()=>v7,BUILT_IN_PROVIDER_IDS:()=>vW,BUILT_IN_PROVIDER:()=>R5,AzureSettingsSchema:()=>cZ,AwsSettingsSchema:()=>vZ,AuthSettingsSchema:()=>xZ,AgentTeamsRuntime:()=>U8,AgentTeam:()=>l6,Agent:()=>ac,ALL_DEFAULT_TOOL_NAMES:()=>k$});M(f,S60);import*as Kc from"@cline/llms";import{ClineFreeModelLimitError as Gc,ClineNotSubscribedError as Fc,ClineOrgIndividualInferenceSubscriptionError as Uc,ClinePassLimitError as Dc,extractClineFreeModelLimitResetTime as _c,extractClinePassLimitMessage as Lc,getClineNotSubscribedMessage as Ac,getClineOrgIndividualInferenceSubscriptionMessage as Oc,getClinePassSubscriptionUrl as qc,isClineFreeModelLimitError as zc,isClineFreeModelLimitMessage as Tc,isClineModelNotFoundMessage as Nc,isClineNotSubscribedError as fc,isClineNotSubscribedMessage as Rc,isClineOrgIndividualInferenceSubscriptionError as Mc,isClineOrgIndividualInferenceSubscriptionMessage as Ec,isClinePassLimitError as Cc,isClinePassLimitMessage as wc}from"@cline/llms";import{buildClineSystemPrompt as Pc,buildSdkErrorProperties as Sc,ContributionRegistry as bc,captureSdkError as yc,createClineTelemetryServiceConfig as kc,createClineTelemetryServiceMetadata as Ic,createContributionRegistry as hc,createTool as xc,emptyWorkspaceManifest as gc,FEATURE_FLAGS as vc,FeatureFlagDefaultValue as mc,formatDisplayUserInput as cc,noopBasicLogger as uc,normalizeSdkError as dc,normalizeUserInput as pc,parseUserCommandEnvelope as lc,registerDisposable as ic,SDK_ERROR_TELEMETRY_EVENT as rc,stripUtf8Bom as nc}from"@cline/shared";import"@cline/shared/storage";var UF={};w(UF,{isClineAccountActionRequest:()=>sZ,executeClineAccountAction:()=>tZ,RpcClineAccountService:()=>b5,ClineAccountService:()=>S5});function WC($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function FF($,Z,Q){let J=WC(Q);if(J)return J;let W=Z.trim();if(W){let X=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class S5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let J=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(J)return J;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let J=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,X=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...J??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:W.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(FF(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(FF(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function sZ($){return $.action==="clineAccount"}async function tZ($,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 b5{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 DF={};w(DF,{createOAuthClientCallbacks:()=>q6});function q6($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((J)=>{$.onOpenUrlError?.({url:Z,error:J})})}catch(J){$.onOpenUrlError?.({url:Z,error:J})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var y_={};w(y_,{ClineCore:()=>P7});function _F($){if($===!0)return{};if(!$)return;return $}function LF($){if($==="user")return"global";return $}class nW{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 AF($){let{host:Z}=$;return{async startSession(Q){let J=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await Z.startSession({source:Q.source?.trim()||L0.CLI,interactive:!1,config:{providerId:D6(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:J,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:YC(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,J){let W=await Z.runTurn({sessionId:Q,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((X)=>X.content),delivery:J.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:jC(W)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function eZ($){let Z=XC($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),J=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!J&&!W&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...J?{user:J}:{},...W?{logger:W}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function XC($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function jC($){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 YC($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var MU={};w(MU,{createCoreSettingsService:()=>Q8,CoreSettingsService:()=>Z2});import{existsSync as $7,readFileSync as QP}from"node:fs";import{basename as KX,dirname as OU,extname as JP,isAbsolute as TU,join as WP,relative as NU,resolve as qU}from"node:path";var yF={};w(yF,{resolveWorkflowsConfigSearchPaths:()=>c5,resolveSkillsConfigSearchPaths:()=>v5,resolveRulesConfigSearchPaths:()=>m5,parseWorkflowConfigFromMarkdown:()=>g5,parseSkillConfigFromMarkdown:()=>h5,parseRuleConfigFromMarkdown:()=>x5,createWorkflowsConfigDefinition:()=>p5,createUserInstructionConfigService:()=>t$,createSkillsConfigDefinition:()=>u5,createRulesConfigDefinition:()=>d5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>I5,UnifiedConfigFileWatcher:()=>a2,SKILLS_CONFIG_DIRECTORY_NAME:()=>k5,RULES_CONFIG_DIRECTORY_NAME:()=>XQ});import{createHash as VC}from"node:crypto";import{watch as BC}from"node:fs";import{readdir as HC,readFile as KC}from"node:fs/promises";import{join as GC}from"node:path";function FC($){return VC("sha1").update($).digest("hex")}function zF($){return Boolean($&&typeof $==="object"&&"code"in $)}function OF($){return zF($)&&$.code==="ENOENT"}function qF($){return zF($)&&($.code==="EACCES"||$.code==="EPERM")}class a2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let J of Q.directories){let W=this.baseTypesByDirectory.get(J);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(J,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,J])=>[Q,{...J}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([J,W])=>[J,{...W}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=BC(Z,()=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(J)=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let X of W)this.emit({kind:"error",type:X,error:J,filePath:Z})})}catch(Q){if(!OF(Q)&&!qF(Q)){let J=$.get(Z);if(!J)continue;for(let W of J)this.emit({kind:"error",type:W,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),J=this.recordsByType.get($.type)??new Map;for(let[W,X]of J.entries()){if(Z.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:X.filePath})}for(let[W,X]of Z.entries()){let j=J.get(W);if(j&&j.filePath===X.filePath&&j.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:W,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let J of $.directories){Q.add(J);let W=$.discoverFiles?await $.discoverFiles(J):await this.readDirectoryFileCandidates(J);for(let X of W){let{fileName:j,filePath:Y}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await KC(Y,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:j,filePath:Y,content:V},H=$.parseFile(B),K=$.resolveId(H,B).trim();if(!K)continue;Z.set(K,{type:$.type,id:K,item:H,filePath:Y,fingerprint:FC(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let J of Q){let W=$.get(J);if(W)W.add(Z);else $.set(J,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await HC($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:GC($,Q.name)})).sort((Q,J)=>Q.fileName.localeCompare(J.fileName))}catch(Z){if(OF(Z)||qF(Z))return[];throw Z}}}import{readdir as oW,readFile as UC,stat as aW}from"node:fs/promises";import{basename as V$,dirname as DC,extname as ZQ,join as r0,resolve as y5}from"node:path";import{stripUtf8Bom as _C}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as TF,RULES_CONFIG_DIRECTORY_NAME as XQ,resolveGlobalAgentsRulesPath as LC,resolveRulesConfigSearchPaths as AC,resolveSkillsConfigSearchPaths as OC,resolveWorkflowsConfigSearchPaths as qC,SKILLS_CONFIG_DIRECTORY_NAME as k5,WORKFLOWS_CONFIG_DIRECTORY_NAME as I5}from"@cline/shared/storage";import zC from"yaml";var $Q="SKILL.md",TC="managed.json",NC=new Set([".md",".markdown",".txt"]);function sW($){return $.trim().toLowerCase()}function z6($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function QQ($){return NC.has(ZQ($).toLowerCase())}function NF($){let Z=[],Q=new Set;for(let J of $){let W=y5(J);if(Q.has(W))continue;Q.add(W),Z.push(J)}return Z}function fC($){let Z=[...$?.directories??v5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...PG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return NF(Z)}async function tW($){try{let Z=await oW($,{withFileTypes:!0}),Q=[];for(let J of Z){if(!J.isDirectory())continue;let W=r0($,J.name),X=r0(W,TC);try{let j=await UC(X,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(W)}catch(j){if(z6(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((J,W)=>J.localeCompare(W))}catch(Z){if(z6(Z))return[];throw Z}}function eW($){let Z=_C($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J;try{let j=zC.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function JQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let J=$.trim();if(!J&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return J||void 0}function T6($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function RC($,Z){if(V$($.filePath).toLowerCase()!==TF.toLowerCase())return V$($.filePath,ZQ($.filePath));if(Z&&y5($.filePath)===y5(Z,TF))return"Workspace AGENTS.md";if(y5($.filePath)===y5(LC()))return"Global AGENTS.md";return V$($.filePath,ZQ($.filePath))}function h5($,Z){let{data:Q,body:J,parseError:W}=eW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in skill file.");let Y=JQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:JQ(Q.description,"description",!1),disabled:T6(Q.disabled,"disabled")??(T6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function x5($,Z){let{data:Q,body:J,parseError:W}=eW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in rule file.");let j=JQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:T6(Q.disabled,"disabled")??(T6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function g5($,Z){let{data:Q,body:J,parseError:W}=eW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in workflow file.");let j=JQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:T6(Q.disabled,"disabled")??(T6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function v5($){return OC($)}function m5($){return AC($)}function c5($){return qC($)}async function fF($){if(V$($)===".cline"){let Z=await tW($);return(await Promise.all(Z.map((J)=>fF(r0(J,k5))))).flat()}try{let Z=await oW($,{withFileTypes:!0}),Q=[];for(let J of Z){if(J.isFile()&&J.name===$Q){Q.push({directoryPath:$,fileName:J.name,filePath:r0($,J.name)});continue}let W=r0($,J.name);if(J.isDirectory()||J.isSymbolicLink()&&await aW(W).then((j)=>j.isDirectory()).catch((j)=>{if(z6(j))return!1;throw j}))Q.push({directoryPath:W,fileName:$Q,filePath:r0(W,$Q)})}return Q}catch(Z){if(z6(Z))return[];throw Z}}async function WQ($){if(V$($)===".cline"){let Z=await tW($);return(await Promise.all(Z.map((J)=>WQ(r0(J,"rules.md"))))).flat()}try{if((await aW($)).isFile())return[{directoryPath:DC($),fileName:V$($),filePath:$}]}catch(Z){if(!z6(Z))throw Z}try{let Q=(await oW($,{withFileTypes:!0})).filter((W)=>W.isFile()&&QQ(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:r0($,W.name)})),J=r0($,"AGENTS.md");try{if((await aW(J)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:J})}}catch{}return Q}catch(Z){if(z6(Z))return[];throw Z}}async function MC($){if(V$($)===".cline"){let Z=await tW($);return(await Promise.all(Z.map((J)=>WQ(r0(J,I5))))).flat()}return WQ($)}function u5($){let Z=fC($),Q=$?.workspacePath?r0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?NF([...Z,Q]):Z,discoverFiles:fF,includeFile:(J)=>J===$Q,parseFile:(J)=>h5(J.content,V$(J.directoryPath)),resolveId:(J)=>sW(J.name)}}function d5($){let Z=$?.directories??m5($?.workspacePath),Q=$?.workspacePath?r0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:WQ,includeFile:(J,W)=>J===".clinerules"||QQ(J)||QQ(W),parseFile:(J)=>x5(J.content,RC(J,$?.workspacePath)),resolveId:(J)=>sW(J.name)}}function p5($){let Z=$?.directories??c5($?.workspacePath),Q=$?.workspacePath?r0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:MC,includeFile:(J)=>QQ(J),parseFile:(J)=>g5(J.content,V$(J.filePath,ZQ(J.filePath))),resolveId:(J)=>sW(J.name)}}function RF($){let Z=[u5($?.skills),d5($?.rules),p5($?.workflows)];return new a2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as MF}from"@cline/shared";function EC($,Z){if($.description?.trim())return MF($.description,".");if(Z==="workflow")return;return MF($.instructions,".")}function CC($){return $.disabled!==!0}function EF($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,J])=>({id:Q,record:J})).filter(({record:Q})=>CC(Q.item)).map(({id:Q,record:J})=>({id:Q,name:J.item.name,instructions:J.item.instructions,description:EC(J.item,Z),kind:Z})).sort((Q,J)=>Q.name.localeCompare(J.name))}function l5($){let Z=new Map;for(let Q of[...EF($,"workflow"),...EF($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,J)=>Q.name.localeCompare(J.name))}function CF($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let J=Q[1];if(!J)return $;let W=J.length+1,X=$.slice(W),j=l5(Z).find((Y)=>Y.name===J);return j?`${j.instructions}${X}`:$}var PF={};w(PF,{mergeRulesForSystemPrompt:()=>f6,loadRulesForSystemPromptFromWatcher:()=>$X,listEnabledRulesFromWatcher:()=>wF,isRuleEnabled:()=>jQ,formatRulesForSystemPrompt:()=>N6});function jQ($){return $.disabled!==!0}function N6($){if($.length===0)return"";return`
|
|
225
|
+
`,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??sM(hG(),"hooks.jsonl");hG(j),aM(j,W,"utf8")};return{beforeRun:async(J)=>{let W=bW(J,"");Q({...b0(W,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(J)=>{let W=gG(J);Q({...b0(W,Z),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:fQ(W.call.input)}});return},afterTool:async(J)=>{let W=vG(J);Q({...b0(W,Z),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:fQ(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:J,result:W})=>{let X=n$(J);if(W.status==="completed"){Q({...b0(X,Z),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||PW(W.error?.message)){Q({...b0(X,Z),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...b0(X,Z),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(J)=>{if(J.type!=="message-added"||J.message.role!=="user")return;let W=bW({snapshot:J.snapshot},mG(J.message.content));Q({...b0(W,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function z5($){let Z=XE($.workspacePath);if(!Object.values(Z).some((K)=>K.length>0))return;let J=async(K,G)=>{let F=Z[G]??[];if(F.length===0)return;await l2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:G==="agent_resume"?{...b0(K,$),hookName:G,taskResume:{taskMetadata:{},previousState:{}}}:{...b0(K,$),hookName:G,taskStart:{taskMetadata:{}}}})},W=async(K)=>{let G=Z.prompt_submit??[];if(G.length>0)await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"prompt_submit",userPromptSubmit:{prompt:K.userMessage,attachments:[]}}})},X=async(K)=>{let G=Z.tool_call??[];if(G.length===0)return;return jE({commands:G,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...b0(K,$),hookName:"tool_call",iteration:K.iteration,tool_call:{id:K.call.id,name:K.call.name,input:K.call.input},preToolUse:{toolName:K.call.name,parameters:fQ(K.call.input)}}})},j=async(K)=>{let G=Z.tool_result??[];if(G.length===0)return;await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"tool_result",iteration:K.iteration,tool_result:K.record,postToolUse:{toolName:K.record.name,parameters:fQ(K.record.input),result:typeof K.record.output==="string"?K.record.output:JSON.stringify(K.record.output),success:!K.record.error,executionTimeMs:K.record.durationMs}}})},Y=async(K)=>{let G=Z.agent_end??[];if(G.length===0)return;await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_end",iteration:K.iteration,turn:K.turn,taskComplete:{taskMetadata:{}}}})},V=async(K)=>{let G=Z.agent_error??[];if(G.length===0)return;await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_error",iteration:K.iteration,error:{name:K.error.name,message:K.error.message,stack:K.error.stack}}})},B=async(K)=>{if(PW(K.reason)){let F=Z.agent_abort??[];if(F.length>0)await l2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"agent_abort",reason:K.reason,taskCancel:{taskMetadata:{}}}})}let G=Z.session_shutdown??[];if(G.length===0)return;await l2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...b0(K,$),hookName:"session_shutdown",reason:K.reason}})},H={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)H.beforeRun=async(K)=>{let G=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await J(n$(K.snapshot),G);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(K)=>{if(K.type!=="message-added"||K.message.role!=="user")return;await W(bW({snapshot:K.snapshot},mG(K.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(K)=>{let G=await X(gG(K));return YE(G)};if((Z.tool_result?.length??0)>0)H.afterTool=async(K)=>{await j(vG(K));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:K,result:G})=>{if(G.status!=="completed")return;await Y({...n$(K),iteration:G.iterations,turn:{outputText:G.outputText,status:G.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let K=H.afterRun;H.afterRun=async(G)=>{await K?.(G);let{snapshot:F,result:U}=G;if(U.status==="aborted"||PW(U.error?.message)){await B({...n$(F),reason:U.error?.message});return}if(U.error)await V({...n$(F),iteration:U.iterations,error:U.error})}}return H}function F6($){return H6("core.hook_config_files",z5($))}function i2($,Z){let Q=$.map((J)=>J[Z]).filter((J)=>typeof J==="function");if(Q.length===0)return;return async(J)=>{let W;for(let X of Q){let j=await X(J);if(!j||typeof j!=="object")continue;let Y=j;W={...W??{},...Y,stop:W?.stop===!0||Y.stop===!0?!0:Y.stop,options:W?.options||Y.options?{...W?.options??{},...Y.options??{}}:void 0}}return W}}function r2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:i2(Z,"beforeRun"),afterRun:i2(Z,"afterRun"),beforeModel:i2(Z,"beforeModel"),afterModel:i2(Z,"afterModel"),beforeTool:i2(Z,"beforeTool"),afterTool:i2(Z,"afterTool"),onEvent:i2(Z,"onEvent")}}var cG={};w(cG,{normalizeRuntimeCapabilities:()=>y0});function y0(...$){let Z,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)Z={...Z??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let J=Z&&Object.keys(Z).length>0;if(!J&&!Q)return;return{...J?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var oG={};w(oG,{toProviderConfig:()=>J1,emptyStoredProviderSettings:()=>s$,StoredProviderSettingsSchema:()=>L6,StoredProviderSettingsEntrySchema:()=>rQ,ProviderSettingsSchemaTyped:()=>_6});import{z as o$}from"zod";var aG={};w(aG,{toProviderConfig:()=>J1,safeParseSettings:()=>iQ,safeCreateProviderConfig:()=>uW,parseSettings:()=>lQ,normalizeProviderId:()=>D6,isBuiltInProviderId:()=>mW,createProviderConfig:()=>cW,SapSettingsSchema:()=>uQ,ReasoningSettingsSchema:()=>gQ,ProviderSettingsSchema:()=>a$,ProviderProtocolSchema:()=>IQ,ProviderIdSchema:()=>M5,ProviderClientSchema:()=>hQ,OcaSettingsSchema:()=>dQ,ModelCatalogSettingsSchema:()=>pQ,GcpSettingsSchema:()=>mQ,BUILT_IN_PROVIDER_IDS:()=>vW,BUILT_IN_PROVIDER:()=>R5,AzureSettingsSchema:()=>cQ,AwsSettingsSchema:()=>vQ,AuthSettingsSchema:()=>xQ});import*as v0 from"@cline/llms";import{ReasoningLevelSchema as hE}from"@cline/shared";import{z as P}from"zod";var nG={};w(nG,{resolveProviderConfig:()=>f5,getProviderConfig:()=>kQ,getLiveModelsCatalog:()=>U6,clearPublicModelsCatalogCache:()=>PE,clearPrivateModelsCatalogCache:()=>gW,clearLiveModelsCatalogCache:()=>xW,OPENAI_COMPATIBLE_PROVIDERS:()=>N5,DEFAULT_MODELS_CATALOG_URL:()=>PQ});import*as Z0 from"@cline/llms";function yW($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let J of[Q.id,Q.name,Q.model])if(typeof J==="string"&&J.trim())return J.trim()}return""}).filter((Z)=>Z.length>0)}function VE($,Z){let Q=yW($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let J=$,W=yW(J.data??J.models);if(W.length>0)return W;if(J.models&&typeof J.models==="object"&&!Array.isArray(J.models)){let j=Object.keys(J.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let X=J.providers?.[Z];if(X&&typeof X==="object"){let Y=yW(X.models??X);if(Y.length>0)return Y}return[]}async function RQ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return VE(await Q.json(),Z)}function uG($){return $.replace(/\/+$/,"")}function MQ($,Z,Q){let J=Q?.trim();if(!J)return;let W=$?.trim();if(!W||!Z?.trim())return J;try{let X=new URL(J),j=new URL(Z),Y=new URL(W);if(X.origin!==j.origin)return J;let V=uG(j.pathname),B=uG(Y.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=X.pathname;return Y.search=X.search,Y.hash=X.hash,Y.toString()}catch{return J}}function BE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function HE($){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 KE=Object.values(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:BE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pG=Object.fromEntries(KE.map(($)=>[$.id,$]));function GE($){return pG[$]}function FE(){return Object.fromEntries(Object.entries(pG).filter(([,$])=>HE($)))}function lG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var PQ="https://models.dev/api.json",UE=600000,iG=300000,DE=5000,wQ=new Map,T5=new Map,kW=new Map,EQ=new Map;async function _E(){return Z0.getGeneratedProviderModels()}async function LE($,Z={},Q={},J={},W={},X={}){if($==="litellm")return Z0.sortModelsByReleaseDate(J);let j=await _E(),Y=Z0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>j[K]??{}));if(Boolean(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return Z0.sortModelsByReleaseDate({...W,...X});if($==="openai-codex")return Z0.sortModelsByReleaseDate({...Z,...Z0.filterOpenAICodexModels(Q),...W,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...X};let H=Z0.sortModelsByReleaseDate({...V,...Z,...Q,...J,...W});if($==="cline")return Z0.sortModelsByReleaseDate({...Z0.preferCanonicalModelIds(H,Z0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return Z0.sortModelsByReleaseDate({...H,...X})}function AE($,Z){let Q=Z0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((J)=>Z[J]??{}))}function SQ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function hW($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function OE($){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 qE($,Z){return`${$}:${SQ(Z.baseUrl)}:${OE(hW(Z)??"")}`}async function bQ($,Z,Q=DE){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await fetch($,{...Z,signal:J.signal})}finally{clearTimeout(W)}}function n2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function yQ($,Z){let Q=["streaming","tools"];return n2(Q,"images",Boolean(Z.supportsImages)),n2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),n2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function zE($,Z){let Q=await bQ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];X[Y]=yQ(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function dG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function TE($,Z){let Q=await bQ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;X[Y]=yQ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function NE($,Z){let J=`${(SQ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await bQ(J,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let j=(await W.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],K=V.supported_sampling_parameters??[],G=V.input_modalities??[],F=["streaming"];n2(F,"tools",H.includes("tools")),n2(F,"reasoning",H.includes("reasoning")),n2(F,"temperature",K.includes("temperature")),n2(F,"images",G.includes("image"));let U={input:dG(V.pricing?.prompt),output:dG(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:U.input!==void 0||U.output!==void 0?U:void 0,status:"active"}}return Y}function fE($){let Z=SQ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function RE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function ME($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,J=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${J}`}async function EE($,Z){let Q=fE($.baseUrl),J=[],W=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of RE(Q))for(let[j,Y]of W)try{let V=await bQ(X,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],K={};for(let G of H){let F=G.model_name?.trim(),_=G.litellm_params?.model?.trim()||F;if(!_)continue;let L=G.model_info,O=yQ(_,{name:F??_,maxTokens:L?.max_output_tokens??L?.max_tokens,maxInputTokens:L?.max_input_tokens??L?.max_tokens,supportsImages:L?.supports_vision,supportsPromptCache:L?.supports_prompt_caching,supportsReasoning:L?.supports_reasoning});if(K[_]=O,F)K[F]={...O,id:F,name:F}}return K}J.push(`${new URL(X).pathname} (${j}): ${await ME(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);J.push(`${new URL(X).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${J.join("; ")}`)}var rG={baseten:zE,hicap:TE,litellm:EE,poolside:NE},IW=new Map,CQ=new Map;function CE($,Z){return`${$}:${SQ(Z.baseUrl)}`}async function wE($,Z,Q){let J=Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=MQ(Q.baseUrl,J?.provider.baseUrl,J?.provider.modelsSourceUrl);if(!W)return{};let X=Z?.cacheTtlMs??iG,j=CE($,Q),Y=Date.now(),V=IW.get(j);if(V&&V.expiresAt>Y)return V.data;let B=CQ.get(j);if(B)return B;let H=RQ(W,$).then((K)=>{let G=Object.fromEntries(K.map((F)=>[F,yQ(F,{name:F})]));return IW.set(j,{data:G,expiresAt:Y+X}),G}).finally(()=>{CQ.delete(j)});return CQ.set(j,H),H}function PE(){IW.clear(),CQ.clear()}async function SE($,Z){let Q=hW(Z);if(!Q)return{};let J=rG[$];if(!J)return{};return J(Z,Q)}function bE($,Z,Q){if(!Q)return!1;if(!rG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(hW(Q))}async function yE($,Z,Q){let J=Z?.cacheTtlMs??iG,W=qE($,Q),X=Date.now(),j=kW.get(W);if(j&&j.expiresAt>X)return j.data;let Y=EQ.get(W);if(Y)return Y;let V=SE($,Q).then((B)=>{return kW.set(W,{data:B,expiresAt:X+J}),B}).finally(()=>{EQ.delete(W)});return EQ.set(W,V),V}async function kE($){return Z0.fetchLiveProviderModels($,globalThis.fetch)}async function U6($={}){let Z=$.url??PQ,Q=$.cacheTtlMs??UE,J=Date.now(),W=wQ.get(Z);if(W&&W.expiresAt>J)return W.data;let X=T5.get(Z);if(X)return X;let j=kE(Z).then((Y)=>{return wQ.set(Z,{data:Y,expiresAt:J+Q}),Y}).finally(()=>{T5.delete(Z)});return T5.set(Z,j),j}function xW($){if($){wQ.delete($),T5.delete($);return}wQ.clear(),T5.clear()}function gW(){kW.clear(),EQ.clear()}function IE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:lG(Q.capabilities)}]))}var N5=IE(FE());function kQ($){let Z=GE($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:lG(Z.capabilities)}}async function f5($,Z,Q){let J=kQ($);if(!J)return;try{let W=Z?.loadLatestOnInit?await U6(Z):void 0,X=W?AE($,W):{},j=Q&&bE($,Z,Q)?await yE($,Z,Q):{},V=Boolean(Z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:J.modelId,baseUrl:J.baseUrl}:Q,B=V?await wE($,Z,V).catch(()=>({})):{},H=await LE($,J.knownModels,X,j,B,Q?.knownModels);return{...J,knownModels:H}}catch(W){if(Z?.failOnError)throw W;if($==="litellm")return{...J,knownModels:{}};return J}}var R5=v0.BUILT_IN_PROVIDER,vW=v0.BUILT_IN_PROVIDER_IDS,mW=v0.isBuiltInProviderId,D6=v0.normalizeProviderId,M5=P.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),IQ=P.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),hQ=P.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),xQ=P.object({apiKey:P.string().optional(),accessToken:P.string().optional(),refreshToken:P.string().optional(),expiresAt:P.number().int().positive().optional(),accountId:P.string().optional(),organizationId:P.string().optional(),organizationName:P.string().optional(),memberId:P.string().optional(),metadata:P.record(P.string(),P.unknown()).optional()}),gQ=P.object({enabled:P.boolean().optional(),effort:hE.optional(),budgetTokens:P.number().int().positive().optional()}),vQ=P.object({accessKey:P.string().optional(),secretKey:P.string().optional(),sessionToken:P.string().optional(),region:P.string().optional(),profile:P.string().optional(),authentication:P.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:P.boolean().optional(),useCrossRegionInference:P.boolean().optional(),useGlobalInference:P.boolean().optional(),endpoint:P.string().url().optional(),customModelBaseId:P.string().optional()}),mQ=P.object({projectId:P.string().optional(),region:P.string().optional()}),cQ=P.object({apiVersion:P.string().optional(),useIdentity:P.boolean().optional()}),uQ=P.object({clientId:P.string().optional(),clientSecret:P.string().optional(),tokenUrl:P.string().url().optional(),resourceGroup:P.string().optional(),deploymentId:P.string().optional(),useOrchestrationMode:P.boolean().optional(),api:P.enum(["orchestration","foundation-models"]).optional(),defaultSettings:P.record(P.string(),P.unknown()).optional()}),dQ=P.object({mode:P.enum(["internal","external"]).optional(),usePromptCache:P.boolean().optional()}),pQ=P.object({loadLatestOnInit:P.boolean().optional(),loadPrivateOnAuth:P.boolean().optional(),url:P.string().url().optional(),cacheTtlMs:P.number().int().positive().optional(),failOnError:P.boolean().optional()}),a$=P.object({provider:M5,apiKey:P.string().optional(),auth:xQ.optional(),model:P.string().optional(),protocol:IQ.optional(),client:hQ.optional(),routingProviderId:M5.optional(),maxTokens:P.number().int().positive().optional(),contextWindow:P.number().int().positive().optional(),baseUrl:P.string().url().optional(),headers:P.record(P.string(),P.string()).optional(),timeout:P.number().int().positive().optional(),reasoning:gQ.optional(),aws:vQ.optional(),gcp:mQ.optional(),azure:cQ.optional(),sap:uQ.optional(),oca:dQ.optional(),region:P.string().optional(),apiLine:P.enum(["china","international"]).optional(),capabilities:P.array(P.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:pQ.optional()});function lQ($){return a$.parse($)}function iQ($){return a$.safeParse($)}function xE($){return $.protocol==="openai-responses"||$.client==="openai"}function J1($,Z={}){let Q=$.provider,J=D6(Q),W=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",j=X==="none"?void 0:X,Y=N5[J],V=Object.assign({},...v0.resolveProviderModelCatalogKeys(J).map((_)=>v0.getGeneratedModelsForProvider(_))),B=Object.keys(V)[0],H=h8(J,$),K=$.baseUrl??v0.resolveProviderApiLineBaseUrl(J,$.apiLine)??(J==="oca"?$.oca?.mode==="internal"?bZ:yZ:Y?.baseUrl),G=$.routingProviderId??(xE($)&&J!==R5.OPENAI_NATIVE?R5.OPENAI_NATIVE:void 0),F=W?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,U={providerId:Q,clientType:$.client,routingProviderId:G,modelId:$.model??Y?.modelId??B??"default",...W?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:K,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(U).filter(([_,L])=>L!==void 0))}function cW($){let Z=lQ($);return J1(Z)}function uW($){let Z=iQ($);if(Z.success)return{success:!0,config:J1(Z.data)};return{success:!1,error:Z.error}}var _6=a$;var rQ=o$.object({settings:a$,updatedAt:o$.string().datetime(),tokenSource:o$.enum(["manual","oauth","migration"]).default("manual")}),L6=o$.object({version:o$.literal(1),lastUsedProvider:o$.string().min(1).optional(),providers:o$.record(o$.string(),rQ)});function s$(){return{version:1,providers:{}}}O1();var WF={};w(WF,{InMemoryWorkspaceManager:()=>O6});import{upsertWorkspaceInfo as mE,WorkspaceManifestSchema as iW}from"@cline/shared";var JF={};w(JF,{withSessionGitMetadata:()=>aQ,readSessionGitMetadata:()=>ZF,readGitWorkspaceState:()=>pW,normalizeWorkspacePath:()=>S1,hasCurrentSessionGitMetadata:()=>dW,generateWorkspaceInfoWithDiagnostics:()=>E5,generateWorkspaceInfo:()=>A6,buildWorkspaceMetadataWithInfo:()=>lW,buildWorkspaceMetadata:()=>C5});import{basename as gE,resolve as vE}from"node:path";import{performance as sG}from"node:perf_hooks";import{processWorkspaceInfo as eG}from"@cline/shared";import $F from"simple-git";function ZF($){let Z=$?.git;if(!Z||typeof Z!=="object"||Array.isArray(Z))return{};let Q=Z;return{...typeof Q.url==="string"&&Q.url.trim()?{url:Q.url.trim()}:{},...typeof Q.branch==="string"&&Q.branch.trim()?{branch:Q.branch.trim()}:{}}}function aQ($,Z){let Q={...$??{}};if(!Z.url&&!Z.branch)return delete Q.git,Object.keys(Q).length>0?Q:void 0;let W={...Q.git&&typeof Q.git==="object"&&!Array.isArray(Q.git)?Q.git:{}};if(Z.url)W.url=Z.url;else delete W.url;if(Z.branch)W.branch=Z.branch;else delete W.branch;return Q.git=W,Q}function dW($,Z){let Q=ZF($);return Q.url===Z.url&&Q.branch===Z.branch}function QF($){let Z=$.find(({name:Q})=>Q==="origin")??$[0];return(Z?.refs.fetch||Z?.refs.push)?.trim()||void 0}function S1($){return vE($)}async function A6($){return(await E5($)).info}function tG($){let Z=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(Z)}function nQ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function E5($){let Z=S1($),Q={rootPath:Z,hint:gE(Z)||void 0},J={},W;try{let X=$F({baseDir:Z});if(!await X.checkIsRepo())return{info:Q,vcsType:"none",gitState:J};try{let Y=await X.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let K=H.refs.fetch||H.refs.push;return`${H.name}: ${K}`});Q.associatedRemoteUrls=V;let B=QF(Y);if(B)J.url=B}}catch(Y){W??=nQ(Y)}try{let Y=(await X.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){if(!tG(Y))W??=nQ(Y)}try{let Y=(await X.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y,J.branch=Y}catch(Y){if(!tG(Y))W??=nQ(Y)}return{info:Q,vcsType:"git",gitState:J,error:W}}catch(X){return{info:Q,vcsType:"none",gitState:J,error:nQ(X)}}}async function pW($){try{let Z=$F({baseDir:S1($)});if(!await Z.checkIsRepo())return{};let[Q,J]=await Promise.all([Z.getRemotes(!0),Z.branch()]),W=QF(Q),X=J.current.trim();return{...W?{url:W}:{},...X?{branch:X}:{}}}catch{return}}async function C5($){let Z=await A6($);return eG(Z)}async function lW($){let Z=sG.now(),Q=await E5($),J=sG.now()-Z,W=Q.info;return{workspaceInfo:W,workspaceMetadata:eG(W),durationMs:J,vcsType:Q.vcsType,gitState:Q.gitState,initError:Q.error}}class O6{manifest;listeners=new Set;constructor($){this.manifest=iW.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await A6($);return this.manifest=mE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=S1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=iW.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let J=await this.addWorkspacePath(Z);return this.manifest=iW.parse({...this.manifest,currentWorkspacePath:J.rootPath}),this.emit({type:"workspace_switched",workspace:J}),J}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=S1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}q0();import{createHash as cE}from"node:crypto";var XF=new Set,jF=new Set;function uE($){return cE("sha256").update($).digest("hex")}function dE($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function YF($){if(!$.telemetry)return;let Z=uE($.rootPath),Q=$.rootCount??1;if(!XF.has(Z))XF.add(Z),HZ($.telemetry,{root_count:Q,vcs_types:dE($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!jF.has(Z)){jF.add(Z);let J=Error($.initError.message);J.name=$.initError.errorType||"Error",KZ($.telemetry,J,{fallback_to_single_root:!0,workspace_count:Q})}}function iE($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function rE($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let J=$.slice(0,3).map(iE).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${J}${W}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function nE($,Z){let Q=typeof $.thinking==="boolean",J=typeof $.reasoningEffort==="string";if(!Q&&!J)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...J?{effort:$.reasoningEffort}:{}}}function VF($,Z){return lE($,Z)}function aE($,Z,Q,J,W,X){let j=J.getProviderSettings($.providerId),Y=W||j?.modelCatalog?{...W??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=pE({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:L0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:J6,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),H={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:nE($,j?.reasoning),modelCatalog:Y},K={...J1(H),...V??{}};if(B)K.headers=B;if($.knownModels)K.knownModels=$.knownModels;if($.extensionContext)K.extensionContext=$.extensionContext;let F=$.fetch??K.fetch??X;if(F)K.fetch=F;return K}async function BF($){let{input:Z,sessionId:Q,providerSettingsManager:J,defaultTelemetry:W,defaultLogger:X,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:H,createSubAgentLifecycleCallbacks:K,createSpawnTool:G,localRuntime:F,readSessionMetadata:U,writeSessionMetadata:_}=$,L=W$(Z.config),{modelCatalogDefaults:O,userInstructionService:D,configExtensions:q,onTeamRestored:T,...z}=F??{},A=Object.keys(z).length>0?z:void 0,{workspaceInfo:R,workspaceMetadata:N,gitState:S,durationMs:y,vcsType:s,initError:c}=await lW(L),b=A?.extensionContext,r={...b??{},workspace:{...R,...b?.workspace??{}},session:{...b?.session??{},sessionId:Q},logger:b?.logger??A?.logger??X,telemetry:b?.telemetry??A?.telemetry??W};YF({telemetry:r.telemetry,rootPath:R.rootPath,workspaceInfo:R,rootCount:1,vcsType:s,durationMs:y,initError:c,featureFlagEnabled:!0});let O0=F6({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:A?.logger,workspaceInfo:R}),N$=sK(A?.hooks)?void 0:G6({rootSessionId:Q,workspacePath:L,workspaceInfo:R}),f$=r2([A?.hooks,N$]),X0;if(VF(q,"plugins"))try{X0=await B6({pluginPaths:A?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:R,session:r.session,client:r.client,user:r.user,logger:r.logger,telemetry:r.telemetry,automation:r.automation}),rE(X0.failures,X0.warnings,A?.logger)}catch(C0){let D2=C0 instanceof Error?C0.message:String(C0);A?.logger?.log?.(`plugin loading failed; continuing without plugins (${D2})`)}let R$=XW(O0?[O0]:void 0,XW(A?.extensions,JQ(X0?.extensions))),f1=VF(q,"plugins")?j$(X0?.pluginPaths??[]):void 0,p0={...Z.config,...A??{},sessionId:Q,hooks:f$,extensions:R$,extensionContext:r,telemetry:r.telemetry,logger:r.logger},M$=aE(p0,Q,Z.source,J,O,V),M0=r2([p0.hooks,p0.checkpoint?.enabled===!0?kG({cwd:p0.cwd,sessionId:Q,logger:p0.logger,createCheckpoint:p0.checkpoint?.createCheckpoint,readSessionMetadata:U,writeSessionMetadata:_}):void 0]),I0={...p0,providerConfig:M$,workspaceMetadata:N,hooks:M0},R1=Z.toolPolicies??p0.toolPolicies??Y,u=y0(j,Z.capabilities),x0=u?.requestToolApproval,h=u?.toolExecutors,H0=K?.(I0),E0=new O6({currentWorkspacePath:R.rootPath,workspaces:{[R.rootPath]:R}});return{effectiveInput:Z,config:I0,providerConfig:M$,workspaceMetadata:N,workspaceInfo:R,gitState:S,extensions:R$,hooks:M0,toolPolicies:R1,requestToolApproval:x0,pluginSandboxShutdown:X0?.shutdown,runtimeBuilderInput:{config:I0,hooks:M0,extensions:R$,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:H0?.onSubAgentEvent,onSubAgentStart:H0?.onSubAgentStart,onSubAgentEnd:H0?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:f1,configExtensions:q,toolExecutors:h,toolPolicies:R1,workspaceManager:E0,logger:I0.logger,telemetry:I0.telemetry,requestToolApproval:x0}}}import{existsSync as oQ,mkdirSync as oE,readdirSync as sE,rmdirSync as tE,rmSync as eE,unlinkSync as $C}from"node:fs";import{dirname as HF,join as w5}from"node:path";function V0(){return new Date().toISOString()}function P5($){if(!$||!oQ($))return;try{$C($)}catch{}}function ZC($){let Z=$6($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=W5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class rW{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return w5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!oQ(Z))oE(Z,{recursive:!0});return Z}sessionMessagesPath($){return w5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return w5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return w5(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!oQ(Z)){Z=HF(Z);continue}try{if(sE(Z).length>0)break;tE(Z)}catch{break}Z=HF(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!oQ($))return;try{eE($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:J,fileStem:W}=ZC($),X=this.sessionArtifactsDir(J);return{messagesPath:w5(X,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as QC}from"@cline/shared/storage";q0();function KF($,Z,Q,J,W){if(Q)FZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});else GZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});JC($.telemetry,{workspacePath:J})}function JC($,Z){let Q=QC("Hooks"),J=r$(Z.workspacePath),W=new Map;for(let X of J){let j=X.hookEventName??"unknown",Y=W.get(j)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;W.set(j,Y)}for(let[X,j]of W.entries())NZ($,X,j.global,j.workspace)}function GF($,Z){for(let Q of Z.mentions)zZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)OZ($,"file",Q.length);for(let Q of Z.ignoredMentions)qZ($,"file","not_found",Q)}var _O={};w(_O,{ProviderSettingsManager:()=>K1});import{chmodSync as AO,existsSync as WV,mkdirSync as sc,readFileSync as tc,renameSync as ec,rmSync as $u,writeFileSync as Zu}from"node:fs";import{basename as OO,dirname as XV}from"node:path";import{resolveProviderSettingsPath as Qu}from"@cline/shared/storage";var f={};w(f,{writeModelsFileSync:()=>e9,writeHubDiscovery:()=>M7,writeGlobalSettings:()=>g0,withHubStartupLock:()=>E7,verifyHubConnection:()=>y1,updateMcpSettingsFileSync:()=>q1,updateMcpSettingsFile:()=>M6,updateMcpServerOAuthStateAsync:()=>n5,updateMcpServerOAuthState:()=>e2,updateLocalProvider:()=>S3,uninstallPlugin:()=>l9,uninstallMarketplaceSkill:()=>_3,uninstallMarketplacePlugin:()=>L3,uninstallMarketplaceMcpServerFromSettings:()=>U3,uninstallMarketplaceEntry:()=>AY,truncateNotificationBody:()=>h9,truncateCommandOutput:()=>R2,trimMessagesBeforeUserRun:()=>C9,toggleDisabledTool:()=>ZQ,toTeamProgressLifecycleEvent:()=>d6,toProviderConfig:()=>J1,toHubStatusUrl:()=>hX,toHubHealthUrl:()=>C7,toHookConfigFileName:()=>O5,syncStoredProviderRegistration:()=>SY,syncPluginMcpServersToSettings:()=>d9,summarizeUsageFromMessages:()=>Q6,stripUtf8Bom:()=>nc,stopLocalHubServerGracefully:()=>nX,startLocalOAuthServer:()=>D1,startHubWebSocketServer:()=>T8,startHubServer:()=>nL,startClineDeviceAuth:()=>jJ,splitCoreSessionConfig:()=>Q9,spawnDetachedHubServerWithRetry:()=>I6,spawnDetachedHubServer:()=>uX,setToolAutoApproveGlobally:()=>lH,setTelemetryOptOutGlobally:()=>IH,setSdkLogger:()=>t3,setPlanActModeGlobally:()=>dH,setMcpServerDisabled:()=>s2,setDisabledTools:()=>cJ,setDisabledPlugin:()=>aH,setCompactionStrategyGlobally:()=>vH,setCompactionModeGlobally:()=>cH,setAutoUpdateEnabledGlobally:()=>xH,sendHubCommand:()=>l_,sdkDebug:()=>t,saveProviderOAuthCredentials:()=>O2,saveLocalProviderSettings:()=>gY,saveLocalProviderOAuthCredentials:()=>uY,sanitizeSessionToken:()=>m2,safeParseSettings:()=>iQ,safeCreateProviderConfig:()=>uW,runSubprocessEvent:()=>Y$,runHook:()=>o6,reviveTeamStateDates:()=>HQ,restartLocalHubIfIdleAfterStartupTimeout:()=>y7,resolveWorkspaceHubOwnerContext:()=>GD,resolveWorkflowsConfigSearchPaths:()=>c5,resolveSkillsConfigSearchPaths:()=>v5,resolveSharedHubOwnerContext:()=>a0,resolveSessionBackend:()=>Dj,resolveRulesConfigSearchPaths:()=>m5,resolveProviderConfig:()=>f5,resolveProviderApiKeyFromSettings:()=>FJ,resolveProductionHubOwnerContext:()=>B1,resolvePluginSkillDirectoriesFromPaths:()=>j$,resolvePluginConfigSearchPaths:()=>D5,resolveModelsRegistryPath:()=>u1,resolveMessageDisplayRole:()=>_J,resolveMcpServerRegistrations:()=>W1,resolveMarketplaceMcpServerName:()=>r9,resolveLocalClineAuthToken:()=>pY,resolveHubUrl:()=>fj,resolveHubOwnerContext:()=>F$,resolveHubEndpointOptions:()=>V1,resolveHubBuildId:()=>R7,resolveHooksConfigSearchPaths:()=>L5,resolveDisabledToolNames:()=>P1,resolveDisabledPluginPaths:()=>o4,resolveDefaultMcpSettingsPath:()=>J0,resolveDefaultHubPort:()=>k6,resolveDefaultHubPathname:()=>cX,resolveDefaultHubHost:()=>mX,resolveCoreSelectedToolIds:()=>GQ,resolveCoreDistinctId:()=>o0,resolveCoreDeviceId:()=>v6,resolveCompatibleLocalHubUrl:()=>_9,resolveClineDir:()=>VD,resolveClineDataDir:()=>Y8,resolveAndLoadAgentPlugins:()=>B6,resolveAgentPluginPaths:()=>X$,requestHubShutdown:()=>D9,requestDesktopToolApproval:()=>QY,removePluginMcpServersFromSettings:()=>p9,removePersistedConnectorConnection:()=>o3,rememberRecoverableLocalHubUrl:()=>X2,registerRemoteConfigSessionBlobUpload:()=>X3,registerMcpServersFromSettingsFile:()=>$8,registerDisposable:()=>ic,refreshProviderModelsFromSource:()=>vY,refreshOpenAICodexToken:()=>SZ,refreshOcaToken:()=>IZ,refreshClineToken:()=>wZ,reconnectPersistedConnectors:()=>F4,readToolAutoApproveGlobally:()=>pH,readSessionCheckpointHistory:()=>L8,readRemoteConfigSessionBlobUploadMetadata:()=>rj,readPlanActModeGlobally:()=>uH,readModelsFileSync:()=>K4,readHubDiscovery:()=>R0,readGlobalSettings:()=>j0,readCompactionStrategyGlobally:()=>gH,readCompactionModeGlobally:()=>mH,readBearerToken:()=>t7,projectSessionCompactionState:()=>b$,probeHubServer:()=>U$,probeHubConnection:()=>p_,prewarmFileIndex:()=>nZ,prewarmDetachedHubServer:()=>P7,prepareRemoteConfigCoreIntegration:()=>aj,persistConnectorConnection:()=>r3,parseWorkflowConfigFromMarkdown:()=>g5,parseUserCommandEnvelope:()=>lc,parseSkillConfigFromMarkdown:()=>h5,parseSettings:()=>lQ,parseSessionCompactionState:()=>_1,parseRuleConfigFromMarkdown:()=>x5,parsePluginSource:()=>M3,parseMcpInstallArgs:()=>u9,parseHookEventPayload:()=>a6,parseConfiguredAgentConfig:()=>q9,normalizeWorkspacePath:()=>S1,normalizeUserInput:()=>pc,normalizeSdkError:()=>dc,normalizeRuntimeCapabilities:()=>y0,normalizeProviderId:()=>D6,normalizeOAuthProvider:()=>mY,normalizeHubWebSocketUrl:()=>j2,noopBasicLogger:()=>uc,migrateLegacyProviderSettings:()=>XZ,mergeRulesForSystemPrompt:()=>f6,mergeAgentHooks:()=>r2,marketplaceEntryKey:()=>LY,markLocalProviderEnabled:()=>IY,makeTeamTaskSubSessionId:()=>J5,makeSubSessionId:()=>e8,loginOpenAICodex:()=>O4,loginOcaOAuth:()=>N4,loginLocalProvider:()=>cY,loginClineOAuth:()=>L4,loginAndSaveProviderOAuthCredentials:()=>R4,loginAndSaveLocalProviderOAuthCredentials:()=>dY,loadOpenTelemetryAdapter:()=>Hc,loadMcpSettingsFile:()=>o2,loadLlmsConfigFromFile:()=>ZV,loadConfiguredAgentConfigs:()=>m6,loadAgentPluginsFromPathsWithDiagnostics:()=>d2,loadAgentPluginsFromPaths:()=>LQ,loadAgentPluginFromPath:()=>F5,listSessionHistoryFromBackend:()=>bX,listPluginToolsWithDiagnostics:()=>_7,listPluginTools:()=>t5,listMcpServerOAuthStatuses:()=>a5,listLocalProviders:()=>hY,listHookConfigFiles:()=>r$,listActiveConnectors:()=>L2,isUserRunMessage:()=>LJ,isToolDisabledGlobally:()=>iH,isTelemetryOptedOutGlobally:()=>$Q,isSessionNotFoundError:()=>G$,isRuleEnabled:()=>j7,isPluginDisabledGlobally:()=>nH,isOfficialPluginSlug:()=>R3,isOAuthProvider:()=>S$,isMarketplaceSkillInstalled:()=>D3,isLocalHubOrigin:()=>ij,isLocalHubHostName:()=>e7,isHubReconnectableTransportError:()=>iX,isHubCommandTimeoutError:()=>b7,isDiscoveryFilePresent:()=>HD,isClinePassLimitMessage:()=>wc,isClinePassLimitError:()=>Cc,isClineOrgIndividualInferenceSubscriptionMessage:()=>Ec,isClineOrgIndividualInferenceSubscriptionError:()=>Mc,isClineNotSubscribedMessage:()=>Rc,isClineNotSubscribedError:()=>fc,isClineModelNotFoundMessage:()=>Nc,isClineFreeModelLimitMessage:()=>Tc,isClineFreeModelLimitError:()=>zc,isClineAccountActionRequest:()=>sQ,isBuiltInProviderId:()=>mW,isAutoUpdateEnabledGlobally:()=>hH,installPlugin:()=>fY,installMcpServer:()=>JY,identifyAccount:()=>U1,hashSecret:()=>P0,hasMcpSettingsFile:()=>B$,getValidOpenAICodexCredentials:()=>q4,getValidOcaCredentials:()=>f4,getValidClineCredentials:()=>A4,getUserRunSpan:()=>E1,getProviderOAuthCredentialsFromSettings:()=>M4,getProviderConfigFields:()=>lY,getProviderConfig:()=>kQ,getProviderAuthStorageId:()=>GJ,getProviderAuthHandler:()=>F0,getPersistedProviderApiKey:()=>h8,getPersistedConnectorConnection:()=>a3,getMcpServerOAuthState:()=>t2,getMarketplaceSkillCandidates:()=>n9,getLocalProviderModels:()=>xY,getLiveModelsCatalog:()=>U6,getGlobalMarketplaceSkillPaths:()=>a9,getFileIndex:()=>e1,getCurrentContextSize:()=>BW,getCoreHeadlessToolNames:()=>Q5,getCoreDefaultEnabledToolIds:()=>KQ,getCoreBuiltinToolCatalog:()=>g2,getCoreAcpToolNames:()=>FQ,getClinePassSubscriptionUrl:()=>qc,getClineOrgIndividualInferenceSubscriptionMessage:()=>Oc,getClineNotSubscribedMessage:()=>Ac,getClineDefaultSystemPrompt:()=>Pc,generateWorkspaceInfoWithDiagnostics:()=>E5,generateWorkspaceInfo:()=>A6,formatRulesForSystemPrompt:()=>N6,formatProviderOAuthApiKey:()=>UJ,formatDisplayUserInput:()=>cc,findInstalledGlobalMarketplaceSkillName:()=>o9,findCheckpointForRun:()=>r6,filterExtensionToolRegistrations:()=>JQ,filterDisabledTools:()=>Z$,filterDisabledPluginPaths:()=>QQ,fetchClineRecommendedModels:()=>eY,extractClinePassLimitMessage:()=>Lc,extractClineFreeModelLimitResetTime:()=>_c,executeClineAccountAction:()=>tQ,ensureHubWebSocketServer:()=>$3,ensureHubServer:()=>aL,ensureDetachedHubServer:()=>AD,ensureCustomProvidersLoadedSync:()=>QZ,ensureCustomProvidersLoaded:()=>JZ,ensureCompatibleLocalHubUrl:()=>H8,enrichPromptWithMentions:()=>l8,emptyWorkspaceManifest:()=>gc,emptyStoredProviderSettings:()=>s$,discoverPluginModulePaths:()=>_5,disablePluginMcpServersInSettings:()=>YY,disableConnectorAutostart:()=>n3,deriveSubsessionStatus:()=>X5,deleteLocalProvider:()=>b3,defineLlmsConfig:()=>$V,createWorkflowsConfigDefinition:()=>p5,createUserInstructionConfigService:()=>t$,createToolPoliciesWithPreset:()=>oZ,createTool:()=>xc,createTeamName:()=>V3,createSubprocessHooks:()=>p7,createSpawnAgentTool:()=>p$,createSkillsConfigDefinition:()=>u5,createShellTool:()=>p4,createShellExecutor:()=>M2,createSessionHost:()=>i6,createSessionCompactionState:()=>x8,createRuntimeHost:()=>i6,createRulesConfigDefinition:()=>d5,createRestoredCheckpointMetadata:()=>E9,createRemoteConfigSessionMessagesArtifactUploader:()=>nj,createProviderConfig:()=>cW,createOpenTelemetryTelemetryService:()=>k9,createOAuthClientCallbacks:()=>q6,createMcpTools:()=>S6,createLocalHubScheduleRuntimeHandlers:()=>Z3,createLlmsSdk:()=>JV,createInitialAccumulatedUsage:()=>w0,createInMemoryHubOwnerContext:()=>BD,createHubServerUrl:()=>z1,createHubAuthToken:()=>f7,createHookConfigFileHooks:()=>z5,createHookConfigFileExtension:()=>F6,createHookAuditHooks:()=>G6,createEditorExecutor:()=>P2,createDisabledMcpToolPolicy:()=>s5,createDisabledMcpToolPolicies:()=>D7,createDelegatedAgentConfigProvider:()=>u$,createDelegatedAgent:()=>d$,createDefaultToolsWithPreset:()=>sZ,createDefaultTools:()=>g$,createDefaultShellExecutor:()=>n4,createDefaultMcpServerClientFactory:()=>w6,createDefaultExecutors:()=>i8,createCoreSettingsService:()=>Q8,createCoreSessionSnapshot:()=>k1,createContributionRegistry:()=>hc,createContextCompactionPrepareTurn:()=>y4,createConfiguredTelemetryService:()=>A$,createConfiguredTelemetryHandle:()=>B2,createConfiguredAgentTools:()=>c6,createCompactionStateAwarePrepareTurn:()=>k4,createClineTelemetryServiceMetadata:()=>Ic,createClineTelemetryServiceConfig:()=>kc,createCheckpointComparePlan:()=>m7,createBuiltinTools:()=>v2,createApplyPatchExecutor:()=>w2,createAgentTeamsTools:()=>x2,createAgentRuntime:()=>oc,createAgentHooksExtension:()=>H6,countUserRunMessages:()=>y$,connectToHub:()=>i7,computePatchChanges:()=>d8,completeClineDeviceAuth:()=>YJ,compareCheckpointToWorkspace:()=>w9,collectPluginMcpOAuthCandidates:()=>E3,clearPrivateModelsCatalogCache:()=>gW,clearLiveModelsCatalogCache:()=>xW,clearHubDiscovery:()=>n0,captureWorkspacePathResolved:()=>wV,captureWorkspaceInitialized:()=>HZ,captureWorkspaceInitError:()=>KZ,captureToolUsage:()=>P8,captureTokenUsage:()=>UZ,captureTaskRestarted:()=>FZ,captureTaskCreated:()=>GZ,captureTaskCompleted:()=>U4,captureSubagentExecution:()=>_4,captureSkillUsed:()=>_Z,captureSdkError:()=>yc,captureProviderConfigured:()=>SV,captureProviderApiError:()=>D4,captureModeSwitch:()=>DZ,captureMistakeLimitReached:()=>AZ,captureMentionUsed:()=>OZ,captureMentionSearchResults:()=>zZ,captureMentionFailed:()=>qZ,captureHookDiscovery:()=>NZ,captureExtensionActivated:()=>CV,captureDiffEditFailure:()=>LZ,captureConversationTurnEvent:()=>w8,captureCompactionSkipped:()=>RZ,captureCompactionExecuted:()=>fZ,captureAuthSucceeded:()=>i1,captureAuthStarted:()=>l1,captureAuthLoggedOut:()=>C$,captureAuthFailed:()=>r1,captureAgentUnexpectedReasoningTokens:()=>EV,captureAgentTeamCreated:()=>TZ,captureAgentCreated:()=>w$,buildWorkspaceMetadata:()=>C5,buildTeamProgressSummary:()=>u6,buildSdkErrorProperties:()=>Sc,buildRemoteConfigSessionBlobUploadMetadata:()=>J3,buildMcpInstallTransport:()=>B3,buildDelegatedAgentConfig:()=>I2,buildConnectionUpdate:()=>aJ,buildConfiguredAgentToolName:()=>z9,buildConfiguredAgentToolDescriptors:()=>T9,buildCheckpointWorkspaceDiff:()=>c7,bootstrapAgentTeams:()=>t8,authorizeMcpServerOAuth:()=>G7,augmentMcpTimeoutError:()=>H$,addLocalProvider:()=>kY,accumulateUsageTotals:()=>N0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>I5,UnifiedConfigFileWatcher:()=>a2,ToolPresets:()=>Q1,TelemetryService:()=>e6,TelemetryLoggerSink:()=>y9,TEAM_TOOL_NAMES:()=>s8,SubprocessSandbox:()=>j6,StructuredCommandInputSchema:()=>N2,StoredProviderSettingsSchema:()=>L6,StoredProviderSettingsEntrySchema:()=>rQ,SqliteTeamStore:()=>N8,SqliteSessionStore:()=>x1,SessionVersioningService:()=>K2,SessionVersioningError:()=>u0,SessionSource:()=>L0,SessionNotFoundError:()=>K$,SapSettingsSchema:()=>uQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>k5,SESSION_STATUSES:()=>j5,SESSION_NOT_FOUND_ERROR_CODE:()=>J8,SDK_ERROR_TELEMETRY_EVENT:()=>rc,RuntimeOAuthTokenManager:()=>j4,RpcClineAccountService:()=>b5,RemoteRuntimeHost:()=>g6,ReasoningSettingsSchema:()=>gQ,RULES_CONFIG_DIRECTORY_NAME:()=>X7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W3,ProviderSettingsSchema:()=>a$,ProviderSettingsManager:()=>K1,ProviderProtocolSchema:()=>IQ,ProviderIdSchema:()=>M5,ProviderClientSchema:()=>hQ,PatchActionType:()=>C2,PATCH_MARKERS:()=>d,OpenTelemetryProvider:()=>$4,OcaSettingsSchema:()=>dQ,OPENAI_COMPATIBLE_PROVIDERS:()=>N5,OAuthReauthRequiredError:()=>f8,NodeHubClient:()=>T1,NoOpFeatureFlagsProvider:()=>_8,NativeHubTransportAdapter:()=>m9,ModelCatalogSettingsSchema:()=>pQ,McpSettingsUpdateSkippedError:()=>R6,McpSettingsMutatorPurityError:()=>e$,McpSettingsLockTimeoutError:()=>$2,MAX_COMMAND_OUTPUT_CHARS:()=>o1,LocalRuntimeHost:()=>m1,Llms:()=>Kc,InMemoryWorkspaceManager:()=>O6,InMemoryMcpManager:()=>Z8,HubUIClient:()=>Ej,HubTransportError:()=>m0,HubSessionClient:()=>Mj,HubServerTransport:()=>Q4,HubScheduleService:()=>t6,HubScheduleCommandService:()=>s6,HubRuntimeHost:()=>D$,HubCommandError:()=>h6,HookEventPayloadSchema:()=>d7,HookEventNameSchema:()=>u7,HookConfigFileName:()=>K6,HOOK_CONFIG_FILE_EVENT_MAP:()=>A5,HOOKS_CONFIG_DIRECTORY_NAME:()=>NQ,GlobalSettingsSchema:()=>a4,GcpSettingsSchema:()=>mQ,FileTeamPersistenceStore:()=>h3,FeatureFlagsService:()=>D8,FeatureFlagDefaultValue:()=>mc,FEATURE_FLAGS:()=>vc,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d3,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>X4,DefaultLlmsSdk:()=>YZ,DEFAULT_MODELS_CATALOG_URL:()=>PQ,DEFAULT_HUB_PORT:()=>gX,DEFAULT_HUB_PATHNAME:()=>vX,DEFAULT_HUB_HOST:()=>xX,CoreSettingsService:()=>Z2,CoreSessionService:()=>v1,ContributionRegistry:()=>bc,CommandExitError:()=>s1,ClinePassLimitError:()=>Dc,ClineOrgIndividualInferenceSubscriptionError:()=>Uc,ClineNotSubscribedError:()=>Fc,ClineFreeModelLimitError:()=>Gc,ClineCore:()=>P9,ClineAccountService:()=>S5,ChatViewStateSchema:()=>sY,ChatSummarySchema:()=>u3,ChatSessionStatusSchema:()=>g3,ChatSessionConfigSchema:()=>x3,ChatMessageSchema:()=>c3,ChatMessageRoleSchema:()=>v3,ChatMessageImageSchema:()=>m3,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>jZ,BrowserWebSocketHubAdapter:()=>v9,BUILT_IN_PROVIDER_IDS:()=>vW,BUILT_IN_PROVIDER:()=>R5,AzureSettingsSchema:()=>cQ,AwsSettingsSchema:()=>vQ,AuthSettingsSchema:()=>xQ,AgentTeamsRuntime:()=>U8,AgentTeam:()=>l6,Agent:()=>ac,ALL_DEFAULT_TOOL_NAMES:()=>k$});M(f,S60);import*as Kc from"@cline/llms";import{ClineFreeModelLimitError as Gc,ClineNotSubscribedError as Fc,ClineOrgIndividualInferenceSubscriptionError as Uc,ClinePassLimitError as Dc,extractClineFreeModelLimitResetTime as _c,extractClinePassLimitMessage as Lc,getClineNotSubscribedMessage as Ac,getClineOrgIndividualInferenceSubscriptionMessage as Oc,getClinePassSubscriptionUrl as qc,isClineFreeModelLimitError as zc,isClineFreeModelLimitMessage as Tc,isClineModelNotFoundMessage as Nc,isClineNotSubscribedError as fc,isClineNotSubscribedMessage as Rc,isClineOrgIndividualInferenceSubscriptionError as Mc,isClineOrgIndividualInferenceSubscriptionMessage as Ec,isClinePassLimitError as Cc,isClinePassLimitMessage as wc}from"@cline/llms";import{buildClineSystemPrompt as Pc,buildSdkErrorProperties as Sc,ContributionRegistry as bc,captureSdkError as yc,createClineTelemetryServiceConfig as kc,createClineTelemetryServiceMetadata as Ic,createContributionRegistry as hc,createTool as xc,emptyWorkspaceManifest as gc,FEATURE_FLAGS as vc,FeatureFlagDefaultValue as mc,formatDisplayUserInput as cc,noopBasicLogger as uc,normalizeSdkError as dc,normalizeUserInput as pc,parseUserCommandEnvelope as lc,registerDisposable as ic,SDK_ERROR_TELEMETRY_EVENT as rc,stripUtf8Bom as nc}from"@cline/shared";import"@cline/shared/storage";var UF={};w(UF,{isClineAccountActionRequest:()=>sQ,executeClineAccountAction:()=>tQ,RpcClineAccountService:()=>b5,ClineAccountService:()=>S5});function WC($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function FF($,Z,Q){let J=WC(Q);if(J)return J;let W=Z.trim();if(W){let X=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class S5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let J=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(J)return J;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let J=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,X=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...J??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:W.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(FF(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(FF(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function sQ($){return $.action==="clineAccount"}async function tQ($,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 b5{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 DF={};w(DF,{createOAuthClientCallbacks:()=>q6});function q6($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((J)=>{$.onOpenUrlError?.({url:Z,error:J})})}catch(J){$.onOpenUrlError?.({url:Z,error:J})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var y_={};w(y_,{ClineCore:()=>P9});function _F($){if($===!0)return{};if(!$)return;return $}function LF($){if($==="user")return"global";return $}class nW{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 AF($){let{host:Z}=$;return{async startSession(Q){let J=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await Z.startSession({source:Q.source?.trim()||L0.CLI,interactive:!1,config:{providerId:D6(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:J,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:YC(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,J){let W=await Z.runTurn({sessionId:Q,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((X)=>X.content),delivery:J.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:jC(W)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function eQ($){let Z=XC($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),J=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!J&&!W&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...J?{user:J}:{},...W?{logger:W}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function XC($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function jC($){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 YC($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var MU={};w(MU,{createCoreSettingsService:()=>Q8,CoreSettingsService:()=>Z2});import{existsSync as $9,readFileSync as QP}from"node:fs";import{basename as KX,dirname as OU,extname as JP,isAbsolute as TU,join as WP,relative as NU,resolve as qU}from"node:path";var yF={};w(yF,{resolveWorkflowsConfigSearchPaths:()=>c5,resolveSkillsConfigSearchPaths:()=>v5,resolveRulesConfigSearchPaths:()=>m5,parseWorkflowConfigFromMarkdown:()=>g5,parseSkillConfigFromMarkdown:()=>h5,parseRuleConfigFromMarkdown:()=>x5,createWorkflowsConfigDefinition:()=>p5,createUserInstructionConfigService:()=>t$,createSkillsConfigDefinition:()=>u5,createRulesConfigDefinition:()=>d5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>I5,UnifiedConfigFileWatcher:()=>a2,SKILLS_CONFIG_DIRECTORY_NAME:()=>k5,RULES_CONFIG_DIRECTORY_NAME:()=>X7});import{createHash as VC}from"node:crypto";import{watch as BC}from"node:fs";import{readdir as HC,readFile as KC}from"node:fs/promises";import{join as GC}from"node:path";function FC($){return VC("sha1").update($).digest("hex")}function zF($){return Boolean($&&typeof $==="object"&&"code"in $)}function OF($){return zF($)&&$.code==="ENOENT"}function qF($){return zF($)&&($.code==="EACCES"||$.code==="EPERM")}class a2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let J of Q.directories){let W=this.baseTypesByDirectory.get(J);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(J,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,J])=>[Q,{...J}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([J,W])=>[J,{...W}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=BC(Z,()=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(J)=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let X of W)this.emit({kind:"error",type:X,error:J,filePath:Z})})}catch(Q){if(!OF(Q)&&!qF(Q)){let J=$.get(Z);if(!J)continue;for(let W of J)this.emit({kind:"error",type:W,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),J=this.recordsByType.get($.type)??new Map;for(let[W,X]of J.entries()){if(Z.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:X.filePath})}for(let[W,X]of Z.entries()){let j=J.get(W);if(j&&j.filePath===X.filePath&&j.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:W,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let J of $.directories){Q.add(J);let W=$.discoverFiles?await $.discoverFiles(J):await this.readDirectoryFileCandidates(J);for(let X of W){let{fileName:j,filePath:Y}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await KC(Y,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:j,filePath:Y,content:V},H=$.parseFile(B),K=$.resolveId(H,B).trim();if(!K)continue;Z.set(K,{type:$.type,id:K,item:H,filePath:Y,fingerprint:FC(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let J of Q){let W=$.get(J);if(W)W.add(Z);else $.set(J,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await HC($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:GC($,Q.name)})).sort((Q,J)=>Q.fileName.localeCompare(J.fileName))}catch(Z){if(OF(Z)||qF(Z))return[];throw Z}}}import{readdir as oW,readFile as UC,stat as aW}from"node:fs/promises";import{basename as V$,dirname as DC,extname as Z7,join as r0,resolve as y5}from"node:path";import{stripUtf8Bom as _C}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as TF,RULES_CONFIG_DIRECTORY_NAME as X7,resolveGlobalAgentsRulesPath as LC,resolveRulesConfigSearchPaths as AC,resolveSkillsConfigSearchPaths as OC,resolveWorkflowsConfigSearchPaths as qC,SKILLS_CONFIG_DIRECTORY_NAME as k5,WORKFLOWS_CONFIG_DIRECTORY_NAME as I5}from"@cline/shared/storage";import zC from"yaml";var $7="SKILL.md",TC="managed.json",NC=new Set([".md",".markdown",".txt"]);function sW($){return $.trim().toLowerCase()}function z6($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function Q7($){return NC.has(Z7($).toLowerCase())}function NF($){let Z=[],Q=new Set;for(let J of $){let W=y5(J);if(Q.has(W))continue;Q.add(W),Z.push(J)}return Z}function fC($){let Z=[...$?.directories??v5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...PG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return NF(Z)}async function tW($){try{let Z=await oW($,{withFileTypes:!0}),Q=[];for(let J of Z){if(!J.isDirectory())continue;let W=r0($,J.name),X=r0(W,TC);try{let j=await UC(X,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(W)}catch(j){if(z6(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((J,W)=>J.localeCompare(W))}catch(Z){if(z6(Z))return[];throw Z}}function eW($){let Z=_C($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J;try{let j=zC.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function J7($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let J=$.trim();if(!J&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return J||void 0}function T6($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function RC($,Z){if(V$($.filePath).toLowerCase()!==TF.toLowerCase())return V$($.filePath,Z7($.filePath));if(Z&&y5($.filePath)===y5(Z,TF))return"Workspace AGENTS.md";if(y5($.filePath)===y5(LC()))return"Global AGENTS.md";return V$($.filePath,Z7($.filePath))}function h5($,Z){let{data:Q,body:J,parseError:W}=eW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in skill file.");let Y=J7(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:J7(Q.description,"description",!1),disabled:T6(Q.disabled,"disabled")??(T6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function x5($,Z){let{data:Q,body:J,parseError:W}=eW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in rule file.");let j=J7(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:T6(Q.disabled,"disabled")??(T6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function g5($,Z){let{data:Q,body:J,parseError:W}=eW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in workflow file.");let j=J7(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:T6(Q.disabled,"disabled")??(T6(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function v5($){return OC($)}function m5($){return AC($)}function c5($){return qC($)}async function fF($){if(V$($)===".cline"){let Z=await tW($);return(await Promise.all(Z.map((J)=>fF(r0(J,k5))))).flat()}try{let Z=await oW($,{withFileTypes:!0}),Q=[];for(let J of Z){if(J.isFile()&&J.name===$7){Q.push({directoryPath:$,fileName:J.name,filePath:r0($,J.name)});continue}let W=r0($,J.name);if(J.isDirectory()||J.isSymbolicLink()&&await aW(W).then((j)=>j.isDirectory()).catch((j)=>{if(z6(j))return!1;throw j}))Q.push({directoryPath:W,fileName:$7,filePath:r0(W,$7)})}return Q}catch(Z){if(z6(Z))return[];throw Z}}async function W7($){if(V$($)===".cline"){let Z=await tW($);return(await Promise.all(Z.map((J)=>W7(r0(J,"rules.md"))))).flat()}try{if((await aW($)).isFile())return[{directoryPath:DC($),fileName:V$($),filePath:$}]}catch(Z){if(!z6(Z))throw Z}try{let Q=(await oW($,{withFileTypes:!0})).filter((W)=>W.isFile()&&Q7(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:r0($,W.name)})),J=r0($,"AGENTS.md");try{if((await aW(J)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:J})}}catch{}return Q}catch(Z){if(z6(Z))return[];throw Z}}async function MC($){if(V$($)===".cline"){let Z=await tW($);return(await Promise.all(Z.map((J)=>W7(r0(J,I5))))).flat()}return W7($)}function u5($){let Z=fC($),Q=$?.workspacePath?r0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?NF([...Z,Q]):Z,discoverFiles:fF,includeFile:(J)=>J===$7,parseFile:(J)=>h5(J.content,V$(J.directoryPath)),resolveId:(J)=>sW(J.name)}}function d5($){let Z=$?.directories??m5($?.workspacePath),Q=$?.workspacePath?r0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:W7,includeFile:(J,W)=>J===".clinerules"||Q7(J)||Q7(W),parseFile:(J)=>x5(J.content,RC(J,$?.workspacePath)),resolveId:(J)=>sW(J.name)}}function p5($){let Z=$?.directories??c5($?.workspacePath),Q=$?.workspacePath?r0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:MC,includeFile:(J)=>Q7(J),parseFile:(J)=>g5(J.content,V$(J.filePath,Z7(J.filePath))),resolveId:(J)=>sW(J.name)}}function RF($){let Z=[u5($?.skills),d5($?.rules),p5($?.workflows)];return new a2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as MF}from"@cline/shared";function EC($,Z){if($.description?.trim())return MF($.description,".");if(Z==="workflow")return;return MF($.instructions,".")}function CC($){return $.disabled!==!0}function EF($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,J])=>({id:Q,record:J})).filter(({record:Q})=>CC(Q.item)).map(({id:Q,record:J})=>({id:Q,name:J.item.name,instructions:J.item.instructions,description:EC(J.item,Z),kind:Z})).sort((Q,J)=>Q.name.localeCompare(J.name))}function l5($){let Z=new Map;for(let Q of[...EF($,"workflow"),...EF($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,J)=>Q.name.localeCompare(J.name))}function CF($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let J=Q[1];if(!J)return $;let W=J.length+1,X=$.slice(W),j=l5(Z).find((Y)=>Y.name===J);return j?`${j.instructions}${X}`:$}var PF={};w(PF,{mergeRulesForSystemPrompt:()=>f6,loadRulesForSystemPromptFromWatcher:()=>$X,listEnabledRulesFromWatcher:()=>wF,isRuleEnabled:()=>j7,formatRulesForSystemPrompt:()=>N6});function j7($){return $.disabled!==!0}function N6($){if($.length===0)return"";return`
|
|
226
226
|
|
|
227
227
|
# Rules
|
|
228
228
|
${$.map((Q)=>`## ${Q.name}
|
|
@@ -230,7 +230,7 @@ ${Q.instructions}`).join(`
|
|
|
230
230
|
|
|
231
231
|
`)}`}function f6($,Z){let Q=$?.trim(),J=Z?.trim();if(Q&&J)return`${Q}
|
|
232
232
|
|
|
233
|
-
${J}`;return Q||J||void 0}function wF($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(
|
|
233
|
+
${J}`;return Q||J||void 0}function wF($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(j7).sort((Q,J)=>Q.name.localeCompare(J.name))}function $X($){return N6(wF($))}function Y7($){return $.trim().replace(/^\/+/,"").toLowerCase()}function wC($){if(!$||$.length===0)return;let Z=$.map(Y7).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function PC($,Z,Q){if(!Q)return!0;let J=Y7($),W=Y7(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function i5($,Z){let Q=wC(Z);return[...$.getSnapshot("skill").entries()].map(([W,X])=>{let j=X.item;return{id:W,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((W)=>PC(W.id,W.name,Q))}function SC($,Z){return i5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,J)=>Q.localeCompare(J))}function bC($,Z,Q){let J=Y7(Z);if(!J)return{error:"Missing skill name."};let W=i5($,Q),X=W.find((H)=>H.id===J);if(X){let{skill:H}=X;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:X.id,skill:H}}let j=J.includes(":")?J.split(":").at(-1)??J:J,Y=W.filter(({id:H})=>{if(H===j)return!0;return H.endsWith(`:${j}`)}),V=Y.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:K}=V[0];return{id:H,skill:K}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(Y.length===1){let{skill:H}=Y[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${Y.map(({id:H})=>H).join(", ")}`};let B=SC($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function ZX($,Z=Promise.resolve(),Q){let J=new Set,W=async(X,j)=>{await Z;let Y=bC($,X,Q);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(J.has(V))return`Skill "${B.name}" is already running.`;J.add(V);try{let H=j?.trim(),K=H?`
|
|
234
234
|
<command-args>${H}</command-args>`:"",G=B.description?.trim()?`Description: ${B.description.trim()}
|
|
235
235
|
|
|
236
236
|
`:"";return`<command-name>${B.name}</command-name>${K}
|
|
@@ -241,13 +241,13 @@ ${G}${B.instructions}
|
|
|
241
241
|
${j}`:W.instructions}})}}}class bF{watcher;ready;stopped=!1;constructor($){this.watcher=RF($)}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 l5(this.watcher)}resolveRuntimeSlashCommand($){return CF($,this.watcher)}hasConfiguredSkills($){return i5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return ZX(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return SF({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function t$($){return new bF($)}import{readFile as yC,writeFile as kC}from"node:fs/promises";import{stripUtf8Bom as IC}from"@cline/shared";import IF from"yaml";function hC($){let Z=IC($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J,j=IF.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}function kF($,Z){return`---
|
|
242
242
|
${IF.stringify($).trimEnd()}
|
|
243
243
|
---
|
|
244
|
-
${Z}`}function xC($,Z){let{data:Q,body:J,hadFrontmatter:W}=hC($);if(!W&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return J;return kF(Q,J)}return Q.disabled=!0,kF(Q,J)}async function hF({filePath:$,enabled:Z}){let Q=await yC($,"utf8"),J=xC(Q,Z);return await kC($,J),{filePath:$,enabled:Z,disabled:!Z}}var DU={};w(DU,{updateMcpSettingsFileSync:()=>q1,updateMcpSettingsFile:()=>M6,updateMcpServerOAuthStateAsync:()=>n5,updateMcpServerOAuthState:()=>e2,setMcpServerDisabled:()=>s2,resolvePluginMcpServerRegistrations:()=>
|
|
244
|
+
${Z}`}function xC($,Z){let{data:Q,body:J,hadFrontmatter:W}=hC($);if(!W&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return J;return kF(Q,J)}return Q.disabled=!0,kF(Q,J)}async function hF({filePath:$,enabled:Z}){let Q=await yC($,"utf8"),J=xC(Q,Z);return await kC($,J),{filePath:$,enabled:Z,disabled:!Z}}var DU={};w(DU,{updateMcpSettingsFileSync:()=>q1,updateMcpSettingsFile:()=>M6,updateMcpServerOAuthStateAsync:()=>n5,updateMcpServerOAuthState:()=>e2,setMcpServerDisabled:()=>s2,resolvePluginMcpServerRegistrations:()=>F7,resolveMcpServerRegistrations:()=>W1,resolveDefaultMcpSettingsPath:()=>J0,registerMcpServersFromSettingsFile:()=>$8,normalizePluginMcpServerRegistration:()=>HX,loadMcpSettingsFile:()=>o2,listMcpServerOAuthStatuses:()=>a5,hasMcpSettingsFile:()=>B$,getMcpServerOAuthState:()=>t2,createMcpTools:()=>S6,createDisabledMcpToolPolicy:()=>s5,createDisabledMcpToolPolicies:()=>D7,createDefaultMcpServerClientFactory:()=>w6,authorizeMcpServerOAuth:()=>G7,augmentMcpTimeoutError:()=>H$,McpSettingsUpdateSkippedError:()=>R6,McpSettingsMutatorPurityError:()=>e$,McpSettingsLockTimeoutError:()=>$2,InMemoryMcpManager:()=>Z8});import{spawn as Ew}from"node:child_process";import{StringDecoder as YU}from"node:string_decoder";import{formatMcpTimeoutErrorMessage as Cw,isMcpTimeoutConfigured as ww}from"@cline/shared";import{UnauthorizedError as JU}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Pw}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as Lw}from"node:crypto";import{UnauthorizedError as Aw}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Ow}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as qw}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as zw}from"@modelcontextprotocol/sdk/client/streamableHttp.js";B7();import{formatMcpTimeoutErrorMessage as Uw,resolveMcpTimeoutSeconds as Dw}from"@cline/shared";import{ErrorCode as _w,McpError as ZU}from"@modelcontextprotocol/sdk/types.js";function o5($){return Dw($)*1000}function H$($,Z,Q){if(!($ instanceof ZU)||$.code!==_w.RequestTimeout)return $;return new ZU($.code,Uw(Z,Q),$.data)}var Tw="/mcp/oauth/callback",Nw=[1456,1457,1458],fw=300000;function Rw($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function Mw($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function K7($){let Z={};try{Z=t2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,J,W=async(j)=>{let Y=E6(j(Z))??{};try{Z=e2($.serverName,()=>Y,{filePath:$.settingsPath})}catch{Z=Y}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return Mw(Z.redirectUrl??$.redirectUrl)},state:()=>{return J=Lw(),J},clientInformation:()=>Z.clientInformation,saveClientInformation:async(j)=>{await W((Y)=>({...Y,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(j)=>{let Y=Date.now();await W((V)=>({...V,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Y}))},redirectToAuthorization:async(j)=>{Q=j.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(j)=>{await W((Y)=>({...Y,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(j)=>{await W((Y)=>{if(j==="all")return{lastError:Y.lastError,redirectUrl:Y.redirectUrl};return{...Y,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await W((Y)=>({...Y,discoveryState:j}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>J,resetInteractiveState:async()=>{await W((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await W((Y)=>({...Y,lastError:j}))},clearError:async()=>{await W((j)=>({...j,lastError:void 0}))}}}function H7($){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 qw(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new zw(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function QU($){return new Ow({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function G7($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (B7(),$U)),J=Q({filePath:$.filePath}).find((B)=>B.name===Z);if(!J)throw Error(`MCP server "${Z}" is not configured.`);if(J.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(J.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let W=o5(J.timeoutSeconds),X=await D1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:Nw,callbackPath:$.callbackPath??Tw,timeoutMs:$.timeoutMs??fw,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!X.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=K7({settingsPath:$.filePath,serverName:Z,redirectUrl:X.callbackUrl,onAuthorizationUrl:async(B)=>{await $.openUrl?.(B)}});await j.resetInteractiveState();let Y=QU($),V;try{let B=H7({registration:J,oauthProvider:j.provider,fetch:$.fetch});try{return await Y.connect(B,{timeout:W}),await Y.listTools(void 0,{timeout:W}),await j.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof Aw))throw H;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await X.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let F=j.getLastOAuthState();if(!F)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==F)throw Error("OAuth authorization failed: state mismatch.");await B.finishAuth(G.code),V=QU($);let U=H7({registration:J,oauthProvider:j.provider,fetch:$.fetch});return await V.connect(U,{timeout:W}),await V.listTools(void 0,{timeout:W}),await j.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(B){let H=Rw(H$(B,Z,W));throw await j.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await V?.close().catch(()=>{return}),X.close()}}var Sw="2024-11-05",bw=1500,WU="http://127.0.0.1:1456/mcp/oauth/callback";function C6($){return $ instanceof Error?$.message:String($)}function yw($,Z,Q){let J=C6(Z),W=C6(Q);if(J===W)return Z instanceof Error?Z:Error(J);return Error(`MCP server "${$}" failed to initialize. Newline-delimited attempt: ${J} Content-Length framed attempt: ${W}`)}function XU($){return Buffer.from(`${JSON.stringify($)}
|
|
245
245
|
`,"utf8")}function jU($){let Z=Buffer.from(JSON.stringify($),"utf8");return Buffer.concat([Buffer.from(`Content-Length: ${Z.byteLength}\r
|
|
246
246
|
\r
|
|
247
247
|
`,"utf8"),Z])}class VX{buffer="";decoder=new YU("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
|
|
248
248
|
\r
|
|
249
249
|
`);if(Q<0)break;let W=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(W[1],10),j=Q+4,Y=j+X;if(this.buffer.length<Y)break;Z.push(this.buffer.slice(j,Y)),this.buffer=this.buffer.slice(Y)}return Z}}class BX{buffer="";decoder=new YU("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
|
|
250
|
-
`);if(Q<0)break;let J=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),J.length>0)Z.push(J)}return Z}}class VU{registration;process;nextRequestId=1;pending=new Map;framedParser=new VX;newlineParser=new BX;stderrBuffer="";connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;constructor($){this.registration=$,this.requestTimeoutMs=o5($.timeoutSeconds),this.connectAttemptTimeoutMs=ww($.timeoutSeconds)?this.requestTimeoutMs:bw}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $={protocolVersion:Sw,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}};this.spawnProcess("newline");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Z){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Q){throw await this.disconnect().catch(()=>{}),yw(this.registration.name,Z,Q)}}this.notify("notifications/initialized"),this.connected=!0}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}},void 0,$.context?.signal)}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new VX,this.newlineParser=new BX,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},J=Ew(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=J,J.stdout.on("data",(W)=>this.handleStdout(W)),J.stderr.on("data",(W)=>{if(this.process!==J)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),J.once("error",(W)=>{if(this.process!==J)return;this.failAllPending(Error(`MCP process error: ${C6(W)}`))}),J.once("exit",(W,X)=>{if(this.process!==J)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${X??"null"}).${j}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let J=JSON.parse(Q);if(typeof J.id!=="number")continue;let W=this.takePending(J.id);if(!W)continue;if(J.error){let X=J.error.message||`MCP request failed with code ${J.error.code??"unknown"}`;W.reject(Error(X));continue}W.resolve(J.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${C6($)}.${Q}`)),Z.kill()}async request($,Z,Q=this.requestTimeoutMs,J){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let X=this.nextRequestId++,j={jsonrpc:"2.0",id:X,method:$,...Z?{params:Z}:{}},Y=new Promise((V,B)=>{let H=setTimeout(()=>{this.takePending(X),B(this.createTimeoutError($,Q))},Q),K=J?()=>{let G=this.takePending(X);if(!G)return;let F=J.reason instanceof Error?J.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${$}).`),{name:"AbortError"});G.reject(F)}:void 0;if(this.pending.set(X,{resolve:V,reject:B,timeout:H,signal:J,onAbort:K}),J&&K){if(J.addEventListener("abort",K,{once:!0}),J.aborted)K()}});if(!this.pending.has(X))return Y;try{W.stdin.write(this.protocolMode==="framed"?jU(j):XU(j))}catch(V){let B=this.takePending(X);if(B)B.reject(V instanceof Error?V:Error(String(V)))}return Y}createTimeoutError($,Z){return Error(Cw(this.registration.name,Z,$))}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let J={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?jU(J):XU(J))}failAllPending($){for(let Z of[...this.pending.keys()]){let Q=this.takePending(Z);if(!Q)continue;Q.reject($)}}takePending($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),clearTimeout(Z.timeout),Z.signal&&Z.onAbort)Z.signal.removeEventListener("abort",Z.onAbort);return Z}}class BU{registration;options;client;authContext;requestTimeoutMs;constructor($,Z){this.registration=$;this.options=Z;this.requestTimeoutMs=o5($.timeoutSeconds)}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=KQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??WU});this.authContext=$;let Z;try{Z=new Pw({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"});let Q=HQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q,{timeout:this.requestTimeoutMs}),await $.clearError(),this.client=Z}catch(Q){await Z?.close().catch(()=>{});let J=H$(Q,this.registration.name,this.requestTimeoutMs),W=Q instanceof JU?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):C6(J);throw await $.markError(W),Error(W)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools(void 0,{timeout:this.requestTimeoutMs})).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}},void 0,{timeout:this.requestTimeoutMs,signal:$.context?.signal})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??KQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??WU}),Q=H$($,this.registration.name,this.requestTimeoutMs),J=$ instanceof JU?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):C6(Q);throw await Z.markError(J),Error(J)}}function w6($={}){return(Z)=>Z.transport.type==="stdio"?new VU(Z):new BU(Z,$)}BQ();import{isMcpTimeoutConfigured as HU,resolveMcpTimeoutSeconds as KU}from"@cline/shared";var kw=5000;function X1(){return Date.now()}function Iw($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class Z8{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??kw}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:X1()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport),J=HU(Z.registration.timeoutSeconds)!==HU($.timeoutSeconds)||KU(Z.registration.timeoutSeconds)!==KU($.timeoutSeconds);if(Z.registration={...$},Z.updatedAt=X1(),Q||J)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=X1(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&X1()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),J=await(await this.ensureConnectedClient(Z)).listTools(),W=Iw(J);return Z.toolCache=W,Z.toolCacheUpdatedAt=X1(),Z.updatedAt=X1(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=X1(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=X1();let Z=$.client;try{Z??=await this.clientFactory($.registration),$.client=Z,await Z.connect(),$.status="connected",$.lastError=void 0,$.updatedAt=X1()}catch(Q){throw await Z?.disconnect().catch(()=>{}),$.status="disconnected",$.lastError=Q instanceof Error?Q.message:String(Q),$.updatedAt=X1(),Q}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=X1();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=X1()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),J,W=new Promise((j)=>{J=j}),X=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(J?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function P6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function GU($){return P6($)&&Object.values($).every((Z)=>typeof Z==="string")}function hw($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function xw($){if(!P6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function gw($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[J,W]of Z){if(typeof W==="string"){Q[J]=W;continue}let X=W.fromEnv?.trim()||J,j=process.env[X];if(typeof j==="string"&&j.length>0){Q[J]=j;continue}if(typeof W.value==="string"){Q[J]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function HX($){if(!P6($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,J=Q===void 0?void 0:Q;if(J!==void 0){if(!P6(J))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(J))if(typeof B!=="string"&&!xw(B))return{name:Z,loadError:`invalid env "${V}"`}}let W=$.transport;if(!P6(W))return{name:Z,loadError:"invalid MCP transport"};let X=W.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&J!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let j=P6($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=W.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let B=W.args;if(B!==void 0&&!hw(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let K=W.env;if(K!==void 0&&!GU(K))return{name:Z,loadError:"stdio MCP transport env must be strings"};let G=gw({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:K},env:J,metadata:j});if(!G.ok)return{name:Z,loadError:G.reason};let F=K||G.env?{...K??{},...G.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:j}}}if(typeof W.url!=="string"||!W.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let Y=W.headers;if(Y!==void 0&&!GU(Y))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:W.url,headers:Y}:{type:"streamableHttp",url:W.url,headers:Y},metadata:j}}}function FQ($){let Z=new Map;return $.map(({server:Q,owner:J,ownerLabel:W})=>{let X=HX(Q);if(!X.registration)return{owner:J,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let j=Z.get(X.registration.name);if(Z.has(X.registration.name)){let Y=j?` already registered by ${j}`:"";return{owner:J,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${Y}`}}return Z.set(X.registration.name,W),{owner:J,name:X.registration.name,registration:X.registration}})}import{createHash as vw}from"node:crypto";var FU=64,mw=/[^a-zA-Z0-9_-]+/g,UU=8,cw=1,uw="mcp_tool";function dw($){return vw("sha1").update($).digest("hex").slice(0,UU)}function pw($){return $.replace(mw,"_")}var UQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,J=pw(Q);if(J===Q&&Q.length<=FU)return Q;let W=dw(Q),X=FU-cw-UU;return`${J.slice(0,X)||uw}_${W}`};function s5($){return{[($.nameTransform??UQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function DQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,s5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as lw}from"@cline/shared";function iw($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function S6($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??UQ;return Z.map((J)=>{let W=Q({serverName:$.serverName,toolName:J.name});return lw({name:W,description:iw($.serverName,J),inputSchema:J.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,j)=>$.provider.callTool({serverName:$.serverName,toolName:J.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:j})})})}O1();var AU={};w(AU,{listPluginToolsWithDiagnostics:()=>_Q,listPluginTools:()=>t5});import{stat as rw}from"node:fs/promises";import{isAbsolute as nw,relative as aw,resolve as _U}from"node:path";O1();function ow($,Z){let Q=aw(_U($),_U(Z));return Q===""||!Q.startsWith("..")&&!nw(Q)}var sw=32,b6=new Map;function tw($,Z){if(!b6.has($)&&b6.size>=sw){let Q=b6.keys().next().value;if(Q)b6.delete(Q)}b6.set($,Z)}async function ew($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let J=await rw(Q);return`${Q}:${J.mtimeMs}:${J.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function LU($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function $P($){return $.sort((Z,Q)=>{let J=Z.name.localeCompare(Q.name);if(J!==0)return J;return Z.path.localeCompare(Q.path)})}async function ZP($,Z){if(!$.setup)return{tools:[]};let Q=[],J={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(J,{workspaceInfo:Z}),{tools:Q}}async function _Q($){let Z=X$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=P1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let J=await ew({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=b6.get(J);if(W)return{tools:LU(W.tools,Q),failures:W.failures,warnings:W.warnings};let X=[],j=[],Y=[],V;try{V=await V6({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let K=H.__clinePluginPath;if(!K)continue;let G=ow($.workspacePath,K)?"workspace-plugin":"global-plugin",F;try{F=await ZP(H,{rootPath:$.workspacePath})}catch(U){j.push({pluginPath:K,pluginName:H.name,phase:"setup",message:U instanceof Error?U.message:String(U),stack:U instanceof Error?U.stack:void 0});continue}for(let U of F.tools)X.push({name:U.name,pluginName:H.name,path:K,source:G,description:U.description?.trim()||void 0})}}catch(H){j=Z.map((K)=>({pluginPath:K,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=$P(X);return tw(J,{tools:B,failures:j,warnings:Y}),{tools:LU(B,Q),failures:j,warnings:Y}}async function t5($){return(await _Q($)).tools}function Z7($,Z){if(!Z)return"global";let Q=NU(Z,$);return!Q.startsWith("..")&&!TU(Q)?"workspace":"global"}function XP($,Z){return Z7($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function jP($,Z){let Q=NU(qU($),qU(Z));return Q===""||!Q.startsWith("..")&&!TU(Q)}function YP($){try{let Z=JSON.parse(QP($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function VP($){let Z=OU($);while(!0){let Q=WP(Z,"package.json");if($7(Q)){let W=YP(Q);if(W)return W;break}let J=OU(Z);if(J===Z)break;Z=J}return KX($,JP($))}function BP($){let Z=[];for(let Q of X$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let J of j$([Q]))Z.push({directory:J,pluginName:VP(Q),pluginPath:Q,source:$.workspaceRoot?XP(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,J)=>J.directory.length-Q.directory.length)}function HP($,Z){return Z.find((Q)=>jP(Q.directory,$))}function e5($){return[...$].sort((Z,Q)=>{let J=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return J(Z.source)-J(Q.source);return Z.name.localeCompare(Q.name)})}function fU($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function RU($,Z){return $.cwd?.trim()||Z||process.cwd()}async function zU($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=fU($),J=RU($,Q),W=t$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:J},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await W.start(),await Z(W)}finally{W.stop()}}function KP($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let J=Q.find((W)=>W.id===Z.id);if(J)return J}for(let J of Q)if(J.filePath===Z.path||J.item.name===Z.name||J.id===Z.name)return J;return}class Z2{async list($={}){return await zU($,async(Z)=>{let Q=fU($),J=BP({workspaceRoot:Q,cwd:RU($,Q)}),W=[],X=[],j=[],Y=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let K=H.item;W.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"workflow",source:Z7(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let K=H.item;X.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"rule",source:Z7(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let K=H.item,G=HP(H.filePath,J);j.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"skill",source:G?.source??Z7(H.filePath,Q),description:K.description,pluginName:G?.pluginName,pluginPath:G?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await t5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=J0();if(B$({filePath:B}))try{for(let H of W1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:Z7(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:e5(W.filter((H)=>$7(H.path))),rules:e5(X.filter((H)=>$7(H.path))),skills:e5(j.filter((H)=>$7(H.path))),tools:e5(Y),mcp:e5(V.filter((H)=>$7(H.path)))}})}async toggle($){if($.type==="skills")return await zU($,async(Z)=>{let Q=KP(Z,$),J=Q?.filePath;if(!J)throw Error(`Unable to resolve skill setting '${$.id??$.name??KX($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(W!==void 0?!W:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??KX($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await hF({filePath:J,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)ZZ($.name);else rH($.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()||J0(),J=$.enabled;if(J===void 0){let W=W1({filePath:Q}).find((X)=>X.name===Z);if(!W)throw Error(`Unknown MCP server: ${Z}`);J=W.disabled===!0}return s2({filePath:Q,name:Z,disabled:!J}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function Q8(){return new Z2}function EU($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await Q8().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await Q8().toggle(Z)}}}function CU($){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)}}}var wU={};w(wU,{splitCoreSessionConfig:()=>Q7,isSessionNotFoundError:()=>G$,SessionNotFoundError:()=>K$,SESSION_NOT_FOUND_ERROR_CODE:()=>J8});var J8="session_not_found";class K$ extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function G$($){return $ instanceof K$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function Q7($){let{hooks:Z,logger:Q,telemetry:J,extensionContext:W,extraTools:X,extensions:j,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...K}=$,G={};if(Z)G.hooks=Z;if(Q)G.logger=Q;if(J)G.telemetry=J;if(W)G.extensionContext=W;if(X)G.extraTools=X;if(j)G.extensions=j;if(Y)G.onTeamEvent=Y;if(V)G.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)G.checkpoint=B;if(H?.compact)G.compaction=H;let F=Object.keys(G).length>0?G:void 0;return{config:{...K,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function PU($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...GP($.localRuntime)},localRuntime:$.localRuntime}:$}function GX($,Z={}){let Q=Q7($.config),J=y0(Z.defaultCapabilities,$.capabilities),W=FP(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(W?.extensionContext);if(X)W={...W??{},extensionContext:X};return{...$,...Q,...W?{localRuntime:W}:{},...J?{capabilities:J}:{}}}function GP($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:J,onTeamRestored:W,...X}=$;return X}function FP(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}q0();function SU($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??L0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function J7($){return!!$&&typeof $==="object"&&!Array.isArray($)}function FX($){let Z=$?.trim();return Z?Z:void 0}function UP($,Z){let Q=$?.trim();if(!Q)return Z;let J=Date.parse(Q);if(!Number.isFinite(J))return Z;return new Date(J).toISOString()}function bU($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function yU($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function DP($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function _P($,Z){let Q=$.eventId.trim(),J=$.eventType.trim(),W=$.source.trim(),X=FX($.subject),j=FX($.dedupeKey)??`${J}:${W}:${X??Q}`;return{eventId:Q,eventType:J,source:W,subject:X,occurredAt:UP($.occurredAt,Z),workspaceRoot:FX($.workspaceRoot),payload:J7($.payload)?$.payload:void 0,attributes:J7($.attributes)?$.attributes:void 0,dedupeKey:j}}function UX($,Z){if(!Z)return;let Q=Z.split("."),J=$;for(let W of Q){if(!J7(J))return;J=J[W]}return J}function LP($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},J=UX(Q,Z);if(J!==void 0)return J;if($.attributes){let W=UX($.attributes,Z);if(W!==void 0)return W}if($.payload)return UX($.payload,Z);return}function LQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>LQ($,Q));if(Array.isArray($))return $.some((Q)=>LQ(Q,Z));if(J7(Z)){if(!J7($))return!1;return Object.entries(Z).every(([Q,J])=>LQ($[Q],J))}return Object.is($,Z)}function AP($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,J])=>LQ(LP($,Q),J))}class DX{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=_P($,Z),J=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!J.created)return this.logger?.debug("cron.event.duplicate",{eventId:J.record.eventId,eventType:J.record.eventType,source:J.record.source}),{event:J.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:J.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),X=[],j=[],Y=[];for(let H of W){if(!AP(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}j.push(H);let K=this.materializeForSpec(H,Q,J.record.receivedAt);if(K.run)Y.push(K.run);else X.push({specId:H.specId,externalId:H.externalId,reason:K.reason,dedupeKey:Q.dedupeKey})}let V=j.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(J.record.eventId,{status:V,matchedSpecCount:j.length,queuedRunCount:Y.length,suppressedCount:X.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(J.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:J.record.eventId,eventType:J.record.eventType,status:V,matchedSpecCount:j.length,queuedRunCount:Y.length}),{event:B??J.record,duplicate:!1,matchedSpecs:j,queuedRuns:Y,suppressions:X}}catch(W){if(this.store.updateEventLogProcessing(J.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:J.record.eventId,eventType:J.record.eventType,error:W});throw W}}materializeForSpec($,Z,Q){let J=Z.dedupeKey??Z.eventId,W=$.debounceSeconds??0;if(W>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:J});if(V){let B=DP(V.scheduledFor,bU(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:J,sinceIso:yU(Q,X)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:yU(Q,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:W>0?bU(Q,W):Q}),reason:"dedupe_window"}}}class W7{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let J of Z)if(this.materializeOneOff(J))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of Q)try{if(this.materializeSchedule(J))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasConsumedOneOffRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:$.nextRunAt??new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as RP}from"node:path";import{buildClineSystemPrompt as MP}from"@cline/shared";import{nowIso as kU}from"@cline/shared/db";import{mkdirSync as OP,writeFileSync as qP}from"node:fs";import{join as zP}from"node:path";import{resolveCronReportsDir as TP}from"@cline/shared/storage";function Q2($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function W8($,Z){if(Z===void 0||Z===null)return;return`${$}: ${Q2(Z)}`}function NP($,Z,Q){let J=[`runId: ${Q2($.runId)}`,`specId: ${Q2(Z.specId)}`,`externalId: ${Q2(Z.externalId)}`,`title: ${Q2(Z.title)}`,`triggerKind: ${Q2($.triggerKind)}`,`status: ${Q2($.status)}`,`sourcePath: ${Q2(Z.sourcePath)}`],W=[W8("sessionId",$.sessionId),W8("startedAt",$.startedAt),W8("completedAt",$.completedAt),W8("triggerEventId",$.triggerEventId),W8("triggerEventType",Q?.eventType),W8("triggerEventSource",Q?.source),W8("triggerEventSubject",Q?.subject)];for(let X of W)if(X)J.push(X);return`---
|
|
250
|
+
`);if(Q<0)break;let J=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),J.length>0)Z.push(J)}return Z}}class VU{registration;process;nextRequestId=1;pending=new Map;framedParser=new VX;newlineParser=new BX;stderrBuffer="";connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;constructor($){this.registration=$,this.requestTimeoutMs=o5($.timeoutSeconds),this.connectAttemptTimeoutMs=ww($.timeoutSeconds)?this.requestTimeoutMs:bw}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $={protocolVersion:Sw,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}};this.spawnProcess("newline");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Z){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Q){throw await this.disconnect().catch(()=>{}),yw(this.registration.name,Z,Q)}}this.notify("notifications/initialized"),this.connected=!0}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}},void 0,$.context?.signal)}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new VX,this.newlineParser=new BX,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},J=Ew(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=J,J.stdout.on("data",(W)=>this.handleStdout(W)),J.stderr.on("data",(W)=>{if(this.process!==J)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),J.once("error",(W)=>{if(this.process!==J)return;this.failAllPending(Error(`MCP process error: ${C6(W)}`))}),J.once("exit",(W,X)=>{if(this.process!==J)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${X??"null"}).${j}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let J=JSON.parse(Q);if(typeof J.id!=="number")continue;let W=this.takePending(J.id);if(!W)continue;if(J.error){let X=J.error.message||`MCP request failed with code ${J.error.code??"unknown"}`;W.reject(Error(X));continue}W.resolve(J.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${C6($)}.${Q}`)),Z.kill()}async request($,Z,Q=this.requestTimeoutMs,J){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let X=this.nextRequestId++,j={jsonrpc:"2.0",id:X,method:$,...Z?{params:Z}:{}},Y=new Promise((V,B)=>{let H=setTimeout(()=>{this.takePending(X),B(this.createTimeoutError($,Q))},Q),K=J?()=>{let G=this.takePending(X);if(!G)return;let F=J.reason instanceof Error?J.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${$}).`),{name:"AbortError"});G.reject(F)}:void 0;if(this.pending.set(X,{resolve:V,reject:B,timeout:H,signal:J,onAbort:K}),J&&K){if(J.addEventListener("abort",K,{once:!0}),J.aborted)K()}});if(!this.pending.has(X))return Y;try{W.stdin.write(this.protocolMode==="framed"?jU(j):XU(j))}catch(V){let B=this.takePending(X);if(B)B.reject(V instanceof Error?V:Error(String(V)))}return Y}createTimeoutError($,Z){return Error(Cw(this.registration.name,Z,$))}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let J={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?jU(J):XU(J))}failAllPending($){for(let Z of[...this.pending.keys()]){let Q=this.takePending(Z);if(!Q)continue;Q.reject($)}}takePending($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),clearTimeout(Z.timeout),Z.signal&&Z.onAbort)Z.signal.removeEventListener("abort",Z.onAbort);return Z}}class BU{registration;options;client;authContext;requestTimeoutMs;constructor($,Z){this.registration=$;this.options=Z;this.requestTimeoutMs=o5($.timeoutSeconds)}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=K7({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??WU});this.authContext=$;let Z;try{Z=new Pw({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"});let Q=H7({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q,{timeout:this.requestTimeoutMs}),await $.clearError(),this.client=Z}catch(Q){await Z?.close().catch(()=>{});let J=H$(Q,this.registration.name,this.requestTimeoutMs),W=Q instanceof JU?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):C6(J);throw await $.markError(W),Error(W)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools(void 0,{timeout:this.requestTimeoutMs})).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}},void 0,{timeout:this.requestTimeoutMs,signal:$.context?.signal})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??K7({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??WU}),Q=H$($,this.registration.name,this.requestTimeoutMs),J=$ instanceof JU?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):C6(Q);throw await Z.markError(J),Error(J)}}function w6($={}){return(Z)=>Z.transport.type==="stdio"?new VU(Z):new BU(Z,$)}B7();import{isMcpTimeoutConfigured as HU,resolveMcpTimeoutSeconds as KU}from"@cline/shared";var kw=5000;function X1(){return Date.now()}function Iw($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class Z8{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??kw}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:X1()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport),J=HU(Z.registration.timeoutSeconds)!==HU($.timeoutSeconds)||KU(Z.registration.timeoutSeconds)!==KU($.timeoutSeconds);if(Z.registration={...$},Z.updatedAt=X1(),Q||J)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=X1(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&X1()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),J=await(await this.ensureConnectedClient(Z)).listTools(),W=Iw(J);return Z.toolCache=W,Z.toolCacheUpdatedAt=X1(),Z.updatedAt=X1(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=X1(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=X1();let Z=$.client;try{Z??=await this.clientFactory($.registration),$.client=Z,await Z.connect(),$.status="connected",$.lastError=void 0,$.updatedAt=X1()}catch(Q){throw await Z?.disconnect().catch(()=>{}),$.status="disconnected",$.lastError=Q instanceof Error?Q.message:String(Q),$.updatedAt=X1(),Q}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=X1();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=X1()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),J,W=new Promise((j)=>{J=j}),X=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(J?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function P6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function GU($){return P6($)&&Object.values($).every((Z)=>typeof Z==="string")}function hw($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function xw($){if(!P6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function gw($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[J,W]of Z){if(typeof W==="string"){Q[J]=W;continue}let X=W.fromEnv?.trim()||J,j=process.env[X];if(typeof j==="string"&&j.length>0){Q[J]=j;continue}if(typeof W.value==="string"){Q[J]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function HX($){if(!P6($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,J=Q===void 0?void 0:Q;if(J!==void 0){if(!P6(J))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(J))if(typeof B!=="string"&&!xw(B))return{name:Z,loadError:`invalid env "${V}"`}}let W=$.transport;if(!P6(W))return{name:Z,loadError:"invalid MCP transport"};let X=W.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&J!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let j=P6($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=W.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let B=W.args;if(B!==void 0&&!hw(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let K=W.env;if(K!==void 0&&!GU(K))return{name:Z,loadError:"stdio MCP transport env must be strings"};let G=gw({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:K},env:J,metadata:j});if(!G.ok)return{name:Z,loadError:G.reason};let F=K||G.env?{...K??{},...G.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:j}}}if(typeof W.url!=="string"||!W.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let Y=W.headers;if(Y!==void 0&&!GU(Y))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:W.url,headers:Y}:{type:"streamableHttp",url:W.url,headers:Y},metadata:j}}}function F7($){let Z=new Map;return $.map(({server:Q,owner:J,ownerLabel:W})=>{let X=HX(Q);if(!X.registration)return{owner:J,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let j=Z.get(X.registration.name);if(Z.has(X.registration.name)){let Y=j?` already registered by ${j}`:"";return{owner:J,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${Y}`}}return Z.set(X.registration.name,W),{owner:J,name:X.registration.name,registration:X.registration}})}import{createHash as vw}from"node:crypto";var FU=64,mw=/[^a-zA-Z0-9_-]+/g,UU=8,cw=1,uw="mcp_tool";function dw($){return vw("sha1").update($).digest("hex").slice(0,UU)}function pw($){return $.replace(mw,"_")}var U7=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,J=pw(Q);if(J===Q&&Q.length<=FU)return Q;let W=dw(Q),X=FU-cw-UU;return`${J.slice(0,X)||uw}_${W}`};function s5($){return{[($.nameTransform??U7)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function D7($){let Z={};for(let Q of $.toolNames)Object.assign(Z,s5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as lw}from"@cline/shared";function iw($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function S6($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??U7;return Z.map((J)=>{let W=Q({serverName:$.serverName,toolName:J.name});return lw({name:W,description:iw($.serverName,J),inputSchema:J.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,j)=>$.provider.callTool({serverName:$.serverName,toolName:J.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:j})})})}O1();var AU={};w(AU,{listPluginToolsWithDiagnostics:()=>_7,listPluginTools:()=>t5});import{stat as rw}from"node:fs/promises";import{isAbsolute as nw,relative as aw,resolve as _U}from"node:path";O1();function ow($,Z){let Q=aw(_U($),_U(Z));return Q===""||!Q.startsWith("..")&&!nw(Q)}var sw=32,b6=new Map;function tw($,Z){if(!b6.has($)&&b6.size>=sw){let Q=b6.keys().next().value;if(Q)b6.delete(Q)}b6.set($,Z)}async function ew($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let J=await rw(Q);return`${Q}:${J.mtimeMs}:${J.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function LU($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function $P($){return $.sort((Z,Q)=>{let J=Z.name.localeCompare(Q.name);if(J!==0)return J;return Z.path.localeCompare(Q.path)})}async function ZP($,Z){if(!$.setup)return{tools:[]};let Q=[],J={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(J,{workspaceInfo:Z}),{tools:Q}}async function _7($){let Z=X$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=P1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let J=await ew({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=b6.get(J);if(W)return{tools:LU(W.tools,Q),failures:W.failures,warnings:W.warnings};let X=[],j=[],Y=[],V;try{V=await V6({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let K=H.__clinePluginPath;if(!K)continue;let G=ow($.workspacePath,K)?"workspace-plugin":"global-plugin",F;try{F=await ZP(H,{rootPath:$.workspacePath})}catch(U){j.push({pluginPath:K,pluginName:H.name,phase:"setup",message:U instanceof Error?U.message:String(U),stack:U instanceof Error?U.stack:void 0});continue}for(let U of F.tools)X.push({name:U.name,pluginName:H.name,path:K,source:G,description:U.description?.trim()||void 0})}}catch(H){j=Z.map((K)=>({pluginPath:K,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=$P(X);return tw(J,{tools:B,failures:j,warnings:Y}),{tools:LU(B,Q),failures:j,warnings:Y}}async function t5($){return(await _7($)).tools}function Z9($,Z){if(!Z)return"global";let Q=NU(Z,$);return!Q.startsWith("..")&&!TU(Q)?"workspace":"global"}function XP($,Z){return Z9($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function jP($,Z){let Q=NU(qU($),qU(Z));return Q===""||!Q.startsWith("..")&&!TU(Q)}function YP($){try{let Z=JSON.parse(QP($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function VP($){let Z=OU($);while(!0){let Q=WP(Z,"package.json");if($9(Q)){let W=YP(Q);if(W)return W;break}let J=OU(Z);if(J===Z)break;Z=J}return KX($,JP($))}function BP($){let Z=[];for(let Q of X$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let J of j$([Q]))Z.push({directory:J,pluginName:VP(Q),pluginPath:Q,source:$.workspaceRoot?XP(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,J)=>J.directory.length-Q.directory.length)}function HP($,Z){return Z.find((Q)=>jP(Q.directory,$))}function e5($){return[...$].sort((Z,Q)=>{let J=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return J(Z.source)-J(Q.source);return Z.name.localeCompare(Q.name)})}function fU($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function RU($,Z){return $.cwd?.trim()||Z||process.cwd()}async function zU($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=fU($),J=RU($,Q),W=t$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:J},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await W.start(),await Z(W)}finally{W.stop()}}function KP($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let J=Q.find((W)=>W.id===Z.id);if(J)return J}for(let J of Q)if(J.filePath===Z.path||J.item.name===Z.name||J.id===Z.name)return J;return}class Z2{async list($={}){return await zU($,async(Z)=>{let Q=fU($),J=BP({workspaceRoot:Q,cwd:RU($,Q)}),W=[],X=[],j=[],Y=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let K=H.item;W.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"workflow",source:Z9(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let K=H.item;X.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"rule",source:Z9(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let K=H.item,G=HP(H.filePath,J);j.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"skill",source:G?.source??Z9(H.filePath,Q),description:K.description,pluginName:G?.pluginName,pluginPath:G?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await t5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=J0();if(B$({filePath:B}))try{for(let H of W1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:Z9(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:e5(W.filter((H)=>$9(H.path))),rules:e5(X.filter((H)=>$9(H.path))),skills:e5(j.filter((H)=>$9(H.path))),tools:e5(Y),mcp:e5(V.filter((H)=>$9(H.path)))}})}async toggle($){if($.type==="skills")return await zU($,async(Z)=>{let Q=KP(Z,$),J=Q?.filePath;if(!J)throw Error(`Unable to resolve skill setting '${$.id??$.name??KX($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(W!==void 0?!W:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??KX($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await hF({filePath:J,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)ZQ($.name);else rH($.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()||J0(),J=$.enabled;if(J===void 0){let W=W1({filePath:Q}).find((X)=>X.name===Z);if(!W)throw Error(`Unknown MCP server: ${Z}`);J=W.disabled===!0}return s2({filePath:Q,name:Z,disabled:!J}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function Q8(){return new Z2}function EU($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await Q8().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await Q8().toggle(Z)}}}function CU($){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)}}}var wU={};w(wU,{splitCoreSessionConfig:()=>Q9,isSessionNotFoundError:()=>G$,SessionNotFoundError:()=>K$,SESSION_NOT_FOUND_ERROR_CODE:()=>J8});var J8="session_not_found";class K$ extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function G$($){return $ instanceof K$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function Q9($){let{hooks:Z,logger:Q,telemetry:J,extensionContext:W,extraTools:X,extensions:j,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...K}=$,G={};if(Z)G.hooks=Z;if(Q)G.logger=Q;if(J)G.telemetry=J;if(W)G.extensionContext=W;if(X)G.extraTools=X;if(j)G.extensions=j;if(Y)G.onTeamEvent=Y;if(V)G.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)G.checkpoint=B;if(H?.compact)G.compaction=H;let F=Object.keys(G).length>0?G:void 0;return{config:{...K,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function PU($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...GP($.localRuntime)},localRuntime:$.localRuntime}:$}function GX($,Z={}){let Q=Q9($.config),J=y0(Z.defaultCapabilities,$.capabilities),W=FP(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(W?.extensionContext);if(X)W={...W??{},extensionContext:X};return{...$,...Q,...W?{localRuntime:W}:{},...J?{capabilities:J}:{}}}function GP($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:J,onTeamRestored:W,...X}=$;return X}function FP(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}q0();function SU($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??L0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function J9($){return!!$&&typeof $==="object"&&!Array.isArray($)}function FX($){let Z=$?.trim();return Z?Z:void 0}function UP($,Z){let Q=$?.trim();if(!Q)return Z;let J=Date.parse(Q);if(!Number.isFinite(J))return Z;return new Date(J).toISOString()}function bU($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function yU($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function DP($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function _P($,Z){let Q=$.eventId.trim(),J=$.eventType.trim(),W=$.source.trim(),X=FX($.subject),j=FX($.dedupeKey)??`${J}:${W}:${X??Q}`;return{eventId:Q,eventType:J,source:W,subject:X,occurredAt:UP($.occurredAt,Z),workspaceRoot:FX($.workspaceRoot),payload:J9($.payload)?$.payload:void 0,attributes:J9($.attributes)?$.attributes:void 0,dedupeKey:j}}function UX($,Z){if(!Z)return;let Q=Z.split("."),J=$;for(let W of Q){if(!J9(J))return;J=J[W]}return J}function LP($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},J=UX(Q,Z);if(J!==void 0)return J;if($.attributes){let W=UX($.attributes,Z);if(W!==void 0)return W}if($.payload)return UX($.payload,Z);return}function L7($,Z){if(Array.isArray(Z))return Z.some((Q)=>L7($,Q));if(Array.isArray($))return $.some((Q)=>L7(Q,Z));if(J9(Z)){if(!J9($))return!1;return Object.entries(Z).every(([Q,J])=>L7($[Q],J))}return Object.is($,Z)}function AP($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,J])=>L7(LP($,Q),J))}class DX{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=_P($,Z),J=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!J.created)return this.logger?.debug("cron.event.duplicate",{eventId:J.record.eventId,eventType:J.record.eventType,source:J.record.source}),{event:J.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:J.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),X=[],j=[],Y=[];for(let H of W){if(!AP(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}j.push(H);let K=this.materializeForSpec(H,Q,J.record.receivedAt);if(K.run)Y.push(K.run);else X.push({specId:H.specId,externalId:H.externalId,reason:K.reason,dedupeKey:Q.dedupeKey})}let V=j.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(J.record.eventId,{status:V,matchedSpecCount:j.length,queuedRunCount:Y.length,suppressedCount:X.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(J.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:J.record.eventId,eventType:J.record.eventType,status:V,matchedSpecCount:j.length,queuedRunCount:Y.length}),{event:B??J.record,duplicate:!1,matchedSpecs:j,queuedRuns:Y,suppressions:X}}catch(W){if(this.store.updateEventLogProcessing(J.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:J.record.eventId,eventType:J.record.eventType,error:W});throw W}}materializeForSpec($,Z,Q){let J=Z.dedupeKey??Z.eventId,W=$.debounceSeconds??0;if(W>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:J});if(V){let B=DP(V.scheduledFor,bU(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:J,sinceIso:yU(Q,X)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:yU(Q,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:W>0?bU(Q,W):Q}),reason:"dedupe_window"}}}class W9{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let J of Z)if(this.materializeOneOff(J))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of Q)try{if(this.materializeSchedule(J))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasConsumedOneOffRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:$.nextRunAt??new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as RP}from"node:path";import{buildClineSystemPrompt as MP}from"@cline/shared";import{nowIso as kU}from"@cline/shared/db";import{mkdirSync as OP,writeFileSync as qP}from"node:fs";import{join as zP}from"node:path";import{resolveCronReportsDir as TP}from"@cline/shared/storage";function Q2($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function W8($,Z){if(Z===void 0||Z===null)return;return`${$}: ${Q2(Z)}`}function NP($,Z,Q){let J=[`runId: ${Q2($.runId)}`,`specId: ${Q2(Z.specId)}`,`externalId: ${Q2(Z.externalId)}`,`title: ${Q2(Z.title)}`,`triggerKind: ${Q2($.triggerKind)}`,`status: ${Q2($.status)}`,`sourcePath: ${Q2(Z.sourcePath)}`],W=[W8("sessionId",$.sessionId),W8("startedAt",$.startedAt),W8("completedAt",$.completedAt),W8("triggerEventId",$.triggerEventId),W8("triggerEventType",Q?.eventType),W8("triggerEventSource",Q?.source),W8("triggerEventSubject",Q?.subject)];for(let X of W)if(X)J.push(X);return`---
|
|
251
251
|
${J.join(`
|
|
252
252
|
`)}
|
|
253
253
|
---
|
|
@@ -272,15 +272,15 @@ ${Q.join(`
|
|
|
272
272
|
`)}return Z.join(`
|
|
273
273
|
`)}function _X($){let Z=TP($.specs);OP(Z,{recursive:!0});let Q=zP(Z,`${$.run.runId}.md`),J=`${NP($.run,$.spec,$.data.triggerEvent)}
|
|
274
274
|
${fP($.data)}`;return qP(Q,J,"utf8"),Q}class LX{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let J=Math.max(1,Math.floor(Q)),W=this.activeExecutions.get($)??new Set;if(W.size>=J)return!1;return W.add(Z),this.activeExecutions.set($,W),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var EP=15000,CP=90,IU=["rules","skills","plugins"];function wP($,Z){return new Set($.extensions??IU).has(Z)}function PP($,Z){let Q=$.tools===void 0?{"*":{autoApprove:!0}}:{"*":{enabled:!1,autoApprove:!0}};for(let J of $.tools??[])Q[J]={enabled:!0,autoApprove:!0};if(Q[U0.ASK]={...Q[U0.ASK],enabled:!1,autoApprove:!0},Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function SP($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
|
|
275
|
-
`)}class AX extends Error{constructor($){super($);this.name="TimeoutError"}}async function bP($,Z){if(Z<=0)return $;let Q,J=new Promise((W,X)=>{Q=setTimeout(()=>{X(new AX("cron run timed out"))},Z)});try{return await Promise.race([$,J])}finally{if(Q)clearTimeout(Q)}}class
|
|
275
|
+
`)}class AX extends Error{constructor($){super($);this.name="TimeoutError"}}async function bP($,Z){if(Z<=0)return $;let Q,J=new Promise((W,X)=>{Q=setTimeout(()=>{X(new AX("cron run timed out"))},Z)});try{return await Promise.race([$,J])}finally{if(Q)clearTimeout(Q)}}class X9{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new LX($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??CP)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??EP);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,J])=>{if(J.sessionId)try{await this.options.runtimeHandlers.abortSession(J.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:J.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:kU(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let J=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,J)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,j,Y,V=Date.now(),B;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)B=V+Q.timeoutSeconds*1000;try{Y=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(j=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(Z.runId,j);let G={config:H,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(j,G),U=B?Math.max(1,B-Date.now()):0,L=(await bP(F,U)).result,O=Date.now(),D=_X({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:j,status:"done"},spec:Q,data:{finalText:L.text,usage:L.usage,toolCalls:L.toolCalls,durationMs:O-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:j,reportPath:D,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,kU())}catch(H){let K=H instanceof AX;if(j&&K)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let G=H instanceof Error?H.message:String(H),F=Date.now(),U=_X({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:j,status:"failed"},spec:Q,data:{error:G,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:j,reportPath:U,error:G,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(Z.triggerKind==="one_off")this.store.updateSpecNextRunAt(Q.specId,void 0);if(Y?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let J=this.store.getRun(Q);if(!J)return;let W=J.status==="done"?"success":J.status==="cancelled"?"aborted":J.status==="running"?"running":J.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:J.runId,sessionId:J.sessionId,triggeredAt:new Date(J.scheduledFor??J.createdAt).getTime(),startedAt:J.startedAt?new Date(J.startedAt).getTime():void 0,endedAt:J.completedAt?new Date(J.completedAt).getTime():void 0,status:W,errorMessage:J.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let J={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
|
|
276
276
|
|
|
277
277
|
Trigger event:
|
|
278
|
-
${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let J=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,J))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,J){let W=SP($.notesDirectory),X=f6(void 0,W),j=await C5(Z),Y=MP({ide:"Cline Cron",workspaceRoot:Z,workspaceName:RP(Z),metadata:j,rules:$.systemPrompt?void 0:X,mode:Q,providerId:J,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?f6(Y,X)??Y:Y}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),J=($.modelId??"").trim(),W=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:J,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,j,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:PP($,j),configExtensions:IU.filter((Y)=>wP($,Y))}}}import{existsSync as ZS,readdirSync as QS,readFileSync as JS,statSync as WS}from"node:fs";import{relative as XS}from"node:path";import{resolveCronSpecsDir as jS}from"@cline/shared/storage";function
|
|
278
|
+
${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let J=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,J))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,J){let W=SP($.notesDirectory),X=f6(void 0,W),j=await C5(Z),Y=MP({ide:"Cline Cron",workspaceRoot:Z,workspaceName:RP(Z),metadata:j,rules:$.systemPrompt?void 0:X,mode:Q,providerId:J,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?f6(Y,X)??Y:Y}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),J=($.modelId??"").trim(),W=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:J,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,j,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:PP($,j),configExtensions:IU.filter((Y)=>wP($,Y))}}}import{existsSync as ZS,readdirSync as QS,readFileSync as JS,statSync as WS}from"node:fs";import{relative as XS}from"node:path";import{resolveCronSpecsDir as jS}from"@cline/shared/storage";function j9($,Z,Q,J){let W=new Set;function X(j){let Y=j.toLowerCase();if(J){let B=J.indexOf(Y);if(B!==-1)return B+Z}let V=Number(j);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${j}" for range [${Z}-${Q}]`);return V}for(let j of $.split(",")){if(j==="*"){for(let B=Z;B<=Q;B+=1)W.add(B);continue}let Y=j.indexOf("/");if(Y!==-1){let B=j.slice(0,Y),H=Number(j.slice(Y+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${j.slice(Y+1)}"`);let K=Z,G=Q;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)K=X(B.slice(0,F)),G=X(B.slice(F+1));else K=X(B)}if(K>G)throw Error(`Invalid cron range "${B}"`);for(let F=K;F<=G;F+=H)W.add(F);continue}let V=j.indexOf("-");if(V!==-1){let B=X(j.slice(0,V)),H=X(j.slice(V+1));if(B>H)throw Error(`Invalid cron range "${j}"`);for(let K=B;K<=H;K+=1)W.add(K);continue}W.add(X(j))}return[...W].sort((j,Y)=>j-Y)}var yP=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],xU=["sun","mon","tue","wed","thu","fri","sat"];function Y9($,Z,Q){let J=$[Z];if(typeof J!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return J}function OX($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function qX($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:j9(Y9(Z,0,$),0,59),hours:j9(Y9(Z,1,$),0,23),daysOfMonth:j9(Y9(Z,2,$),1,31),months:j9(Y9(Z,3,$),1,12,yP),daysOfWeek:j9(Y9(Z,4,$),0,6,xU)}}function gU($){qX($)}function vU($,Z,Q=Date.now()){X8($,Q,Z)}var hU=new Map,kP=new Map(xU.map(($,Z)=>[$,Z]));function mU($){let Z=$?.trim();return Z?Z:void 0}function cU($){let Z=hU.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return hU.set($,Q),Q}function IP($){let Z=mU($);if(!Z)return;cU(Z).format(new Date)}function hP($,Z){let Q=cU(Z).formatToParts(new Date($)),J=new Map(Q.map((j)=>[j.type,j.value])),W=J.get("weekday")?.toLowerCase().slice(0,3)??"",X=kP.get(W);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(J.get("month")),dayOfMonth:Number(J.get("day")),dayOfWeek:X,hour:Number(J.get("hour")),minute:Number(J.get("minute"))}}function xP($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function gP($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function vP($,Z,Q){let J=qX($),W=new Date(Z);W.setSeconds(0,0);let X=W.getTime()+60000,j=new Date(Z);j.setFullYear(j.getFullYear()+4);let Y=j.getTime();while(X<=Y){if(gP(J,hP(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function X8($,Z,Q){let J=mU(Q);if(J)return IP(J),vP($,Z,J);let W=qX($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let j=new Date(Z);j.setFullYear(j.getFullYear()+4);while(X<=j){let{month:Y,dayOfMonth:V,dayOfWeek:B,hour:H,minute:K}=xP(X.getTime());if(!W.months.includes(Y)){let G=W.months.find((U)=>U>Y)??OX(W.months,"months"),F=G<=Y?1:0;X=new Date(X.getFullYear()+F,G-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(V)||!W.daysOfWeek.includes(B)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!W.hours.includes(H)){let G=W.hours.find((U)=>U>H)??OX(W.hours,"hours"),F=G<=H?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,G,0,0,0);continue}if(!W.minutes.includes(K)){let G=W.minutes.find((U)=>U>K)??OX(W.minutes,"minutes"),F=G<=K?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,G,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as mP}from"node:crypto";import cP from"yaml";function uP($){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 dP($){let Z=$.replace(/\r\n/g,`
|
|
279
279
|
`);if(!Z.startsWith(`---
|
|
280
280
|
`))return{frontmatter:void 0,body:$};let Q=Z.slice(4),J=Q.indexOf(`
|
|
281
281
|
---`);if(J===-1)return{frontmatter:void 0,body:$};let W=Q.slice(0,J),X=Q.slice(J+4);if(X.startsWith(`
|
|
282
282
|
`))X=X.slice(1);return{frontmatter:W,body:X}}function j1($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function pP($){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 NX($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function lP($){let Z=NX($);if(!Z)return;let Q=j1(Z.providerId),J=j1(Z.modelId);if(Q===void 0&&J===void 0)return;return{providerId:Q,modelId:J}}function iP($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function dU($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let J=[...new Set(Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return J;return J.length>0?J:void 0}var rP=new Set(k$);function nP($){let Z=dU($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!rP.has(J));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var aP=new Set(["rules","skills","plugins"]);function oP($){let Z=dU($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!aP.has(J));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function zX($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function TX($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function fX($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>fX(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[J])=>Q<J?-1:Q>J?1:0),`{${Z.map(([Q,J])=>`${JSON.stringify(Q)}:${fX(J)}`).join(",")}}`}function pU($,Z){let Q=mP("sha256");return Q.update(fX($)),Q.update(`
|
|
283
|
-
`),Q.update(Z),Q.digest("hex")}function sP($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var tP=["schedule","timezone"],eP=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],$S=["cwd"];function uU($,Z,Q,J,W){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:pU(J,Q),error:W}}function b1($,Z,Q,J,W,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:J,contentHash:W,error:X}}function lU($){let Z=$.relativePath.replace(/\\/g,"/"),Q=uP(Z),{frontmatter:J,body:W}=dP($.raw),X={};if(J!==void 0&&J.trim().length>0)try{let D=cP.parse(J);if(D&&typeof D==="object"&&!Array.isArray(D))X=D;else if(D!==null&&D!==void 0)return uU(Z,Q,W,{},"frontmatter must be a YAML mapping")}catch(D){return uU(Z,Q,W,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let j=pU(X,W),Y=j1(X.id),V=Y??Z;if(Q!=="schedule"){for(let D of tP)if(X[D]!==void 0)return b1(V,Z,Q,W,j,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of $S)if(X[D]!==void 0)return b1(V,Z,Q,W,j,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let D of eP)if(X[D]!==void 0)return b1(V,Z,Q,W,j,`field "${D}" is only allowed on .event.md specs`)}let B=j1(X.prompt),H=W.trim(),K=B??(H.length>0?H:void 0);if(!K)return b1(V,Z,Q,W,j,"prompt is required (frontmatter `prompt` or markdown body)");let G=j1(X.workspaceRoot);if(!G)return b1(V,Z,Q,W,j,"workspaceRoot is required");let F,U;try{F=nP(X.tools),U=oP(X.extensions)}catch(D){return b1(V,Z,Q,W,j,D instanceof Error?D.message:String(D))}let _=iP(X.mode);if(X.mode!==void 0&&_===void 0)return b1(V,Z,Q,W,j,"mode must be one of: act, plan, yolo");let L={id:Y,title:j1(X.title)??Y??sP(Z),prompt:K,workspaceRoot:G,mode:_??"yolo",systemPrompt:j1(X.systemPrompt),modelSelection:lP(X.modelSelection),maxIterations:zX(X.maxIterations),timeoutSeconds:zX(X.timeoutSeconds),tools:F,notesDirectory:j1(X.notesDirectory),extensions:U,source:j1(X.source)??"user",tags:pP(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:NX(X.metadata)},O;if(Q==="schedule"){let D=j1(X.schedule);if(!D)return b1(V,Z,Q,W,j,"schedule is required for *.cron.md specs");let q=j1(X.timezone);try{vU(D,q)}catch(z){return b1(V,Z,Q,W,j,z instanceof Error?z.message:String(z))}O={...L,triggerKind:"schedule",schedule:D,timezone:q}}else if(Q==="event"){let D=j1(X.event);if(!D)return b1(V,Z,Q,W,j,"event is required for .event.md specs");O={...L,triggerKind:"event",event:D,filters:NX(X.filters),debounceSeconds:TX(X.debounceSeconds),dedupeWindowSeconds:TX(X.dedupeWindowSeconds),cooldownSeconds:TX(X.cooldownSeconds),maxParallel:zX(X.maxParallel)}}else O={...L,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:W,contentHash:j,spec:O}}function YS($,Z){return XS($,Z).replace(/\\/g,"/")}function VS($){if(!ZS($))return[];let Z=[],Q=[$];while(Q.length>0){let J=Q.pop();if(!J)continue;let W;try{W=QS(J,{withFileTypes:!0})}catch{continue}for(let X of W){let j=`${J}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(j);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(j)}}return Z}class RX{store;cronDir;constructor($){this.store=$.store,this.cronDir=jS($.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=VS(this.cronDir),Q=new Set;for(let W of Z){let X=YS(this.cronDir,W);Q.add(X),$.scanned+=1;let j=await this.reconcileFile(X,W);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let J=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of J)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),J,W;try{J=JS(Z,"utf8"),W=WS(Z).mtimeMs}catch{return}let j=lU({relativePath:$,raw:J}),Y=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:W,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&Y.record.enabled)this.applyScheduleNextRunAt(Y.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==Y.record.scheduleExpr||Q.timezone!==Y.record.timezone});return{relativePath:$,result:Y,parse:j}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),J=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=X8($.scheduleExpr,J,$.timezone),X=new Date(W).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as BS,mkdirSync as HS,watch as KS}from"node:fs";import{relative as GS,resolve as FS}from"node:path";var US=250;class MX{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??US),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{HS($,{recursive:!0}),this.watcher=KS($,{recursive:!0},(Z,Q)=>{if(!Q)return;let J=String(Q).replace(/\\/g,"/");if(!J.endsWith(".md"))return;if(J.startsWith("reports/"))return;this.scheduleReconcile(J)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=FS(this.reconciler.getCronDir(),$);if(!BS(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=GS(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}import{randomUUID as
|
|
283
|
+
`),Q.update(Z),Q.digest("hex")}function sP($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var tP=["schedule","timezone"],eP=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],$S=["cwd"];function uU($,Z,Q,J,W){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:pU(J,Q),error:W}}function b1($,Z,Q,J,W,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:J,contentHash:W,error:X}}function lU($){let Z=$.relativePath.replace(/\\/g,"/"),Q=uP(Z),{frontmatter:J,body:W}=dP($.raw),X={};if(J!==void 0&&J.trim().length>0)try{let D=cP.parse(J);if(D&&typeof D==="object"&&!Array.isArray(D))X=D;else if(D!==null&&D!==void 0)return uU(Z,Q,W,{},"frontmatter must be a YAML mapping")}catch(D){return uU(Z,Q,W,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let j=pU(X,W),Y=j1(X.id),V=Y??Z;if(Q!=="schedule"){for(let D of tP)if(X[D]!==void 0)return b1(V,Z,Q,W,j,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of $S)if(X[D]!==void 0)return b1(V,Z,Q,W,j,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let D of eP)if(X[D]!==void 0)return b1(V,Z,Q,W,j,`field "${D}" is only allowed on .event.md specs`)}let B=j1(X.prompt),H=W.trim(),K=B??(H.length>0?H:void 0);if(!K)return b1(V,Z,Q,W,j,"prompt is required (frontmatter `prompt` or markdown body)");let G=j1(X.workspaceRoot);if(!G)return b1(V,Z,Q,W,j,"workspaceRoot is required");let F,U;try{F=nP(X.tools),U=oP(X.extensions)}catch(D){return b1(V,Z,Q,W,j,D instanceof Error?D.message:String(D))}let _=iP(X.mode);if(X.mode!==void 0&&_===void 0)return b1(V,Z,Q,W,j,"mode must be one of: act, plan, yolo");let L={id:Y,title:j1(X.title)??Y??sP(Z),prompt:K,workspaceRoot:G,mode:_??"yolo",systemPrompt:j1(X.systemPrompt),modelSelection:lP(X.modelSelection),maxIterations:zX(X.maxIterations),timeoutSeconds:zX(X.timeoutSeconds),tools:F,notesDirectory:j1(X.notesDirectory),extensions:U,source:j1(X.source)??"user",tags:pP(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:NX(X.metadata)},O;if(Q==="schedule"){let D=j1(X.schedule);if(!D)return b1(V,Z,Q,W,j,"schedule is required for *.cron.md specs");let q=j1(X.timezone);try{vU(D,q)}catch(z){return b1(V,Z,Q,W,j,z instanceof Error?z.message:String(z))}O={...L,triggerKind:"schedule",schedule:D,timezone:q}}else if(Q==="event"){let D=j1(X.event);if(!D)return b1(V,Z,Q,W,j,"event is required for .event.md specs");O={...L,triggerKind:"event",event:D,filters:NX(X.filters),debounceSeconds:TX(X.debounceSeconds),dedupeWindowSeconds:TX(X.dedupeWindowSeconds),cooldownSeconds:TX(X.cooldownSeconds),maxParallel:zX(X.maxParallel)}}else O={...L,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:W,contentHash:j,spec:O}}function YS($,Z){return XS($,Z).replace(/\\/g,"/")}function VS($){if(!ZS($))return[];let Z=[],Q=[$];while(Q.length>0){let J=Q.pop();if(!J)continue;let W;try{W=QS(J,{withFileTypes:!0})}catch{continue}for(let X of W){let j=`${J}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(j);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(j)}}return Z}class RX{store;cronDir;constructor($){this.store=$.store,this.cronDir=jS($.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=VS(this.cronDir),Q=new Set;for(let W of Z){let X=YS(this.cronDir,W);Q.add(X),$.scanned+=1;let j=await this.reconcileFile(X,W);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let J=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of J)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),J,W;try{J=JS(Z,"utf8"),W=WS(Z).mtimeMs}catch{return}let j=lU({relativePath:$,raw:J}),Y=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:W,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&Y.record.enabled)this.applyScheduleNextRunAt(Y.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==Y.record.scheduleExpr||Q.timezone!==Y.record.timezone});return{relativePath:$,result:Y,parse:j}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),J=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=X8($.scheduleExpr,J,$.timezone),X=new Date(W).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as BS,mkdirSync as HS,watch as KS}from"node:fs";import{relative as GS,resolve as FS}from"node:path";var US=250;class MX{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??US),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{HS($,{recursive:!0}),this.watcher=KS($,{recursive:!0},(Z,Q)=>{if(!Q)return;let J=String(Q).replace(/\\/g,"/");if(!J.endsWith(".md"))return;if(J.startsWith("reports/"))return;this.scheduleReconcile(J)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=FS(this.reconciler.getCronDir(),$);if(!BS(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=GS(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}import{randomUUID as V9}from"node:crypto";import{ONE_TIME_SCHEDULE_CRON_PATTERN as B9,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as y6}from"@cline/shared";import{asOptionalString as p,asString as W0,loadSqliteDb as _S,nowIso as f0}from"@cline/shared/db";import{resolveCronDbPath as LS}from"@cline/shared/storage";var DS=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
284
284
|
spec_id TEXT PRIMARY KEY,
|
|
285
285
|
external_id TEXT NOT NULL,
|
|
286
286
|
source_path TEXT NOT NULL UNIQUE,
|
|
@@ -371,18 +371,18 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
371
371
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
372
372
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
373
373
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
374
|
-
ON cron_specs(source_path);`];function iU($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of DS)$.exec(Z)}function
|
|
374
|
+
ON cron_specs(source_path);`];function iU($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of DS)$.exec(Z)}function q7($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function EX($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let J=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(Z.preserveEmpty)return J;return J.length>0?J:void 0}catch{return}}function j8($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function J2($){return{specId:W0($.spec_id),externalId:W0($.external_id),sourcePath:W0($.source_path),triggerKind:W0($.trigger_kind),sourceMtimeMs:j8($.source_mtime_ms),sourceHash:p($.source_hash),parseStatus:W0($.parse_status)==="invalid"?"invalid":"valid",parseError:p($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:W0($.title),prompt:p($.prompt),workspaceRoot:p($.workspace_root),scheduleExpr:p($.schedule_expr),timezone:p($.timezone),eventType:p($.event_type),filters:q7(p($.filters_json)),debounceSeconds:j8($.debounce_seconds),dedupeWindowSeconds:j8($.dedupe_window_seconds),cooldownSeconds:j8($.cooldown_seconds),mode:p($.mode),systemPrompt:p($.system_prompt),providerId:p($.provider_id),modelId:p($.model_id),maxIterations:j8($.max_iterations),timeoutSeconds:j8($.timeout_seconds),maxParallel:j8($.max_parallel),tools:EX(p($.tools_json),{preserveEmpty:!0}),notesDirectory:p($.notes_directory),extensions:EX(p($.extensions_json),{preserveEmpty:!0}),source:p($.source),tags:EX(p($.tags_json)),metadata:q7(p($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:p($.last_materialized_run_id),lastRunAt:p($.last_run_at),nextRunAt:p($.next_run_at),createdAt:W0($.created_at),updatedAt:W0($.updated_at)}}function A7($){return{runId:W0($.run_id),specId:W0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:W0($.trigger_kind),status:W0($.status),claimToken:p($.claim_token),claimStartedAt:p($.claim_started_at),claimUntilAt:p($.claim_until_at),scheduledFor:p($.scheduled_for),triggerEventId:p($.trigger_event_id),startedAt:p($.started_at),completedAt:p($.completed_at),sessionId:p($.session_id),reportPath:p($.report_path),error:p($.error),attemptCount:Number($.attempt_count??0),createdAt:W0($.created_at),updatedAt:W0($.updated_at)}}function rU($){return{eventId:W0($.event_id),eventType:W0($.event_type),source:W0($.source),subject:p($.subject),occurredAt:W0($.occurred_at),receivedAt:W0($.received_at),workspaceRoot:p($.workspace_root),dedupeKey:p($.dedupe_key),payload:q7(p($.payload_json)),attributes:q7(p($.attributes_json)),processingStatus:W0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:p($.error),createdAt:W0($.created_at),updatedAt:W0($.updated_at)}}function nU($){return $?JSON.stringify($):null}var AS=["triggerKind","prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function O7($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function OS($,Z,Q,J){for(let j of AS){let Y=$[j],V=Z[j];if(O7(Y)!==O7(V))return!0}let W=$.triggerKind==="one_off"||Z.triggerKind==="one_off",X=Z.metadata;if(W&&O7($.metadata?.[y6])!==O7(X?.[y6]))return!0;if(Q===!1&&J===!0)return!0;return!1}function qS($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function zS($){return`hub/schedules/${$}.cron.md`}function TS($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};if($.cronPattern.trim()!==B9)delete Z[y6];return Object.keys(Z).length>0?Z:void 0}function CX($){let Z=$.cronPattern.trim()===B9,Q={title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),mode:$.mode??"yolo",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((J)=>J.trim().length>0),enabled:$.enabled!==!1,metadata:TS($)};return Z?{...Q,triggerKind:"one_off"}:{...Q,triggerKind:"schedule",schedule:$.cronPattern.trim()}}function aU($){return JSON.stringify(CX($))}function NS($,Z){let Q=$.metadata?{...$.metadata}:{},J=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions;let j=Z.cronPattern??($.triggerKind==="one_off"?B9:$.scheduleExpr??""),Y={...Q,...Z.metadata??{}};if(j.trim()!==B9)delete Y[y6];return{name:Z.name??$.title,cronPattern:j,prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:W,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="act"?"act":"yolo"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:J,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Object.keys(Y).length>0?Y:void 0}}class H9{db;constructor($={}){let Z=$.dbPath??LS();this.db=_S(Z),iU(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?J2(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?J2(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?J2(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${J} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((j)=>J2(j))}createHubSchedule($){let Z=`sched_${V9()}`,Q=CX($),J=this.upsertSpec({externalId:Z,sourcePath:zS(Z),triggerKind:Q.triggerKind,sourceHash:aU($),parseStatus:"valid",spec:Q});this.initializeHubScheduleNextRun(J.record.specId,$);let W=this.getSpec(J.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
|
|
375
375
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
376
376
|
ORDER BY created_at ASC LIMIT 1`).get($);return Z?J2(Z):void 0}listHubSchedules($={}){let Z=["source = 'hub-schedule'","trigger_kind IN ('schedule', 'one_off')","removed = 0"],Q=[];if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let X of $.tags)Z.push("tags_json LIKE ?"),Q.push(`%"${X.trim()}"%`);let J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
377
377
|
WHERE ${Z.join(" AND ")}
|
|
378
|
-
ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((X)=>J2(X))}updateHubSchedule($,Z){this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.getHubSchedule($);if(!Q){this.db.exec("COMMIT;");return}let J=NS(Q,Z),W=CX(J),X=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:W.triggerKind,sourceHash:aU(J),parseStatus:"valid",spec:W}),j=Q.enabled!==X.record.enabled;if((Q.triggerKind==="one_off"||X.record.triggerKind==="one_off")&&(X.revisionChanged||j))this.cancelQueuedOneOffRunsForSpec(X.record.specId);if(Z.cronPattern!==void 0||Z.metadata?.[y6]!==void 0||Z.enabled!==void 0)this.initializeHubScheduleNextRun(X.record.specId,J);let V=this.getSpec(X.record.specId);return this.db.exec("COMMIT;"),V}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}initializeHubScheduleNextRun($,Z){if(Z.enabled===!1){this.updateSpecNextRunAt($,void 0);return}if(Z.cronPattern.trim()===
|
|
378
|
+
ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((X)=>J2(X))}updateHubSchedule($,Z){this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.getHubSchedule($);if(!Q){this.db.exec("COMMIT;");return}let J=NS(Q,Z),W=CX(J),X=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:W.triggerKind,sourceHash:aU(J),parseStatus:"valid",spec:W}),j=Q.enabled!==X.record.enabled;if((Q.triggerKind==="one_off"||X.record.triggerKind==="one_off")&&(X.revisionChanged||j))this.cancelQueuedOneOffRunsForSpec(X.record.specId);if(Z.cronPattern!==void 0||Z.metadata?.[y6]!==void 0||Z.enabled!==void 0)this.initializeHubScheduleNextRun(X.record.specId,J);let V=this.getSpec(X.record.specId);return this.db.exec("COMMIT;"),V}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}initializeHubScheduleNextRun($,Z){if(Z.enabled===!1){this.updateSpecNextRunAt($,void 0);return}if(Z.cronPattern.trim()===B9){let Q=Z.metadata?.[y6];if(typeof Q!=="number"||!Number.isFinite(Q))throw Error("runAt metadata is required for one-time schedules");this.updateSpecNextRunAt($,new Date(Q).toISOString());return}this.initializeScheduleNextRun($)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;if(Q.triggerKind==="one_off"&&Z==="manual")return this.consumeOneOffWithManualRun(Q);return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:f0()})}consumeOneOffWithManualRun($){this.db.exec("BEGIN IMMEDIATE;");try{let Z=this.getSpec($.specId);if(!Z||Z.revision!==$.revision||Z.triggerKind!=="one_off"||!Z.enabled||Z.removed||Z.parseStatus!=="valid"){this.db.exec("COMMIT;");return}let Q=f0();this.db.prepare(`UPDATE cron_specs SET next_run_at = NULL, updated_at = ?
|
|
379
379
|
WHERE spec_id = ? AND revision = ?`).run(Q,Z.specId,Z.revision);let J=this.db.prepare(`SELECT * FROM cron_runs
|
|
380
380
|
WHERE spec_id = ? AND spec_revision = ?
|
|
381
381
|
AND trigger_kind IN ('one_off', 'manual')
|
|
382
382
|
AND status != 'cancelled'
|
|
383
383
|
ORDER BY CASE trigger_kind WHEN 'manual' THEN 0 ELSE 1 END,
|
|
384
384
|
created_at ASC
|
|
385
|
-
LIMIT 1`).get(Z.specId,Z.revision),W=J?
|
|
385
|
+
LIMIT 1`).get(Z.specId,Z.revision),W=J?A7(J):void 0;if(W&&W.status!=="queued")return this.db.exec("COMMIT;"),W;if(W?.triggerKind==="manual")return this.db.exec("COMMIT;"),W;this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
|
|
386
386
|
WHERE spec_id = ? AND spec_revision = ?
|
|
387
387
|
AND trigger_kind = 'one_off' AND status = 'queued'`).run(Q,Z.specId,Z.revision);let X=this.enqueueRun({specId:Z.specId,specRevision:Z.revision,triggerKind:"manual",scheduledFor:Q});return this.db.exec("COMMIT;"),X}catch(Z){throw this.db.exec("ROLLBACK;"),Z}}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
|
|
388
388
|
WHERE trigger_kind = 'event'
|
|
@@ -390,7 +390,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
390
390
|
AND enabled = 1
|
|
391
391
|
AND removed = 0
|
|
392
392
|
AND parse_status = 'valid'
|
|
393
|
-
ORDER BY created_at ASC`).all($).map((Q)=>J2(Q))}upsertSpec($){let Z=f0(),Q=this.getSpecBySourcePath($.sourcePath),J=$.spec,W={triggerKind:J?.triggerKind??$.triggerKind,title:J?.title??Q?.title??qS($.sourcePath),prompt:J?.prompt,workspaceRoot:J?.workspaceRoot,scheduleExpr:J?.triggerKind==="schedule"?J.schedule:void 0,timezone:J?.triggerKind==="schedule"?J.timezone:void 0,eventType:J?.triggerKind==="event"?J.event:void 0,filters:J?.triggerKind==="event"?J.filters:void 0,debounceSeconds:J?.triggerKind==="event"?J.debounceSeconds:void 0,dedupeWindowSeconds:J?.triggerKind==="event"?J.dedupeWindowSeconds:void 0,cooldownSeconds:J?.triggerKind==="event"?J.cooldownSeconds:void 0,mode:J?.mode,systemPrompt:J?.systemPrompt,providerId:J?.modelSelection?.providerId,modelId:J?.modelSelection?.modelId,maxIterations:J?.maxIterations,timeoutSeconds:J?.timeoutSeconds,maxParallel:J&&"maxParallel"in J?J.maxParallel:void 0,tools:J?.tools,notesDirectory:J?.notesDirectory,extensions:J?.extensions,source:J?.source,metadata:J?.metadata},X=$.parseStatus==="valid"&&(J?.enabled??!0);if(!Q){let H=`cspec_${
|
|
393
|
+
ORDER BY created_at ASC`).all($).map((Q)=>J2(Q))}upsertSpec($){let Z=f0(),Q=this.getSpecBySourcePath($.sourcePath),J=$.spec,W={triggerKind:J?.triggerKind??$.triggerKind,title:J?.title??Q?.title??qS($.sourcePath),prompt:J?.prompt,workspaceRoot:J?.workspaceRoot,scheduleExpr:J?.triggerKind==="schedule"?J.schedule:void 0,timezone:J?.triggerKind==="schedule"?J.timezone:void 0,eventType:J?.triggerKind==="event"?J.event:void 0,filters:J?.triggerKind==="event"?J.filters:void 0,debounceSeconds:J?.triggerKind==="event"?J.debounceSeconds:void 0,dedupeWindowSeconds:J?.triggerKind==="event"?J.dedupeWindowSeconds:void 0,cooldownSeconds:J?.triggerKind==="event"?J.cooldownSeconds:void 0,mode:J?.mode,systemPrompt:J?.systemPrompt,providerId:J?.modelSelection?.providerId,modelId:J?.modelSelection?.modelId,maxIterations:J?.maxIterations,timeoutSeconds:J?.timeoutSeconds,maxParallel:J&&"maxParallel"in J?J.maxParallel:void 0,tools:J?.tools,notesDirectory:J?.notesDirectory,extensions:J?.extensions,source:J?.source,metadata:J?.metadata},X=$.parseStatus==="valid"&&(J?.enabled??!0);if(!Q){let H=`cspec_${V9()}`;this.insertSpecRow(H,$,W,X,Z);let K=this.getSpec(H);if(!K)throw Error("failed to insert cron_spec row");return{record:K,created:!0,revisionChanged:!0}}let Y=Q.sourceHash!==$.sourceHash&&OS(Q,W,Q.enabled,X),V=Y?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,W,X,V,Z);let B=this.getSpec(Q.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:Y}}insertSpecRow($,Z,Q,J,W){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
|
|
394
394
|
spec_id, external_id, source_path, trigger_kind,
|
|
395
395
|
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
396
396
|
enabled, removed, title, prompt, workspace_root,
|
|
@@ -413,7 +413,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
413
413
|
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
414
414
|
tags_json = ?, metadata_json = ?,
|
|
415
415
|
revision = ?, updated_at = ?
|
|
416
|
-
WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,J?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,W,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(f0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,f0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,f0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,f0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(X8(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!J)return this.db.exec("COMMIT;"),{queued:!1};let W=J2(J);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=W.nextRunAt;if(!X){let V=new Date(X8(W.scheduleExpr,Z,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let j=`crun_${
|
|
416
|
+
WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,J?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,W,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(f0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,f0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,f0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,f0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(X8(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!J)return this.db.exec("COMMIT;"),{queued:!1};let W=J2(J);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=W.nextRunAt;if(!X){let V=new Date(X8(W.scheduleExpr,Z,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let j=`crun_${V9()}`,Y;try{Y=new Date(X8(W.scheduleExpr,Z,W.timezone)).toISOString()}catch{Y=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
417
417
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
418
418
|
scheduled_for, trigger_event_id, attempt_count,
|
|
419
419
|
created_at, updated_at
|
|
@@ -422,7 +422,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
422
422
|
last_run_at = ?,
|
|
423
423
|
next_run_at = ?,
|
|
424
424
|
updated_at = ?
|
|
425
|
-
WHERE spec_id = ?`).run(j,Q,Y??null,Q,W.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(j),nextRunAt:Y}}catch(J){throw this.db.exec("ROLLBACK;"),J}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?
|
|
425
|
+
WHERE spec_id = ?`).run(j,Q,Y??null,Q,W.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(j),nextRunAt:Y}}catch(J){throw this.db.exec("ROLLBACK;"),J}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?A7(Z):void 0}insertEventLog($,Z={}){let Q=f0(),J=Z.receivedAtIso??Q,W=$.eventId.trim();if(!W)throw Error("automation event requires eventId");let X=$.eventType.trim();if(!X)throw Error("automation event requires eventType");let j=$.source.trim();if(!j)throw Error("automation event requires source");let Y=$.occurredAt.trim()||J,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
|
|
426
426
|
event_id, event_type, source, subject,
|
|
427
427
|
occurred_at, received_at, workspace_root, dedupe_key,
|
|
428
428
|
payload_json, attributes_json, processing_status,
|
|
@@ -437,7 +437,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
437
437
|
suppressed_count = COALESCE(?, suppressed_count),
|
|
438
438
|
error = ?,
|
|
439
439
|
updated_at = ?
|
|
440
|
-
WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,f0(),$).changes??0)===1}listRuns($={}){let Z=[],Q=[];if($.specId)Z.push("spec_id = ?"),Q.push($.specId);if($.status){let j=Array.isArray($.status)?$.status:[$.status];if(j.length>0){let Y=j.map(()=>"?").join(",");Z.push(`status IN (${Y})`);for(let V of j)Q.push(V)}}let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${J} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((j)=>
|
|
440
|
+
WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,f0(),$).changes??0)===1}listRuns($={}){let Z=[],Q=[];if($.specId)Z.push("spec_id = ?"),Q.push($.specId);if($.status){let j=Array.isArray($.status)?$.status:[$.status];if(j.length>0){let Y=j.map(()=>"?").join(",");Z.push(`status IN (${Y})`);for(let V of j)Q.push(V)}}let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${J} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((j)=>A7(j))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
441
441
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
442
442
|
WHERE r.spec_id = ?
|
|
443
443
|
AND r.trigger_kind = 'event'
|
|
@@ -455,7 +455,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
455
455
|
AND r.status = 'queued'
|
|
456
456
|
AND e.dedupe_key = ?
|
|
457
457
|
ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
|
|
458
|
-
LIMIT 1`).get($.specId,$.dedupeKey);return Z?
|
|
458
|
+
LIMIT 1`).get($.specId,$.dedupeKey);return Z?A7(Z):void 0}updateQueuedEventRunForDebounce($){let Z=f0();if((this.db.prepare(`UPDATE cron_runs SET
|
|
459
459
|
trigger_event_id = ?,
|
|
460
460
|
scheduled_for = ?,
|
|
461
461
|
updated_at = ?
|
|
@@ -464,7 +464,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
464
464
|
AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,Z,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasConsumedOneOffRevision($,Z){return!!this.db.prepare(`SELECT run_id FROM cron_runs
|
|
465
465
|
WHERE spec_id = ? AND spec_revision = ?
|
|
466
466
|
AND trigger_kind IN ('one_off', 'manual')
|
|
467
|
-
LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${
|
|
467
|
+
LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${V9()}`,Q=f0();this.db.prepare(`INSERT INTO cron_runs (
|
|
468
468
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
469
469
|
scheduled_for, trigger_event_id, attempt_count,
|
|
470
470
|
created_at, updated_at
|
|
@@ -483,7 +483,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
483
483
|
)
|
|
484
484
|
AND (scheduled_for IS NULL OR scheduled_for <= ?)
|
|
485
485
|
ORDER BY COALESCE(scheduled_for, created_at) ASC
|
|
486
|
-
LIMIT ?`).all(Z,Z,W);for(let Y of j){let V=W0(Y.run_id);if(!V)continue;let B=`cclaim_${
|
|
486
|
+
LIMIT ?`).all(Z,Z,W);for(let Y of j){let V=W0(Y.run_id);if(!V)continue;let B=`cclaim_${V9()}`;if((this.db.prepare(`UPDATE cron_runs SET
|
|
487
487
|
status = 'running',
|
|
488
488
|
claim_token = ?,
|
|
489
489
|
claim_started_at = ?,
|
|
@@ -527,27 +527,27 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
527
527
|
error = ?,
|
|
528
528
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
529
529
|
updated_at = ?
|
|
530
|
-
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,f0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,f0(),$)}}class
|
|
530
|
+
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,f0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,f0(),$)}}class K9{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new H9({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new RX({store:this.store,specs:Z}),this.materializer=new W9({store:this.store}),this.eventIngress=new DX({store:this.store,logger:$.logger}),this.runner=new X9({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new MX({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let J=$.logger;if(J)if(J.error)J.error("cron.watcher.failed",{error:Q});else J.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var QD={};w(QD,{manifestToSessionRecord:()=>T7,listSessionHistoryFromBackend:()=>bX,listSessionHistory:()=>N7,hydrateSessionHistory:()=>ZD});import{readdir as MS,readFile as tU}from"node:fs/promises";import{join as eU}from"node:path";import{formatDisplayUserInput as ES,normalizeUserInput as CS}from"@cline/shared";import{resolveSessionDataDir as $D}from"@cline/shared/storage";import{existsSync as fS}from"node:fs";import{readFile as RS}from"node:fs/promises";class G9{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 W2($){let Z=$?.trim();if(!Z||!fS(Z))return[];try{let Q=(await RS(Z,"utf8")).trim();if(!Q)return[];let J=JSON.parse(Q);if(Array.isArray(J))return J;if(J&&typeof J==="object"&&!Array.isArray(J)){let W=J.messages;if(Array.isArray(W))return W}return[]}catch{return[]}}function wX($){return $?{...$}:void 0}async function oU($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let J=await Z.upsertSubagentSessionFromHook($);if(!J)return;await Z.appendSubagentHookAudit(J,$),await Z.applySubagentStatus(J,$)}function F9($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function Y1($){let Z=F9($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function z7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function wS($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function SX($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function PS($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function SS($){return $.isSubagent!==!0&&!F9($.parentSessionId)}function bS($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let J of Z){let W=Number.parseInt(J,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function T7($){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 yS($){let Z=SX($);if(Z===0)return[];let Q=$D(),W=(await MS(Q,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:bS(j.name.trim())})).sort((j,Y)=>Y.recency-j.recency||Y.entry.name.localeCompare(j.entry.name));return(await Promise.all(W.map(async({entry:j})=>{let Y=j.name.trim();if(!Y)return;let V=eU(Q,Y,`${Y}.json`),B=await tU(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let K=i0.safeParse(H);if(!K.success)return;return T7(K.data)}))).filter((j)=>Boolean(j)).sort((j,Y)=>Y.startedAt.localeCompare(j.startedAt)).slice(0,Z)}async function kS($,Z,Q){let J=SX(Z);if(J===0)return await $.listSessions(0),[];let W=Q.includeSubagents?J:PS(J),X=await $.listSessions(W);return(Q.includeSubagents?X:X.filter(SS)).slice(0,J)}function IS($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let J=Q;if(J.type!=="text")continue;let W=J.text?.trim();if(W)Z.push(W)}return Z.join(`
|
|
531
531
|
`).trim()}function sU($){return $.replace(/\s+/g," ").trim()}function hS($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function xS($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let J=sU(IS(Q.content));if(!J)continue;let W=Z==="user"?sU(ES(J)):J,X=CS(W.split(`
|
|
532
|
-
`)[0]??W);return hS(X,50)}return}function gS($){let Z=0;for(let Q of $)Z+=
|
|
533
|
-
`,{encoding:"utf8",mode:384}),await aS($,384)}async function n0($){await kX($,{force:!0}).catch(()=>{return})}async function
|
|
534
|
-
`,"utf8");try{return await Z()}finally{await WD(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let j=await Xb(Q),Y=j?Date.now()-Date.parse(j.acquiredAt):JD+1;if(!j||!Qb(j.pid)||Y>JD){await WD(Q);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub startup lock ${Q}`);await Jb(eS)}}async function U$($,Z){try{let Q=await fetch(Z?.authToken?hX($):CQ($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function CQ($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function hX($){let Z=new URL(CQ($));return Z.pathname="/status",Z.toString()}function HD($){return nS($)}import{CLINE_HUB_DEV_PORT as jb,CLINE_HUB_PORT as Yb,resolveClineBuildEnv as Vb}from"@cline/shared";var Bb="CLINE_HUB_HOST",Hb="CLINE_HUB_PORT",Kb="CLINE_HUB_PATHNAME",xX="127.0.0.1",gX=Yb,vX="/hub";function KD($){return Vb($)==="development"?jb:gX}function mX($={}){return($.env??process.env)[Bb]?.trim()||xX}function k6($={}){let Q=($.env??process.env)[Hb]?.trim();if(!Q)return KD($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return KD($);return J}function cX($={}){return($.env??process.env)[Kb]?.trim()||vX}function V1($={},Z={}){return{host:$.host??mX(Z),port:$.port??k6(Z),pathname:$.pathname??cX(Z)}}import{join as Gb}from"node:path";var Fb="shared:cline",Ub="CLINE_HUB_DISCOVERY_PATH",Db="hub-production";function GD($){let Z=S1($.trim());return F$(`workspace:${Z||$.trim()}`)}function a0($=Fb){return F$($)}function B1(){return{ownerId:Db,discoveryPath:process.env[Ub]?.trim()||Gb(Y8(),"locks","hub","production.json")}}var Eb=8000,Cb=200,wb=3000,Pb=100,Sb=[100,250,500,1000,2000],bb="--cline-hub-daemon";function yb($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function kb(){try{let $=Tb(Y8(),"logs","hub-daemon.log");return Ab(zb($),{recursive:!0}),{fd:Ob($,"a"),logPath:$}}catch{return}}function _D(){return DD()==="production"?B1():a0()}function V8($){return Rb($).compatible}function FD($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function B8($,Z){try{return await U$($,{authToken:Z})}catch{return}}async function Ib($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await B8($))?.url)return!0;await new Promise((W)=>setTimeout(W,Pb))}return!1}async function wQ($,Z){if(await D7($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await Ib($.url,wb);return await n0(Z).catch(()=>{return}),Q}async function U7($,Z){if(V8($))return!0;return wQ($,Z)}async function LD($){if(DD()!=="production")return;let Z=a0();if(Z.discoveryPath===$.discoveryPath)return;let Q=await R0(Z.discoveryPath);if(Q?.url)await wQ(Q,Z.discoveryPath);else await n0(Z.discoveryPath).catch(()=>{return})}function hb(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return Nb(new URL(`./entry.${$}`,import.meta.url))}function xb($,Z){let Q=hb(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let W=qb(J).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),j=W&&Q.toLowerCase().endsWith(".ts"),Y=X?[bb]:[...j?["--conditions=development"]:[],Q];return{launcher:J,args:[...Y,"--cwd",$,...yb(Z)],cwd:$,env:{...Mb(process.env),CLINE_NO_INTERACTIVE:"1",[fb]:"1"}}}function gb($){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 uX($,Z={}){if(UD())return;let Q=xb($,Z),J=kb();try{_b(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)Lb(J.fd)}}async function I6($,Z={}){for(let Q=0;;Q++)try{uX($,Z);return}catch(J){let W=Sb[Q];if(!gb(J)||W===void 0)throw J;await new Promise((X)=>setTimeout(X,W))}}function PQ($,Z={}){if(UD())return;let Q=_D(),J=V1(Z),W=z1(J.host,J.port,J.pathname),X=Z.allowPortFallback===!0&&J.port!==0;LD(Q).catch(()=>{return}).then(()=>R0(Q.discoveryPath)).then(async(j)=>{let Y=!1;if(j?.url)if(!j.authToken){if(Y=!0,!await wQ(j,Q.discoveryPath)&&!X)return}else{let H=await B8(j.url,j.authToken);if(H?.url&&V8(H)&&await y1(H.url,{authToken:j.authToken}))return;if(H?.url)await U7({...H,authToken:j.authToken},Q.discoveryPath);else await n0(Q.discoveryPath).catch(()=>{return})}let V=await B8(W);if(V?.url){if(V8(V)){if(!X||!Y)return}else if(!await U7({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...J,port:0}:J;await I6($,B)}).catch(()=>{})}async function AD($,Z={}){let Q=_D(),J=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=V1(Z),X=z1(W.host,W.port,W.pathname),j=(F)=>{if(!J)X2(F.url,F.authToken);return F};await LD(Q).catch(()=>{return});let Y=await R0(Q.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await wQ(Y,Q.discoveryPath);else{let U=await B8(Y.url,F);if(U?.url&&V8(U)&&await y1(U.url,{authToken:F}))return j({url:U.url,authToken:F});if(U?.url)await U7({...U,authToken:F},Q.discoveryPath);else await n0(Q.discoveryPath).catch(()=>{return})}}let B=await B8(X);if(B?.url){let F=FD(B,Y,X);if(V8(B))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await U7(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let K=Z.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await I6($,K);let G=Date.now()+Eb;while(Date.now()<G){let F=await R0(Q.discoveryPath);if(F?.url&&F.authToken){let _=await B8(F.url,F.authToken);if(_?.url&&V8(_)&&await y1(_.url,{authToken:F.authToken}))return j({url:_.url,authToken:F.authToken})}let U=await B8(X);if(U?.url&&!V8(U)){let _=FD(U,F,X);if(!await U7(_,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((_)=>setTimeout(_,Cb))}throw Error("Timed out waiting for detached hub startup.")}function SQ(){return cb()==="production"?B1():a0()}function db(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function ND($){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 ND($.data);return String($)}function pb($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function OD($){let Z=$,Q=pb(Z.reason);return new m0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:dX,{closeCode:Z.code,closeReason:Q||void 0})}function lb($,Z){if($ instanceof m0)return $;if($ instanceof Error)return new m0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new m0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new m0("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new m0("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var ib=8000,rb=200,qD="*",zD=8000,nb="cline-hub-auth.",fD=new Map,RD=new Set,ab=3000,ob=3000,sb=100,dX="Hub connection closed",tb=250,eb=5000,TD=0.5;class m0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function iX($){return $ instanceof m0}class h6 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function bQ($,Z){return $ instanceof h6&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function MD($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=rX($.toString());return Q?fD.get(Q):void 0}function $y($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function rX($){if(!$y($))return;let Z=new URL(j2($));return Z.search="",Z.hash="",Z.toString()}function pX($){let Z=rX($);return!!Z&&RD.has(Z)}function X2($,Z){let Q=rX($);if(Q){if(RD.add(Q),Z?.trim())fD.set(Q,Z)}return $}class T1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new m0("hub_connection_closed",dX);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||MD($);$.hash="";let J=new(db())($.toString(),Z?[`${nb}${Z}`]:void 0);this.socket=J;let W=!1;this.connectPromise=new Promise((X,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,W=!0,this.lastCloseError=new m0("hub_connect_timeout",`Timed out connecting to hub after ${zD}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{J.close()}catch{}j(this.lastCloseError)},zD);J.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),X()}),J.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=lb(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),J.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!W)this.lastCloseError=OD(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),J.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(ND(X)))}),J.addEventListener("close",(X)=>{if(this.socket!==J)return;if(!W)this.lastCloseError=OD(X),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let W=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(j){if(!X||W>=1||!await this.recoverLocalHubTransport(j))throw j;W+=1}}async commandOnce($,Z,Q,J){await this.connect();let W=vb("hubreq_"),X=ub($,J?.timeoutMs),j=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;B(new h6($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(W,{resolve:(K)=>{if(H)clearTimeout(H);V(K)},reject:(K)=>{if(H)clearTimeout(H);B(K)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(W),V}let Y=await j;if(!Y.ok){if(Y.error?.code===J8){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new K$(V,Y.error.message)}throw new h6($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!pX(this.currentUrl)||!iX($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await H8({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(tb*2**this.reconnectAttempt,eb),Z=Math.round($*(1-TD)+Math.random()*$*TD);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(!pX(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await H8({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 m0("hub_connection_closed",dX),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 m0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??qD}subscriptionSessionIdFromKey($){return $===qD?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 j2($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function y1($,Z){let Q=new T1({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 lX($,Z){let Q=j2($),J=await U$(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(!mb(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await y1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Zy($){let Z=Date.now()+ib;while(Date.now()<Z){let Q=await R0($.discoveryPath);if(Q?.url){let J=await lX(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(J.status==="compatible")return X2(J.url,Q.authToken)}await new Promise((J)=>setTimeout(J,rb))}return}async function Qy($){let Z=Date.now()+ob;while(Date.now()<Z){if(!(await U$($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,sb))}return!1}function Jy($,Z){try{return j2($)===j2(Z)}catch{return!1}}function Wy($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let J=Q;if(J.status==="running"||J.status==="idle"||J.status==="pending")return!0;return Array.isArray(J.participants)&&J.participants.length>0})}async function Xy($,Z,Q){let J=new T1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await J.command("session.list",{limit:500},void 0,{timeoutMs:ab});return!Wy(W.payload)}catch{return!1}finally{await J.dispose().catch(()=>{return})}}async function _7($={}){if($.endpoint?.trim()){let W=await lX($.endpoint);return W.status==="compatible"?W.url:void 0}let Z=SQ(),Q=await R0(Z.discoveryPath);if(!Q?.url)return;let J=await lX(Q.url,{authToken:Q.authToken});if(J.status==="compatible")return X2(J.url,Q.authToken);if(J.status==="protocol_mismatch")await n0(Z.discoveryPath).catch(()=>{return});return}async function H8($={}){let Z=await _7($);if(Z&&await y1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=SQ();return await I6($.workspaceRoot??process.cwd()),await Zy(Q)}async function D7($,Z){let Q=new URL($),J=Z?.trim()||MD(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function nX($=SQ()){let Z=await R0($.discoveryPath);if(!Z?.url)return!1;try{if(await D7(Z.url,Z.authToken))return!0}catch{}return!1}async function yQ($){if(!pX($.url))return;let Z=SQ(),Q=await R0(Z.discoveryPath);if(!Q?.url||!Jy(Q.url,$.url))return;if(!await Xy(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await nX())return;if(!await Qy(Q.url))return;return await n0(Z.discoveryPath).catch(()=>{return}),await H8({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var vD={};w(vD,{HubRuntimeHost:()=>D$});import{resolveProviderRequestHeaders as By}from"@cline/llms";import{captureSdkError as aX,createSessionId as CD,HUB_CHECKPOINT_CAPABILITY as Hy,HUB_COMPACTION_CAPABILITY as Ky,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Gy,HUB_HOOK_CAPABILITY_PREFIX as Fy,HUB_MISTAKE_LIMIT_CAPABILITY as Uy,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Dy,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as _y,isHubToolExecutorName as Ly}from"@cline/shared";var ED={};w(ED,{createCoreSessionSnapshot:()=>k1,coreSessionSnapshotToRecord:()=>kQ});function jy($){return $?JSON.parse(JSON.stringify($)):void 0}function Yy($){return $?JSON.parse(JSON.stringify($)):void 0}function Vy($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,J=(Array.isArray(Z?.history)?Z.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let Y=typeof j.ref==="string"?j.ref.trim():"",V=Number(j.createdAt),B=Number(j.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),W=J.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&J.length===0)return;return{...X?{enabled:X}:{},...W?{latest:W}:{},history:J}}function k1($){let{session:Z}=$,Q=jy(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:Yy($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let J=Vy(Q);return J?{checkpoint:J}:{}})()}}function kQ($){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 x6($){if(!$)return;return JSON.parse(JSON.stringify($))}var Ay=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function wD($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function PD($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function SD($,Z){let Q={...$.config,sessionId:Z},J=By({providerId:$.config.providerId,sessionId:Z,source:$.source,defaultSource:L0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:J6,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(J)Q.headers=J;return Q}function bD($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function K8($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function yD($,Z){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(Z.toolExecutors??{}).filter(Ly)){let X=Z.toolExecutors?.[W];if(typeof X!=="function")continue;K8(Q,{kind:"toolExecutor",executor:W,capabilityName:`${Dy}${W}`},async({payload:j,abortSignal:Y})=>{let V=Array.isArray(j.args)?[...j.args]:[],B={...bD(j.context),signal:Y};return{result:await X(...V,B)}})}for(let W of $?.extraTools??[])K8(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:x6(W.inputSchema)??{},...W.lifecycle?{lifecycle:x6(W.lifecycle)}:{},capabilityName:`${Gy}${W.name}`},async({payload:X,abortSignal:j,progress:Y})=>{let V={...bD(X.context),signal:j};return{result:await W.execute(X.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let J=$?.hooks;if(J)for(let W of Ay){let X=J[W];if(typeof X!=="function")continue;K8(Q,{kind:"hook",name:W,capabilityName:`${Fy}${W}`},async({payload:j})=>({control:await X(j.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;K8(Q,{kind:"compaction",capabilityName:Ky,config:wD($.compaction)},async({payload:X})=>({result:await W(X.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;K8(Q,{kind:"checkpoint",capabilityName:Hy,config:wD($.checkpoint)},async({payload:X})=>({result:await W(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;K8(Q,{kind:"mistakeLimit",capabilityName:Uy},async({payload:X})=>({result:await W(X.context)}))}if($?.userInstructionService){let W=$.userInstructionService;K8(Q,{kind:"userInstructionService",capabilityName:_y},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function xD($){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 Oy($){return xD($)??"Capability request was cancelled."}function qy($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function zy($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function Ty($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,J=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||J===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function kD($){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 oX($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Y2($,Z){return oX($?.[Z])??0}function Ny($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,J=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=J?.teamRole==="teammate"||J?.teamRole==="lead"?J.teamRole:void 0;return{event:{type:"usage",agentId:typeof J?.agentId==="string"?J.agentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,inputTokens:Y2(Z,"inputTokens"),outputTokens:Y2(Z,"outputTokens"),cacheReadTokens:Y2(Z,"cacheReadTokens"),cacheWriteTokens:Y2(Z,"cacheWriteTokens"),cost:oX(Z?.totalCost),totalInputTokens:Y2(Q,"inputTokens"),totalOutputTokens:Y2(Q,"outputTokens"),totalCacheReadTokens:Y2(Q,"cacheReadTokens"),totalCacheWriteTokens:Y2(Q,"cacheWriteTokens"),totalCost:oX(Q?.totalCost)},teamAgentId:typeof J?.teamAgentId==="string"?J.teamAgentId:void 0,teamRole:W}}function fy($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,J=zy(Q)?Q:Q==="failed"?"error":"completed",W=Ty($?.usage??Z?.usage);return{type:"done",reason:J,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:W}}function G8($,Z){return $.error?.message??`hub command failed: ${Z}`}function L7($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function gD($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:L0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:L7($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:L7($.status)==="completed"?0:L7($.status)==="failed"?1:void 0,status:L7($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function V2($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function Ry($){let Z=V2($?.snapshot);if(Z)return kQ(Z);let Q=$?.session;return Q?gD(Q):void 0}function ID($,Z,Q){let J=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot?.trim()||Z.config.cwd?.trim();if(!J)throw Error("Hub runtime did not return a resolved workspace path.");let W=Q?.cwd?.trim()||Z.config.cwd?.trim()||J;return i0.parse({version:1,session_id:$,source:Z.source??L0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:L7(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:W,workspace_root:J,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function hD($,Z){return i0.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 D${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new G7;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=y0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new T1({...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(!bQ($,"session.create"))return!1;let Z=await yQ({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=yD($.localRuntime,Z),J=$.config.sessionId?.trim()||CD(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x6(SD($,J)),metadata:{...$.sessionMetadata??{},source:$.source??L0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(J,Z,Q.handlers);let X;try{X=await W()}catch(H){if(this.cleanupPlannedSession(J),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(J,Z,Q.handlers);try{X=await W()}catch(K){throw this.cleanupPlannedSession(J),K}}else throw H}let j=V2(X.payload?.snapshot),Y=X.payload?.session,V=(j?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(J),Error("Hub runtime did not return a session id.");let B;try{B=j?hD(j,$):ID(V,$,Y)}catch(H){throw this.cleanupPlannedSession(J),H}if(V!==J)this.cleanupPlannedSession(J),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:B,manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let J=$.start,W=J?this.resolveCapabilities(J):void 0,X=J?yD(J.localRuntime,W??{}):{manifest:[],handlers:new Map},j,Y;if(J)j=J.config.sessionId?.trim()||CD(),Y=SD(J,j);if(j&&W)this.sessionCapabilities.set(j,W);if(j&&X.handlers.size>0)this.sessionClientContributionHandlers.set(j,X.handlers),this.ensureSessionSubscription(j);let V;try{V=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.config.workspaceRoot?.trim()||J.config.cwd,cwd:J.config.cwd??$.cwd,sessionConfig:x6(Y),metadata:{...J.sessionMetadata??{},source:J.source??L0.CORE,provider:J.config.providerId,model:J.config.modelId,enableTools:J.config.enableTools,enableSpawn:J.config.enableSpawnAgent,enableTeams:J.config.enableAgentTeams,teamName:J.config.teamName,prompt:J.prompt,interactive:J.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...J.localRuntime?.configExtensions?{configExtensions:J.localRuntime.configExtensions}:{}},toolPolicies:x6(J.toolPolicies),...J.initialCompactionState?{initialCompactionState:J.initialCompactionState}:{}}:{}},Z)}catch(U){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw U}if(!V.ok){let U=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(U)}let B=V2(V.payload?.snapshot),H=V.payload?.session,K=(B?.sessionId??H?.sessionId)?.trim();if(Q&&!K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(K&&j&&K!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(K&&W)this.sessionCapabilities.set(K,W);if(K&&X.handlers.size>0)this.sessionClientContributionHandlers.set(K,X.handlers);if(K)this.ensureSessionSubscription(K);let G=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw Error("Hub checkpoint restore returned no checkpoint")}try{return{sessionId:K,startResult:K?{sessionId:K,manifest:B?hD(B,J??{}):ID(K,J??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:F}}catch(U){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw U}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=V2(Z.payload?.snapshot);if(Q){let j=Q.usage?{...Q.usage}:void 0,Y=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return j||Y?{usage:j,aggregateUsage:Y}:void 0}let J=Z.payload?.session,W=kD(J?.usage),X=kD(J?.aggregateUsage);return W||X?{usage:W,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:xD(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(G$(Q))return;throw Q}return Ry(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((W)=>{let X=V2(W);return X?[kQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(gD)}async listSettings($){let Z=await this.client.command("settings.list",PD($));if(!Z.ok)throw Error(G8(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",PD($));if(!Z.ok)throw Error(G8(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let J=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!J.ok)throw Error(G8(J,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!J.ok)aX(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(G8(J,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:J.error?.code}});return{updated:J.ok&&J.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(G8(Q,"session.compaction.get"));return _1(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw aX(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(G8(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(G8(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((J)=>{this.handleHubEvent(J)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return y0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:fy($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=V2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Q=$.payload?.noticeType,J=$.payload?.displayRole,W=$.payload?.reason,X=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,j=X?.teamRole==="lead"||X?.teamRole==="teammate"?X.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:Z,...j?{teamRole:j}:{},...typeof X?.teamAgentId==="string"?{teamAgentId:X.teamAgentId}:{},event:{type:"notice",...typeof X?.agentId==="string"?{agentId:X.agentId}:{},...typeof X?.conversationId==="string"?{conversationId:X.conversationId}:{},...typeof X?.parentAgentId==="string"?{parentAgentId:X.parentAgentId}:{},noticeType:Q==="recovery"||Q==="stop"?Q:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...J==="system"||J==="status"?{displayRole:J}:{},...typeof W==="string"?{reason:W}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",J=$.payload?.redacted===!0;if(!Q&&!J)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:J}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=Ny($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=V2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=V2($.payload?.snapshot),J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:J}}),Q?.interactive===!0&&_0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{aX(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let J=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!J)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(W);if(!X){await this.client.command("capability.respond",{requestId:J,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${Z}.`},Z).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(J,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:J,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await X({payload:j,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!0,payload:B},Z)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(J)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(Oy($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!J||!W||!X)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=qy($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:Z,toolCallId:W,toolName:X,toolInput:Y});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:X,input:Y,policy:j})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:J,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var mD={};w(mD,{RemoteRuntimeHost:()=>g6});class g6 extends D${constructor($){super({url:j2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var cD={};w(cD,{SqliteSessionStore:()=>x1});import{existsSync as My,mkdirSync as Ey}from"node:fs";import{join as Cy}from"node:path";import{asBool as A7,asOptionalString as I1,asString as h1,ensureSessionSchema as wy,loadSqliteDb as Py,nowIso as IQ,toBoolInt as O7}from"@cline/shared/db";import{resolveDbDataDir as Sy}from"@cline/shared/storage";class x1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Sy()}init(){this.getRawDb()}ensureSessionsDir(){if(!My(this.sessionsDirPath))Ey(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return Cy(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=Py(this.sessionDbPath());return wy($,{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=IQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
532
|
+
`)[0]??W);return hS(X,50)}return}function gS($){let Z=0;for(let Q of $)Z+=z7(Q.metrics?.cost)??0;return Z}function vS($){let Z,Q;for(let J=$.length-1;J>=0;J-=1){let W=$[J];if(!Z)Z=Y1(W.modelInfo?.provider);if(!Q)Q=Y1(W.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function mS($){return Y1($?.provider)??Y1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function cS($){return Y1($?.model)??Y1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function PX($,Z){let Q=wS($.metadata),J=F9(Z?.title)??F9(Q?.title),W=z7(Z?.totalCost)??z7(Q?.totalCost),X=Q||J!==void 0||W!==void 0?{...Q??{},...J!==void 0?{title:J}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:Y1(Z?.provider)??Y1($.provider)??mS(Q)??"",model:Y1(Z?.model)??Y1($.model)??cS(Q)??"",metadata:X}}function uS($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function dS($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!uS(Q)}async function pS($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let J=await $.readSessionMessages(Q.sessionId);return dS(Q,J)?{...Q,status:"idle"}:Q}))}async function ZD($,Z){return await Promise.all(Z.map(async(Q)=>{let J=PX(Q),W=Boolean(F9(J.metadata?.title)),X=Boolean(Y1(J.provider)),j=Boolean(Y1(J.model)),Y=z7(J.metadata?.totalCost),V=Y!==void 0&&Y>0;if(W&&X&&j&&V)return J;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return J;let H=vS(B),K=gS(B);return PX(Q,{title:W?void 0:xS(B),provider:X?void 0:H.provider,model:j?void 0:H.model,totalCost:V||K<=0?void 0:K})}))}async function N7($,Z={}){let Q=SX(Z.limit),J=Z.includeSubagents===!0,W=await kS($,Q,{includeSubagents:J}),X=Z.includeManifestFallback===!0&&W.length<Q?await yS(Math.min(Math.max(Q*2,100),500)):[],j=new Map;for(let B of[...W,...X]){if(j.has(B.sessionId))continue;j.set(B.sessionId,B)}let Y=X.length===0?W:Array.from(j.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await pS($,Y);if(Z.hydrate===!1)return V.map((B)=>PX(B));return await ZD($,V)}async function lS($){let Z=$.trim();if(!Z)return;let Q=eU($D(),Z,`${Z}.json`),J=await tU(Q,"utf8").catch(()=>{return});if(!J)return;try{let W=i0.safeParse(JSON.parse(J));return W.success?W.data.messages_path:void 0}catch{return}}async function bX($,Z={}){let Q=new Map;return await N7({listSessions:async(W)=>{let X=await $.listSessions(W);Q.clear();for(let j of X)Q.set(j.sessionId,j);return X.map(Y5)},readSessionMessages:async(W)=>{let X=Q.get(W)?.messagesPath??await lS(W);return await W2(X)}},Z)}var z_={};w(z_,{resolveSessionBackend:()=>Dj,createRuntimeHost:()=>i6});import{captureSdkError as O_}from"@cline/shared";import{createSessionId as vb,isHubProtocolCompatible as mb,resolveClineBuildEnv as cb,resolveHubCommandTimeoutMs as ub}from"@cline/shared";import{spawn as _b}from"node:child_process";import{closeSync as Lb,mkdirSync as Ab,openSync as Ob}from"node:fs";import{basename as qb,dirname as zb,join as Tb}from"node:path";import{fileURLToPath as Nb}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as fb,isHubDaemonProcess as UD,isHubProtocolCompatible as Rb,resolveClineBuildEnv as DD,withResolvedClineBuildEnv as Mb}from"@cline/shared";import{createHash as iS,randomBytes as rS}from"node:crypto";import{existsSync as nS}from"node:fs";import{chmod as aS,mkdir as yX,readFile as XD,rm as kX,writeFile as jD}from"node:fs/promises";import{dirname as YD,join as IX}from"node:path";import{resolveClineDataDir as Y8,resolveClineDir as VD}from"@cline/shared/storage";var oS="CLINE_HUB_DISCOVERY_PATH",sS="CLINE_HUB_BUILD_ID",JD=30000,tS=15000,eS=100;function $b($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Zb($){return iS("sha256").update($).digest("hex").slice(0,12)}function Qb($){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 f7(){return rS(32).toString("hex")}function Jb($){return new Promise((Z)=>setTimeout(Z,$))}function Wb($){return`${$}.lock`}async function Xb($){try{let Z=JSON.parse(await XD(IX($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function WD($){await kX($,{recursive:!0,force:!0}).catch(()=>{return})}function R7(){return process.env[sS]?.trim()||String(H5.version)}function F$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Zb($)}`,Q=process.env[oS]?.trim()||IX(Y8(),"locks","hub","owners",`${$b(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function BD($=`hub-${Date.now().toString(36)}`){return F$($)}async function R0($){try{let Z=JSON.parse(await XD($,"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 M7($,Z){await yX(YD($),{recursive:!0}),await kX($,{force:!0}).catch(()=>{return}),await jD($,`${JSON.stringify(Z,null,2)}
|
|
533
|
+
`,{encoding:"utf8",mode:384}),await aS($,384)}async function n0($){await kX($,{force:!0}).catch(()=>{return})}async function E7($,Z){let Q=Wb($);await yX(YD(Q),{recursive:!0});let J=Date.now()+tS;while(!0)try{await yX(Q,{recursive:!1}),await jD(IX(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
534
|
+
`,"utf8");try{return await Z()}finally{await WD(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let j=await Xb(Q),Y=j?Date.now()-Date.parse(j.acquiredAt):JD+1;if(!j||!Qb(j.pid)||Y>JD){await WD(Q);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub startup lock ${Q}`);await Jb(eS)}}async function U$($,Z){try{let Q=await fetch(Z?.authToken?hX($):C7($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function C7($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function hX($){let Z=new URL(C7($));return Z.pathname="/status",Z.toString()}function HD($){return nS($)}import{CLINE_HUB_DEV_PORT as jb,CLINE_HUB_PORT as Yb,resolveClineBuildEnv as Vb}from"@cline/shared";var Bb="CLINE_HUB_HOST",Hb="CLINE_HUB_PORT",Kb="CLINE_HUB_PATHNAME",xX="127.0.0.1",gX=Yb,vX="/hub";function KD($){return Vb($)==="development"?jb:gX}function mX($={}){return($.env??process.env)[Bb]?.trim()||xX}function k6($={}){let Q=($.env??process.env)[Hb]?.trim();if(!Q)return KD($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return KD($);return J}function cX($={}){return($.env??process.env)[Kb]?.trim()||vX}function V1($={},Z={}){return{host:$.host??mX(Z),port:$.port??k6(Z),pathname:$.pathname??cX(Z)}}import{join as Gb}from"node:path";var Fb="shared:cline",Ub="CLINE_HUB_DISCOVERY_PATH",Db="hub-production";function GD($){let Z=S1($.trim());return F$(`workspace:${Z||$.trim()}`)}function a0($=Fb){return F$($)}function B1(){return{ownerId:Db,discoveryPath:process.env[Ub]?.trim()||Gb(Y8(),"locks","hub","production.json")}}var Eb=8000,Cb=200,wb=3000,Pb=100,Sb=[100,250,500,1000,2000],bb="--cline-hub-daemon";function yb($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function kb(){try{let $=Tb(Y8(),"logs","hub-daemon.log");return Ab(zb($),{recursive:!0}),{fd:Ob($,"a"),logPath:$}}catch{return}}function _D(){return DD()==="production"?B1():a0()}function V8($){return Rb($).compatible}function FD($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function B8($,Z){try{return await U$($,{authToken:Z})}catch{return}}async function Ib($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await B8($))?.url)return!0;await new Promise((W)=>setTimeout(W,Pb))}return!1}async function w7($,Z){if(await D9($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await Ib($.url,wb);return await n0(Z).catch(()=>{return}),Q}async function U9($,Z){if(V8($))return!0;return w7($,Z)}async function LD($){if(DD()!=="production")return;let Z=a0();if(Z.discoveryPath===$.discoveryPath)return;let Q=await R0(Z.discoveryPath);if(Q?.url)await w7(Q,Z.discoveryPath);else await n0(Z.discoveryPath).catch(()=>{return})}function hb(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return Nb(new URL(`./entry.${$}`,import.meta.url))}function xb($,Z){let Q=hb(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let W=qb(J).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),j=W&&Q.toLowerCase().endsWith(".ts"),Y=X?[bb]:[...j?["--conditions=development"]:[],Q];return{launcher:J,args:[...Y,"--cwd",$,...yb(Z)],cwd:$,env:{...Mb(process.env),CLINE_NO_INTERACTIVE:"1",[fb]:"1"}}}function gb($){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 uX($,Z={}){if(UD())return;let Q=xb($,Z),J=kb();try{_b(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)Lb(J.fd)}}async function I6($,Z={}){for(let Q=0;;Q++)try{uX($,Z);return}catch(J){let W=Sb[Q];if(!gb(J)||W===void 0)throw J;await new Promise((X)=>setTimeout(X,W))}}function P7($,Z={}){if(UD())return;let Q=_D(),J=V1(Z),W=z1(J.host,J.port,J.pathname),X=Z.allowPortFallback===!0&&J.port!==0;LD(Q).catch(()=>{return}).then(()=>R0(Q.discoveryPath)).then(async(j)=>{let Y=!1;if(j?.url)if(!j.authToken){if(Y=!0,!await w7(j,Q.discoveryPath)&&!X)return}else{let H=await B8(j.url,j.authToken);if(H?.url&&V8(H)&&await y1(H.url,{authToken:j.authToken}))return;if(H?.url)await U9({...H,authToken:j.authToken},Q.discoveryPath);else await n0(Q.discoveryPath).catch(()=>{return})}let V=await B8(W);if(V?.url){if(V8(V)){if(!X||!Y)return}else if(!await U9({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...J,port:0}:J;await I6($,B)}).catch(()=>{})}async function AD($,Z={}){let Q=_D(),J=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=V1(Z),X=z1(W.host,W.port,W.pathname),j=(F)=>{if(!J)X2(F.url,F.authToken);return F};await LD(Q).catch(()=>{return});let Y=await R0(Q.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await w7(Y,Q.discoveryPath);else{let U=await B8(Y.url,F);if(U?.url&&V8(U)&&await y1(U.url,{authToken:F}))return j({url:U.url,authToken:F});if(U?.url)await U9({...U,authToken:F},Q.discoveryPath);else await n0(Q.discoveryPath).catch(()=>{return})}}let B=await B8(X);if(B?.url){let F=FD(B,Y,X);if(V8(B))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await U9(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let K=Z.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await I6($,K);let G=Date.now()+Eb;while(Date.now()<G){let F=await R0(Q.discoveryPath);if(F?.url&&F.authToken){let _=await B8(F.url,F.authToken);if(_?.url&&V8(_)&&await y1(_.url,{authToken:F.authToken}))return j({url:_.url,authToken:F.authToken})}let U=await B8(X);if(U?.url&&!V8(U)){let _=FD(U,F,X);if(!await U9(_,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((_)=>setTimeout(_,Cb))}throw Error("Timed out waiting for detached hub startup.")}function S7(){return cb()==="production"?B1():a0()}function db(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function ND($){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 ND($.data);return String($)}function pb($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function OD($){let Z=$,Q=pb(Z.reason);return new m0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:dX,{closeCode:Z.code,closeReason:Q||void 0})}function lb($,Z){if($ instanceof m0)return $;if($ instanceof Error)return new m0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new m0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new m0("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new m0("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var ib=8000,rb=200,qD="*",zD=8000,nb="cline-hub-auth.",fD=new Map,RD=new Set,ab=3000,ob=3000,sb=100,dX="Hub connection closed",tb=250,eb=5000,TD=0.5;class m0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function iX($){return $ instanceof m0}class h6 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function b7($,Z){return $ instanceof h6&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function MD($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=rX($.toString());return Q?fD.get(Q):void 0}function $y($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function rX($){if(!$y($))return;let Z=new URL(j2($));return Z.search="",Z.hash="",Z.toString()}function pX($){let Z=rX($);return!!Z&&RD.has(Z)}function X2($,Z){let Q=rX($);if(Q){if(RD.add(Q),Z?.trim())fD.set(Q,Z)}return $}class T1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new m0("hub_connection_closed",dX);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||MD($);$.hash="";let J=new(db())($.toString(),Z?[`${nb}${Z}`]:void 0);this.socket=J;let W=!1;this.connectPromise=new Promise((X,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,W=!0,this.lastCloseError=new m0("hub_connect_timeout",`Timed out connecting to hub after ${zD}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{J.close()}catch{}j(this.lastCloseError)},zD);J.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),X()}),J.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=lb(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),J.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!W)this.lastCloseError=OD(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),J.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(ND(X)))}),J.addEventListener("close",(X)=>{if(this.socket!==J)return;if(!W)this.lastCloseError=OD(X),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let W=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(j){if(!X||W>=1||!await this.recoverLocalHubTransport(j))throw j;W+=1}}async commandOnce($,Z,Q,J){await this.connect();let W=vb("hubreq_"),X=ub($,J?.timeoutMs),j=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;B(new h6($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(W,{resolve:(K)=>{if(H)clearTimeout(H);V(K)},reject:(K)=>{if(H)clearTimeout(H);B(K)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(W),V}let Y=await j;if(!Y.ok){if(Y.error?.code===J8){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new K$(V,Y.error.message)}throw new h6($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!pX(this.currentUrl)||!iX($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await H8({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(tb*2**this.reconnectAttempt,eb),Z=Math.round($*(1-TD)+Math.random()*$*TD);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(!pX(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await H8({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 m0("hub_connection_closed",dX),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 m0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??qD}subscriptionSessionIdFromKey($){return $===qD?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 j2($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function y1($,Z){let Q=new T1({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 lX($,Z){let Q=j2($),J=await U$(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(!mb(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await y1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Zy($){let Z=Date.now()+ib;while(Date.now()<Z){let Q=await R0($.discoveryPath);if(Q?.url){let J=await lX(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(J.status==="compatible")return X2(J.url,Q.authToken)}await new Promise((J)=>setTimeout(J,rb))}return}async function Qy($){let Z=Date.now()+ob;while(Date.now()<Z){if(!(await U$($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,sb))}return!1}function Jy($,Z){try{return j2($)===j2(Z)}catch{return!1}}function Wy($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let J=Q;if(J.status==="running"||J.status==="idle"||J.status==="pending")return!0;return Array.isArray(J.participants)&&J.participants.length>0})}async function Xy($,Z,Q){let J=new T1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await J.command("session.list",{limit:500},void 0,{timeoutMs:ab});return!Wy(W.payload)}catch{return!1}finally{await J.dispose().catch(()=>{return})}}async function _9($={}){if($.endpoint?.trim()){let W=await lX($.endpoint);return W.status==="compatible"?W.url:void 0}let Z=S7(),Q=await R0(Z.discoveryPath);if(!Q?.url)return;let J=await lX(Q.url,{authToken:Q.authToken});if(J.status==="compatible")return X2(J.url,Q.authToken);if(J.status==="protocol_mismatch")await n0(Z.discoveryPath).catch(()=>{return});return}async function H8($={}){let Z=await _9($);if(Z&&await y1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=S7();return await I6($.workspaceRoot??process.cwd()),await Zy(Q)}async function D9($,Z){let Q=new URL($),J=Z?.trim()||MD(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function nX($=S7()){let Z=await R0($.discoveryPath);if(!Z?.url)return!1;try{if(await D9(Z.url,Z.authToken))return!0}catch{}return!1}async function y7($){if(!pX($.url))return;let Z=S7(),Q=await R0(Z.discoveryPath);if(!Q?.url||!Jy(Q.url,$.url))return;if(!await Xy(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await nX())return;if(!await Qy(Q.url))return;return await n0(Z.discoveryPath).catch(()=>{return}),await H8({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var vD={};w(vD,{HubRuntimeHost:()=>D$});import{resolveProviderRequestHeaders as By}from"@cline/llms";import{captureSdkError as aX,createSessionId as CD,HUB_CHECKPOINT_CAPABILITY as Hy,HUB_COMPACTION_CAPABILITY as Ky,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Gy,HUB_HOOK_CAPABILITY_PREFIX as Fy,HUB_MISTAKE_LIMIT_CAPABILITY as Uy,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Dy,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as _y,isHubToolExecutorName as Ly}from"@cline/shared";var ED={};w(ED,{createCoreSessionSnapshot:()=>k1,coreSessionSnapshotToRecord:()=>k7});function jy($){return $?JSON.parse(JSON.stringify($)):void 0}function Yy($){return $?JSON.parse(JSON.stringify($)):void 0}function Vy($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,J=(Array.isArray(Z?.history)?Z.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let Y=typeof j.ref==="string"?j.ref.trim():"",V=Number(j.createdAt),B=Number(j.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),W=J.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&J.length===0)return;return{...X?{enabled:X}:{},...W?{latest:W}:{},history:J}}function k1($){let{session:Z}=$,Q=jy(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:Yy($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let J=Vy(Q);return J?{checkpoint:J}:{}})()}}function k7($){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 x6($){if(!$)return;return JSON.parse(JSON.stringify($))}var Ay=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function wD($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function PD($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function SD($,Z){let Q={...$.config,sessionId:Z},J=By({providerId:$.config.providerId,sessionId:Z,source:$.source,defaultSource:L0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:J6,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(J)Q.headers=J;return Q}function bD($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function K8($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function yD($,Z){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(Z.toolExecutors??{}).filter(Ly)){let X=Z.toolExecutors?.[W];if(typeof X!=="function")continue;K8(Q,{kind:"toolExecutor",executor:W,capabilityName:`${Dy}${W}`},async({payload:j,abortSignal:Y})=>{let V=Array.isArray(j.args)?[...j.args]:[],B={...bD(j.context),signal:Y};return{result:await X(...V,B)}})}for(let W of $?.extraTools??[])K8(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:x6(W.inputSchema)??{},...W.lifecycle?{lifecycle:x6(W.lifecycle)}:{},capabilityName:`${Gy}${W.name}`},async({payload:X,abortSignal:j,progress:Y})=>{let V={...bD(X.context),signal:j};return{result:await W.execute(X.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let J=$?.hooks;if(J)for(let W of Ay){let X=J[W];if(typeof X!=="function")continue;K8(Q,{kind:"hook",name:W,capabilityName:`${Fy}${W}`},async({payload:j})=>({control:await X(j.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;K8(Q,{kind:"compaction",capabilityName:Ky,config:wD($.compaction)},async({payload:X})=>({result:await W(X.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;K8(Q,{kind:"checkpoint",capabilityName:Hy,config:wD($.checkpoint)},async({payload:X})=>({result:await W(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;K8(Q,{kind:"mistakeLimit",capabilityName:Uy},async({payload:X})=>({result:await W(X.context)}))}if($?.userInstructionService){let W=$.userInstructionService;K8(Q,{kind:"userInstructionService",capabilityName:_y},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function xD($){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 Oy($){return xD($)??"Capability request was cancelled."}function qy($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function zy($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function Ty($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,J=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||J===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function kD($){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 oX($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Y2($,Z){return oX($?.[Z])??0}function Ny($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,J=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=J?.teamRole==="teammate"||J?.teamRole==="lead"?J.teamRole:void 0;return{event:{type:"usage",agentId:typeof J?.agentId==="string"?J.agentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,inputTokens:Y2(Z,"inputTokens"),outputTokens:Y2(Z,"outputTokens"),cacheReadTokens:Y2(Z,"cacheReadTokens"),cacheWriteTokens:Y2(Z,"cacheWriteTokens"),cost:oX(Z?.totalCost),totalInputTokens:Y2(Q,"inputTokens"),totalOutputTokens:Y2(Q,"outputTokens"),totalCacheReadTokens:Y2(Q,"cacheReadTokens"),totalCacheWriteTokens:Y2(Q,"cacheWriteTokens"),totalCost:oX(Q?.totalCost)},teamAgentId:typeof J?.teamAgentId==="string"?J.teamAgentId:void 0,teamRole:W}}function fy($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,J=zy(Q)?Q:Q==="failed"?"error":"completed",W=Ty($?.usage??Z?.usage);return{type:"done",reason:J,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:W}}function G8($,Z){return $.error?.message??`hub command failed: ${Z}`}function L9($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function gD($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:L0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:L9($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:L9($.status)==="completed"?0:L9($.status)==="failed"?1:void 0,status:L9($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function V2($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function Ry($){let Z=V2($?.snapshot);if(Z)return k7(Z);let Q=$?.session;return Q?gD(Q):void 0}function ID($,Z,Q){let J=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot?.trim()||Z.config.cwd?.trim();if(!J)throw Error("Hub runtime did not return a resolved workspace path.");let W=Q?.cwd?.trim()||Z.config.cwd?.trim()||J;return i0.parse({version:1,session_id:$,source:Z.source??L0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:L9(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:W,workspace_root:J,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function hD($,Z){return i0.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 D${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new G9;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=y0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new T1({...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(!b7($,"session.create"))return!1;let Z=await y7({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=yD($.localRuntime,Z),J=$.config.sessionId?.trim()||CD(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x6(SD($,J)),metadata:{...$.sessionMetadata??{},source:$.source??L0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(J,Z,Q.handlers);let X;try{X=await W()}catch(H){if(this.cleanupPlannedSession(J),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(J,Z,Q.handlers);try{X=await W()}catch(K){throw this.cleanupPlannedSession(J),K}}else throw H}let j=V2(X.payload?.snapshot),Y=X.payload?.session,V=(j?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(J),Error("Hub runtime did not return a session id.");let B;try{B=j?hD(j,$):ID(V,$,Y)}catch(H){throw this.cleanupPlannedSession(J),H}if(V!==J)this.cleanupPlannedSession(J),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:B,manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let J=$.start,W=J?this.resolveCapabilities(J):void 0,X=J?yD(J.localRuntime,W??{}):{manifest:[],handlers:new Map},j,Y;if(J)j=J.config.sessionId?.trim()||CD(),Y=SD(J,j);if(j&&W)this.sessionCapabilities.set(j,W);if(j&&X.handlers.size>0)this.sessionClientContributionHandlers.set(j,X.handlers),this.ensureSessionSubscription(j);let V;try{V=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.config.workspaceRoot?.trim()||J.config.cwd,cwd:J.config.cwd??$.cwd,sessionConfig:x6(Y),metadata:{...J.sessionMetadata??{},source:J.source??L0.CORE,provider:J.config.providerId,model:J.config.modelId,enableTools:J.config.enableTools,enableSpawn:J.config.enableSpawnAgent,enableTeams:J.config.enableAgentTeams,teamName:J.config.teamName,prompt:J.prompt,interactive:J.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...J.localRuntime?.configExtensions?{configExtensions:J.localRuntime.configExtensions}:{}},toolPolicies:x6(J.toolPolicies),...J.initialCompactionState?{initialCompactionState:J.initialCompactionState}:{}}:{}},Z)}catch(U){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw U}if(!V.ok){let U=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(U)}let B=V2(V.payload?.snapshot),H=V.payload?.session,K=(B?.sessionId??H?.sessionId)?.trim();if(Q&&!K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(K&&j&&K!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(K&&W)this.sessionCapabilities.set(K,W);if(K&&X.handlers.size>0)this.sessionClientContributionHandlers.set(K,X.handlers);if(K)this.ensureSessionSubscription(K);let G=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw Error("Hub checkpoint restore returned no checkpoint")}try{return{sessionId:K,startResult:K?{sessionId:K,manifest:B?hD(B,J??{}):ID(K,J??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:F}}catch(U){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw U}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=V2(Z.payload?.snapshot);if(Q){let j=Q.usage?{...Q.usage}:void 0,Y=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return j||Y?{usage:j,aggregateUsage:Y}:void 0}let J=Z.payload?.session,W=kD(J?.usage),X=kD(J?.aggregateUsage);return W||X?{usage:W,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:xD(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(G$(Q))return;throw Q}return Ry(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((W)=>{let X=V2(W);return X?[k7(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(gD)}async listSettings($){let Z=await this.client.command("settings.list",PD($));if(!Z.ok)throw Error(G8(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",PD($));if(!Z.ok)throw Error(G8(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let J=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!J.ok)throw Error(G8(J,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!J.ok)aX(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(G8(J,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:J.error?.code}});return{updated:J.ok&&J.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(G8(Q,"session.compaction.get"));return _1(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw aX(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(G8(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(G8(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((J)=>{this.handleHubEvent(J)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return y0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:fy($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=V2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Q=$.payload?.noticeType,J=$.payload?.displayRole,W=$.payload?.reason,X=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,j=X?.teamRole==="lead"||X?.teamRole==="teammate"?X.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:Z,...j?{teamRole:j}:{},...typeof X?.teamAgentId==="string"?{teamAgentId:X.teamAgentId}:{},event:{type:"notice",...typeof X?.agentId==="string"?{agentId:X.agentId}:{},...typeof X?.conversationId==="string"?{conversationId:X.conversationId}:{},...typeof X?.parentAgentId==="string"?{parentAgentId:X.parentAgentId}:{},noticeType:Q==="recovery"||Q==="stop"?Q:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...J==="system"||J==="status"?{displayRole:J}:{},...typeof W==="string"?{reason:W}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",J=$.payload?.redacted===!0;if(!Q&&!J)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:J}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=Ny($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=V2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=V2($.payload?.snapshot),J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:J}}),Q?.interactive===!0&&_0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{aX(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let J=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!J)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(W);if(!X){await this.client.command("capability.respond",{requestId:J,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${Z}.`},Z).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(J,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:J,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await X({payload:j,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!0,payload:B},Z)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(J)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(Oy($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!J||!W||!X)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=qy($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:Z,toolCallId:W,toolName:X,toolInput:Y});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:X,input:Y,policy:j})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:J,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var mD={};w(mD,{RemoteRuntimeHost:()=>g6});class g6 extends D${constructor($){super({url:j2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var cD={};w(cD,{SqliteSessionStore:()=>x1});import{existsSync as My,mkdirSync as Ey}from"node:fs";import{join as Cy}from"node:path";import{asBool as A9,asOptionalString as I1,asString as h1,ensureSessionSchema as wy,loadSqliteDb as Py,nowIso as I7,toBoolInt as O9}from"@cline/shared/db";import{resolveDbDataDir as Sy}from"@cline/shared/storage";class x1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Sy()}init(){this.getRawDb()}ensureSessionsDir(){if(!My(this.sessionsDirPath))Ey(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return Cy(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=Py(this.sessionDbPath());return wy($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=I7();this.run(`INSERT OR REPLACE INTO sessions (
|
|
535
535
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
536
536
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
537
537
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
538
538
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
539
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,
|
|
539
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,O9($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,O9($.enableTools),O9($.enableSpawn),O9($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,O9($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(I7()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:_0(Z)?null:I7(),exitCode:_0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
540
540
|
provider, model, cwd, workspace_root, team_name,
|
|
541
541
|
enable_tools, enable_spawn, enable_teams,
|
|
542
542
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
543
543
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
544
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:h1(Z.session_id),source:h1(Z.source),pid:Number(Z.pid??0),startedAt:h1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:h1(Z.status),interactive:
|
|
544
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:h1(Z.session_id),source:h1(Z.source),pid:Number(Z.pid??0),startedAt:h1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:h1(Z.status),interactive:A9(Z.interactive),provider:h1(Z.provider),model:h1(Z.model),cwd:h1(Z.cwd),workspaceRoot:h1(Z.workspace_root),teamName:I1(Z.team_name),enableTools:A9(Z.enable_tools),enableSpawn:A9(Z.enable_spawn),enableTeams:A9(Z.enable_teams),parentSessionId:I1(Z.parent_session_id),parentAgentId:I1(Z.parent_agent_id),agentId:I1(Z.agent_id),conversationId:I1(Z.conversation_id),isSubagent:A9(Z.is_subagent),prompt:I1(Z.prompt),metadata:(()=>{let Q=I1(Z.metadata_json);if(!Q)return;try{let J=JSON.parse(Q);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return})(),hookPath:I1(Z.hook_path),messagesPath:I1(Z.messages_path),updatedAt:I1(Z.updated_at)??I7()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let J of Z){let W=this.get(h1(J.session_id));if(W)Q.push(W)}return Q}listChildren($,Z=200){let Q=this.queryAll(`SELECT session_id FROM sessions WHERE parent_session_id = ?
|
|
545
545
|
ORDER BY started_at ASC LIMIT ?`,[$,Z]),J=[];for(let W of Q){let X=this.get(h1(W.session_id));if(X)J.push(X)}return J}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}F8();import{existsSync as Bj,mkdirSync as wk,readFileSync as K_,renameSync as Pk,writeFileSync as Sk}from"node:fs";import{join as G_}from"node:path";import{resolveSessionDataDir as bk}from"@cline/shared/storage";import{dirname as Ek}from"node:path";import{nanoid as Ck}from"nanoid";import{appendFileSync as ry,existsSync as ny,mkdirSync as aD,readFileSync as ay,writeFileSync as oD}from"node:fs";import{readFile as sD,rm as oy}from"node:fs/promises";import{dirname as tD,join as sy}from"node:path";import{ensureHookLogDir as ty}from"@cline/shared/storage";import{randomUUID as uy}from"node:crypto";import{mkdir as dy,open as rD,rename as py,rm as ly}from"node:fs/promises";import{dirname as iD}from"node:path";async function iy($){let Z;try{Z=await rD($,"r"),await Z.sync()}catch{}finally{if(Z!==void 0)try{await Z.close()}catch{}}}async function nD($,Z){await dy(iD($),{recursive:!0});let Q=`${$}.${process.pid}.${uy()}.tmp`,J;try{J=await rD(Q,"wx"),await J.writeFile(Z,"utf8"),await J.sync(),await J.close(),J=void 0,await py(Q,$),await iy(iD($))}catch(W){if(J!==void 0)try{await J.close()}catch{}try{await ly(Q,{force:!0})}catch{}throw W}}function ey($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class sX{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new rW(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){eK(Z,Q,YW($))}writeSessionManifest($,Z){aD(tD($),{recursive:!0}),oD($,`${JSON.stringify(i0.parse(Z),null,2)}
|
|
546
546
|
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let Z=this.artifacts.sessionManifestPath($,!1),Q;try{Q=await sD(Z,"utf8")}catch{return}try{let J=JSON.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))return;let W=J.metadata;if(!W||typeof W!=="object"||Array.isArray(W))return;let X=W.title;return typeof X==="string"?X:void 0}catch{return}}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!ny(Z))return{path:Z};try{return{path:Z,manifest:i0.parse(JSON.parse(ay(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let W=(await this.adapter.getSession($))?.[Z];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,Z,Q){let J=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),W=VW({updatedAt:V0(),context:YW($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(W,null,2)}
|
|
547
547
|
`;if(aD(tD(J),{recursive:!0}),oD(J,X,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:J,contents:X,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}resolveCompactionPath($){let{manifest:Z}=this.readManifestFile($);return Z?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,Z){let Q=this.readManifestFile($);if(!Q.manifest)return;if(Q.manifest.compaction_path===Z)return;this.writeSessionManifest(Q.path,{...Q.manifest,compaction_path:Z})}async readSessionCompactionState($){let Z=this.resolveCompactionPath($);try{return _1(JSON.parse(await sD(Z,"utf8")))}catch(Q){if(ey(Q))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:Z,error:Q,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,Z){let Q=this.resolveCompactionPath($),J=E4.parse(Z);await nD(Q,`${JSON.stringify(J,null,2)}
|
|
548
548
|
`),this.updateCompactionPath($,Q)}async deleteSessionCompactionState($){await oy(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,Z,Q,J,W){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??sy(ty(),"hooks.jsonl");ry(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:J,sessionId:Z,pid:Q,source:W})}
|
|
549
|
-
`,"utf8")}}import{appendFileSync as $k}from"node:fs";import{join as Zk}from"node:path";import{resolveRootSessionId as eD}from"@cline/shared";import{ensureHookLogDir as Qk}from"@cline/shared/storage";import{z as tX}from"zod";var Jk="subagent",Wk=tX.looseObject({task:tX.string().optional(),systemPrompt:tX.string().optional()});class
|
|
550
|
-
`,"utf8")}}import{formatUserInputBlock as Mk}from"@cline/shared";var H_={};w(H_,{toTeamProgressLifecycleEvent:()=>d6,sanitizeTeamName:()=>dK,reviveTeamStateDates:()=>
|
|
549
|
+
`,"utf8")}}import{appendFileSync as $k}from"node:fs";import{join as Zk}from"node:path";import{resolveRootSessionId as eD}from"@cline/shared";import{ensureHookLogDir as Qk}from"@cline/shared/storage";import{z as tX}from"zod";var Jk="subagent",Wk=tX.looseObject({task:tX.string().optional(),systemPrompt:tX.string().optional()});class h7{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,J){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=J}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:Jk,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:V5({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=eD($.sessionContext);if(!Z)return;let Q=Wk.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let J=e8(Z,$.agentId),W=await this.adapter.getSession(J),X=V0(),j=this.manifestStore.artifacts.subagentArtifactPaths(J,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),Y=$.prompt??W?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:J,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:X,...j})),this.manifestStore.initializeMessagesFile(J,j.messagesPath,X),J;return await this.adapter.updateSession({sessionId:J,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??Y??null,metadata:V5({metadata:W.metadata??void 0,prompt:W.prompt??Y??null}),expectedStatusLock:W.statusLock}),J}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=eD($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=e8(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($,X5(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let J=_0(Z)?null:V0(),W=_0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:J,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let J of Q)await this.applySubagentStatusBySessionId(J.sessionId,Z)}async onTeamTaskStart($,Z,Q){let J=await this.adapter.getSession($);if(!J)return;let W=J5($,Z),X=V0(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(W,Z);await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:j})),this.manifestStore.initializeMessagesFile(W,j,X);let Y=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(Y)??[];V.push(W),this.teamTaskSessionsByAgent.set(Y,V)}async onTeamTaskEnd($,Z,Q,J,W,X){let j=this.teamTaskQueueKey($,Z),Y=this.teamTaskSessionsByAgent.get(j);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(j);if(!V)return;let B=W?.messages??X,H=this.toPersistedMessages(B,W,X);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,J){let W=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(W)?.[0];if(!X)return;let j=Q.trim();if(!j)return;let Y=J?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(X)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let J=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(J)await this.manifestStore.persistSessionMessages(Q,J);let W=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Zk(Qk(),"hooks.jsonl");$k(Q,`${JSON.stringify({ts:V0(),...$})}
|
|
550
|
+
`,"utf8")}}import{formatUserInputBlock as Mk}from"@cline/shared";var H_={};w(H_,{toTeamProgressLifecycleEvent:()=>d6,sanitizeTeamName:()=>dK,reviveTeamStateDates:()=>HQ,parseConfiguredAgentConfig:()=>q9,loadConfiguredAgentConfigs:()=>m6,createWorkerReviewerTeam:()=>B_,createSpawnAgentTool:()=>p$,createDelegatedAgentConfigProvider:()=>u$,createDelegatedAgent:()=>d$,createConfiguredAgentTools:()=>c6,createAgentTeamsTools:()=>x2,createAgentTeam:()=>Zj,buildTeamProgressSummary:()=>u6,buildDelegatedAgentConfig:()=>I2,buildConfiguredAgentToolName:()=>z9,buildConfiguredAgentToolDescriptors:()=>T9,bootstrapAgentTeams:()=>t8,AgentTeamsRuntime:()=>U8,AgentTeam:()=>l6});import{existsSync as Xk,readdirSync as jk,readFileSync as Yk}from"node:fs";import{basename as $_,extname as Vk,join as Bk}from"node:path";import{stripUtf8Bom as Hk}from"@cline/shared";import{resolveAgentConfigSearchPaths as Kk}from"@cline/shared/storage";import Q_ from"yaml";import{z as c0}from"zod";var J_=c0.object({name:c0.string().trim().min(1),description:c0.string().trim().min(1),tools:c0.union([c0.string(),c0.array(c0.string())]).optional(),skills:c0.union([c0.string(),c0.array(c0.string())]).optional(),providerId:c0.string().trim().min(1).optional(),modelId:c0.string().trim().min(1).optional(),maxIterations:c0.number().int().positive().optional()});function Gk($){$=Hk($);let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,J=/^---[^\S\r\n]*(?:\r?\n|$)/gm;J.lastIndex=Q;let W,X=Array.from($.matchAll(J)).filter((j)=>j.index>=Q);for(let j of X){let Y=j.index,V=$.slice(Q,Y);try{let B=Q_.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;J_.parse(B);let H=$.slice(Y+j[0].length);W={frontmatter:V,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function Z_($){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 Fk($){return $.trim().toLowerCase()}function Uk($){let Z=Vk($).toLowerCase();return Z===".yml"||Z===".yaml"}function q9($,Z={}){let{frontmatter:Q,body:J}=Gk($),W=Q_.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let X=J_.parse(W),j=J.trim();if(!j)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:Z_(X.tools),skills:Z_(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:j,path:Z.path}}function m6($){let Z=$.searchPaths??Kk($.workspaceRoot),Q=new Map,J=[];for(let X of Z.filter(Boolean)){if(!Xk(X))continue;let j;try{j=jk(X,{withFileTypes:!0})}catch(Y){J.push({path:X,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of j){if(!Y.isFile()||!Uk(Y.name))continue;let V=Bk(X,Y.name);try{let B=Yk(V,"utf8"),H=q9(B,{path:V}),K=Fk(H.name);if(!Q.has(K))Q.set(K,H)}catch(B){J.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((X,j)=>(X.path?$_(X.path):X.name).localeCompare(j.path?$_(j.path):j.name)),errors:J}}import{createTool as Dk,zodToJsonSchema as _k}from"@cline/shared";import{z as W_}from"zod";var eX="subagent_",x7=64,Lk=W_.object({prompt:W_.string().trim().min(1).describe("Task for the subagent to perform")});function Ak($){let Z="",Q=!0;for(let J of $.trim().toLowerCase()){let W=J.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||J==="_")||J==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=J,Q=!1}return Q?Z.slice(0,-1):Z}function Ok($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function z9($){let Z=Ak($)||"agent",Q=Ok($).slice(0,6),J=`${eX}${Z}`;if(J.length<=x7)return J;let W=x7-eX.length-Q.length-1,X=Z.slice(0,Math.max(1,W));return`${eX}${X}_${Q}`.slice(0,x7)}function T9($){let Z=new Set,Q=[];for(let J of[...$].sort((W,X)=>W.name.localeCompare(X.name))){let W=z9(J.name),X=W,j=2;while(Z.has(X)){let Y=`_${j++}`,V=Math.max(1,x7-Y.length);X=`${W.slice(0,V)}${Y}`}Z.add(X),Q.push({toolName:X,config:J})}return Q}function qk($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function c6($){return T9($.agents).map(({toolName:Z,config:Q})=>{return Dk({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:_k(Lk),execute:async(W,X)=>{let j=$.configProvider.getRuntimeConfig(),Y=u$(qk(j,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,W,X):[],B=d$({kind:"subagent",prompt:Q.systemPrompt,configProvider:Y,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),K=B.getConversationId(),G=X.agentId,F={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:K,parentAgentId:G,input:F})}catch{}try{let U=await B.run(W.prompt),_={text:U.text,iterations:U.iterations,finishReason:U.finishReason,usage:{inputTokens:U.usage.inputTokens,outputTokens:U.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:K,parentAgentId:G,input:F,result:_,agentResult:U})}catch{}return _}catch(U){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:K,parentAgentId:G,input:F,error:U instanceof Error?U:Error(String(U))})}catch{}throw U}},timeoutMs:300000,retryable:!1})})}function g1(){return new Date().toISOString()}function X_($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function zk($,Z){let Q=new Set;for(let W of Z)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let J=new Set;for(let W of $){if(W.status==="finalized")continue;for(let X of W.requiredSections)if(!Q.has(`${W.id}:${X}`))J.add(`${W.id}:${X}`)}return[...J].sort((W,X)=>W.localeCompare(X))}function u6($,Z){let Q={idle:0,running:0,stopped:0},J={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let L of Z.members)if(Q[L.status]+=1,L.role==="lead")Y+=1;else V+=1;let B=[],H=[],K=Z.tasks.filter((L)=>L.status==="completed").length,G=new Map(Z.tasks.map((L)=>[L.id,L]));for(let L of Z.tasks){if(J[L.status]+=1,L.status==="blocked"){B.push(L.id);continue}if(L.status!=="pending")continue;if(L.dependsOn.every((D)=>{return G.get(D)?.status==="completed"}))H.push(L.id)}let F=[],U,_=0;for(let L of Z.runs){if(W[L.status]+=1,L.status==="queued"||L.status==="running")F.push(L.id);let O=L.startedAt.getTime();if(O>=_)_=O,U=L.id}for(let L of Z.outcomes)X[L.status]+=1;for(let L of Z.outcomeFragments)j[L.status]+=1;return{teamName:$,updatedAt:g1(),members:{total:Z.members.length,byStatus:Q,leadCount:Y,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:J,blockedTaskIds:B,readyTaskIds:H,completionPct:X_(K,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:W,activeRunIds:F,latestRunId:U},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:X_(X.finalized,Z.outcomes.length),missingRequiredSections:zk(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:j}}}function d6($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:g1(),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:g1(),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:g1(),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:g1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:g1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:g1(),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:g1(),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:g1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:g1()}}import{sanitizeFileName as Tk,TeamMessageType as v}from"@cline/shared";import{nanoid as Nk}from"nanoid";import{TeamMessageType as We}from"@cline/shared";function $j($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function j_($,Z){return $?.status==="stopped"&&$j(Z)}var fk=600000,Y_="recovered_queued";function Rk($){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.
|
|
551
551
|
|
|
552
552
|
${$.message}`}class l6{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,J]of Object.entries($))this.addAgent(Q,J)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(W)=>{Z.onEvent?.(W),this.emitEvent({type:v.AgentEvent,agentId:$,event:W})}},J=new c$(Q);if(Q.onEvent)J.subscribeEvents(Q.onEvent);this.agents.set($,J),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:v.TaskStart,agentId:$,message:Z});try{let J=await Q.run(Z);return this.emitEvent({type:v.TaskEnd,agentId:$,result:J}),J}catch(J){let W=J instanceof Error?J:Error(String(J));throw this.emitEvent({type:v.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),J}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:v.TaskStart,agentId:$,message:Z});try{let J=await Q.continue(Z);return this.emitEvent({type:v.TaskEnd,agentId:$,result:J}),J}catch(J){let W=J instanceof Error?J:Error(String(J));throw this.emitEvent({type:v.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),J}}async runParallel($){let Z=$.map(async(Q)=>{let J=this.agents.get(Q.agentId);if(!J)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:v.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await J.run(Q.message);return this.emitEvent({type:v.TaskEnd,agentId:Q.agentId,result:W}),{agentId:Q.agentId,result:W,metadata:Q.metadata}}catch(W){let X=W instanceof Error?W:Error(String(W));return this.emitEvent({type:v.TaskEnd,agentId:Q.agentId,error:X,messages:J.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let J=this.agents.get(Q.agentId);if(!J){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:v.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await J.run(Q.message);this.emitEvent({type:v.TaskEnd,agentId:Q.agentId,result:W}),Z.push({agentId:Q.agentId,result:W,metadata:Q.metadata})}catch(W){let X=W instanceof Error?W:Error(String(W));this.emitEvent({type:v.TaskEnd,agentId:Q.agentId,error:X,messages:J.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let J=[],W=Z;for(let X of $){let j=this.agents.get(X);if(!j){J.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:v.TaskStart,agentId:X,message:W});try{let Y=await j.run(W);this.emitEvent({type:v.TaskEnd,agentId:X,result:Y}),J.push({agentId:X,result:Y});let V=$.indexOf(X)+1;if(V<$.length){let B=$[V];W=Q?Q(Y,B):`Previous agent output:
|
|
553
553
|
${Y.text}
|
|
@@ -557,11 +557,11 @@ Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y)
|
|
|
557
557
|
${W.text}`);return{workerResult:W,reviewResult:X}},Q}class U8{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_${Tk(Nk(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,J=Z?.markRead??!0,W=Z?.limit,X=this.mailbox.filter((Y)=>Y.toAgentId===$&&(!Q||!Y.readAt)),j=typeof W==="number"&&W>0?X.slice(Math.max(0,X.length-W)):X;if(J){let Y=new Date;for(let V of j)if(!V.readAt)V.readAt=Y}return j.map((Y)=>({...Y}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,p6($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,p6($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,p6($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,p6(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,p6(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,p6(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let J={...Z,apiTimeoutMs:fk,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let Y=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,Y},onEvent:(j)=>{Z.onEvent?.(j),this.emitEvent({type:v.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},W=new c$(J);if(J.onEvent)W.subscribeEvents(J.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:v.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(J){if(!$j(J))throw J}Q.status="stopped",this.emitEvent({type:v.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,J={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,J),this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),{...J}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:v.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let J=this.requireTask($);return J.status="blocked",J.updatedAt=new Date,J.summary=Q,this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...J}}completeTask($,Z,Q){let J=this.requireTask($);if(J.status="completed",J.updatedAt=new Date,J.summary=Q,!J.assignee)J.assignee=Z;return this.emitEvent({type:v.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...J}}async routeToTeammate($,Z,Q){let J=this.members.get($);if(!J||J.role!=="teammate"||!J.agent)throw Error(`Teammate "${$}" was not found`);if(!J.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");J.runningCount++,J.status="running",this.emitEvent({type:v.TaskStart,agentId:$,message:Z});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=W.length>0?`${this.buildMailboxNotification(W)}
|
|
558
558
|
|
|
559
559
|
${Z}`:Z,j=Q?.continueConversation?await J.agent.continue(X):await J.agent.run(X);return this.emitEvent({type:v.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,Q?.taskId,!0),j}catch(W){let X=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:v.TaskEnd,agentId:$,error:X,messages:J.agent.getMessages()}),!j_(J,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(J.runningCount--,J.runningCount<=0&&this.members.get($)?.status!=="stopped")J.status="idle"}}startTeammateRun($,Z,Q){let J=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:J,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(J,W),this.runQueue.push(J),this.emitEvent({type:v.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[J]=this.runQueue.splice(Q,1),W=J?this.runs.get(J):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,J=Date.now();for(let W=0;W<this.runQueue.length;W++){let X=this.runs.get(this.runQueue[W]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>J){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=W}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===Y_;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:v.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let J=Z?Rk($):$.message,W=await this.routeToTeammate($.agentId,J,{taskId:$.taskId,continueConversation:$.continueConversation});if(W.finishReason==="error")throw Error(W.text||"Teammate run failed");$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:v.RunCompleted,run:{...$}})}catch(J){let W=J instanceof Error?J.message:String(J??"Unknown error");$.error=W,$.endedAt=new Date;let X=this.members.get($.agentId);if(j_(X,J))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:v.RunCancelled,run:{...$},reason:W});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:v.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await V_(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await V_($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let J=this.runQueue.indexOf($);if(J>=0)this.runQueue.splice(J,1);return this.emitEvent({type:v.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let J=this.members.get(Q.agentId);if(!J||J.role!=="teammate"||!J.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:v.RunInterrupted,run:{...Q},reason:Q.error});continue}let W=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=W,Q.lastProgressAt=W,Q.lastProgressMessage=$,Q.currentActivity=Y_,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:v.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:v.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,J,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:J,taskId:W,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:v.TeamMessage,message:{...j}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...j}}broadcast($,Z,Q,J){let W=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;W.push(this.sendMessage($,X.agentId,Z,Q,J?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:v.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:v.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:v.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:v.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let J of Z.requiredSections)if(!Q.some((X)=>X.section===J&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${J}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:v.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!$j(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let J of this.runs.values()){if(J.agentId!==$||J.status!=="running")continue;this.recordRunProgress(J,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:v.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let J=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${J}`}recordProgressStep($,Z,Q,J=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let X=this.missionStepCounter-W.lastMissionStep,j=Date.now()-W.lastMissionAt;if(!J&&X<this.missionLogIntervalSteps&&j<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
560
|
-
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function V_($){return new Promise((Z)=>setTimeout(Z,$))}function p6($,Z){let Q=0;for(let J of $){if(!J.startsWith(Z))continue;let W=Number.parseInt(J.slice(Z.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function Qj($,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}),
|
|
560
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function V_($){return new Promise((Z)=>setTimeout(Z,$))}function p6($,Z){let Q=0;for(let J of $){if(!J.startsWith(Z))continue;let W=Number.parseInt(J.slice(Z.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function Qj($,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}),g7($);break}default:break}}async function Jj($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let J=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(J)await Q("onTeamTaskProgress",$,Z.agentId,J,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function Wj($,Z,Q,J){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();J({type:"team_progress",payload:{sessionId:Z,teamName:W,lifecycle:d6({teamName:W,sessionId:Z,event:Q}),summary:u6(W,$.runtime.teamRuntime.exportState())}})}function N9($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function Xj($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&N9($)}function g7($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function jj($){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 Yj($,Z){let Q=Z.map((X)=>{let j=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)j.push(` task=${X.taskId}`);if(typeof X.iterations==="number")j.push(` iterations=${X.iterations}`);if(X.error)j.push(` error=${X.error}`);return j.join("")}),J=$.activeTeamRunIds.size,W=J>0?`There are still ${J} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return f9(`System-delivered teammate async run updates:
|
|
561
561
|
${Q.join(`
|
|
562
562
|
`)}
|
|
563
563
|
|
|
564
|
-
${W}`,$.config.mode)}function
|
|
564
|
+
${W}`,$.config.mode)}function f9($,Z){return Mk($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var Vj=4;class _${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 sX($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new h7($,this.manifestStore,(Q,J,W)=>this.toPersistedMessages(Q,J,W),_$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?DQ(Z.messages,Z,Q):UQ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??V0(),Q=$.sessionId.trim(),J=Q.length>0?Q:`${Date.now()}_${Ck(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(J),X=this.manifestStore.artifacts.sessionCompactionPath(J),j=this.manifestStore.artifacts.sessionManifestPath(J),Y=V5({metadata:$.metadata,prompt:$.prompt}),V={version:1,session_id:J,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:W};return await this.adapter.upsertSession({sessionId:J,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:V.prompt??null,metadata:l$(V.metadata),hookPath:"",messagesPath:W,updatedAt:V0()}),this.manifestStore.initializeMessagesFile(J,W,Z),this.manifestStore.writeSessionManifest(j,V),{manifestPath:j,messagesPath:W,compactionPath:X,manifest:V}}async updateSessionStatus($,Z,Q){let J;if((await ZG(()=>this.adapter.getSession($),async(X)=>{return J=_0(Z)?void 0:V0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:J??null,exitCode:_0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},Vj)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:J}}return{updated:!1}}async updateSession($){for(let Z=0;Z<Vj;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let J=Q.metadata??void 0,W=$.metadata!==void 0?l$($.metadata)??{}:l$(J)??{},X=c2(typeof J?.title==="string"?J.title:void 0),j=$.title!==void 0?c2($.title):X??jW($.prompt);if(j)W.title=j;else delete W.title;let Y=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:Y?Object.keys(W).length>0?W:null:void 0,title:j,expectedStatusLock:Q.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let K=$.metadata!==void 0?l$($.metadata)??{}:l$(H.metadata)??{};if(j)K.title=j;H.metadata=Object.keys(K).length>0?K:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let J=UQ(Z);return this.manifestStore.persistSessionMessages($,J,Q)}async readSessionCompactionState($){return await this.manifestStore.readSessionCompactionState($)}async persistSessionCompactionState($,Z){await this.manifestStore.persistSessionCompactionState($,Z)}async deleteSessionCompactionState($){await this.manifestStore.deleteSessionCompactionState($)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,J,W,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,J,W,X)}onTeamTaskProgress($,Z,Q,J){return this.teamChildren.onTeamTaskProgress($,Z,Q,J)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(_0($.status)===!1||this.isPidAlive($.pid))return $;let Z=V0(),Q=_$.STALE_REASON;for(let J=0;J<Vj;J++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(_0(W.status)===!1)return W;let X={...W.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:W.pid,terminal_marker_source:_$.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:W.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let Y=$G(W,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(V,Y),this.manifestStore.appendStaleSessionHookLog(Z,W.sessionId,W.pid,Q,_$.STALE_SOURCE),{...W,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:j.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);await this.reconcileDeadSessions(Q);let J=(await this.adapter.listSessions({limit:Q})).slice(0,Z),W=await Promise.all(J.map((X)=>this.manifestStore.readSessionManifestTitle(X.sessionId)));return J.map((X,j)=>{let Y=l$(X.metadata??void 0),V=c2(W[j]),B=V?{...Y??{},title:V}:Y;return{...X,metadata:B}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:Z,status:W})))).flat(),J=0;for(let W of Q){let X=await this.reconcileDeadRunningSession(W);if(X&&X.status!==W.status)J++}return J}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let J=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(J.map(async(W)=>{await wW(W.cwd,W.sessionId),P5(W.messagesPath),await this.deleteSessionCompactionStateIfExists(W.sessionId),P5(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await wW(Q.cwd,Z),P5(Q.messagesPath),await this.deleteSessionCompactionStateIfExists(Z),P5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let J=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)J.add(Ek(W));for(let W of J)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function Hj(){return new Date().toISOString()}function F_($,Z){let Q=`${$}.tmp`;Sk(Q,`${JSON.stringify(Z,null,2)}
|
|
565
565
|
`,"utf8"),Pk(Q,$)}class U_{sessionsDirPath;constructor($=bk()){this.sessionsDirPath=$}ensureSessionsDir(){if(!Bj(this.sessionsDirPath))wk(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return G_(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return G_(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!Bj($))return{version:1,sessions:{}};try{let Z=JSON.parse(K_($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){F_(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!Bj($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(K_($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){F_(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let J=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,W={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:J,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:Hj()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return Z.sessions[$.sessionId]=W,this.writeIndex(Z),{updated:!0,statusLock:W.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let W of Object.values(Q.sessions))if(W.parentSessionId===$)delete Q.sessions[W.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:Hj()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),J=Q.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===Z&&!W.consumedAt);if(!J)return;return J.consumedAt=Hj(),this.writeQueue(Q),J.task}}class Kj extends _${constructor($,Z={}){super(new U_($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var L_={};w(L_,{CoreSessionService:()=>v1});import{existsSync as yk,mkdirSync as kk}from"node:fs";import{resolveSessionDataDir as Ik}from"@cline/shared/storage";var Gj=`
|
|
566
566
|
session_id AS sessionId,
|
|
567
567
|
source,
|
|
@@ -610,9 +610,9 @@ ${W}`,$.config.mode)}function f7($,Z){return Mk($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
610
610
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
611
611
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
612
612
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
613
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,V0()])}}function hk($){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
|
|
614
|
-
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let J=this.getFeatureFlag(Q);Z.set(Q,J??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],J=Z??Q??_j[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==J)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return J}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),_j[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??_j[$]}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 _8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}F8();var b_={};w(b_,{createCheckpointComparePlan:()=>mQ,compareCheckpointToWorkspace:()=>w7,buildCheckpointWorkspaceDiff:()=>cQ});import{execFile as ok}from"node:child_process";import*as P_ from"node:fs/promises";import*as n6 from"node:path";import{promisify as sk}from"node:util";var C_={};w(C_,{trimMessagesToCheckpoint:()=>E_,trimMessagesBeforeUserRun:()=>C7,readSessionCheckpointHistory:()=>L8,findCheckpointForRun:()=>r6,createRestoredCheckpointMetadata:()=>E7,createCheckpointRestorePlan:()=>Aj,beginWorktreeRestoreTransaction:()=>Lj,applyCheckpointToWorktree:()=>Oj});import{execFile as ik}from"node:child_process";import{randomUUID as rk}from"node:crypto";import{promisify as nk}from"node:util";var B0=nk(ik);async function R_($,Z){try{return(await B0("git",["-C",$,"rev-parse","--verify","--quiet",Z],{windowsHide:!0})).stdout.trim()||void 0}catch{return}}async function Lj($){if((await B0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);let Q=(await B0("git",["-C",$,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim(),J=await R_($,"refs/stash"),W=rk(),X=`refs/cline/restore-transactions/${W}`;await B0("git",["-C",$,"stash","push","--include-untracked","--message",`cline restore transaction ${W}`],{windowsHide:!0});let j=await R_($,"refs/stash"),Y=j!==void 0&&j!==J;if(Y)try{await B0("git",["-C",$,"update-ref",X,j],{windowsHide:!0}),await B0("git",["-C",$,"stash","drop","stash@{0}"],{windowsHide:!0})}catch(B){try{await B0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),await B0("git",["-C",$,"stash","apply","--index",j],{windowsHide:!0})}catch(H){throw AggregateError([B,H],"Workspace snapshot and rollback both failed")}throw B}let V=!1;return{async commit(){if(V)return;if(V=!0,!Y)return;await B0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0}).catch(()=>{return})},async rollback(){if(V)return;if(await B0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Y)await B0("git",["-C",$,"stash","apply","--index",X],{windowsHide:!0}),await B0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0});V=!0}}}function L8($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((J)=>!!J&&typeof J==="object"&&!Array.isArray(J)).flatMap((J)=>{let W=String(J.ref??"").trim(),X=Number(J.createdAt??0),j=Number(J.runCount??0);if(W.length===0||!Number.isFinite(X)||!Number.isInteger(j)||j<1)return[];let Y=J.kind==="stash"||J.kind==="commit"?J.kind:void 0;return[{ref:W,createdAt:X,runCount:j,...Y?{kind:Y}:{}}]})}function E7($,Z){let Q=L8($).filter((W)=>W.runCount<=Z),J=Q.at(-1);return J?{latest:J,history:Q}:void 0}function r6($,Z){return $.reduce((Q,J)=>{if(J.runCount>Z)return Q;if(!Q||J.runCount>Q.runCount)return J;return Q},void 0)}function M_($,Z){let Q=0;for(let J=0;J<$.length;J+=1){let W=$[J];if(!W)continue;let X=E1(W);if(X<1)continue;let j=Q+1;if(Q+=X,Q===Z)return{index:J,span:X};if(Q>Z)throw Error(`Run ${Z} is folded into a compacted message spanning runs ${j}-${Q}`)}throw Error(`Could not find user message for run ${Z}`)}function E_($,Z){let{index:Q}=M_($,Z);return $.slice(0,Q+1)}function C7($,Z){let{index:Q,span:J}=M_($,Z);if(J!==1)throw Error(`Cannot fork before run ${Z} because it is folded into a compacted message`);return $.slice(0,Q)}function Aj($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=r6(L8($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:J,...$.restoreMessages!==!1?{messages:E_($.messages??[],Z)}:{}}}async function ak($,Z){if(Z.kind)return Z.kind;let Q=await B0("git",["-C",$,"show","-s","--format=%P%x00%B",Z.ref],{windowsHide:!0}),J=Q.stdout.indexOf("\x00"),W=J<0?[]:Q.stdout.slice(0,J).trim().split(/\s+/).filter(Boolean),X=J<0?"":Q.stdout.slice(J+1);return W.length>=2&&bG(X)?"stash":"commit"}async function Oj($,Z){if((await B0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);await B0("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0});let J=await ak($,Z),W=J==="commit"?Z.ref:`${Z.ref}^1`;if(await B0("git",["-C",$,"cat-file","-e",`${W}^{commit}`],{windowsHide:!0}),J==="stash")await B0("git",["-C",$,"cat-file","-e",`${Z.ref}^2^{commit}`],{windowsHide:!0});if(await B0("git",["-C",$,"reset","--hard",W],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J==="commit")return;await B0("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var tk=sk(ok),ek=52428800;async function vQ($,Z){let{stdout:Q}=await tk("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:ek,encoding:"utf8"});return Q}function w_($){return $.split("\x00").filter(Boolean)}function S_($,Z){let Q=n6.resolve($,Z),J=n6.relative($,Q);if(J.startsWith("..")||n6.isAbsolute(J))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function $I($,Z,Q){try{return await vQ($,["show",`${Z}:${Q}`])}catch{return""}}async function ZI($,Z){try{return await P_.readFile(S_($,Z),"utf8")}catch{return""}}async function QI($,Z){await vQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,J]=await Promise.all([vQ($,["diff","--name-only","-z",Z.ref,"--"]),vQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...w_(Q),...w_(J)])].sort((X,j)=>X.localeCompare(j))}function mQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=r6(L8($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:J}}async function cQ($,Z){let Q=await QI($,Z);return(await Promise.all(Q.map(async(W)=>{let[X,j]=await Promise.all([$I($,Z.ref,W),ZI($,W)]);return{filePath:S_($,W),leftContent:X,rightContent:j}}))).filter((W)=>W.leftContent!==W.rightContent)}async function w7($){let Z=mQ($),Q=await cQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}class P7{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,J,W,X,j,Y,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=J,this.capabilities=W,this.logger=X,this.telemetry=j,this.distinctId=Y,this.featureFlags=V,this.settings=EU($),this.pendingPrompts=CU($),this.automation=new nW(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new K7({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:LF(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:AF({host:$,getExtensionContext:()=>eZ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=o0($.distinctId),Q=y0($.capabilities),J={...$,capabilities:Q,distinctId:Z},W=await i6(J),X=_F($.automation),j=$.featureFlags||new D8({provider:new _8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),Y=new P7(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,j,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=PU($),Q=await this.prepare?.(Z);try{let J=Q?await Q.applyToStartSessionInput(Z):Z,W=await this.host.startSession(GX(J,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>eZ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return SU({input:J,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(J){throw await Promise.resolve(Q?.dispose?.()),J}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await NQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);readLiveMessages=($)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages($):this.host.readSessionMessages($);async restore($){let Z=$.start?GX($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>eZ({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 w7({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}var k_={};w(k_,{resolvePluginSkillDirectoriesFromPaths:()=>j$,resolvePluginConfigSearchPaths:()=>D5,resolveAndLoadAgentPlugins:()=>B6,resolveAgentPluginPaths:()=>X$,loadAgentPluginsFromPathsWithDiagnostics:()=>d2,loadAgentPluginsFromPaths:()=>LZ,loadAgentPluginFromPath:()=>F5,discoverPluginModulePaths:()=>_5});var x_={};w(x_,{toHookConfigFileName:()=>O5,runSubprocessEvent:()=>Y$,runHook:()=>o6,resolveHooksConfigSearchPaths:()=>L5,parseHookEventPayload:()=>a6,mergeAgentHooks:()=>r2,listHookConfigFiles:()=>r$,createSubprocessHooks:()=>pQ,createHookConfigFileHooks:()=>z5,createHookConfigFileExtension:()=>F6,createHookAuditHooks:()=>G6,createAgentHooksExtension:()=>H6,HookEventPayloadSchema:()=>dQ,HookEventNameSchema:()=>uQ,HookConfigFileName:()=>K6,HOOK_CONFIG_FILE_EVENT_MAP:()=>A5,HOOKS_CONFIG_DIRECTORY_NAME:()=>NZ});import{HookEventNameSchema as uQ,HookEventPayloadSchema as dQ,parseHookEventPayload as a6,resolveHookSessionContext as JI}from"@cline/shared";import{z as A8}from"zod";var WI=A8.object({contextModification:A8.string().optional(),cancel:A8.boolean().optional(),review:A8.boolean().optional(),errorMessage:A8.string().optional(),context:A8.string().optional(),overrideInput:A8.unknown().optional()}).passthrough();var XI=["agent","hook"];async function o6($,Z={}){let Q=Z.command??XI;return await Y$($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function h_($){return $ instanceof Error?$:Error(String($))}function jI($){if(!$||typeof $!=="object")return;let Z=WI.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let W=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function I_($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J;else Z[Q]=JSON.stringify(J);return Z}function L$($,Z,Q){let J=Q.env??process.env,W=J.CLINE_USER_ID?.trim()||J.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:J.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:JI(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function YI($){return{name:$.name,message:$.message,stack:$.stack}}function VI($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function BI($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function HI($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function KI($){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 GI($){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 O8($,Z){try{let Q=await o6($,{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?.(h_(Q),$)}}function pQ($={}){return{hooks:{beforeRun:async(Y)=>{let V=BI(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...L$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await O8(H,$)}else{let H={...L$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await O8(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...L$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:I_(Y.input)}};try{let H=await o6(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return GI(jI(H?.parsedJson))}catch(H){$.onDispatchError?.(h_(H),B);return}},afterTool:async(Y)=>{let V=KI(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...L$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:I_(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await O8(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let G={...L$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await O8(G,$);return}let H=V.status==="aborted"||VI(V.error?.message)?"agent_abort":"agent_error",K=H==="agent_error"?{...L$(H,B,$),hookName:H,iteration:V.iterations,error:YI(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...L$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await O8(K,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...L$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:HI(Y.message.content),attachments:[]}};await O8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let K={...L$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await O8(K,$)}}}var oL={};w(oL,{writeHubDiscovery:()=>MQ,withHubStartupLock:()=>EQ,verifyHubConnection:()=>y1,truncateNotificationBody:()=>h7,toHubStatusUrl:()=>hX,toHubHealthUrl:()=>CQ,stopLocalHubServerGracefully:()=>nX,startHubWebSocketServer:()=>T8,startHubServer:()=>nL,spawnDetachedHubServerWithRetry:()=>I6,spawnDetachedHubServer:()=>uX,sendHubCommand:()=>l_,restartLocalHubIfIdleAfterStartupTimeout:()=>yQ,resolveWorkspaceHubOwnerContext:()=>GD,resolveSharedHubOwnerContext:()=>a0,resolveProductionHubOwnerContext:()=>B1,resolveHubUrl:()=>fj,resolveHubOwnerContext:()=>F$,resolveHubEndpointOptions:()=>V1,resolveHubBuildId:()=>RQ,resolveDefaultHubPort:()=>k6,resolveDefaultHubPathname:()=>cX,resolveDefaultHubHost:()=>mX,resolveCompatibleLocalHubUrl:()=>_7,resolveClineDir:()=>VD,resolveClineDataDir:()=>Y8,requestHubShutdown:()=>D7,rememberRecoverableLocalHubUrl:()=>X2,readHubDiscovery:()=>R0,readBearerToken:()=>tQ,probeHubServer:()=>U$,probeHubConnection:()=>p_,prewarmDetachedHubServer:()=>PQ,normalizeHubWebSocketUrl:()=>j2,isLocalHubOrigin:()=>ij,isLocalHubHostName:()=>eQ,isHubReconnectableTransportError:()=>iX,isHubCommandTimeoutError:()=>bQ,isDiscoveryFilePresent:()=>HD,ensureHubWebSocketServer:()=>$3,ensureHubServer:()=>aL,ensureDetachedHubServer:()=>AD,ensureCompatibleLocalHubUrl:()=>H8,createLocalHubScheduleRuntimeHandlers:()=>Z3,createInMemoryHubOwnerContext:()=>BD,createHubServerUrl:()=>z1,createHubAuthToken:()=>fQ,createConfiguredTelemetryService:()=>A$,createConfiguredTelemetryHandle:()=>B2,connectToHub:()=>iQ,clearHubDiscovery:()=>n0,NodeHubClient:()=>T1,NativeHubTransportAdapter:()=>m7,HubUIClient:()=>Ej,HubTransportError:()=>m0,HubSessionClient:()=>Mj,HubServerTransport:()=>Q4,HubScheduleService:()=>t6,HubScheduleCommandService:()=>s6,HubCommandError:()=>h6,DEFAULT_HUB_PORT:()=>gX,DEFAULT_HUB_PATHNAME:()=>vX,DEFAULT_HUB_HOST:()=>xX,BrowserWebSocketHubAdapter:()=>v7});import{createSessionId as FI,readHubScheduleMode as g_}from"@cline/shared";function H1($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function v_($,Z,Q){return{version:$.version,requestId:$.requestId??FI("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class s6{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return H1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return H1($,{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 H1($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return H1($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return H1($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return H1($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return H1($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return H1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return H1($,{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 H1($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return H1($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return H1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return v_($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return v_($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=g_($,"yolo"),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Q,mode:Z}}toUpdateInput($){let Z=g_($),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Q,...Z===void 0?{}:{mode:Z}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as m_,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as UI}from"@cline/shared";function lQ($){return $?new Date($).getTime():void 0}function DI($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function S7($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?m_:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:lQ($.nextRunAt),lastRunAt:lQ($.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:DI($)}}function _I($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function qj($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:lQ($.startedAt),endedAt:lQ($.completedAt),status:_I($.status),errorMessage:$.error}}class t6{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new H7({dbPath:$.dbPath}),this.materializer=new W7({store:this.store}),this.runner=new X7({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(this.validateScheduleTiming($.cronPattern,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return S7(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?S7(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>S7(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let J=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,W=Z.enabled??Q.enabled,X=S7(Q);if(this.validateScheduleTiming(Z.cronPattern??X.cronPattern,Z.metadata??X.metadata,W),W&&!J)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...Z,scheduleId:$});return j?S7(j):void 0}validateScheduleTiming($,Z,Q){if($.trim()!==m_){gU($);return}let J=Z?.[UI];if(typeof J!=="number"||!Number.isFinite(J)||Q&&J<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return qj(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),qj(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let X=Z??this.store.getSpec(W.specId);if(!X||X.source!=="hub-schedule")return;return qj(W,X.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,J=0,W=0,X;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!X&&j.status!=="success"&&j.status!=="completed")X=j;if(j.startedAt&&j.endedAt)W+=j.endedAt-j.startedAt,J+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:J>0?W/J/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,J)=>String(Q.nextRunAt).localeCompare(String(J.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:J})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:J}))}}I7();import{resolveClineBuildEnv as vI}from"@cline/shared";function mI($,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 cI="cline-hub-auth.";function uI($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function dI($,Z){let Q=new URL($),J=new URL(Z);return Q.search="",Q.hash="",J.search="",J.hash="",Q.toString()===J.toString()}function d_(){return vI()==="production"?B1():a0()}async function pI($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=d_(),J=await R0(Q.discoveryPath);if(J?.url&&dI($.toString(),J.url))return J.authToken;return}async function fj($={}){let Z=V1($);if(!uI($)){let Q=d_(),J=await R0(Q.discoveryPath);if(J?.url)return J.url}return z1(Z.host,Z.port,Z.pathname)}async function iQ($){return await new Promise((Z,Q)=>{(async()=>{let J=new URL($),W=await pI(J);J.hash="";let X=new WebSocket(J.toString(),W?[`${cI}${W}`]:void 0),j=new Map,Y=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,K)=>{j.set(B,{resolve:H,reject:K});let G={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(G))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=j.get(B.envelope.requestId);if(H)j.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),X.addEventListener("error",(V)=>{Q(mI(V,$))})})().catch(Q)})}async function p_($){try{return(await iQ($)).close(),!0}catch{return!1}}async function l_($,Z){let Q=await fj($),J=await iQ(Q);try{return await J.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{J.close()}}function Rj($){return $?JSON.parse(JSON.stringify($)):{}}function rQ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?Rj(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 i_($,Z){return $.error?.message??`hub command failed: ${Z}`}function lI($){let Z=Rj($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let J=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof J?.message==="string"&&J.message.trim())return{...Z,error:J.message.trim()};return Z}function r_($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function iI($){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 rI($){let Z=Rj($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||r_(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||r_(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:lI($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class Mj{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new T1({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=rQ(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(G$(Q))return;throw Q}return rQ(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(i_(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let J=$.config,W=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.workspaceRoot,cwd:J.cwd,sessionConfig:{providerId:J.provider,modelId:J.model,apiKey:J.apiKey,cwd:J.cwd??J.workspaceRoot,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:J.mode??"act",rules:J.rules,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},metadata:{source:J.source??"cli",provider:J.provider,model:J.model,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,prompt:void 0,interactive:J.interactive!==!1},runtimeOptions:{mode:J.mode,systemPrompt:J.systemPrompt,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,autoApproveTools:J.autoApproveTools,configExtensions:J.configExtensions},modelSelection:{provider:J.provider,model:J.model,apiKey:J.apiKey},toolPolicies:J.toolPolicies}:{}},Z);if(!W.ok)throw Error(i_(W,"session.restore"));let X=rQ(W.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,Y=iI(W.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((J)=>rQ({session:J})).filter((J)=>Boolean(J?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),J=this.client.subscribe((W)=>{let X=rI(W);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),J}streamTeamProgress($,Z){let Q=this.client.subscribe((J)=>{if(J.event!=="team.progress"||!J.payload)return;Z.onProjection?.(J.payload)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class Ej{client;constructor($){this.client=new T1({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{resolveClineBuildEnv as iL}from"@cline/shared";function nI($){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(`
|
|
615
|
-
`).trim()||void 0}var n_=120,Cj="...";function h7($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=n_)return Z;let Q=n_-Buffer.byteLength(Cj,"utf8");if(Q<=0)return Cj;let J="";for(let W of Z){if(Buffer.byteLength(J+W,"utf8")>Q)break;J+=W}return`${J}${Cj}`}async function a_($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await W2(Q)].reverse().find((V)=>V.role==="assistant"),X=W?nI(W.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:h7(X&&X.length>0?X:Y.length>0?Y:j),severity:"info"}}import{captureSdkError as sQ,createSessionId as mh}from"@cline/shared";import{createSessionId as tI}from"@cline/shared";import{createSessionId as sI}from"@cline/shared";function aI($){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 oI($){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 nQ($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:aI($.status),participants:Z?[...Z.participants.values()]:[],metadata:oI($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...J?{aggregateUsage:{...J}}:{}}}function l($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function Z4($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function k0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function q8($,Z,Q){return{version:"v1",event:$,eventId:sI("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function h0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return nQ(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function s0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[J,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return k1({session:Q,messages:J,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function wj($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(J==="creator"&&!X.createdByClientId)X.createdByClientId=Q;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}function o_($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}async function Pj($,Z){let Q=tI("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:J,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},J))})}function Sj($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function bj($,Z,Q){let J=0;for(let[W,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:W,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(W),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},X.sessionId)),J+=1}return J}async function s_($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,j=Sj($,Q,{approved:X,reason:W});if(!j)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:W},j.sessionId)),l(Z,{approvalId:Q,approved:X})}import{createSessionId as Zh}from"@cline/shared";function eI($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var t_={debug:10,info:20,warn:30,error:40,silent:50};function $h(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function a($,Z,Q={}){if(t_[$]<t_[$h()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([W,X])=>[W,eI(X)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function yj($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);a("error",$,{error:Q})}async function e_($,Z,Q,J,W,X){let j=Zh("capreq_"),Y=performance.now();return a("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:W,capabilityName:Q,onProgress:X,resolve:(H)=>{if(a(H.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:W,capabilityName:Q,payload:J},Z)),a("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W})})}function $L($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==J.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(X),l(Z,{requestId:Q})}function H2($,Z,Q){let J=0;for(let[W,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:W,...X}))continue;$.pendingCapabilityRequests.delete(W),a("warn","capability.request.cancelled",{requestId:W,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),J+=1}return J}async function ZL($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",W=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!W)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},j=await $.requestCapability(Q,J,X,W);return l(Z,j)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function QL($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let W=Z.clientId?.trim()||"";if(W!==J.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return a(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,error:j}),J.resolve({ok:Y,payload:X,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,payload:X,error:j},J.sessionId)),l(Z,{requestId:Q,ok:Y})}import{createSessionId as Qh}from"@cline/shared";function JL($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||Qh("client_");return $.clients.set(J,{clientId:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(Z,{clientId:J})}function WL($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return x(Z,"client_not_found","Client is not registered with this hub.");let W=Z4(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),W)J.metadata=JSON.parse(JSON.stringify(W));return l(Z)}function XL($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return l(Z)}function jL($,Z){return l(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as Jh,CONNECTOR_PLATFORMS as Wh,connectorChannelsFromPlatforms as Xh,listConnectorCatalog as jh,mergeConnectorConnectArgs as Yh,shouldIncludeConnectorField as Vh}from"@cline/shared";import{withConnectorStore as Ij}from"@cline/shared/db";q0();function aQ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function VL($){return typeof $==="string"?$.trim():void 0}function YL($){if(!aQ($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function Bh(){return Ij(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function hj(){return{available:Xh(),active:L2(),configured:Bh()}}function Hh($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Kh($,Z){let Q={};for(let W of $.fields)Q[W.flag]=Z[W.flag]??W.initialValue??"";let J={};for(let W of $.fields){if(!Vh(W,Q))continue;Hh(W,Q),J[W.flag]=Q[W.flag]}return J}function Gh($){if(!aQ($))throw Error("connector.configure payload must be an object.");let Z=VL($.channel);if(!Z)throw Error("channel is required");let Q=Wh.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(jh().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let W=YL($.values),X=Kh(Q,W),j=aQ($.security)?$.security:{},Y=j.enabled===!0,V=YL(j.values);if(Y&&Q.security)for(let K of Q.security.fields){let G=V[K.key];if(!G)throw Error(K.requiredMessage);let F=K.validate?.(G);if(F)throw Error(F)}let B=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},H=Jh(Q,X,B);return Ij((K)=>K.upsertConfig({channel:Z,type:Z,values:X,security:B,updateConnectArgs:(G)=>Yh(Q,G.connection.connectArgs,H,{replaceSecurityArgs:G.config?.security?.enabled===!0||B.enabled})})),hj()}function Fh($){if(!aQ($))throw Error("connector.delete_config payload must be an object.");let Z=VL($.channel);if(!Z)throw Error("channel is required");return Ij((Q)=>Q.deleteConfig(Z)),hj()}function Uh($){return $==="connector.configure"||$==="connector.delete_config"}function kj($,Z,Q){if(!Uh(Z.command))return;P8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function BL($,Z){try{if(Z.command==="connector.channels")return l(Z,hj());if(Z.command==="connector.configure"){let Q=Gh(Z.payload);return kj($,Z,!0),l(Z,Q)}if(Z.command==="connector.delete_config"){let Q=Fh(Z.payload);return kj($,Z,!0),l(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return kj($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Dh=30000;function _h($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Lh($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Ah($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,J8,J)}function Oh($){return $?$:void 0}function qh($){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 zh($,Z,Q,J){let W=performance.now(),X=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},Y=setInterval(()=>{if(X)return;let H=Math.round(performance.now()-W);a("warn","run.heartbeat",{...j,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...J?{timeoutMs:J}:{}},Q.sessionId))},Dh),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;a("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!X)return;a("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-W),error:H})});let B;try{if(!J)return await V;return await Promise.race([V,new Promise((H,K)=>{B=setTimeout(()=>{let G=`Hub run ${Z.command} timed out after ${J}ms.`;X=!0,clearInterval(Y),K(Error(G)),a("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-W)}),bj($,(F)=>F.sessionId===Q.sessionId,G),H2($,(F)=>F.sessionId===Q.sessionId,G),$.sessionHost.abort(Q.sessionId,G).catch((F)=>{a("error","run.timeout_abort_failed",{...j,error:F})})},J)})])}finally{if(X=!0,clearInterval(Y),B)clearTimeout(B)}}async function HL($,Z){let Q=k0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!W.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,j=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,Y=qh(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await zh($,Z,{sessionId:Q,prompt:W,mode:Oh(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:j,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(G$(H))return Ah(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await s0($,Q),K=Lh(V);if($.publish($.buildEvent(_h(V.finishReason),{reason:V.finishReason,...K?{error:K}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await s0($,Q);return l(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function KL($,Z){let Q=k0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";bj($,(W)=>W.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(W){a("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:W})}finally{H2($,(W)=>W.sessionId===Q,J)}return l(Z,{applied:!0})}async function GL($,Z){let Q=a6(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(Z,{applied:!0})}async function FL($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Th($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,J]=await Promise.all([h0($,Z.payload.sessionId),s0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...J?{snapshot:J}:{}},Z.payload.sessionId));return}case"ended":await Nh($,Z);return;default:return}}async function Th($,Z){let{sessionId:Q,event:J}=Z.payload;if(J.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:J.iteration},Q));return}if(J.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:J.iteration,hadToolCalls:J.hadToolCalls,toolCallCount:J.toolCallCount},Q));return}if(J.type==="content_start"){if(J.contentType==="text"&&typeof J.text==="string"&&J.text.length>0){$.publish($.buildEvent("assistant.delta",{text:J.text},Q));return}if(J.contentType==="reasoning"){if(J.redacted&&!J.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof J.reasoning==="string"&&J.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:J.reasoning,redacted:J.redacted===!0},Q));return}if(J.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:J.toolCallId,toolName:J.toolName,input:J.input},Q));return}}if(J.type==="content_end"){switch(J.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:J.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:J.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:J.toolCallId,toolName:J.toolName,output:J.output,error:J.error},Q));break}return}if(J.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:J.message,noticeType:J.noticeType,...J.displayRole?{displayRole:J.displayRole}:{},...J.reason?{reason:J.reason}:{},...J.metadata?{metadata:J.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:J.inputTokens,outputTokens:J.outputTokens,cacheReadTokens:J.cacheReadTokens??0,cacheWriteTokens:J.cacheWriteTokens??0,totalCost:J.cost??0},totals:{inputTokens:J.totalInputTokens,outputTokens:J.totalOutputTokens,cacheReadTokens:J.totalCacheReadTokens??0,cacheWriteTokens:J.totalCacheWriteTokens??0,totalCost:J.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="done")$.publish($.buildEvent("agent.done",{reason:J.reason,text:J.text,iterations:J.iterations,usage:J.usage},Q))}async function Nh($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),J=Q===Z.payload.reason||Q==="run.start.reply";if(J)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[W,X]=await Promise.all([h0($,Z.payload.sessionId),s0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await a_(W);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(J)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as AL,parseRuntimeConfigExtensions as OL,ReasoningEffortSchema as Ih}from"@cline/shared";var UL={};w(UL,{SessionVersioningService:()=>K2,SessionVersioningError:()=>u0});class u0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function fh($){let Z=$.sessionId.trim();if(!Z)throw new u0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new u0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new u0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new u0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class K2{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,J=fh({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(J);if(!W)throw new u0("session_not_found",`Session ${J} not found`);let X=Z?await $.readMessages(J):void 0;if(Z&&X?.length===0)throw new u0("session_messages_not_found",`No messages found for session ${J}`);let j=Aj({session:W,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z}),Y=k1({session:W,messages:X}),V,B=[],H,K;if(Z){let{startSession:O,getStartedSessionId:D,cleanupStartedSession:q}=$;if(!$.start||!O||!D||!q)throw new u0("invalid_restore","startSession, getStartedSessionId, and cleanupStartedSession are required when restore.messages is true");K={startSession:O,getStartedSessionId:D,cleanupStartedSession:q},V=E7(W,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?C7(X??[],$.checkpointRunCount):j.messages??[];let T={sourceSession:W,sourceMessages:X,sourceSnapshot:Y,plan:j,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};H=$.buildStartInput?await $.buildStartInput(T,$.start):$.start}let G=$.applyWorkspaceCheckpoint??Oj,F=$.beginWorkspaceRestoreTransaction??($.applyWorkspaceCheckpoint?void 0:Lj),U=Q&&F?await F(j.cwd):void 0,_=!1,L;try{if(Q)await G(j.cwd,j.checkpoint);if(!K)return await U?.commit(),_=!0,{checkpoint:j.checkpoint,sourceSnapshot:Y};let O=await K.startSession(H);L={result:O,cleanup:K.cleanupStartedSession};let D=K.getStartedSessionId(O);if(!D)throw new u0("invalid_restore","Restored session did not return a session id");await($.retainCheckpointRefs??yG)(j.cwd,D,V?.history??[]);let q=$.readRestoredSession?await $.readRestoredSession(D):void 0,T=q?k1({session:q,messages:B}):void 0;return await U?.commit(),_=!0,{sessionId:D,startResult:O,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:Y,...T?{restoredSnapshot:T}:{}}}catch(O){let D=[];if(L)try{await L.cleanup(L.result)}catch(q){D.push(q)}if(U&&!_)try{await U.rollback()}catch(q){D.push(q)}if(D.length>0)throw AggregateError([O,...D],"Checkpoint restore failed and recovery did not complete");throw O}}}import{HUB_CHECKPOINT_CAPABILITY as J$0,HUB_COMPACTION_CAPABILITY as W$0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as X$0,HUB_HOOK_CAPABILITY_PREFIX as j$0,HUB_MISTAKE_LIMIT_CAPABILITY as Y$0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as V$0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as B$0,isHubToolExecutorName as Rh}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as U$0,HUB_COMPACTION_CAPABILITY as D$0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as _$0,HUB_HOOK_CAPABILITY_PREFIX as L$0,HUB_MISTAKE_LIMIT_CAPABILITY as A$0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as O$0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as q$0}from"@cline/shared";var Mh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function z8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Eh($,Z){let Q=typeof $.name==="string"?$.name.trim():"",J=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=z8($.inputSchema);if(!Q||!J||!X||!W||Z.has(W))return;return Z.add(W),{kind:"tool",capabilityName:W,name:Q,description:J,inputSchema:X,...z8($.lifecycle)?{lifecycle:z8($.lifecycle)}:{}}}function gj($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let J of $){if(!J||typeof J!=="object"||Array.isArray(J))continue;let W=J,X=W.kind,j=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!j||Q.has(j))continue;if(X==="tool"){let Y=Eh(W,Q);if(Y)Z.push(Y);continue}if(X==="toolExecutor"){let Y=W.executor;if(!Rh(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(X==="hook"){let Y=typeof W.name==="string"?W.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(X==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...z8(W.config)?{config:z8(W.config)}:{}});continue}if(X==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...z8(W.config)?{config:z8(W.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(X==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function _L($){let Z=$.metadata?{...$.metadata}:void 0;return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function Ch($){return Object.hasOwn($,"update")?$.update:$}function x7($){return $.trim().replace(/^\/+/,"").toLowerCase()}function wh($){let Z=($??[]).map(x7).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Ph($,Z,Q){if(!Q)return!0;let J=x7($),W=x7(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function xj($,Z){let Q=wh(Z);return $.records.skill.map((J)=>({id:J.id,name:J.item.name,description:"description"in J.item&&typeof J.item.description==="string"?J.item.description:void 0,disabled:J.item.disabled===!0,skill:J.item})).filter((J)=>Ph(J.id,J.name,Q))}function DL($,Z){let Q=async(J,W)=>{let X=x7(J),Y=xj($,Z).filter((G)=>G.id===X||x7(G.name)===X||G.id.endsWith(`:${X}`)).filter((G)=>!G.disabled);if(Y.length!==1)return Y.length>1?`Skill "${J}" is ambiguous. Use one of: ${Y.map((G)=>G.id).join(", ")}`:`Skill "${J}" not found.`;let V=Y[0].skill,B=W?.trim(),H=B?`
|
|
613
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,V0()])}}function hk($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var R9,M9;function xk($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;P7(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function gk($){await $.reconcileDeadSessions?.().catch(()=>{})}function q_($){try{let Z=new x1;return Z.init(),new v1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),O_($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new Kj(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function A_($,Z,Q){return new m1({sessionService:Q??$.sessionService??q_($),capabilities:$.capabilities,logger:$.logger,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function Dj($){if(R9)return R9;if(M9)return await M9;return M9=(async()=>{return R9=q_($),await gk(R9),R9})().finally(()=>{M9=void 0}),await M9}async function i6($){let Z=o0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=hk($);if(xk(Q,$),Q==="remote"){let J=$.remote?.endpoint?.trim();if(!J)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:J}),new g6({endpoint:J,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let J=$.hub?.endpoint?.trim(),W=J||await H8({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!W)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:W,explicitEndpoint:J||void 0}),new D$({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let J=await _9({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(J){$.logger?.log("Using discovered local hub runtime host",{url:J});let W=new D$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await W.connect(),W}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),O_($.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"}),A_($,Z)}return A_($,Z)}var f_={};w(f_,{NoOpFeatureFlagsProvider:()=>_8,FeatureFlagsService:()=>D8});import{existsSync as vk,mkdirSync as mk,readFileSync as ck,writeFileSync as uk}from"node:fs";import{dirname as dk}from"node:path";import{FEATURE_FLAGS as T_,FeatureFlagDefaultValue as _j}from"@cline/shared";var pk=3600000,lk=604800000,N_=1;class D8{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??pk,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??lk,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let J=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:T_.length>0?T_:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=J.updateTime?J:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:W}),W}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,J])=>this.isFeatureFlagPayload(J));if(Z.length===0)return;let Q={};for(let[J,W]of Z)Q[J]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!vk(this.cacheFilePath))return;let $=JSON.parse(ck(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==N_||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;mk(dk(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:N_,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};uk(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
614
|
+
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let J=this.getFeatureFlag(Q);Z.set(Q,J??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],J=Z??Q??_j[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==J)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return J}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),_j[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??_j[$]}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 _8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}F8();var b_={};w(b_,{createCheckpointComparePlan:()=>m7,compareCheckpointToWorkspace:()=>w9,buildCheckpointWorkspaceDiff:()=>c7});import{execFile as ok}from"node:child_process";import*as P_ from"node:fs/promises";import*as n6 from"node:path";import{promisify as sk}from"node:util";var C_={};w(C_,{trimMessagesToCheckpoint:()=>E_,trimMessagesBeforeUserRun:()=>C9,readSessionCheckpointHistory:()=>L8,findCheckpointForRun:()=>r6,createRestoredCheckpointMetadata:()=>E9,createCheckpointRestorePlan:()=>Aj,beginWorktreeRestoreTransaction:()=>Lj,applyCheckpointToWorktree:()=>Oj});import{execFile as ik}from"node:child_process";import{randomUUID as rk}from"node:crypto";import{promisify as nk}from"node:util";var B0=nk(ik);async function R_($,Z){try{return(await B0("git",["-C",$,"rev-parse","--verify","--quiet",Z],{windowsHide:!0})).stdout.trim()||void 0}catch{return}}async function Lj($){if((await B0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);let Q=(await B0("git",["-C",$,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim(),J=await R_($,"refs/stash"),W=rk(),X=`refs/cline/restore-transactions/${W}`;await B0("git",["-C",$,"stash","push","--include-untracked","--message",`cline restore transaction ${W}`],{windowsHide:!0});let j=await R_($,"refs/stash"),Y=j!==void 0&&j!==J;if(Y)try{await B0("git",["-C",$,"update-ref",X,j],{windowsHide:!0}),await B0("git",["-C",$,"stash","drop","stash@{0}"],{windowsHide:!0})}catch(B){try{await B0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),await B0("git",["-C",$,"stash","apply","--index",j],{windowsHide:!0})}catch(H){throw AggregateError([B,H],"Workspace snapshot and rollback both failed")}throw B}let V=!1;return{async commit(){if(V)return;if(V=!0,!Y)return;await B0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0}).catch(()=>{return})},async rollback(){if(V)return;if(await B0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Y)await B0("git",["-C",$,"stash","apply","--index",X],{windowsHide:!0}),await B0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0});V=!0}}}function L8($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((J)=>!!J&&typeof J==="object"&&!Array.isArray(J)).flatMap((J)=>{let W=String(J.ref??"").trim(),X=Number(J.createdAt??0),j=Number(J.runCount??0);if(W.length===0||!Number.isFinite(X)||!Number.isInteger(j)||j<1)return[];let Y=J.kind==="stash"||J.kind==="commit"?J.kind:void 0;return[{ref:W,createdAt:X,runCount:j,...Y?{kind:Y}:{}}]})}function E9($,Z){let Q=L8($).filter((W)=>W.runCount<=Z),J=Q.at(-1);return J?{latest:J,history:Q}:void 0}function r6($,Z){return $.reduce((Q,J)=>{if(J.runCount>Z)return Q;if(!Q||J.runCount>Q.runCount)return J;return Q},void 0)}function M_($,Z){let Q=0;for(let J=0;J<$.length;J+=1){let W=$[J];if(!W)continue;let X=E1(W);if(X<1)continue;let j=Q+1;if(Q+=X,Q===Z)return{index:J,span:X};if(Q>Z)throw Error(`Run ${Z} is folded into a compacted message spanning runs ${j}-${Q}`)}throw Error(`Could not find user message for run ${Z}`)}function E_($,Z){let{index:Q}=M_($,Z);return $.slice(0,Q+1)}function C9($,Z){let{index:Q,span:J}=M_($,Z);if(J!==1)throw Error(`Cannot fork before run ${Z} because it is folded into a compacted message`);return $.slice(0,Q)}function Aj($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=r6(L8($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:J,...$.restoreMessages!==!1?{messages:E_($.messages??[],Z)}:{}}}async function ak($,Z){if(Z.kind)return Z.kind;let Q=await B0("git",["-C",$,"show","-s","--format=%P%x00%B",Z.ref],{windowsHide:!0}),J=Q.stdout.indexOf("\x00"),W=J<0?[]:Q.stdout.slice(0,J).trim().split(/\s+/).filter(Boolean),X=J<0?"":Q.stdout.slice(J+1);return W.length>=2&&bG(X)?"stash":"commit"}async function Oj($,Z){if((await B0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);await B0("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0});let J=await ak($,Z),W=J==="commit"?Z.ref:`${Z.ref}^1`;if(await B0("git",["-C",$,"cat-file","-e",`${W}^{commit}`],{windowsHide:!0}),J==="stash")await B0("git",["-C",$,"cat-file","-e",`${Z.ref}^2^{commit}`],{windowsHide:!0});if(await B0("git",["-C",$,"reset","--hard",W],{windowsHide:!0}),await B0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J==="commit")return;await B0("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var tk=sk(ok),ek=52428800;async function v7($,Z){let{stdout:Q}=await tk("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:ek,encoding:"utf8"});return Q}function w_($){return $.split("\x00").filter(Boolean)}function S_($,Z){let Q=n6.resolve($,Z),J=n6.relative($,Q);if(J.startsWith("..")||n6.isAbsolute(J))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function $I($,Z,Q){try{return await v7($,["show",`${Z}:${Q}`])}catch{return""}}async function ZI($,Z){try{return await P_.readFile(S_($,Z),"utf8")}catch{return""}}async function QI($,Z){await v7($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,J]=await Promise.all([v7($,["diff","--name-only","-z",Z.ref,"--"]),v7($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...w_(Q),...w_(J)])].sort((X,j)=>X.localeCompare(j))}function m7($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=r6(L8($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:J}}async function c7($,Z){let Q=await QI($,Z);return(await Promise.all(Q.map(async(W)=>{let[X,j]=await Promise.all([$I($,Z.ref,W),ZI($,W)]);return{filePath:S_($,W),leftContent:X,rightContent:j}}))).filter((W)=>W.leftContent!==W.rightContent)}async function w9($){let Z=m7($),Q=await c7(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}class P9{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,J,W,X,j,Y,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=J,this.capabilities=W,this.logger=X,this.telemetry=j,this.distinctId=Y,this.featureFlags=V,this.settings=EU($),this.pendingPrompts=CU($),this.automation=new nW(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new K9({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:LF(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:AF({host:$,getExtensionContext:()=>eQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=o0($.distinctId),Q=y0($.capabilities),J={...$,capabilities:Q,distinctId:Z},W=await i6(J),X=_F($.automation),j=$.featureFlags||new D8({provider:new _8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),Y=new P9(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,j,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=PU($),Q=await this.prepare?.(Z);try{let J=Q?await Q.applyToStartSessionInput(Z):Z,W=await this.host.startSession(GX(J,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>eQ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return SU({input:J,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(J){throw await Promise.resolve(Q?.dispose?.()),J}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await N7(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);readLiveMessages=($)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages($):this.host.readSessionMessages($);async restore($){let Z=$.start?GX($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>eQ({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return w9({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}var k_={};w(k_,{resolvePluginSkillDirectoriesFromPaths:()=>j$,resolvePluginConfigSearchPaths:()=>D5,resolveAndLoadAgentPlugins:()=>B6,resolveAgentPluginPaths:()=>X$,loadAgentPluginsFromPathsWithDiagnostics:()=>d2,loadAgentPluginsFromPaths:()=>LQ,loadAgentPluginFromPath:()=>F5,discoverPluginModulePaths:()=>_5});var x_={};w(x_,{toHookConfigFileName:()=>O5,runSubprocessEvent:()=>Y$,runHook:()=>o6,resolveHooksConfigSearchPaths:()=>L5,parseHookEventPayload:()=>a6,mergeAgentHooks:()=>r2,listHookConfigFiles:()=>r$,createSubprocessHooks:()=>p7,createHookConfigFileHooks:()=>z5,createHookConfigFileExtension:()=>F6,createHookAuditHooks:()=>G6,createAgentHooksExtension:()=>H6,HookEventPayloadSchema:()=>d7,HookEventNameSchema:()=>u7,HookConfigFileName:()=>K6,HOOK_CONFIG_FILE_EVENT_MAP:()=>A5,HOOKS_CONFIG_DIRECTORY_NAME:()=>NQ});import{HookEventNameSchema as u7,HookEventPayloadSchema as d7,parseHookEventPayload as a6,resolveHookSessionContext as JI}from"@cline/shared";import{z as A8}from"zod";var WI=A8.object({contextModification:A8.string().optional(),cancel:A8.boolean().optional(),review:A8.boolean().optional(),errorMessage:A8.string().optional(),context:A8.string().optional(),overrideInput:A8.unknown().optional()}).passthrough();var XI=["agent","hook"];async function o6($,Z={}){let Q=Z.command??XI;return await Y$($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function h_($){return $ instanceof Error?$:Error(String($))}function jI($){if(!$||typeof $!=="object")return;let Z=WI.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let W=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function I_($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J;else Z[Q]=JSON.stringify(J);return Z}function L$($,Z,Q){let J=Q.env??process.env,W=J.CLINE_USER_ID?.trim()||J.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:J.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:JI(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function YI($){return{name:$.name,message:$.message,stack:$.stack}}function VI($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function BI($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function HI($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function KI($){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 GI($){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 O8($,Z){try{let Q=await o6($,{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?.(h_(Q),$)}}function p7($={}){return{hooks:{beforeRun:async(Y)=>{let V=BI(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...L$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await O8(H,$)}else{let H={...L$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await O8(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...L$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:I_(Y.input)}};try{let H=await o6(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return GI(jI(H?.parsedJson))}catch(H){$.onDispatchError?.(h_(H),B);return}},afterTool:async(Y)=>{let V=KI(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...L$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:I_(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await O8(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let G={...L$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await O8(G,$);return}let H=V.status==="aborted"||VI(V.error?.message)?"agent_abort":"agent_error",K=H==="agent_error"?{...L$(H,B,$),hookName:H,iteration:V.iterations,error:YI(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...L$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await O8(K,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...L$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:HI(Y.message.content),attachments:[]}};await O8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let K={...L$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await O8(K,$)}}}var oL={};w(oL,{writeHubDiscovery:()=>M7,withHubStartupLock:()=>E7,verifyHubConnection:()=>y1,truncateNotificationBody:()=>h9,toHubStatusUrl:()=>hX,toHubHealthUrl:()=>C7,stopLocalHubServerGracefully:()=>nX,startHubWebSocketServer:()=>T8,startHubServer:()=>nL,spawnDetachedHubServerWithRetry:()=>I6,spawnDetachedHubServer:()=>uX,sendHubCommand:()=>l_,restartLocalHubIfIdleAfterStartupTimeout:()=>y7,resolveWorkspaceHubOwnerContext:()=>GD,resolveSharedHubOwnerContext:()=>a0,resolveProductionHubOwnerContext:()=>B1,resolveHubUrl:()=>fj,resolveHubOwnerContext:()=>F$,resolveHubEndpointOptions:()=>V1,resolveHubBuildId:()=>R7,resolveDefaultHubPort:()=>k6,resolveDefaultHubPathname:()=>cX,resolveDefaultHubHost:()=>mX,resolveCompatibleLocalHubUrl:()=>_9,resolveClineDir:()=>VD,resolveClineDataDir:()=>Y8,requestHubShutdown:()=>D9,rememberRecoverableLocalHubUrl:()=>X2,readHubDiscovery:()=>R0,readBearerToken:()=>t7,probeHubServer:()=>U$,probeHubConnection:()=>p_,prewarmDetachedHubServer:()=>P7,normalizeHubWebSocketUrl:()=>j2,isLocalHubOrigin:()=>ij,isLocalHubHostName:()=>e7,isHubReconnectableTransportError:()=>iX,isHubCommandTimeoutError:()=>b7,isDiscoveryFilePresent:()=>HD,ensureHubWebSocketServer:()=>$3,ensureHubServer:()=>aL,ensureDetachedHubServer:()=>AD,ensureCompatibleLocalHubUrl:()=>H8,createLocalHubScheduleRuntimeHandlers:()=>Z3,createInMemoryHubOwnerContext:()=>BD,createHubServerUrl:()=>z1,createHubAuthToken:()=>f7,createConfiguredTelemetryService:()=>A$,createConfiguredTelemetryHandle:()=>B2,connectToHub:()=>i7,clearHubDiscovery:()=>n0,NodeHubClient:()=>T1,NativeHubTransportAdapter:()=>m9,HubUIClient:()=>Ej,HubTransportError:()=>m0,HubSessionClient:()=>Mj,HubServerTransport:()=>Q4,HubScheduleService:()=>t6,HubScheduleCommandService:()=>s6,HubCommandError:()=>h6,DEFAULT_HUB_PORT:()=>gX,DEFAULT_HUB_PATHNAME:()=>vX,DEFAULT_HUB_HOST:()=>xX,BrowserWebSocketHubAdapter:()=>v9});import{createSessionId as FI,readHubScheduleMode as g_}from"@cline/shared";function H1($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function v_($,Z,Q){return{version:$.version,requestId:$.requestId??FI("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class s6{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return H1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return H1($,{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 H1($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return H1($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return H1($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return H1($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return H1($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return H1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return H1($,{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 H1($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return H1($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return H1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return v_($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return v_($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=g_($,"yolo"),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Q,mode:Z}}toUpdateInput($){let Z=g_($),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Q,...Z===void 0?{}:{mode:Z}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as m_,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as UI}from"@cline/shared";function l7($){return $?new Date($).getTime():void 0}function DI($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function S9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?m_:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:l7($.nextRunAt),lastRunAt:l7($.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:DI($)}}function _I($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function qj($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:l7($.startedAt),endedAt:l7($.completedAt),status:_I($.status),errorMessage:$.error}}class t6{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new H9({dbPath:$.dbPath}),this.materializer=new W9({store:this.store}),this.runner=new X9({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(this.validateScheduleTiming($.cronPattern,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return S9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?S9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>S9(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let J=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,W=Z.enabled??Q.enabled,X=S9(Q);if(this.validateScheduleTiming(Z.cronPattern??X.cronPattern,Z.metadata??X.metadata,W),W&&!J)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...Z,scheduleId:$});return j?S9(j):void 0}validateScheduleTiming($,Z,Q){if($.trim()!==m_){gU($);return}let J=Z?.[UI];if(typeof J!=="number"||!Number.isFinite(J)||Q&&J<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return qj(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),qj(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let X=Z??this.store.getSpec(W.specId);if(!X||X.source!=="hub-schedule")return;return qj(W,X.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,J=0,W=0,X;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!X&&j.status!=="success"&&j.status!=="completed")X=j;if(j.startedAt&&j.endedAt)W+=j.endedAt-j.startedAt,J+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:J>0?W/J/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,J)=>String(Q.nextRunAt).localeCompare(String(J.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:J})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:J}))}}I9();import{resolveClineBuildEnv as vI}from"@cline/shared";function mI($,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 cI="cline-hub-auth.";function uI($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function dI($,Z){let Q=new URL($),J=new URL(Z);return Q.search="",Q.hash="",J.search="",J.hash="",Q.toString()===J.toString()}function d_(){return vI()==="production"?B1():a0()}async function pI($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=d_(),J=await R0(Q.discoveryPath);if(J?.url&&dI($.toString(),J.url))return J.authToken;return}async function fj($={}){let Z=V1($);if(!uI($)){let Q=d_(),J=await R0(Q.discoveryPath);if(J?.url)return J.url}return z1(Z.host,Z.port,Z.pathname)}async function i7($){return await new Promise((Z,Q)=>{(async()=>{let J=new URL($),W=await pI(J);J.hash="";let X=new WebSocket(J.toString(),W?[`${cI}${W}`]:void 0),j=new Map,Y=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,K)=>{j.set(B,{resolve:H,reject:K});let G={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(G))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=j.get(B.envelope.requestId);if(H)j.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),X.addEventListener("error",(V)=>{Q(mI(V,$))})})().catch(Q)})}async function p_($){try{return(await i7($)).close(),!0}catch{return!1}}async function l_($,Z){let Q=await fj($),J=await i7(Q);try{return await J.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{J.close()}}function Rj($){return $?JSON.parse(JSON.stringify($)):{}}function r7($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?Rj(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 i_($,Z){return $.error?.message??`hub command failed: ${Z}`}function lI($){let Z=Rj($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let J=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof J?.message==="string"&&J.message.trim())return{...Z,error:J.message.trim()};return Z}function r_($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function iI($){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 rI($){let Z=Rj($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||r_(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||r_(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:lI($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class Mj{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new T1({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=r7(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(G$(Q))return;throw Q}return r7(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(i_(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let J=$.config,W=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.workspaceRoot,cwd:J.cwd,sessionConfig:{providerId:J.provider,modelId:J.model,apiKey:J.apiKey,cwd:J.cwd??J.workspaceRoot,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:J.mode??"act",rules:J.rules,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},metadata:{source:J.source??"cli",provider:J.provider,model:J.model,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,prompt:void 0,interactive:J.interactive!==!1},runtimeOptions:{mode:J.mode,systemPrompt:J.systemPrompt,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,autoApproveTools:J.autoApproveTools,configExtensions:J.configExtensions},modelSelection:{provider:J.provider,model:J.model,apiKey:J.apiKey},toolPolicies:J.toolPolicies}:{}},Z);if(!W.ok)throw Error(i_(W,"session.restore"));let X=r7(W.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,Y=iI(W.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((J)=>r7({session:J})).filter((J)=>Boolean(J?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),J=this.client.subscribe((W)=>{let X=rI(W);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),J}streamTeamProgress($,Z){let Q=this.client.subscribe((J)=>{if(J.event!=="team.progress"||!J.payload)return;Z.onProjection?.(J.payload)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class Ej{client;constructor($){this.client=new T1({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{resolveClineBuildEnv as iL}from"@cline/shared";function nI($){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(`
|
|
615
|
+
`).trim()||void 0}var n_=120,Cj="...";function h9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=n_)return Z;let Q=n_-Buffer.byteLength(Cj,"utf8");if(Q<=0)return Cj;let J="";for(let W of Z){if(Buffer.byteLength(J+W,"utf8")>Q)break;J+=W}return`${J}${Cj}`}async function a_($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await W2(Q)].reverse().find((V)=>V.role==="assistant"),X=W?nI(W.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:h9(X&&X.length>0?X:Y.length>0?Y:j),severity:"info"}}import{captureSdkError as s7,createSessionId as mh}from"@cline/shared";import{createSessionId as tI}from"@cline/shared";import{createSessionId as sI}from"@cline/shared";function aI($){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 oI($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function n7($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:aI($.status),participants:Z?[...Z.participants.values()]:[],metadata:oI($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...J?{aggregateUsage:{...J}}:{}}}function l($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function Z4($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function k0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function q8($,Z,Q){return{version:"v1",event:$,eventId:sI("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function h0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return n7(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function s0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[J,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return k1({session:Q,messages:J,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function wj($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(J==="creator"&&!X.createdByClientId)X.createdByClientId=Q;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}function o_($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}async function Pj($,Z){let Q=tI("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:J,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},J))})}function Sj($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function bj($,Z,Q){let J=0;for(let[W,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:W,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(W),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},X.sessionId)),J+=1}return J}async function s_($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,j=Sj($,Q,{approved:X,reason:W});if(!j)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:W},j.sessionId)),l(Z,{approvalId:Q,approved:X})}import{createSessionId as Zh}from"@cline/shared";function eI($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var t_={debug:10,info:20,warn:30,error:40,silent:50};function $h(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function a($,Z,Q={}){if(t_[$]<t_[$h()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([W,X])=>[W,eI(X)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function yj($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);a("error",$,{error:Q})}async function e_($,Z,Q,J,W,X){let j=Zh("capreq_"),Y=performance.now();return a("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:W,capabilityName:Q,onProgress:X,resolve:(H)=>{if(a(H.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:W,capabilityName:Q,payload:J},Z)),a("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W})})}function $L($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==J.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(X),l(Z,{requestId:Q})}function H2($,Z,Q){let J=0;for(let[W,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:W,...X}))continue;$.pendingCapabilityRequests.delete(W),a("warn","capability.request.cancelled",{requestId:W,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),J+=1}return J}async function ZL($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",W=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!W)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},j=await $.requestCapability(Q,J,X,W);return l(Z,j)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function QL($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let W=Z.clientId?.trim()||"";if(W!==J.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return a(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,error:j}),J.resolve({ok:Y,payload:X,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,payload:X,error:j},J.sessionId)),l(Z,{requestId:Q,ok:Y})}import{createSessionId as Qh}from"@cline/shared";function JL($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||Qh("client_");return $.clients.set(J,{clientId:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(Z,{clientId:J})}function WL($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return x(Z,"client_not_found","Client is not registered with this hub.");let W=Z4(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),W)J.metadata=JSON.parse(JSON.stringify(W));return l(Z)}function XL($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return l(Z)}function jL($,Z){return l(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as Jh,CONNECTOR_PLATFORMS as Wh,connectorChannelsFromPlatforms as Xh,listConnectorCatalog as jh,mergeConnectorConnectArgs as Yh,shouldIncludeConnectorField as Vh}from"@cline/shared";import{withConnectorStore as Ij}from"@cline/shared/db";q0();function a7($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function VL($){return typeof $==="string"?$.trim():void 0}function YL($){if(!a7($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function Bh(){return Ij(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function hj(){return{available:Xh(),active:L2(),configured:Bh()}}function Hh($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Kh($,Z){let Q={};for(let W of $.fields)Q[W.flag]=Z[W.flag]??W.initialValue??"";let J={};for(let W of $.fields){if(!Vh(W,Q))continue;Hh(W,Q),J[W.flag]=Q[W.flag]}return J}function Gh($){if(!a7($))throw Error("connector.configure payload must be an object.");let Z=VL($.channel);if(!Z)throw Error("channel is required");let Q=Wh.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(jh().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let W=YL($.values),X=Kh(Q,W),j=a7($.security)?$.security:{},Y=j.enabled===!0,V=YL(j.values);if(Y&&Q.security)for(let K of Q.security.fields){let G=V[K.key];if(!G)throw Error(K.requiredMessage);let F=K.validate?.(G);if(F)throw Error(F)}let B=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},H=Jh(Q,X,B);return Ij((K)=>K.upsertConfig({channel:Z,type:Z,values:X,security:B,updateConnectArgs:(G)=>Yh(Q,G.connection.connectArgs,H,{replaceSecurityArgs:G.config?.security?.enabled===!0||B.enabled})})),hj()}function Fh($){if(!a7($))throw Error("connector.delete_config payload must be an object.");let Z=VL($.channel);if(!Z)throw Error("channel is required");return Ij((Q)=>Q.deleteConfig(Z)),hj()}function Uh($){return $==="connector.configure"||$==="connector.delete_config"}function kj($,Z,Q){if(!Uh(Z.command))return;P8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function BL($,Z){try{if(Z.command==="connector.channels")return l(Z,hj());if(Z.command==="connector.configure"){let Q=Gh(Z.payload);return kj($,Z,!0),l(Z,Q)}if(Z.command==="connector.delete_config"){let Q=Fh(Z.payload);return kj($,Z,!0),l(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return kj($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Dh=30000;function _h($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Lh($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Ah($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,J8,J)}function Oh($){return $?$:void 0}function qh($){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 zh($,Z,Q,J){let W=performance.now(),X=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},Y=setInterval(()=>{if(X)return;let H=Math.round(performance.now()-W);a("warn","run.heartbeat",{...j,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...J?{timeoutMs:J}:{}},Q.sessionId))},Dh),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;a("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!X)return;a("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-W),error:H})});let B;try{if(!J)return await V;return await Promise.race([V,new Promise((H,K)=>{B=setTimeout(()=>{let G=`Hub run ${Z.command} timed out after ${J}ms.`;X=!0,clearInterval(Y),K(Error(G)),a("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-W)}),bj($,(F)=>F.sessionId===Q.sessionId,G),H2($,(F)=>F.sessionId===Q.sessionId,G),$.sessionHost.abort(Q.sessionId,G).catch((F)=>{a("error","run.timeout_abort_failed",{...j,error:F})})},J)})])}finally{if(X=!0,clearInterval(Y),B)clearTimeout(B)}}async function HL($,Z){let Q=k0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!W.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,j=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,Y=qh(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await zh($,Z,{sessionId:Q,prompt:W,mode:Oh(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:j,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(G$(H))return Ah(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await s0($,Q),K=Lh(V);if($.publish($.buildEvent(_h(V.finishReason),{reason:V.finishReason,...K?{error:K}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await s0($,Q);return l(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function KL($,Z){let Q=k0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";bj($,(W)=>W.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(W){a("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:W})}finally{H2($,(W)=>W.sessionId===Q,J)}return l(Z,{applied:!0})}async function GL($,Z){let Q=a6(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(Z,{applied:!0})}async function FL($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Th($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,J]=await Promise.all([h0($,Z.payload.sessionId),s0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...J?{snapshot:J}:{}},Z.payload.sessionId));return}case"ended":await Nh($,Z);return;default:return}}async function Th($,Z){let{sessionId:Q,event:J}=Z.payload;if(J.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:J.iteration},Q));return}if(J.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:J.iteration,hadToolCalls:J.hadToolCalls,toolCallCount:J.toolCallCount},Q));return}if(J.type==="content_start"){if(J.contentType==="text"&&typeof J.text==="string"&&J.text.length>0){$.publish($.buildEvent("assistant.delta",{text:J.text},Q));return}if(J.contentType==="reasoning"){if(J.redacted&&!J.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof J.reasoning==="string"&&J.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:J.reasoning,redacted:J.redacted===!0},Q));return}if(J.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:J.toolCallId,toolName:J.toolName,input:J.input},Q));return}}if(J.type==="content_end"){switch(J.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:J.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:J.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:J.toolCallId,toolName:J.toolName,output:J.output,error:J.error},Q));break}return}if(J.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:J.message,noticeType:J.noticeType,...J.displayRole?{displayRole:J.displayRole}:{},...J.reason?{reason:J.reason}:{},...J.metadata?{metadata:J.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:J.inputTokens,outputTokens:J.outputTokens,cacheReadTokens:J.cacheReadTokens??0,cacheWriteTokens:J.cacheWriteTokens??0,totalCost:J.cost??0},totals:{inputTokens:J.totalInputTokens,outputTokens:J.totalOutputTokens,cacheReadTokens:J.totalCacheReadTokens??0,cacheWriteTokens:J.totalCacheWriteTokens??0,totalCost:J.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="done")$.publish($.buildEvent("agent.done",{reason:J.reason,text:J.text,iterations:J.iterations,usage:J.usage},Q))}async function Nh($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),J=Q===Z.payload.reason||Q==="run.start.reply";if(J)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[W,X]=await Promise.all([h0($,Z.payload.sessionId),s0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await a_(W);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(J)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as AL,parseRuntimeConfigExtensions as OL,ReasoningEffortSchema as Ih}from"@cline/shared";var UL={};w(UL,{SessionVersioningService:()=>K2,SessionVersioningError:()=>u0});class u0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function fh($){let Z=$.sessionId.trim();if(!Z)throw new u0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new u0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new u0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new u0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class K2{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,J=fh({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(J);if(!W)throw new u0("session_not_found",`Session ${J} not found`);let X=Z?await $.readMessages(J):void 0;if(Z&&X?.length===0)throw new u0("session_messages_not_found",`No messages found for session ${J}`);let j=Aj({session:W,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z}),Y=k1({session:W,messages:X}),V,B=[],H,K;if(Z){let{startSession:O,getStartedSessionId:D,cleanupStartedSession:q}=$;if(!$.start||!O||!D||!q)throw new u0("invalid_restore","startSession, getStartedSessionId, and cleanupStartedSession are required when restore.messages is true");K={startSession:O,getStartedSessionId:D,cleanupStartedSession:q},V=E9(W,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?C9(X??[],$.checkpointRunCount):j.messages??[];let T={sourceSession:W,sourceMessages:X,sourceSnapshot:Y,plan:j,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};H=$.buildStartInput?await $.buildStartInput(T,$.start):$.start}let G=$.applyWorkspaceCheckpoint??Oj,F=$.beginWorkspaceRestoreTransaction??($.applyWorkspaceCheckpoint?void 0:Lj),U=Q&&F?await F(j.cwd):void 0,_=!1,L;try{if(Q)await G(j.cwd,j.checkpoint);if(!K)return await U?.commit(),_=!0,{checkpoint:j.checkpoint,sourceSnapshot:Y};let O=await K.startSession(H);L={result:O,cleanup:K.cleanupStartedSession};let D=K.getStartedSessionId(O);if(!D)throw new u0("invalid_restore","Restored session did not return a session id");await($.retainCheckpointRefs??yG)(j.cwd,D,V?.history??[]);let q=$.readRestoredSession?await $.readRestoredSession(D):void 0,T=q?k1({session:q,messages:B}):void 0;return await U?.commit(),_=!0,{sessionId:D,startResult:O,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:Y,...T?{restoredSnapshot:T}:{}}}catch(O){let D=[];if(L)try{await L.cleanup(L.result)}catch(q){D.push(q)}if(U&&!_)try{await U.rollback()}catch(q){D.push(q)}if(D.length>0)throw AggregateError([O,...D],"Checkpoint restore failed and recovery did not complete");throw O}}}import{HUB_CHECKPOINT_CAPABILITY as J$0,HUB_COMPACTION_CAPABILITY as W$0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as X$0,HUB_HOOK_CAPABILITY_PREFIX as j$0,HUB_MISTAKE_LIMIT_CAPABILITY as Y$0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as V$0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as B$0,isHubToolExecutorName as Rh}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as U$0,HUB_COMPACTION_CAPABILITY as D$0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as _$0,HUB_HOOK_CAPABILITY_PREFIX as L$0,HUB_MISTAKE_LIMIT_CAPABILITY as A$0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as O$0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as q$0}from"@cline/shared";var Mh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function z8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Eh($,Z){let Q=typeof $.name==="string"?$.name.trim():"",J=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=z8($.inputSchema);if(!Q||!J||!X||!W||Z.has(W))return;return Z.add(W),{kind:"tool",capabilityName:W,name:Q,description:J,inputSchema:X,...z8($.lifecycle)?{lifecycle:z8($.lifecycle)}:{}}}function gj($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let J of $){if(!J||typeof J!=="object"||Array.isArray(J))continue;let W=J,X=W.kind,j=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!j||Q.has(j))continue;if(X==="tool"){let Y=Eh(W,Q);if(Y)Z.push(Y);continue}if(X==="toolExecutor"){let Y=W.executor;if(!Rh(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(X==="hook"){let Y=typeof W.name==="string"?W.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(X==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...z8(W.config)?{config:z8(W.config)}:{}});continue}if(X==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...z8(W.config)?{config:z8(W.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(X==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function _L($){let Z=$.metadata?{...$.metadata}:void 0;return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function Ch($){return Object.hasOwn($,"update")?$.update:$}function x9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function wh($){let Z=($??[]).map(x9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Ph($,Z,Q){if(!Q)return!0;let J=x9($),W=x9(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function xj($,Z){let Q=wh(Z);return $.records.skill.map((J)=>({id:J.id,name:J.item.name,description:"description"in J.item&&typeof J.item.description==="string"?J.item.description:void 0,disabled:J.item.disabled===!0,skill:J.item})).filter((J)=>Ph(J.id,J.name,Q))}function DL($,Z){let Q=async(J,W)=>{let X=x9(J),Y=xj($,Z).filter((G)=>G.id===X||x9(G.name)===X||G.id.endsWith(`:${X}`)).filter((G)=>!G.disabled);if(Y.length!==1)return Y.length>1?`Skill "${J}" is ambiguous. Use one of: ${Y.map((G)=>G.id).join(", ")}`:`Skill "${J}" not found.`;let V=Y[0].skill,B=W?.trim(),H=B?`
|
|
616
616
|
<command-args>${B}</command-args>`:"",K=V.description?.trim()?`Description: ${V.description.trim()}
|
|
617
617
|
|
|
618
618
|
`:"";return`<command-name>${V.name}</command-name>${H}
|
|
@@ -620,7 +620,7 @@ ${W}`,$.config.mode)}function f7($,Z){return Mk($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
620
620
|
${K}${V.instructions}
|
|
621
621
|
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>xj($,Z).map(({skill:J,...W})=>W),enumerable:!0}),Q}function Sh($,Z,Q,J){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let j=await J($,Q.capabilityName,{},Z);if(j?.snapshot)W=j.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(j)=>[...W.records[j]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let V=j.match(/^\/(\S+)/)?.[1];if(!V)return j;let B=W.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${j.slice(V.length+1)}`:j},hasConfiguredSkills:(j)=>xj(W,j).some((Y)=>!Y.disabled),createSkillsExecutor:(j)=>DL(W,j),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(j.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>N6(W.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(j.registerSkillsTool)Y.registerTool(E2(DL(W,j.allowedSkillNames)));for(let V of W.runtimeCommands.filter((B)=>B.kind==="skill"&&j.includeSkills||B.kind==="workflow"&&j.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
|
|
622
622
|
|
|
623
|
-
${H}`:V.instructions}})}})}}function bh($,Z,Q,J){let W=Q.map((X)=>[X.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await J($,X.capabilityName,{executor:X.executor,args:V,context:_L(Y)},Z))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function yh($,Z,Q,J){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(X,j){return(await J($,W.capabilityName,{toolName:W.name,input:X,context:_L(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(Ch(V))}:void 0))?.result}}))}function kh($,Z,Q,J){let W=new Map(Q.map((j)=>[j.name,j])),X={};for(let j of Mh){let Y=W.get(j);if(!Y)continue;X[j]=async(V)=>{return(await J($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function vj($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),J=$.contributions.filter((V)=>V.kind==="hook"),W=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:bh($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...J.length>0?{hooks:kh($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Q.length>0?{extraTools:yh($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:Sh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var LL="hubCapabilityOwnerClientId";function oQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function hh($){if($===null)return null;let Z=Ih.safeParse($);return Z.success?Z.data:void 0}function xh($){let Z=Z4($)??{},Q={},J=oQ(Z.providerId);if(J)Q.providerId=J;let W=oQ(Z.modelId);if(W)Q.modelId=W;let X=oQ(Z.apiKey);if(X!==void 0)Q.apiKey=X;let j=oQ(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=hh(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return k2(Q)}function gh($,Z){return $.sessionState.get(Z)?.createdByClientId}function vh($){if(!$||!(LL in $))return $;let Z={...$};return delete Z[LL],Z}function qL($){let Z=gh($.ctx,$.sessionId);if(!Z)return x($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return x($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function zL($,Z,Q){let J=performance.now(),W={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};a("info","session.create.begin",W);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},Y=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},B=_1(X.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},K=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():void 0,G=Z.clientId?.trim()||"hub-client",F=gj(V.clientContributions);a("info","session.create.contributions_parsed",{...W,clientId:G,workspaceRoot:K,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:F.length});let _=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||AL(),L=OL(V.configExtensions);a("info","session.create.runtime_build.begin",{...W,sessionId:_,configExtensionCount:L?.length??0});let O=vj({sessionId:_,targetClientId:G,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});a("info","session.create.start_session.begin",{...W,sessionId:_,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub")});let D=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...O.localRuntime},capabilities:{toolExecutors:O.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:_,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():K),workspaceRoot:Y?.workspaceRoot??K,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});a("info","session.create.start_session.end",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J),hasImmediateResult:!!D.result}),wj($,D.sessionId,G,"creator",{interactive:j.interactive!==!1}),a("info","session.create.read_records.begin",{...W,sessionId:D.sessionId});let[q,T]=await Promise.all([h0($,D.sessionId),s0($,D.sessionId)]);if(a("info","session.create.read_records.end",{...W,sessionId:D.sessionId,hasSession:!!q,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-J)}),q)$.publish($.buildEvent("session.created",{session:q,...T?{snapshot:T}:{}},D.sessionId));return a("info","session.create.reply",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J)}),l(Z,{session:q,...T?{snapshot:T}:{}})}async function TL($,Z,Q){let J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.sessionId==="string"?J.sessionId.trim():Z.sessionId?.trim()||"",X=J.checkpointRunCount;if(!W)return x(Z,"invalid_restore","session.restore requires a session id");let j=J.restore&&typeof J.restore==="object"?J.restore:{},Y=j.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=J.sessionConfig&&typeof J.sessionConfig==="object"?JSON.parse(JSON.stringify(J.sessionConfig)):void 0;if(Y&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=J.runtimeOptions&&typeof J.runtimeOptions==="object"?J.runtimeOptions:{},H=_1(J.initialCompactionState),K=J.metadata&&typeof J.metadata==="object"?JSON.parse(JSON.stringify(J.metadata)):{};if(typeof V?.mode==="string")K.mode=V.mode;else if(typeof B.mode==="string")K.mode=B.mode;if(typeof V?.systemPrompt==="string")K.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")K.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)K.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)K.checkpointEnabled=!0;let G=J.modelSelection&&typeof J.modelSelection==="object"?J.modelSelection:{},F=Z.clientId?.trim()||"hub-client",U=gj(B.clientContributions),L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||AL(),O=OL(B.configExtensions),D=vj({sessionId:L,targetClientId:F,contributions:U,sessionConfig:V,requestCapability:$.requestCapability}),T=await new K2().restoreCheckpoint({sessionId:W,checkpointRunCount:X,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)K.checkpoint=N.restoredCheckpointMetadata;let S=typeof J.workspaceRoot==="string"&&J.workspaceRoot.trim()?J.workspaceRoot.trim():typeof J.cwd==="string"&&J.cwd.trim()?J.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof K.source==="string"?K.source:void 0,interactive:K.interactive!==!1,sessionMetadata:{...K,restoredFromSessionId:W,restoredCheckpointRunCount:X},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:O,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??S,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof K.teamName==="string"?K.teamName:void 0)},toolPolicies:J.toolPolicies&&typeof J.toolPolicies==="object"&&!Array.isArray(J.toolPolicies)?JSON.parse(JSON.stringify(J.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,cleanupStartedSession:async(N)=>{if(!await $.sessionHost.deleteSession(N.sessionId))throw Error(`Failed to clean up restored session ${N.sessionId}`)},readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return l(Z,{checkpoint:T.checkpoint});let z=T.startResult;if(!z)return x(Z,"restore_failed","Checkpoint restore did not start a session");wj($,z.sessionId,F,"creator",{interactive:K.interactive!==!1});let[A,R]=await Promise.all([h0($,z.sessionId),s0($,z.sessionId)]);if(A)$.publish($.buildEvent("session.created",{session:A,...R?{snapshot:R}:{}},z.sessionId));return l(Z,{session:A,...R?{snapshot:R}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof u0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${W}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function NL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");let J=await h0($,Q);if(!J)return x(Z,"session_not_found",`Unknown session: ${Q}`);o_($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await h0($,Q);return $.publish($.buildEvent("session.attached",{session:W??J},Q)),l(Z,{session:W??J})}async function fL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let J=Z.clientId?.trim()||"hub-client",W=$.sessionState.get(Q);if(W){if(W.participants.delete(J),W.createdByClientId===J)W.createdByClientId=void 0;if(W.participants.size===0)$.sessionState.delete(Q)}H2($,(Y)=>Y.sessionId===Q&&Y.targetClientId===J,`Capability owner client ${J} detached before request was resolved.`);let[X,j]=await Promise.all([h0($,Q),s0($,Q)]);return $.publish($.buildEvent("session.detached",X?{session:X,...j?{snapshot:j}:{},clientId:J}:{clientId:J},Q)),l(Z)}async function RL($,Z){let Q=k0(Z),J=Z.payload?.includeSnapshot===!0,[W,X]=await Promise.all([h0($,Q),J?s0($,Q):Promise.resolve(void 0)]);return W?l(Z,{session:W,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function ML($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await h0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(Z,{sessionId:Q,messages:W})}async function EL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await h0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let W=Z.clientId?.trim()||"hub-client",X=qL({sessionId:Q,ctx:$,clientId:W,envelope:Z});if(X)return X;let j=await $.sessionHost.readSessionCompactionState(Q);return l(Z,{sessionId:Q,state:j})}async function CL($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((X)=>nQ(X,$.sessionState.get(X.sessionId)));return l(Z,{sessions:W})}async function wL($,Z){let Q=k0(Z),J=vh(Z4(Z.payload?.metadata)),W=await $.sessionHost.updateSession(Q,{metadata:J}),[X,j]=await Promise.all([h0($,Q),s0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:W.updated,payload:{updated:W.updated,session:X,...j?{snapshot:j}:{}}}}async function PL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_update_connection","session.update_connection requires a session id");let J=$.sessionHost.updateSessionConnection;if(!J)return x(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let W=Z4(Z.payload),X=xh(W?.updates);return await J.call($.sessionHost,Q,X),l(Z,{sessionId:Q,updated:!0})}async function SL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.compaction.update requires a session id");let J=Z.clientId?.trim()||"hub-client",W=await h0($,Q);if(!W)return x(Z,"session_not_found",`Unknown session: ${Q}`);let X=qL({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(X)return X;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=_1(j.state);if(!Y)return x(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,H]=V.updated?await Promise.all([h0($,Q),s0($,Q)]):[W,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??W,...H?{snapshot:H}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??W,...H?{snapshot:H}:{}}}}async function bL($,Z){let Q=k0(Z),J=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(Z,{deleted:J})}async function yL($,Z){let Q=k0(Z),J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.list({sessionId:Q});return l(Z,{sessionId:Q,prompts:W})}async function kL($,Z){let Q=k0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:J,prompt:W,delivery:X});return l(Z,Y)}async function IL($,Z){let Q=k0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await W.delete({sessionId:Q,promptId:J});return l(Z,X)}function hL($){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 ch=new Set(["skills","workflows","rules","tools","mcp"]);function mj($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function g7($,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 uh($,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 xL($){if($===void 0)return{};if(!mj($))throw Error("settings.list payload must be an object.");return{cwd:g7($,"cwd"),workspaceRoot:g7($,"workspaceRoot"),availabilityContext:mj($.availabilityContext)?$.availabilityContext:void 0}}function dh($){if(!mj($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!ch.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...xL($),type:Z,id:g7($,"id"),path:g7($,"path"),name:g7($,"name"),enabled:uh($,"enabled")}}class Q4{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=mh("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new m1({sessionService:new v1(new x1),fetch:$.fetch,logger:$.logger,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:q8,requestCapability:(Z,Q,J,W,X)=>e_(this.ctx,Z,Q,J,W,X)},this.schedules=new t6({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let J=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!J)return;this.publish(q8(J,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s6(this.schedules),this.settings=$.settingsService??new Z2,$.cronOptions)this.cronService=new K7({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{FL(this.ctx,Z).catch((Q)=>{yj("session event handling failed",Q),sQ(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())Sj(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(H2(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 sQ(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 JL(this.ctx,$);case"client.update":return WL(this.ctx,$);case"client.unregister":return XL(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return jL(this.ctx,$);case"session.create":return await zL(this.ctx,$,(Z)=>Pj(this.ctx,Z));case"session.restore":return await TL(this.ctx,$,(Z)=>Pj(this.ctx,Z));case"session.attach":return await NL(this.ctx,$);case"session.detach":return await fL(this.ctx,$);case"session.get":return await RL(this.ctx,$);case"session.messages":return await ML(this.ctx,$);case"session.compaction.get":return await EL(this.ctx,$);case"session.list":return await CL(this.ctx,$);case"session.update":return await wL(this.ctx,$);case"session.update_connection":return await PL(this.ctx,$);case"session.compaction.update":return await SL(this.ctx,$);case"session.pending_prompts":return await yL(this.ctx,$);case"session.update_pending_prompt":return await kL(this.ctx,$);case"session.remove_pending_prompt":return await IL(this.ctx,$);case"session.delete":return await bL(this.ctx,$);case"session.hook":return await GL(this.ctx,$);case"run.start":case"session.send_input":return await HL(this.ctx,$);case"run.abort":return await KL(this.ctx,$);case"capability.request":return await ZL(this.ctx,$);case"approval.respond":return await s_(this.ctx,$);case"capability.respond":return QL(this.ctx,$);case"capability.progress":return $L(this.ctx,$);case"ui.notify":return this.publish(q8("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(q8("ui.show_window",$.payload??{})),l($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await BL(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=hL($.command);if(Q)this.publish(q8(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!ph(Z.error.code))return;sQ(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(xL($.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(dh($.payload));return this.publish(q8("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let J=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:Z};return J.add(W),this.listeners.set($,J),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(W),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}H2(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(J){yj(`listener threw while publishing ${$.event}`,J),sQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:J,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function ph($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as nh}from"node:crypto";import ah from"node:http";import oh from"node:net";import{URL as pj}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as mL,HUB_CAPABILITIES as sh,isHubProtocolCompatible as th,MAX_CLIENT_HUB_PROTOCOL_VERSION as cL,MIN_CLIENT_HUB_PROTOCOL_VERSION as uL}from"@cline/shared";import{WebSocketServer as eh}from"ws";import{captureSdkError as gL,HUB_COMMAND_SLOW_LOG_MS as lh,resolveHubCommandTimeoutMs as ih,safeJsonParse as rh}from"@cline/shared";function cj($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function vL($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class v7{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,J=!1,W=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{W({kind:"event",envelope:V})},j=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),K=!1,G=cj(B);a("info","command.start",G);let F=setTimeout(()=>{if(K)return;a("warn","command.slow",{...G,elapsedMs:Math.round(performance.now()-H)})},lh),U=this.transport.command(B.envelope);U.then((T)=>{if(!K)return;a(T.ok?"warn":"error","command.late_end",{...G,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!K)return;a("error","command.late_error",{...G,elapsedMs:Math.round(performance.now()-H),error:T})});let _=!1,L,O,D=ih(B.envelope.command,B.envelope.timeoutMs);try{O=D===null?await U:await Promise.race([U,new Promise((T)=>{L=setTimeout(()=>{_=!0,gL(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...G,timeoutMs:D}}),T(vL(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),L)clearTimeout(L);throw T}if(K=_,clearTimeout(F),L)clearTimeout(L);let q=Math.round(performance.now()-H);if(_)a("error","command.timeout",{...G,durationMs:q,timeoutMs:D});else a(O.ok?"info":"warn","command.end",{...G,durationMs:q,ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message});if(B.envelope.command==="client.register"&&O.ok){let z=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(z)Q.add(z)}else if(B.envelope.command==="client.unregister"&&O.ok){let T=B.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:O});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let K=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,K);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?rh(V.data):void 0;if(!H||H.kind!=="command"){a("error","rejected malformed websocket frame",{error:B});return}a("error","command.error",{...cj(H),error:B}),gL(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:cj(H)}),W({kind:"reply",envelope:vL(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(J)return;J=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",j),$.removeEventListener("close",Y)};return $.addEventListener("message",j),$.addEventListener("close",Y),Y}}class m7{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function $x($){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 Zx($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(J)=>{Q({data:$x(J)})});return}$.on("close",Q)},removeEventListener(){}}}function Qx($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
623
|
+
${H}`:V.instructions}})}})}}function bh($,Z,Q,J){let W=Q.map((X)=>[X.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await J($,X.capabilityName,{executor:X.executor,args:V,context:_L(Y)},Z))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function yh($,Z,Q,J){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(X,j){return(await J($,W.capabilityName,{toolName:W.name,input:X,context:_L(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(Ch(V))}:void 0))?.result}}))}function kh($,Z,Q,J){let W=new Map(Q.map((j)=>[j.name,j])),X={};for(let j of Mh){let Y=W.get(j);if(!Y)continue;X[j]=async(V)=>{return(await J($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function vj($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),J=$.contributions.filter((V)=>V.kind==="hook"),W=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:bh($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...J.length>0?{hooks:kh($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Q.length>0?{extraTools:yh($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:Sh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var LL="hubCapabilityOwnerClientId";function o7($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function hh($){if($===null)return null;let Z=Ih.safeParse($);return Z.success?Z.data:void 0}function xh($){let Z=Z4($)??{},Q={},J=o7(Z.providerId);if(J)Q.providerId=J;let W=o7(Z.modelId);if(W)Q.modelId=W;let X=o7(Z.apiKey);if(X!==void 0)Q.apiKey=X;let j=o7(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=hh(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return k2(Q)}function gh($,Z){return $.sessionState.get(Z)?.createdByClientId}function vh($){if(!$||!(LL in $))return $;let Z={...$};return delete Z[LL],Z}function qL($){let Z=gh($.ctx,$.sessionId);if(!Z)return x($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return x($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function zL($,Z,Q){let J=performance.now(),W={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};a("info","session.create.begin",W);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},Y=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},B=_1(X.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},K=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():void 0,G=Z.clientId?.trim()||"hub-client",F=gj(V.clientContributions);a("info","session.create.contributions_parsed",{...W,clientId:G,workspaceRoot:K,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:F.length});let _=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||AL(),L=OL(V.configExtensions);a("info","session.create.runtime_build.begin",{...W,sessionId:_,configExtensionCount:L?.length??0});let O=vj({sessionId:_,targetClientId:G,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});a("info","session.create.start_session.begin",{...W,sessionId:_,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub")});let D=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...O.localRuntime},capabilities:{toolExecutors:O.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:_,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():K),workspaceRoot:Y?.workspaceRoot??K,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});a("info","session.create.start_session.end",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J),hasImmediateResult:!!D.result}),wj($,D.sessionId,G,"creator",{interactive:j.interactive!==!1}),a("info","session.create.read_records.begin",{...W,sessionId:D.sessionId});let[q,T]=await Promise.all([h0($,D.sessionId),s0($,D.sessionId)]);if(a("info","session.create.read_records.end",{...W,sessionId:D.sessionId,hasSession:!!q,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-J)}),q)$.publish($.buildEvent("session.created",{session:q,...T?{snapshot:T}:{}},D.sessionId));return a("info","session.create.reply",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J)}),l(Z,{session:q,...T?{snapshot:T}:{}})}async function TL($,Z,Q){let J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.sessionId==="string"?J.sessionId.trim():Z.sessionId?.trim()||"",X=J.checkpointRunCount;if(!W)return x(Z,"invalid_restore","session.restore requires a session id");let j=J.restore&&typeof J.restore==="object"?J.restore:{},Y=j.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=J.sessionConfig&&typeof J.sessionConfig==="object"?JSON.parse(JSON.stringify(J.sessionConfig)):void 0;if(Y&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=J.runtimeOptions&&typeof J.runtimeOptions==="object"?J.runtimeOptions:{},H=_1(J.initialCompactionState),K=J.metadata&&typeof J.metadata==="object"?JSON.parse(JSON.stringify(J.metadata)):{};if(typeof V?.mode==="string")K.mode=V.mode;else if(typeof B.mode==="string")K.mode=B.mode;if(typeof V?.systemPrompt==="string")K.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")K.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)K.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)K.checkpointEnabled=!0;let G=J.modelSelection&&typeof J.modelSelection==="object"?J.modelSelection:{},F=Z.clientId?.trim()||"hub-client",U=gj(B.clientContributions),L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||AL(),O=OL(B.configExtensions),D=vj({sessionId:L,targetClientId:F,contributions:U,sessionConfig:V,requestCapability:$.requestCapability}),T=await new K2().restoreCheckpoint({sessionId:W,checkpointRunCount:X,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)K.checkpoint=N.restoredCheckpointMetadata;let S=typeof J.workspaceRoot==="string"&&J.workspaceRoot.trim()?J.workspaceRoot.trim():typeof J.cwd==="string"&&J.cwd.trim()?J.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof K.source==="string"?K.source:void 0,interactive:K.interactive!==!1,sessionMetadata:{...K,restoredFromSessionId:W,restoredCheckpointRunCount:X},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:O,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??S,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof K.teamName==="string"?K.teamName:void 0)},toolPolicies:J.toolPolicies&&typeof J.toolPolicies==="object"&&!Array.isArray(J.toolPolicies)?JSON.parse(JSON.stringify(J.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,cleanupStartedSession:async(N)=>{if(!await $.sessionHost.deleteSession(N.sessionId))throw Error(`Failed to clean up restored session ${N.sessionId}`)},readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return l(Z,{checkpoint:T.checkpoint});let z=T.startResult;if(!z)return x(Z,"restore_failed","Checkpoint restore did not start a session");wj($,z.sessionId,F,"creator",{interactive:K.interactive!==!1});let[A,R]=await Promise.all([h0($,z.sessionId),s0($,z.sessionId)]);if(A)$.publish($.buildEvent("session.created",{session:A,...R?{snapshot:R}:{}},z.sessionId));return l(Z,{session:A,...R?{snapshot:R}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof u0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${W}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function NL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");let J=await h0($,Q);if(!J)return x(Z,"session_not_found",`Unknown session: ${Q}`);o_($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await h0($,Q);return $.publish($.buildEvent("session.attached",{session:W??J},Q)),l(Z,{session:W??J})}async function fL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let J=Z.clientId?.trim()||"hub-client",W=$.sessionState.get(Q);if(W){if(W.participants.delete(J),W.createdByClientId===J)W.createdByClientId=void 0;if(W.participants.size===0)$.sessionState.delete(Q)}H2($,(Y)=>Y.sessionId===Q&&Y.targetClientId===J,`Capability owner client ${J} detached before request was resolved.`);let[X,j]=await Promise.all([h0($,Q),s0($,Q)]);return $.publish($.buildEvent("session.detached",X?{session:X,...j?{snapshot:j}:{},clientId:J}:{clientId:J},Q)),l(Z)}async function RL($,Z){let Q=k0(Z),J=Z.payload?.includeSnapshot===!0,[W,X]=await Promise.all([h0($,Q),J?s0($,Q):Promise.resolve(void 0)]);return W?l(Z,{session:W,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function ML($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await h0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(Z,{sessionId:Q,messages:W})}async function EL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await h0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let W=Z.clientId?.trim()||"hub-client",X=qL({sessionId:Q,ctx:$,clientId:W,envelope:Z});if(X)return X;let j=await $.sessionHost.readSessionCompactionState(Q);return l(Z,{sessionId:Q,state:j})}async function CL($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((X)=>n7(X,$.sessionState.get(X.sessionId)));return l(Z,{sessions:W})}async function wL($,Z){let Q=k0(Z),J=vh(Z4(Z.payload?.metadata)),W=await $.sessionHost.updateSession(Q,{metadata:J}),[X,j]=await Promise.all([h0($,Q),s0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:W.updated,payload:{updated:W.updated,session:X,...j?{snapshot:j}:{}}}}async function PL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_update_connection","session.update_connection requires a session id");let J=$.sessionHost.updateSessionConnection;if(!J)return x(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let W=Z4(Z.payload),X=xh(W?.updates);return await J.call($.sessionHost,Q,X),l(Z,{sessionId:Q,updated:!0})}async function SL($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.compaction.update requires a session id");let J=Z.clientId?.trim()||"hub-client",W=await h0($,Q);if(!W)return x(Z,"session_not_found",`Unknown session: ${Q}`);let X=qL({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(X)return X;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=_1(j.state);if(!Y)return x(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,H]=V.updated?await Promise.all([h0($,Q),s0($,Q)]):[W,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??W,...H?{snapshot:H}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??W,...H?{snapshot:H}:{}}}}async function bL($,Z){let Q=k0(Z),J=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(Z,{deleted:J})}async function yL($,Z){let Q=k0(Z),J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.list({sessionId:Q});return l(Z,{sessionId:Q,prompts:W})}async function kL($,Z){let Q=k0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:J,prompt:W,delivery:X});return l(Z,Y)}async function IL($,Z){let Q=k0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await W.delete({sessionId:Q,promptId:J});return l(Z,X)}function hL($){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 ch=new Set(["skills","workflows","rules","tools","mcp"]);function mj($){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 uh($,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 xL($){if($===void 0)return{};if(!mj($))throw Error("settings.list payload must be an object.");return{cwd:g9($,"cwd"),workspaceRoot:g9($,"workspaceRoot"),availabilityContext:mj($.availabilityContext)?$.availabilityContext:void 0}}function dh($){if(!mj($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!ch.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...xL($),type:Z,id:g9($,"id"),path:g9($,"path"),name:g9($,"name"),enabled:uh($,"enabled")}}class Q4{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=mh("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new m1({sessionService:new v1(new x1),fetch:$.fetch,logger:$.logger,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:q8,requestCapability:(Z,Q,J,W,X)=>e_(this.ctx,Z,Q,J,W,X)},this.schedules=new t6({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let J=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!J)return;this.publish(q8(J,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s6(this.schedules),this.settings=$.settingsService??new Z2,$.cronOptions)this.cronService=new K9({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{FL(this.ctx,Z).catch((Q)=>{yj("session event handling failed",Q),s7(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())Sj(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(H2(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 s7(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 JL(this.ctx,$);case"client.update":return WL(this.ctx,$);case"client.unregister":return XL(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return jL(this.ctx,$);case"session.create":return await zL(this.ctx,$,(Z)=>Pj(this.ctx,Z));case"session.restore":return await TL(this.ctx,$,(Z)=>Pj(this.ctx,Z));case"session.attach":return await NL(this.ctx,$);case"session.detach":return await fL(this.ctx,$);case"session.get":return await RL(this.ctx,$);case"session.messages":return await ML(this.ctx,$);case"session.compaction.get":return await EL(this.ctx,$);case"session.list":return await CL(this.ctx,$);case"session.update":return await wL(this.ctx,$);case"session.update_connection":return await PL(this.ctx,$);case"session.compaction.update":return await SL(this.ctx,$);case"session.pending_prompts":return await yL(this.ctx,$);case"session.update_pending_prompt":return await kL(this.ctx,$);case"session.remove_pending_prompt":return await IL(this.ctx,$);case"session.delete":return await bL(this.ctx,$);case"session.hook":return await GL(this.ctx,$);case"run.start":case"session.send_input":return await HL(this.ctx,$);case"run.abort":return await KL(this.ctx,$);case"capability.request":return await ZL(this.ctx,$);case"approval.respond":return await s_(this.ctx,$);case"capability.respond":return QL(this.ctx,$);case"capability.progress":return $L(this.ctx,$);case"ui.notify":return this.publish(q8("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(q8("ui.show_window",$.payload??{})),l($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await BL(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=hL($.command);if(Q)this.publish(q8(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!ph(Z.error.code))return;s7(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(xL($.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(dh($.payload));return this.publish(q8("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let J=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:Z};return J.add(W),this.listeners.set($,J),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(W),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}H2(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(J){yj(`listener threw while publishing ${$.event}`,J),s7(this.options.telemetry,{component:"core",operation:"hub.publish",error:J,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function ph($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as nh}from"node:crypto";import ah from"node:http";import oh from"node:net";import{URL as pj}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as mL,HUB_CAPABILITIES as sh,isHubProtocolCompatible as th,MAX_CLIENT_HUB_PROTOCOL_VERSION as cL,MIN_CLIENT_HUB_PROTOCOL_VERSION as uL}from"@cline/shared";import{WebSocketServer as eh}from"ws";import{captureSdkError as gL,HUB_COMMAND_SLOW_LOG_MS as lh,resolveHubCommandTimeoutMs as ih,safeJsonParse as rh}from"@cline/shared";function cj($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function vL($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class v9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,J=!1,W=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{W({kind:"event",envelope:V})},j=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),K=!1,G=cj(B);a("info","command.start",G);let F=setTimeout(()=>{if(K)return;a("warn","command.slow",{...G,elapsedMs:Math.round(performance.now()-H)})},lh),U=this.transport.command(B.envelope);U.then((T)=>{if(!K)return;a(T.ok?"warn":"error","command.late_end",{...G,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!K)return;a("error","command.late_error",{...G,elapsedMs:Math.round(performance.now()-H),error:T})});let _=!1,L,O,D=ih(B.envelope.command,B.envelope.timeoutMs);try{O=D===null?await U:await Promise.race([U,new Promise((T)=>{L=setTimeout(()=>{_=!0,gL(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...G,timeoutMs:D}}),T(vL(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),L)clearTimeout(L);throw T}if(K=_,clearTimeout(F),L)clearTimeout(L);let q=Math.round(performance.now()-H);if(_)a("error","command.timeout",{...G,durationMs:q,timeoutMs:D});else a(O.ok?"info":"warn","command.end",{...G,durationMs:q,ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message});if(B.envelope.command==="client.register"&&O.ok){let z=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(z)Q.add(z)}else if(B.envelope.command==="client.unregister"&&O.ok){let T=B.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:O});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let K=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,K);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?rh(V.data):void 0;if(!H||H.kind!=="command"){a("error","rejected malformed websocket frame",{error:B});return}a("error","command.error",{...cj(H),error:B}),gL(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:cj(H)}),W({kind:"reply",envelope:vL(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(J)return;J=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",j),$.removeEventListener("close",Y)};return $.addEventListener("message",j),$.addEventListener("close",Y),Y}}class m9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function $x($){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 Zx($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(J)=>{Q({data:$x(J)})});return}$.on("close",Q)},removeEventListener(){}}}function Qx($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
624
624
|
Connection: close\r
|
|
625
625
|
Content-Length: 0\r
|
|
626
626
|
\r
|
|
@@ -629,7 +629,7 @@ Connection: close\r
|
|
|
629
629
|
Content-Length: 0\r
|
|
630
630
|
\r
|
|
631
631
|
`),$.end()}catch{$.destroy()}}function uj($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),J=Buffer.from(Z,"utf8");return Q.length===J.length&&nh(Q,J)}function dL($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,J=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${J}`,X=Error(Q?`${W} (${Q})`:W);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
|
|
632
|
-
Caused by: ${$.stack}`;return X}async function Wx($){return await new Promise((Z,Q)=>{let J=oh.createServer();J.once("error",Q),J.listen(0,$,()=>{let W=J.address();if(!W||typeof W==="string"){J.close(()=>Q(Error("Failed to resolve free port")));return}let X=W.port;J.close((j)=>{if(j){Q(j);return}Z(X)})})})}function Xx($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var dj=new Map,pL="cline-hub-auth.",jx=30000;function lj($){return Array.isArray($)?$.join(","):$??""}function lL($){return $===32||$===9}function
|
|
632
|
+
Caused by: ${$.stack}`;return X}async function Wx($){return await new Promise((Z,Q)=>{let J=oh.createServer();J.once("error",Q),J.listen(0,$,()=>{let W=J.address();if(!W||typeof W==="string"){J.close(()=>Q(Error("Failed to resolve free port")));return}let X=W.port;J.close((j)=>{if(j){Q(j);return}Z(X)})})})}function Xx($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var dj=new Map,pL="cline-hub-auth.",jx=30000;function lj($){return Array.isArray($)?$.join(","):$??""}function lL($){return $===32||$===9}function t7($){let Z=lj($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!lL(Z.charCodeAt(6)))return null;let J=7;while(J<Z.length&&lL(Z.charCodeAt(J)))J+=1;return Z.slice(J).trim()||null}function Yx($){for(let Z of lj($).split(",")){let Q=Z.trim();if(Q.startsWith(pL))return Q.slice(pL.length).trim()||null}return null}function e7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function ij($){let Z=lj($).trim();if(!Z)return!1;try{return e7(new pj(Z).hostname)}catch{return!1}}async function T8($){let Z=$.owner??F$(),Q=$.host??"127.0.0.1",J=$.pathname??"/hub",W=$.port??k6(),X=W===0?await Wx(Q):W,j=X,Y=z1(Q,X,J),V=R7(),B=f7(),H=new Q4($);await H.start();let K=new v9(new m9(H),$.telemetry),G=new Set,F=new Date().toISOString(),U={protocolVersion:mL,minClientProtocolVersion:uL,maxClientProtocolVersion:cL,capabilities:sh,coreVersion:H5.version,buildId:V,pid:process.pid,startedAt:F},_=new Set,L,O,D=async()=>{if(O)return O;return O=(async()=>{if(L)clearInterval(L),L=void 0;for(let A of _)A.terminate?.();_.clear();for(let A of G)A();if(G.clear(),await new Promise((A,R)=>{T.close((N)=>{if(N){R(N);return}A()})}),await new Promise((A,R)=>{q.close((N)=>{if(N){R(N);return}A()})}),await H.stop(),(await R0(Z.discoveryPath))?.url===Y)await n0(Z.discoveryPath)})(),O},q=ah.createServer((z,A)=>{if((z.url??"/")==="/health"){let N=JSON.stringify({ok:!0,protocolVersion:U.protocolVersion,minClientProtocolVersion:U.minClientProtocolVersion,maxClientProtocolVersion:U.maxClientProtocolVersion,coreVersion:U.coreVersion,host:Q,port:j,url:Y});A.statusCode=200,A.setHeader("content-type","application/json"),A.end(N);return}if((z.url??"/")==="/status"){if(!uj(t7(z.headers.authorization),B)){A.statusCode=401,A.end("Unauthorized");return}let N=JSON.stringify({hubId:H.getHubId(),...U,authToken:B,host:Q,port:j,url:Y,updatedAt:new Date().toISOString()});A.statusCode=200,A.setHeader("content-type","application/json"),A.end(N);return}if((z.url??"/")==="/version"){A.statusCode=200,A.setHeader("content-type","application/json"),A.end(JSON.stringify(U));return}if(new pj(z.url??"/",`http://${Q}:${j}`).pathname==="/shutdown"&&z.method==="POST"){if(!uj(t7(z.headers.authorization),B)){A.statusCode=401,A.end("Unauthorized");return}A.statusCode=202,A.setHeader("content-type","application/json"),A.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}A.statusCode=404,A.end("Not found")}),T=new eh({noServer:!0});L=setInterval(()=>{for(let z of _){if(z.isAlive===!1){try{z.terminate?.()}catch{}_.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}_.delete(z)}}},jx),q.on("upgrade",(z,A,R)=>{if(new pj(z.url??"/",`http://${Q}:${j}`).pathname!==J){A.destroy();return}if(!(uj(Yx(z.headers["sec-websocket-protocol"]),B)||e7(Q)&&ij(z.headers.origin))){Jx(A);return}try{T.handleUpgrade(z,A,R,(y)=>{let s=y;s.isAlive=!0,s.on("pong",()=>{s.isAlive=!0}),_.add(s);let c=K.attach(Zx(y));G.add(c),y.once("close",()=>{_.delete(s),c(),G.delete(c)})})}catch{Qx(A)}});try{await new Promise((z,A)=>{q.once("error",(R)=>{A(dL(R,{host:Q,port:X,pathname:J}))}),q.listen(X,Q,()=>{let R=q.address();if(!R||typeof R==="string"){A(dL(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:J}));return}j=R.port,Y=z1(Q,j,J),z()})})}catch(z){if(L)clearInterval(L),L=void 0;throw await H.stop().catch(()=>{return}),z}return await M7(Z.discoveryPath,{hubId:H.getHubId(),protocolVersion:mL,minClientProtocolVersion:uL,maxClientProtocolVersion:cL,capabilities:[...U.capabilities],coreVersion:H5.version,buildId:V,authToken:B,host:Q,port:j,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:j,url:Y,authToken:B,close:D}}async function $3($){let Z=$.owner??F$(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=$.host??"127.0.0.1",W=$.port??k6(),X=$.pathname??"/hub",j=z1(J,W,X),Y=Z.discoveryPath,V=(H)=>{if(!Q)X2(H.url,H.authToken);return H},B=dj.get(Y);if(B){let H=await B;if(H.url===j)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await E7(Z.discoveryPath,async()=>{let H=await R0(Z.discoveryPath);if(H?.url&&(H.url===j||$.allowPortFallback===!0)){let F=await U$(H.url,{authToken:H.authToken});if(F?.url&&th(F).compatible&&await y1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await n0(Z.discoveryPath);let G=async(F)=>{let U=T8({...F,owner:Z});dj.set(Y,U);try{let _=await U;return V({server:_,url:_.url,authToken:_.authToken,action:"started"})}catch(_){throw dj.delete(Y),_}};try{return await G($)}catch(F){if(!$.allowPortFallback||!Xx(F))throw F;return await G({...$,port:0})}})}function rL(){return iL()==="production"?B1():a0()}function Vx($){return iL()!=="production"&&!$}async function nL($){let Z=V1({host:$.host,port:$.port,pathname:$.pathname});return await T8({...$,...Z,owner:rL()})}async function aL($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=V1({host:$.host,port:$.port,pathname:$.pathname});return await $3({...$,...Q,allowPortFallback:$.allowPortFallback??Vx(Z),owner:rL()})}Q3();var tL={};w(tL,{registerRemoteConfigSessionBlobUpload:()=>X3,readRemoteConfigSessionBlobUploadMetadata:()=>rj,prepareRemoteConfigCoreIntegration:()=>aj,createRemoteConfigSessionMessagesArtifactUploader:()=>nj,buildRemoteConfigSessionBlobUploadMetadata:()=>J3,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W3});import{buildRemoteConfigSessionBlobUploadMetadata as J3,clearRemoteConfigSessionBlobUpload as Bx,createClineTelemetryServiceConfig as Hx,createSessionId as Kx,createRemoteConfigSessionMessagesArtifactUploader as Gx,prepareRemoteConfigRuntime as Fx,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as W3,readRemoteConfigSessionBlobUploadMetadata as rj,registerRemoteConfigSessionBlobUpload as X3}from"@cline/shared";function Ux($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return A$(Hx(Q)).telemetry}function nj(){let $=Gx();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function aj($){let Z=await Fx($),Q=Ux(Z,$),J=[Z.pluginDefinition],W=Z.claims?.subject,X=J3(Z.bundle?.remoteConfig,W),j;return{prepared:Z,extensions:J,telemetry:Q,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=X?Y.config.sessionId?.trim()||Kx():Y.config.sessionId;if(H&&X)j=H;let K=H&&X?X3(H,Z.bundle?.remoteConfig,W):void 0,G=K?{...Y.sessionMetadata??{},[W3]:K}:Y.sessionMetadata;return{...Y,...G?{sessionMetadata:G}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...J],telemetry:Q??B}}},async dispose(){if(j)Bx(j)}}}var XA={};w(XA,{createTeamName:()=>V3,DefaultRuntimeBuilder:()=>X4});import{hasRuntimeConfigExtension as Cx,resolveMcpTimeoutSeconds as wx}from"@cline/shared";import{nanoid as Px}from"nanoid";O1();var WA={};w(WA,{createLocalTeamStore:()=>ej,SqliteTeamStore:()=>N8,FileTeamStore:()=>c9});import{appendFileSync as Dx,existsSync as J4,mkdirSync as eL,readdirSync as _x,readFileSync as $A,renameSync as Lx,writeFileSync as Ax}from"node:fs";import{join as oj}from"node:path";import{resolveTeamDataDir as Ox}from"@cline/shared/storage";function ZA(){return new Date().toISOString()}function sj($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function QA($){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 c9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Ox()}init(){this.ensureTeamDir()}listTeamNames(){if(!J4(this.teamDirPath))return[];return _x(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>J4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?QA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!J4(Q))return[];return $A(Q,"utf8").split(`
|
|
633
633
|
`).map((J)=>J.trim()).filter(Boolean).map((J)=>{try{return JSON.parse(J)}catch{return}}).filter((J)=>J!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?QA(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Dx(this.historyPath($),`${JSON.stringify({ts:ZA(),eventType:Z.type,payload:Z})}
|
|
634
634
|
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let J={version:1,updatedAt:ZA(),teamState:Z,teammates:Q},W=this.statePath($),X=`${W}.tmp`;Ax(X,`${JSON.stringify(J,null,2)}
|
|
635
635
|
`,"utf8"),Lx(X,W)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let J=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(J.length===0)return[];let W=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:W}:X)},this.persistRuntime($,Q.teamState,Q.teammates),J}ensureTeamDir(){if(!J4(this.teamDirPath))eL(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=oj(this.ensureTeamDir(),sj($));if(!J4(Z))eL(Z,{recursive:!0});return Z}statePath($){return oj(this.ensureTeamDir(),sj($),"state.json")}historyPath($){return oj(this.ensureTeamDir(),sj($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!J4(Z))return;try{let Q=JSON.parse($A(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as qx,mkdirSync as zx}from"node:fs";import{join as Tx}from"node:path";import{safeJsonParse as JA}from"@cline/shared";import{loadSqliteDb as Nx,nowIso as tj}from"@cline/shared/db";import{resolveDbDataDir as fx}from"@cline/shared/storage";function Rx(){return fx()}function W4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Mx($){let Z=JA($);if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(!J||typeof J!=="object")continue;let W=J,X=W.agentId,j=W.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof j!=="string"||!j.trim())continue;let Y={agentId:X.trim(),rolePrompt:j};if(typeof W.modelId==="string"&&W.modelId.trim())Y.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))Y.maxIterations=Math.max(1,Math.floor(W.maxIterations));Q.push(Y)}return Q}function Ex($){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 N8{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??Rx()}init(){this.getRawDb()}ensureTeamDir(){if(!qx(this.teamDirPath))zx(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Tx(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Nx(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
@@ -763,26 +763,26 @@ Caused by: ${$.stack}`;return X}async function Wx($){return await new Promise((Z
|
|
|
763
763
|
reviewed_by = excluded.reviewed_by,
|
|
764
764
|
reviewed_at = excluded.reviewed_at,
|
|
765
765
|
version = team_outcome_fragments.version + 1`,[J,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=W4($),J=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(J.length===0)return[];let W=tj();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
766
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,W,Q]),J.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function ej($={}){try{let Z=new N8($);return Z.init(),Z}catch{let Z=new c7({teamDir:$.teamDir});return Z.init(),Z}}function j3($,Z){return Cx($,Z)}function Sx($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function bx($,Z){return $.filter((Q)=>Sx(Q.name,Z))}function $Y($,Z){return Z$(bx($,Z))}var yx={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 kx($){let Z=$.trim().toLowerCase();return yx[Z]??Z}function Ix($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(kx));if(Z.skills!==void 0)Q.add("skills");return $.filter((J)=>Q.has(J.name))}function V3(){return`team-${Px(5)}`}function Y3($,Z,Q,J,W,X,j,Y,V){let B=Q1[$$({mode:Q})],H=n8(Z,J,Q,W??r8);return $Y(v2({cwd:$,telemetry:V,...B,enableSkills:!!j,...H,executors:{...j?{skills:j}:{},...Y??{}}}),X)}function hx($){return Y3($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,xx,$.toolExecutors).some((Z)=>Z.name==="skills")}var xx=async()=>"";async function gx($){let Z=J0();if(!B$({filePath:Z}))return{tools:[]};let Q=new Z8({clientFactory:w6({settingsPath:Z})}),J;try{J=await $8(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let W=J.filter((Y)=>Y.disabled!==!0),X=await Promise.allSettled(W.map((Y)=>S6({serverName:Y.name,provider:Q,timeoutMs:wx(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of X.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function vx($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function mx($){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 cx($){let Z=Q1[$$({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 X4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:J,logger:W,telemetry:X,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,K=$.onTeamEvent??(()=>{}),G=cx(Z),F=Z.workspaceRoot??Z.cwd,U=$.toolPolicies??Z.toolPolicies,_=P1(),L=[],O=Z.teamName?.trim()||V3(),D=Z.sessionId?.trim()||O,q=G.enableSpawnAgent?m6({workspaceRoot:F}):{configs:[],errors:[]},T=q.configs.some((i)=>i.skills!==void 0),z=j3(B,"rules"),A=j3(B,"skills"),R=A||T,N=j3(B,"workflows"),S=j3(B,"plugins"),y=z||A||N,s=!1,c=Boolean(V),b=V,r;for(let i of q.errors)(W??Z.logger)?.log?.(`[agents] Failed to load agent config at ${i.path}: ${i.error.message}`);if(!b&&(y||T))b=t$({skills:R?{workspacePath:F,includePluginSkills:S,pluginSkillDirectories:S?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(b)await b.start().catch(()=>{});let O0=G.enableTools&&A&&Boolean(b)&&b?.hasConfiguredSkills(Z.skills)===!0&&hx({cwd:Z.cwd,providerId:Z.providerId,mode:G.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:U,toolExecutors:H}),N$=b&&y?b.createExtension({includeRules:z,includeSkills:A,includeWorkflows:N,registerSkillsTool:O0,allowedSkillNames:Z.skills}):void 0,f$=N$?[...J??Z.extensions??[],N$]:J??Z.extensions;if(G.enableTools){if(L.push(...Y3(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry)),!G.disableMcpSettingsTools){let i=await gx(Z.logger);L.push(...i.tools),r=i.shutdown}}let X0,d1=G.enableAgentTeams?ej():void 0,R$=d1?.loadRuntime(D),f1=R$?.state,p0=R$?.teammates??[],M$=new Map(p0.map((i)=>[i.agentId,i])),M0=Z.sessionId||O,I0,R1=[],u=!1,x0=u$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:f$,logger:W??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(G.enableSpawnAgent){if(q.configs.length>0)L.push(...$Y(c6({configProvider:x0,agents:q.configs,createSubAgentTools:(i)=>G.enableTools?Ix(Y3(Z.cwd,i.providerId??Z.providerId,G.mode,i.modelId??Z.modelId,Z.toolRoutingRules,U,i.skills!==void 0&&b?.createSkillsExecutor?b.createSkillsExecutor(i.skills):void 0,H,X??Z.telemetry),i):[],hookErrorMode:Z.hookErrorMode,toolPolicies:U,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),U))}if(!this.teamRuntimeEntries.has(M0))this.teamRuntimeEntries.set(M0,{delegatedAgentConfigProvider:x0});let h=()=>{if(!G.enableAgentTeams)return;let i=this.teamRuntimeEntries.get(M0)??{delegatedAgentConfigProvider:x0};if(this.teamRuntimeEntries.set(M0,i),X0=i.runtime,!X0){if(X0=new U8({teamName:O,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:G.missionLogIntervalSteps,missionLogIntervalMs:G.missionLogIntervalMs,onTeamEvent:(G0)=>{if(K(G0),X0&&d1){if(G0.type==="teammate_spawned"&&G0.teammate?.rolePrompt){let p1={agentId:G0.agentId,rolePrompt:G0.teammate.rolePrompt,modelId:G0.teammate.modelId,maxIterations:G0.teammate.maxIterations};M$.set(p1.agentId,p1)}if(G0.type==="teammate_shutdown"&&!mx(G0.reason))M$.delete(G0.agentId);d1.handleTeamEvent(D,G0),d1.persistRuntime(D,X0.exportState(),Array.from(M$.values()))}}}),f1)X0.hydrateState(f1),u=!0;i.runtime=X0}if(!s){if(!X0)return;s=!0;let G0=t8({runtime:X0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(f1),restoredTeammates:p0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(p1)=>{R1=p1,I0?.addTools(p1)},createBaseTools:G.enableTools?()=>Y3(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry):void 0,teammateConfigProvider:x0});if(u)X0.recoverActiveRuns("runtime_recovered");if(G0.restoredFromPersistence)Y?.();L.push(...G0.tools)}return X0};if(G.enableSpawnAgent&&j){let i=j();L.push({...i,execute:async(G0,p1)=>{return h(),i.execute(G0,p1)}})}if(G.enableAgentTeams)h();let H0=$Y(L,U),E0=H0.some((i)=>i.name==="submit_and_exit"&&i.lifecycle?.completesRun===!0),C0=G.enableAgentTeams?()=>{let i=this.teamRuntimeEntries.get(M0)?.runtime;if(!i)return;let G0=i.listTasks(),p1=G0.some((E$)=>E$.status==="in_progress"||E$.status==="pending"),DV=i.listRuns({}),SO=DV.some((E$)=>E$.status==="running"||E$.status==="queued");if(p1||SO){let E$=G0.filter((t0)=>t0.status==="in_progress"||t0.status==="pending").map((t0)=>`${t0.id} (${t0.status}): ${t0.title}`).join(", "),_V=DV.filter((t0)=>t0.status==="running"||t0.status==="queued").map((t0)=>`${t0.id} (${t0.status})`).join(", "),l3=[];if(E$)l3.push(`Unfinished tasks: ${E$}`);if(_V)l3.push(`Active runs: ${_V}`);return`[SYSTEM] You still have team obligations. ${l3.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,D2=E0?{requireCompletionTool:!0,...C0?{completionGuard:C0}:{}}:C0?{completionGuard:C0}:void 0;return{tools:H0,logger:W??Z.logger,telemetry:X??Z.telemetry,teamRuntime:X0,teamRestoredFromPersistence:Boolean(f1),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(M0)?.delegatedAgentConfigProvider??x0,extensions:f$,completionPolicy:D2,registerLeadAgent:(i)=>{if(I0=i,R1.length>0)i.addTools(Z$(R1,[..._]))},shutdown:async(i)=>{if(vx(X0,i),this.teamRuntimeEntries.delete(M0),await r?.(),!c)b?.stop()}}}}var jA={};w(jA,{RuntimeOAuthTokenManager:()=>j4,OAuthReauthRequiredError:()=>f8});function ux($,Z){let Q=$?.expiresAt,J=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===J}class f8 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 j4{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new K1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=F0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let J=this.refreshInFlight.get(Z);if(J)return J;let W=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,W),W}async resolveProviderApiKeyInternal($,Z,Q){let J=F0($);if(!J)return null;let W=this.providerSettingsManager.getProviderSettings(Z);if(!W)return t(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let X=M4($,W);if(!X)return t(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;t(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${P0(X.access)} refreshTokenHash=${P0(X.refresh)}`);let j=await J.refresh({settings:W,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw t(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new f8($);let Y=O2({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:j,setLastUsed:!1,save:!1}),V=!ux(W.auth,Y.auth);if(V)t(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${P0(j.access)} newRefreshTokenHash=${P0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else t(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:J.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}var VA={};w(VA,{requestDesktopToolApproval:()=>QY});import{mkdir as dx,readFile as px,unlink as lx,writeFile as ix}from"node:fs/promises";import{join as YA}from"node:path";function rx($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function nx($){return new Promise((Z)=>setTimeout(Z,$))}async function ZY($){try{await lx($)}catch{}}async function QY($,Z={}){let Q=Z.approvalDir?.trim(),J=Z.sessionId?.trim();if(!Q||!J)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await dx(Q,{recursive:!0});let W=rx(`${$.toolCallId}`),X=YA(Q,`${J}.request.${W}.json`),j=YA(Q,`${J}.decision.${W}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await ix(X,`${JSON.stringify({requestId:W,sessionId:J,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
767
|
-
`,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let K=await px(j,"utf8"),G=JSON.parse(K),F={approved:G.approved===!0,reason:typeof G.reason==="string"?G.reason:void 0};return await Promise.all([ZY(j),ZY(X)]),F}catch{}await nx(B)}return await ZY(X),{approved:!1,reason:"Tool approval request timed out"}}O1();var TA={};w(TA,{uninstallMarketplaceSkill:()=>_3,uninstallMarketplacePlugin:()=>L3,uninstallMarketplaceMcpServerFromSettings:()=>U3,uninstallMarketplaceEntry:()=>AY,resolveMarketplaceMcpServerName:()=>
|
|
768
|
-
`,"utf8")}function FA($){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 G3($){if(!R8($))return;let Z=$.metadata;return R8(Z)?Z:void 0}function K3($,Z){let Q=G3($);if(!Q||Q.source!=="plugin")return!1;let J=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&J===Z.pluginName){if(!Z.pluginPath||W===Z.pluginPath)return!0}if(W&&Z.pluginPath&&(W===Z.pluginPath||H3(Z.pluginPath,W)||H3(W,Z.pluginPath)))return!0;if(J&&Z.pluginNames?.some((X)=>X===J))return!0;if(W&&Z.pluginPaths?.some((X)=>W===X||H3(X,W)||H3(W,X)))return!0;return!1}function Yg($){let Z=R8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:GA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Vg($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await V6({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],J=[],W=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let j=X.__clinePluginPath;if(!j)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){W.push({pluginPath:j,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:j});for(let B of Y)J.push({pluginName:X.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:j}}})}return{plugins:Q,servers:J,failures:W}}finally{await Z.shutdown().catch(()=>{})}}async function d7($){let Z=$.settingsPath??J0(),Q={mutations:[],failures:[]},J;try{J=await Vg($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...J.failures);let W;try{W=WY(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=XY(W),j=new Map,Y=new Map;for(let B of J.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=FQ(J.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!j.has(H.pluginPath))j.set(H.pluginPath,new Set);if(B.name)j.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let K=X[B.registration.name];if(K!==void 0){if(!K3(K,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=Yg({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:R8(K)?K:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:K===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let K=G3(H),G=typeof K?.pluginPath==="string"?K.pluginPath:"",F=j.get(G);if(F&&K3(H,{pluginPath:G})&&!F.has(B))delete X[B],Q.mutations.push({name:B,pluginName:typeof K?.pluginName==="string"?K.pluginName:Y.get(G)??"plugin",pluginPath:G,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{jY(Z,W,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function YY($){let Z=$.settingsPath??J0(),Q;try{Q=WY(Z)}catch{return[]}let J=XY(Q),W=FA($),X=[];for(let[j,Y]of Object.entries(J)){if(!R8(Y)||!K3(Y,W))continue;let V=G3(Y);J[j]={...Y,disabled:!0},X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)jY(Z,Q,J);return X}function p7($){let Z=$.settingsPath??J0(),Q;try{Q=WY(Z)}catch{return[]}let J=XY(Q),W=FA($),X=[];for(let[j,Y]of Object.entries(J)){if(!K3(Y,W))continue;let V=G3(Y);delete J[j],X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)jY(Z,Q,J);return X}var FY="_installed",Og="package",qg=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function BY($){return $.trim().toLowerCase()}function N1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function zg($){return $.replace(/-[0-9a-f]{12}$/i,"")}function HY($){let Z=Ug($);return Z?$.slice(0,-Z.length):$}function KY($){if(!V4($))return;try{let Z=JSON.parse(Hg($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function UY($,Z){let Q=_g(Z,$);return Q===""||!Q.startsWith("..")&&!Dg(Q)}function DA($){let Q=Y4($).split(VY),J=Q.lastIndexOf(FY);if(J<0)return;let W=Q[J+1];if(!W)return;let X=qg.get(W)??1,j=J+2+X;if(Q.length<j)return;let Y=Q.slice(0,j).join(VY)||VY;return V4(Y)?Y:void 0}function F3($){try{return Bg($,{withFileTypes:!0})}catch{return[]}}function Tg($){let Z=O$($,FY);if(!V4(Z))return[];let Q=[];for(let J of F3(Z)){if(!J.isDirectory())continue;let W=O$(Z,J.name);if(J.name==="git"){for(let X of F3(W)){if(!X.isDirectory())continue;let j=O$(W,X.name);for(let Y of F3(j))if(Y.isDirectory())Q.push(O$(j,Y.name))}continue}for(let X of F3(W))if(X.isDirectory())Q.push(O$(W,X.name))}return Q.sort((J,W)=>J.localeCompare(W))}function _A($){try{return Lg($)}catch{return[]}}function GY($){let Z=_A($),Q=new Set;N1(Q,G1($)),N1(Q,zg(G1($))),N1(Q,KY(O$($,"package.json"))),N1(Q,KY(O$($,Og,"package.json")));for(let J of Z)N1(Q,G1(J)),N1(Q,HY(G1(J)));return{installPath:$,entryPaths:Z,names:[...Q].sort((J,W)=>J.localeCompare(W)),installed:!0}}function Ng($,Z){let Q=Y4($),J=Z.find((j)=>UY(Q,j));if(!J)return;let W=G2(Q);while(W!==J&&W!==G2(W)){if(V4(O$(W,"package.json")))return W;W=G2(W)}let X=G1(Q);if((X==="index.ts"||X==="index.js")&&G2(Q)!==J)return G2(Q);return Q}function LA($,Z){let Q=Ng($,Z);if(!Q)return;let J=new Set;return N1(J,G1($)),N1(J,HY(G1($))),N1(J,G1(Q)),N1(J,HY(G1(Q))),N1(J,KY(O$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...J].sort((W,X)=>W.localeCompare(X)),installed:!1}}function fg($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Ag(Z).filter((Q)=>V4(Q))}function Rg($){let Z=new Map;for(let Q of $){for(let J of Tg(Q))Z.set(J,GY(J));for(let J of _A(Q)){let W=DA(J);if(W){if(!Z.has(W))Z.set(W,GY(W));continue}let X=LA(J,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,J)=>Q.installPath.localeCompare(J.installPath))}function Mg($,Z){let Q=BY(Z);if(!Q)return!1;if(BY($.installPath)===Q)return!0;return $.names.some((J)=>BY(J)===Q)}function Eg($,Z,Q){let J=Y4($);for(let X of Z){if(UY(J,X.installPath))return X;if(X.entryPaths.some((j)=>Y4(j)===J))return X}let W=DA(J);if(W)return GY(W);if(V4(J))return LA(J,Q);return}function Cg($){let Z=j0(),Q=Z.disabledPlugins;if(!Q?.length)return;let J=Q.filter((W)=>{let X=Y4(W);if(UY(X,$.installPath))return!1;return!$.entryPaths.some((j)=>Y4(j)===X)});if(J.length===Q.length)return;g0({...Z,disabledPlugins:J})}function wg($){let Z=G2($);while(Z!==G2(Z)&&G1(Z)!==FY){try{Kg(Z)}catch{return}Z=G2(Z)}}function Pg($){return`${$.names[0]??G1($.installPath)} at ${$.installPath}`}async function l7($){let Z=fg($),Q=Rg(Z),J=$.path?.trim(),W=$.name?.trim(),X;if(J){if(X=Eg(J,Q,Z),!X)throw Error(`No plugin found at ${J}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>Mg(V,W));if(Y.length===0)throw Error(`No plugin found matching "${W}"`);if(Y.length>1)throw Error(`Multiple plugins match "${W}": ${Y.map(Pg).join(", ")}`);X=Y[0]}let j=Fg(X.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(p7({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Gg(X.installPath,{recursive:j.isDirectory(),force:!0}),Cg(X),X.installed)wg(X.installPath);return{name:W||X.names[0]||G1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var DY=120000,i7=12000,gg=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,vg=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,mg=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,cg=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function _Y($){return $.install?.args??[]}function ug(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||yg()}function dg($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function pg($){return dg($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function zA($){return $.split(/\r?\n/).map((Z)=>{if(!gg.test(Z))return Z;return Z.replace(vg,"$1[redacted]").replace(mg,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(cg,"$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(`
|
|
769
|
-
`).slice(-
|
|
766
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,W,Q]),J.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function ej($={}){try{let Z=new N8($);return Z.init(),Z}catch{let Z=new c9({teamDir:$.teamDir});return Z.init(),Z}}function j3($,Z){return Cx($,Z)}function Sx($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function bx($,Z){return $.filter((Q)=>Sx(Q.name,Z))}function $Y($,Z){return Z$(bx($,Z))}var yx={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 kx($){let Z=$.trim().toLowerCase();return yx[Z]??Z}function Ix($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(kx));if(Z.skills!==void 0)Q.add("skills");return $.filter((J)=>Q.has(J.name))}function V3(){return`team-${Px(5)}`}function Y3($,Z,Q,J,W,X,j,Y,V){let B=Q1[$$({mode:Q})],H=n8(Z,J,Q,W??r8);return $Y(v2({cwd:$,telemetry:V,...B,enableSkills:!!j,...H,executors:{...j?{skills:j}:{},...Y??{}}}),X)}function hx($){return Y3($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,xx,$.toolExecutors).some((Z)=>Z.name==="skills")}var xx=async()=>"";async function gx($){let Z=J0();if(!B$({filePath:Z}))return{tools:[]};let Q=new Z8({clientFactory:w6({settingsPath:Z})}),J;try{J=await $8(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let W=J.filter((Y)=>Y.disabled!==!0),X=await Promise.allSettled(W.map((Y)=>S6({serverName:Y.name,provider:Q,timeoutMs:wx(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of X.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function vx($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function mx($){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 cx($){let Z=Q1[$$({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 X4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:J,logger:W,telemetry:X,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,K=$.onTeamEvent??(()=>{}),G=cx(Z),F=Z.workspaceRoot??Z.cwd,U=$.toolPolicies??Z.toolPolicies,_=P1(),L=[],O=Z.teamName?.trim()||V3(),D=Z.sessionId?.trim()||O,q=G.enableSpawnAgent?m6({workspaceRoot:F}):{configs:[],errors:[]},T=q.configs.some((i)=>i.skills!==void 0),z=j3(B,"rules"),A=j3(B,"skills"),R=A||T,N=j3(B,"workflows"),S=j3(B,"plugins"),y=z||A||N,s=!1,c=Boolean(V),b=V,r;for(let i of q.errors)(W??Z.logger)?.log?.(`[agents] Failed to load agent config at ${i.path}: ${i.error.message}`);if(!b&&(y||T))b=t$({skills:R?{workspacePath:F,includePluginSkills:S,pluginSkillDirectories:S?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(b)await b.start().catch(()=>{});let O0=G.enableTools&&A&&Boolean(b)&&b?.hasConfiguredSkills(Z.skills)===!0&&hx({cwd:Z.cwd,providerId:Z.providerId,mode:G.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:U,toolExecutors:H}),N$=b&&y?b.createExtension({includeRules:z,includeSkills:A,includeWorkflows:N,registerSkillsTool:O0,allowedSkillNames:Z.skills}):void 0,f$=N$?[...J??Z.extensions??[],N$]:J??Z.extensions;if(G.enableTools){if(L.push(...Y3(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry)),!G.disableMcpSettingsTools){let i=await gx(Z.logger);L.push(...i.tools),r=i.shutdown}}let X0,d1=G.enableAgentTeams?ej():void 0,R$=d1?.loadRuntime(D),f1=R$?.state,p0=R$?.teammates??[],M$=new Map(p0.map((i)=>[i.agentId,i])),M0=Z.sessionId||O,I0,R1=[],u=!1,x0=u$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:f$,logger:W??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(G.enableSpawnAgent){if(q.configs.length>0)L.push(...$Y(c6({configProvider:x0,agents:q.configs,createSubAgentTools:(i)=>G.enableTools?Ix(Y3(Z.cwd,i.providerId??Z.providerId,G.mode,i.modelId??Z.modelId,Z.toolRoutingRules,U,i.skills!==void 0&&b?.createSkillsExecutor?b.createSkillsExecutor(i.skills):void 0,H,X??Z.telemetry),i):[],hookErrorMode:Z.hookErrorMode,toolPolicies:U,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),U))}if(!this.teamRuntimeEntries.has(M0))this.teamRuntimeEntries.set(M0,{delegatedAgentConfigProvider:x0});let h=()=>{if(!G.enableAgentTeams)return;let i=this.teamRuntimeEntries.get(M0)??{delegatedAgentConfigProvider:x0};if(this.teamRuntimeEntries.set(M0,i),X0=i.runtime,!X0){if(X0=new U8({teamName:O,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:G.missionLogIntervalSteps,missionLogIntervalMs:G.missionLogIntervalMs,onTeamEvent:(G0)=>{if(K(G0),X0&&d1){if(G0.type==="teammate_spawned"&&G0.teammate?.rolePrompt){let p1={agentId:G0.agentId,rolePrompt:G0.teammate.rolePrompt,modelId:G0.teammate.modelId,maxIterations:G0.teammate.maxIterations};M$.set(p1.agentId,p1)}if(G0.type==="teammate_shutdown"&&!mx(G0.reason))M$.delete(G0.agentId);d1.handleTeamEvent(D,G0),d1.persistRuntime(D,X0.exportState(),Array.from(M$.values()))}}}),f1)X0.hydrateState(f1),u=!0;i.runtime=X0}if(!s){if(!X0)return;s=!0;let G0=t8({runtime:X0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(f1),restoredTeammates:p0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(p1)=>{R1=p1,I0?.addTools(p1)},createBaseTools:G.enableTools?()=>Y3(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry):void 0,teammateConfigProvider:x0});if(u)X0.recoverActiveRuns("runtime_recovered");if(G0.restoredFromPersistence)Y?.();L.push(...G0.tools)}return X0};if(G.enableSpawnAgent&&j){let i=j();L.push({...i,execute:async(G0,p1)=>{return h(),i.execute(G0,p1)}})}if(G.enableAgentTeams)h();let H0=$Y(L,U),E0=H0.some((i)=>i.name==="submit_and_exit"&&i.lifecycle?.completesRun===!0),C0=G.enableAgentTeams?()=>{let i=this.teamRuntimeEntries.get(M0)?.runtime;if(!i)return;let G0=i.listTasks(),p1=G0.some((E$)=>E$.status==="in_progress"||E$.status==="pending"),DV=i.listRuns({}),SO=DV.some((E$)=>E$.status==="running"||E$.status==="queued");if(p1||SO){let E$=G0.filter((t0)=>t0.status==="in_progress"||t0.status==="pending").map((t0)=>`${t0.id} (${t0.status}): ${t0.title}`).join(", "),_V=DV.filter((t0)=>t0.status==="running"||t0.status==="queued").map((t0)=>`${t0.id} (${t0.status})`).join(", "),l3=[];if(E$)l3.push(`Unfinished tasks: ${E$}`);if(_V)l3.push(`Active runs: ${_V}`);return`[SYSTEM] You still have team obligations. ${l3.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,D2=E0?{requireCompletionTool:!0,...C0?{completionGuard:C0}:{}}:C0?{completionGuard:C0}:void 0;return{tools:H0,logger:W??Z.logger,telemetry:X??Z.telemetry,teamRuntime:X0,teamRestoredFromPersistence:Boolean(f1),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(M0)?.delegatedAgentConfigProvider??x0,extensions:f$,completionPolicy:D2,registerLeadAgent:(i)=>{if(I0=i,R1.length>0)i.addTools(Z$(R1,[..._]))},shutdown:async(i)=>{if(vx(X0,i),this.teamRuntimeEntries.delete(M0),await r?.(),!c)b?.stop()}}}}var jA={};w(jA,{RuntimeOAuthTokenManager:()=>j4,OAuthReauthRequiredError:()=>f8});function ux($,Z){let Q=$?.expiresAt,J=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===J}class f8 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 j4{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new K1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=F0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let J=this.refreshInFlight.get(Z);if(J)return J;let W=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,W),W}async resolveProviderApiKeyInternal($,Z,Q){let J=F0($);if(!J)return null;let W=this.providerSettingsManager.getProviderSettings(Z);if(!W)return t(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let X=M4($,W);if(!X)return t(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;t(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${P0(X.access)} refreshTokenHash=${P0(X.refresh)}`);let j=await J.refresh({settings:W,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw t(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new f8($);let Y=O2({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:j,setLastUsed:!1,save:!1}),V=!ux(W.auth,Y.auth);if(V)t(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${P0(j.access)} newRefreshTokenHash=${P0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else t(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:J.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}var VA={};w(VA,{requestDesktopToolApproval:()=>QY});import{mkdir as dx,readFile as px,unlink as lx,writeFile as ix}from"node:fs/promises";import{join as YA}from"node:path";function rx($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function nx($){return new Promise((Z)=>setTimeout(Z,$))}async function ZY($){try{await lx($)}catch{}}async function QY($,Z={}){let Q=Z.approvalDir?.trim(),J=Z.sessionId?.trim();if(!Q||!J)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await dx(Q,{recursive:!0});let W=rx(`${$.toolCallId}`),X=YA(Q,`${J}.request.${W}.json`),j=YA(Q,`${J}.decision.${W}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await ix(X,`${JSON.stringify({requestId:W,sessionId:J,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
767
|
+
`,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let K=await px(j,"utf8"),G=JSON.parse(K),F={approved:G.approved===!0,reason:typeof G.reason==="string"?G.reason:void 0};return await Promise.all([ZY(j),ZY(X)]),F}catch{}await nx(B)}return await ZY(X),{approved:!1,reason:"Tool approval request timed out"}}O1();var TA={};w(TA,{uninstallMarketplaceSkill:()=>_3,uninstallMarketplacePlugin:()=>L3,uninstallMarketplaceMcpServerFromSettings:()=>U3,uninstallMarketplaceEntry:()=>AY,resolveMarketplaceMcpServerName:()=>r9,marketplaceEntryKey:()=>LY,isMarketplaceSkillInstalled:()=>D3,getMarketplaceSkillCandidates:()=>n9,getGlobalMarketplaceSkillPaths:()=>a9,findInstalledGlobalMarketplaceSkillName:()=>o9});import{spawn as Sg}from"node:child_process";import{existsSync as qA,rmSync as bg}from"node:fs";import{homedir as yg,platform as kg}from"node:os";import{dirname as Ig,join as OA}from"node:path";import{resolveClineDir as hg,resolveMcpSettingsPath as xg}from"@cline/shared/storage";var HA={};w(HA,{parseMcpInstallArgs:()=>u9,installMcpServer:()=>JY,buildMcpInstallTransport:()=>B3});function ax($){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 ox($){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 sx($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),J=$.slice(Z+1).trim();if(!Q||!J)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,J]}function tx($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function BA($){let Z=[...$.headers??[]],Q=[],J=$.transport,W=$.targetArgs??[];for(let X=0;X<W.length;X++){let j=W[X];if($.parseTransport&&j==="--transport"){let Y=W[X+1];if(!Y)throw Error("--transport requires a value");J=Y,X++;continue}if($.parseTransport&&j?.startsWith("--transport=")){J=j.slice(12);continue}if(j==="--header"){let Y=W[X+1];if(!Y)throw Error("--header requires a value");Z.push(Y),X++;continue}if(j?.startsWith("--header=")){Z.push(j.slice(9));continue}Q.push(j)}return{headers:Z,targetArgs:Q,transport:J}}function ex($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let J of $){let[W,X]=sx(J);if(Z[W]=X,tx(X))Q.push(`Header "${W}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function B3($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:J,transport:W}=BA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=ax(W),{headers:j,warnings:Y}=ex(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=J;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:B,args:H.length>0?H:void 0},warnings:Y}}if(J.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=J[0]?.trim()??"";return ox(V),{name:Z,transport:j?{type:X,url:V,headers:j}:{type:X,url:V},warnings:Y}}function u9($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...BA({parseTransport:!0,targetArgs:Q})}}function $g($,Z,Q){q1(Q,(J)=>{let W=J.mcpServers,X=W&&typeof W==="object"&&!Array.isArray(W)?{...W}:{};X[$]={transport:Z},J.mcpServers=X})}function JY($){let{name:Z,transport:Q,warnings:J}=B3($);return $g(Z,Q,$.settingsPath??J0()),{name:Z,status:"installed",transport:Q,warnings:J}}O1();var AA={};w(AA,{uninstallPlugin:()=>l9});import{existsSync as V4,readdirSync as Bg,readFileSync as Hg,rmdirSync as Kg,rmSync as Gg,statSync as Fg}from"node:fs";import{basename as G1,dirname as G2,extname as Ug,isAbsolute as Dg,join as O$,relative as _g,resolve as Y4,sep as VY}from"node:path";import{discoverPluginModulePaths as Lg,resolvePluginConfigSearchPaths as Ag}from"@cline/shared/storage";var UA={};w(UA,{syncPluginMcpServersToSettings:()=>d9,removePluginMcpServersFromSettings:()=>p9,disablePluginMcpServersInSettings:()=>YY});import{existsSync as Zg,mkdirSync as Qg,readFileSync as Jg,writeFileSync as Wg}from"node:fs";import{dirname as GA,isAbsolute as Xg,relative as jg,resolve as KA}from"node:path";function R8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H3($,Z){let Q=jg(KA($),KA(Z));return Q===""||!Q.startsWith("..")&&!Xg(Q)}function WY($){if(!Zg($))return{mcpServers:{}};try{let Z=JSON.parse(Jg($,"utf8"));if(R8(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 XY($){if(R8($.mcpServers))return{...$.mcpServers};return{}}function jY($,Z,Q){Qg(GA($),{recursive:!0}),Wg($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
|
|
768
|
+
`,"utf8")}function FA($){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 G3($){if(!R8($))return;let Z=$.metadata;return R8(Z)?Z:void 0}function K3($,Z){let Q=G3($);if(!Q||Q.source!=="plugin")return!1;let J=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&J===Z.pluginName){if(!Z.pluginPath||W===Z.pluginPath)return!0}if(W&&Z.pluginPath&&(W===Z.pluginPath||H3(Z.pluginPath,W)||H3(W,Z.pluginPath)))return!0;if(J&&Z.pluginNames?.some((X)=>X===J))return!0;if(W&&Z.pluginPaths?.some((X)=>W===X||H3(X,W)||H3(W,X)))return!0;return!1}function Yg($){let Z=R8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:GA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Vg($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await V6({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],J=[],W=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let j=X.__clinePluginPath;if(!j)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){W.push({pluginPath:j,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:j});for(let B of Y)J.push({pluginName:X.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:j}}})}return{plugins:Q,servers:J,failures:W}}finally{await Z.shutdown().catch(()=>{})}}async function d9($){let Z=$.settingsPath??J0(),Q={mutations:[],failures:[]},J;try{J=await Vg($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...J.failures);let W;try{W=WY(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=XY(W),j=new Map,Y=new Map;for(let B of J.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=F7(J.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!j.has(H.pluginPath))j.set(H.pluginPath,new Set);if(B.name)j.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let K=X[B.registration.name];if(K!==void 0){if(!K3(K,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=Yg({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:R8(K)?K:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:K===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let K=G3(H),G=typeof K?.pluginPath==="string"?K.pluginPath:"",F=j.get(G);if(F&&K3(H,{pluginPath:G})&&!F.has(B))delete X[B],Q.mutations.push({name:B,pluginName:typeof K?.pluginName==="string"?K.pluginName:Y.get(G)??"plugin",pluginPath:G,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{jY(Z,W,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function YY($){let Z=$.settingsPath??J0(),Q;try{Q=WY(Z)}catch{return[]}let J=XY(Q),W=FA($),X=[];for(let[j,Y]of Object.entries(J)){if(!R8(Y)||!K3(Y,W))continue;let V=G3(Y);J[j]={...Y,disabled:!0},X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)jY(Z,Q,J);return X}function p9($){let Z=$.settingsPath??J0(),Q;try{Q=WY(Z)}catch{return[]}let J=XY(Q),W=FA($),X=[];for(let[j,Y]of Object.entries(J)){if(!K3(Y,W))continue;let V=G3(Y);delete J[j],X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)jY(Z,Q,J);return X}var FY="_installed",Og="package",qg=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function BY($){return $.trim().toLowerCase()}function N1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function zg($){return $.replace(/-[0-9a-f]{12}$/i,"")}function HY($){let Z=Ug($);return Z?$.slice(0,-Z.length):$}function KY($){if(!V4($))return;try{let Z=JSON.parse(Hg($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function UY($,Z){let Q=_g(Z,$);return Q===""||!Q.startsWith("..")&&!Dg(Q)}function DA($){let Q=Y4($).split(VY),J=Q.lastIndexOf(FY);if(J<0)return;let W=Q[J+1];if(!W)return;let X=qg.get(W)??1,j=J+2+X;if(Q.length<j)return;let Y=Q.slice(0,j).join(VY)||VY;return V4(Y)?Y:void 0}function F3($){try{return Bg($,{withFileTypes:!0})}catch{return[]}}function Tg($){let Z=O$($,FY);if(!V4(Z))return[];let Q=[];for(let J of F3(Z)){if(!J.isDirectory())continue;let W=O$(Z,J.name);if(J.name==="git"){for(let X of F3(W)){if(!X.isDirectory())continue;let j=O$(W,X.name);for(let Y of F3(j))if(Y.isDirectory())Q.push(O$(j,Y.name))}continue}for(let X of F3(W))if(X.isDirectory())Q.push(O$(W,X.name))}return Q.sort((J,W)=>J.localeCompare(W))}function _A($){try{return Lg($)}catch{return[]}}function GY($){let Z=_A($),Q=new Set;N1(Q,G1($)),N1(Q,zg(G1($))),N1(Q,KY(O$($,"package.json"))),N1(Q,KY(O$($,Og,"package.json")));for(let J of Z)N1(Q,G1(J)),N1(Q,HY(G1(J)));return{installPath:$,entryPaths:Z,names:[...Q].sort((J,W)=>J.localeCompare(W)),installed:!0}}function Ng($,Z){let Q=Y4($),J=Z.find((j)=>UY(Q,j));if(!J)return;let W=G2(Q);while(W!==J&&W!==G2(W)){if(V4(O$(W,"package.json")))return W;W=G2(W)}let X=G1(Q);if((X==="index.ts"||X==="index.js")&&G2(Q)!==J)return G2(Q);return Q}function LA($,Z){let Q=Ng($,Z);if(!Q)return;let J=new Set;return N1(J,G1($)),N1(J,HY(G1($))),N1(J,G1(Q)),N1(J,HY(G1(Q))),N1(J,KY(O$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...J].sort((W,X)=>W.localeCompare(X)),installed:!1}}function fg($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Ag(Z).filter((Q)=>V4(Q))}function Rg($){let Z=new Map;for(let Q of $){for(let J of Tg(Q))Z.set(J,GY(J));for(let J of _A(Q)){let W=DA(J);if(W){if(!Z.has(W))Z.set(W,GY(W));continue}let X=LA(J,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,J)=>Q.installPath.localeCompare(J.installPath))}function Mg($,Z){let Q=BY(Z);if(!Q)return!1;if(BY($.installPath)===Q)return!0;return $.names.some((J)=>BY(J)===Q)}function Eg($,Z,Q){let J=Y4($);for(let X of Z){if(UY(J,X.installPath))return X;if(X.entryPaths.some((j)=>Y4(j)===J))return X}let W=DA(J);if(W)return GY(W);if(V4(J))return LA(J,Q);return}function Cg($){let Z=j0(),Q=Z.disabledPlugins;if(!Q?.length)return;let J=Q.filter((W)=>{let X=Y4(W);if(UY(X,$.installPath))return!1;return!$.entryPaths.some((j)=>Y4(j)===X)});if(J.length===Q.length)return;g0({...Z,disabledPlugins:J})}function wg($){let Z=G2($);while(Z!==G2(Z)&&G1(Z)!==FY){try{Kg(Z)}catch{return}Z=G2(Z)}}function Pg($){return`${$.names[0]??G1($.installPath)} at ${$.installPath}`}async function l9($){let Z=fg($),Q=Rg(Z),J=$.path?.trim(),W=$.name?.trim(),X;if(J){if(X=Eg(J,Q,Z),!X)throw Error(`No plugin found at ${J}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>Mg(V,W));if(Y.length===0)throw Error(`No plugin found matching "${W}"`);if(Y.length>1)throw Error(`Multiple plugins match "${W}": ${Y.map(Pg).join(", ")}`);X=Y[0]}let j=Fg(X.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(p9({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Gg(X.installPath,{recursive:j.isDirectory(),force:!0}),Cg(X),X.installed)wg(X.installPath);return{name:W||X.names[0]||G1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var DY=120000,i9=12000,gg=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,vg=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,mg=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,cg=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function _Y($){return $.install?.args??[]}function ug(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||yg()}function dg($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function pg($){return dg($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function zA($){return $.split(/\r?\n/).map((Z)=>{if(!gg.test(Z))return Z;return Z.replace(vg,"$1[redacted]").replace(mg,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(cg,"$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(`
|
|
769
|
+
`).slice(-i9)}function lg($){let Z=zA([$.stdout,$.stderr].filter(Boolean).join(`
|
|
770
770
|
`)).trim();return Z.length>0?Z:void 0}function ig($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function rg($,Z){return[$,...Z].map((Q)=>ig(zA(Q).trim())).join(" ")}var ng=async($,Z)=>new Promise((Q,J)=>{let W=!1,X=!1,j=Sg($,Z,{env:process.env,shell:kg()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!W)j.kill("SIGKILL")},DY+5000),H=setTimeout(()=>{X=!0,V+=`
|
|
771
|
-
Timed out after ${DY/1000}s.`,j.kill("SIGTERM")},DY);B.unref?.(),H.unref?.(),j.stdout?.on("data",(K)=>{if(Y+=String(K),Y.length>
|
|
771
|
+
Timed out after ${DY/1000}s.`,j.kill("SIGTERM")},DY);B.unref?.(),H.unref?.(),j.stdout?.on("data",(K)=>{if(Y+=String(K),Y.length>i9*2)Y=Y.slice(-i9)}),j.stderr?.on("data",(K)=>{if(V+=String(K),V.length>i9*2)V=V.slice(-i9)}),j.once("error",(K)=>{clearTimeout(H),clearTimeout(B),J(K)}),j.once("close",(K,G)=>{W=!0,clearTimeout(H),clearTimeout(B),Q({exitCode:X?124:K??(G==="SIGINT"?130:1),stdout:Y,stderr:V})})});function LY($){return`${$.type}:${$.id}`}function r9($){let Z=_Y($);if(Z.length===0)throw Error("Marketplace install args are required.");return u9(Z).name}function U3($,Z={}){let Q=r9($),J=Z.mcpSettingsPath??xg(),W=q1(J,(X)=>{let j=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},Y=Object.hasOwn(j,Q);if(Y)delete j[Q];return X.mcpServers=j,Y});return{name:Q,deleted:W}}function n9($){let Z=new Set,Q=(W)=>{let X=pg(W??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let J=_Y($);for(let W=0;W<J.length;W++){let X=J[W];if((X==="--skill"||X==="-s")&&J[W+1]){Q(J[W+1]),W++;continue}let j=X.split("@").at(1);if(j)Q(j)}return[...Z]}function a9($){return[OA(hg(),"skills",$,"SKILL.md"),OA(ug(),".agents","skills",$,"SKILL.md")].filter((Z,Q,J)=>J.indexOf(Z)===Q)}function o9($){if($.type!=="skill")return;return n9($).find((Z)=>a9(Z).some((Q)=>qA(Q)))}function D3($){return o9($)!==void 0}function ag($){let Z=[];if($.type!=="skill")return Z;for(let Q of n9($))for(let J of a9(Q)){if(!qA(J))continue;let W=Ig(J);bg(W,{recursive:!0,force:!0}),Z.push(W)}return Z}async function _3($,Z={}){let Q=o9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let J="npx",W=["-y","skills@latest","remove",Q,"-g","-y"],X=rg(J,W),j=Z.spawnCommand??ng,Y;try{Y=await j(J,W)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
|
|
772
772
|
${X}
|
|
773
773
|
${H instanceof Error?H.message:String(H)}`)}let V=lg(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
|
|
774
774
|
Command:
|
|
775
775
|
${X}${V?`
|
|
776
776
|
|
|
777
777
|
${V}`:""}`);let B=ag($);if(D3($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
|
|
778
|
-
`)||void 0}}async function L3($,Z={}){let[Q]=_Y($),J=Q?.trim()||$.id;if(!J)throw Error("Plugin marketplace uninstalls require a plugin name.");let W=await
|
|
779
|
-
`)}}async function AY($,Z={}){if($.type==="mcp"){let Q=
|
|
780
|
-
`,"utf8")}function qv($,Z){let Q=e($,"node_modules","@cline");if(!c1(Q))return;for(let J of IA(Q)){if(`@cline/${J.name}`===Z)continue;z3(e(Q,J.name),{recursive:!0,force:!0})}}function kA($){let Z=Av(yA($)).map((X)=>F2($,X)).filter((X)=>c1(X)&&TY(X).isFile()&&q3(X));if(Z.length>0)return Z;let Q=Jv($);if(Q?.length)return Q;let J=[],W=[$];while(W.length>0){let X=W.pop();if(!X)continue;for(let j of IA(X)){let Y=e(X,j.name);if(j.name==="node_modules"||j.name===".git")continue;if(j.isDirectory()){W.push(Y);continue}if(j.isFile()&&!j.name.startsWith(".")&&q3(Y))J.push(Y)}}return J.sort((X,j)=>X.localeCompare(j))}function IA($){try{return tg($,{withFileTypes:!0})}catch{return[]}}function zv($,Z){let Q=kA(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((J)=>`./${bA(SA($,J))}`)}async function Tv($,Z,Q){let J=zv($,Z);return await T3(e($,"package.json"),JSON.stringify({...jv,name:Q,cline:{plugins:[{paths:J}]}},null,2),"utf8"),J}async function Nv($,Z,Q){let J=e(Z,N3);return await PA(J,{recursive:!0}),await T3(e(J,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await H4(Q,["install",$.spec,"--prefix",J,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),qv(J,$.name),e(J,"node_modules",$.name)}async function NY($,Z){if(!c1(e($,"package.json")))return;await Ov($),await H4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function fv($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let J=e(Z,N3),W=["clone","--filter=blob:none"];if($.ref)W.push("--branch",$.ref);W.push("--",$.repo,J);try{await H4("git",W)}catch(X){if(!$.ref)throw X;await H4("git",["clone","--filter=blob:none","--",$.repo,J]),await H4("git",["checkout","--detach",$.ref],{cwd:J})}return await NY(J,Q),J}async function Rv($,Z,Q,J){let W=e(Z,"repo");await H4("git",["clone","--filter=blob:none","--depth","1","--",J,W]);let X=e(W,"plugins",$.slug);if(!c1(X)||!TY(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${J}`);let j=e(Z,N3);return await qY(X,j,{recursive:!0,filter:(Y)=>{let V=z$(Y);return V!==".git"&&V!=="node_modules"}}),z3(W,{recursive:!0,force:!0}),await NY(j,Q),j}function OY($){return Error(`Remote plugin file from ${$} exceeds the ${O3} byte limit`)}function Mv($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Ev($,Z){let Q=Mv($);if(Q!==void 0&&Q>O3)throw OY(Z);if(!$.body){let j=Buffer.from(await $.text(),"utf8");if(j.byteLength>O3)throw OY(Z);return j}let J=$.body.getReader(),W=[],X=0;try{while(!0){let{done:j,value:Y}=await J.read();if(j)break;let V=Buffer.from(Y);if(X+=V.byteLength,X>O3)throw await J.cancel().catch(()=>{return}),OY(Z);W.push(V)}return Buffer.concat(W,X)}finally{J.releaseLock()}}async function Cv($,Z){let Q=new AbortController,J=setTimeout(()=>{Q.abort()},RA);try{let W=await fetch($.url,{signal:Q.signal});if(!W.ok){let j=W.statusText?` ${W.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${W.status}${j}`)}let X=await Ev(W,$.url);return zY(Z,{recursive:!0}),await T3(e(Z,$.filename),X),Z}catch(W){if(W instanceof Error&&W.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${RA}ms`);throw W}finally{clearTimeout(J)}}async function wv($,Z,Q,J){let W=F2(Q,f3($.path));if(!c1(W))throw Error(`Plugin source path does not exist: ${W}`);let X=TY(W);if(X.isFile()){if(!q3(W))throw Error(`Plugin file must be .js or .ts: ${W}`);zY(Z,{recursive:!0});let Y=e(Z,z$(W));return await qY(W,Y),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${W}`);let j=e(Z,N3);return await qY(W,j,{recursive:!0,filter:(Y)=>{let V=z$(Y);return V!==".git"&&V!=="node_modules"}}),await NY(j,J),j}function Pv($,Z){if(c1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Sv($,Z,Q){if(zY(fA(Z),{recursive:!0}),!c1(Z)){A3($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let J=e(fA(Z),`.replace-${z$(Z)}-${Date.now()}-${process.pid}-${M8(`${Z}:${Math.random()}`)}`);A3(Z,J);try{A3($,Z)}catch(W){if(!c1(Z)&&c1(J))A3(J,Z);throw W}try{z3(J,{recursive:!0,force:!0})}catch{}}function bv($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function yv($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function kv($){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 E3($){let Z=new Set($.pluginPaths.map((W)=>F2(W)));if(Z.size===0)return[];let Q;try{Q=W1({filePath:$.settingsPath??J0()})}catch{return[]}let J=[];for(let W of Q){let X=kv(W);if(!X||!Z.has(F2(X.pluginPath)))continue;let j=W.transport.type;if(j==="stdio")continue;if(bv(W)||yv(W))continue;J.push({name:W.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:j,lastError:W.oauth?.lastError})}return J.sort((W,X)=>W.name.localeCompare(X.name))}async function fY($){let Z=$.source.trim(),Q=M3(Z,$.sourceType),J=$.cwd?.trim(),W=J?F2(J):process.cwd(),X=Uv(J?W:void 0),j=Vv($.officialPluginsRepo),Y=_v(Q,W,j),V=Dv(X,Q,Y),B=Lv(Q,W),H=e(X,B4,".tmp"),K=e(H,`${Date.now()}-${process.pid}-${M8(`${Z}:${Math.random()}`)}`),G=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Pv(V,F),await PA(H,{recursive:!0});let U;try{if(Q.type==="npm")U=await Nv(Q,K,G);else if(Q.type==="git")U=await fv(Q,K,G);else if(Q.type==="official")U=await Rv(Q,K,G,j);else if(Q.type==="remote")U=await Cv(Q,K);else U=await wv(Q,K,W,G);let _=(Q.type==="local"||Q.type==="remote")&&U===K?kA(K).map((D)=>`./${bA(SA(K,D))}`):await Tv(K,U,B);if(_.length===0)throw Error(`No plugin entry files found for ${Z}`);Sv(K,V,F);let L={source:Z,installPath:V,entryPaths:_.map((D)=>F2(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},O=await
|
|
781
|
-
`,"utf8"),gv(J,$)}catch(W){throw vv(J,{force:!0}),W}}async function $
|
|
782
|
-
`,"utf8"),await dv(J,$)}catch(W){throw await pv(J,{force:!0}).catch(()=>{}),W}}function PY($,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 mA($){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 cA($){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 ev($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function uA($,Z){return $??Z??"openai-chat"}function dA($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function pA($,Z,Q){let J=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision!==void 0)if(Z.supportsVision)J.add("images");else J.delete("images");if(Z?.supportsAttachments!==void 0)if(Z.supportsAttachments)J.add("files");else J.delete("files");if(Z?.supportsReasoning!==void 0)if(Z.supportsReasoning)J.add("reasoning");else J.delete("reasoning");let W=Z?.apiFormat,X=Z?.inputPrice!==void 0||Z?.outputPrice!==void 0||Z?.cacheReadsPrice!==void 0||Z?.cacheWritesPrice!==void 0;return{id:$,name:Z?.name??$,...Z?.maxTokens!==void 0?{maxTokens:Z.maxTokens}:{},...Z?.contextWindow!==void 0?{contextWindow:Z.contextWindow}:{},...Z?.maxInputTokens!==void 0?{maxInputTokens:Z.maxInputTokens}:{},...J.size>0?{capabilities:[...J]}:{},...Z?.temperature!==void 0?{temperature:Z.temperature}:{},...W!==void 0?{apiFormat:W}:{},...X?{pricing:{...Z?.inputPrice!==void 0?{input:Z.inputPrice}:{},...Z?.outputPrice!==void 0?{output:Z.outputPrice}:{},...Z?.cacheReadsPrice!==void 0?{cacheRead:Z.cacheReadsPrice}:{},...Z?.cacheWritesPrice!==void 0?{cacheWrite:Z.cacheWritesPrice}:{}}}:{}}}function $m($,Z){for(let[Q,J]of Object.entries(Z??{})){let W=J.id?.trim()||Q.trim();if(!W)continue;A0.registerModel($,W,pA(W,J))}}function Zm($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function Qm($){return Object.assign({},...A0.resolveProviderModelCatalogKeys($).map((Q)=>A0.getGeneratedModelsForProvider(Q)))}function lA($){let Z=$.provider.trim();if(!Z||A0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let J=A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],W=Qm(Z),X=cA($.capabilities),j=X.length>0?X:void 0,Y=$.model?.trim(),V={...W,...J?.models??{}};if(Y)V[Y]=Zm(Y,V[Y],j);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let K=uA($.protocol,J?.provider.protocol),G=dA($.client,K,J?.provider.client);A0.registerProvider({provider:{id:Z,name:J?.provider.name??vA(Z),description:J?.provider.description,protocol:K,client:G,baseUrl:Q,modelsSourceUrl:J?.provider.modelsSourceUrl,defaultModelId:H,capabilities:mA($.capabilities)??J?.provider.capabilities,source:"file"},models:V})}function Z9($){for(let Z of Object.values($.providers))lA(Z.settings)}function C8($,Z){let Q=Z.models??{};if(!ev(Z.provider)){$m($,Q);return}let J=cA(Z.provider.capabilities),W=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||W[0]?.id||"default",j=uA(Z.provider.protocol,void 0),Y=dA(Z.provider.client,j,void 0),V=Object.fromEntries(W.map(({id:B,model:H})=>[B,{...pA(B,H,J.length>0?J:void 0),status:"active"}]));A0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||vA($),protocol:j,client:Y,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:mA(Z.provider.capabilities),source:"file"},models:V})}function SY($,Z,Q){let J=Q?.models??{},W=new Set;for(let[Y,V]of Object.entries(Z?.models??{})){if(Object.hasOwn(J,Y))continue;let B=V.id?.trim()||Y.trim();if(B)W.add(B),A0.unregisterModel($,B)}if(!Q)return;let X=A0.getProviderCollectionSync($);C8($,Q);let j=A0.getProviderCollectionSync($);if(X&&j&&j!==X){let Y=Object.fromEntries(Object.entries(X.models).filter(([V])=>!W.has(V)));A0.registerProvider({...j,models:{...Y,...j.models}})}}function Q9($){let Z=u1($);if(C3.has(Z))return;let Q=K4(Z);for(let[J,W]of Object.entries(Q.providers))C8(J,W);C3.add(Z)}async function J9($){let Z=u1($);if(C3.has(Z))return;let Q=await E8(Z);for(let[J,W]of Object.entries(Q.providers))C8(J,W);C3.add(Z)}var ZO={};w(ZO,{updateLocalProvider:()=>S3,saveLocalProviderSettings:()=>gY,saveLocalProviderOAuthCredentials:()=>uY,resolveLocalClineAuthToken:()=>pY,refreshProviderModelsFromSource:()=>vY,normalizeOAuthProvider:()=>mY,markLocalProviderEnabled:()=>IY,loginLocalProvider:()=>cY,loginAndSaveLocalProviderOAuthCredentials:()=>dY,listLocalProviders:()=>hY,getLocalProviderModels:()=>xY,ensureCustomProvidersLoaded:()=>J9,deleteLocalProvider:()=>b3,addLocalProvider:()=>kY});import*as d0 from"@cline/llms";var nA="cline-pass";function Jm($){return $.apiKey??$.auth?.apiKey}function Wm($){return($.auth?.accessToken?.trim()??"").length>0}function aA($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Xm($){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 jm($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let J of $)Q=Q*31+J.charCodeAt(0)>>>0;return Z[Q%Z.length]}function oA($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>PY(Z,Q))}async function Ym($,Z){let Q=await d0.getModelsForProvider($),J=$===nA;if(!Z&&!J)return Q;let W=await f5($,{loadLatestOnInit:J,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&W?.knownModels)return W.knownModels;if(J&&W?.knownModels)return W.knownModels;return W?.knownModels?{...Q,...W.knownModels}:Q}function bY($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Vm($){if(!$?.length)return;return[...new Set($)]}function Bm($,Z){return Vm([...$??[],...Z??[]])}function Hm($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Km($){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 Gm($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Km)}var w3={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},rA={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Fm($){if(!$)return[w3];if($.source!=="system")return $.baseUrl?[w3,rA]:[w3];let Z=[];if($.env?.length)Z.push(w3);if($.baseUrl)Z.push(rA);return Z}function Um($,Z){return Z.split(".").reduce((Q,J)=>{if(!Q||typeof Q!=="object")return;return Q[J]},$)}function Dm($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function _m($,Z,Q){if(!$?.length)return;let J={};for(let W of $){let j=Dm(W.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Um(Z,W.path))??W.defaultValue;if(j!==void 0)J[W.path]=j}return J}function sA($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function yY($,Z){let Q=Z?.includes("vision")??!1,J=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:J}]))}async function tA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await RZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function eA($,Z){let Q=$.read(),J=!1;if(Q.providers[Z])delete Q.providers[Z],J=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,J=!0;if(J)$.write(Q);d0.unregisterProvider(Z)}async function kY($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=Z.baseUrl.trim(),W=Z.apiKey?.trim()??"";if(!J&&!W){let U=u1($);if((await E8(U)).providers[Q]){let L=await b3($,{providerId:Q});return{providerId:Q,settingsPath:L.settingsPath,modelsPath:L.modelsPath,modelsCount:0}}return eA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:U,modelsCount:0}}if(d0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!J)throw Error("baseUrl is required");let j=bY(Z.models),Y=Z.modelsSourceUrl?.trim(),V=await tA({providerId:Q,explicitModels:j,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,K=sA(Z.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:J,headers:K,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let G=u1($),F=await E8(G);return F.providers[Q]={provider:{name:X,baseUrl:J,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:Y},models:yY(V,H)},await $9(G,F),C8(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:V.length}}async function S3($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=u1($),W=await E8(J),X=W.providers[Q];if(!X){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),A=bY(Z.models)[0]??T.model?.trim();if(!A&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||aA(Q),baseUrl:Z.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:A,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:A?yY([A],T.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let j=Z.name?.trim()??X.provider.name.trim();if(!j)throw Error("name is required");let Y=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,K=bY(Z.models),G=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!G,U=Object.keys(X.models??{}).map((T)=>T.trim()).filter(Boolean),_=await tA({providerId:Q,explicitModels:K,modelsSourceUrl:G,fallbackModelIds:U,shouldRecompute:F});if(_.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let L=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),O=L&&_.includes(L)?L:_[0],q={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:Y,model:O};if(B)q.protocol=B;else delete q.protocol;if(H)q.client=H;else delete q.client;if(Z.apiKey!==void 0){let T=Z.apiKey?.trim()??"";if(T)q.apiKey=T;else delete q.apiKey}if(Z.headers!==void 0){let T=sA(Z.headers);if(T)q.headers=T;else delete q.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")q.timeout=Z.timeoutMs;else delete q.timeout;return $.saveProviderSettings(q,{setLastUsed:!1}),W.providers[Q]={provider:{name:j,baseUrl:Y,defaultModelId:O,protocol:B,client:H,capabilities:V,modelsSourceUrl:G},models:yY(_,V)},await $9(J,W),C8(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J,modelsCount:_.length}}async function b3($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=u1($),W=await E8(J);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await $9(J,W),d0.unregisterProvider(Q),eA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J}}function IY($,Z,Q={}){let J=Z.trim();if(!J)throw Error("providerId is required");let W=$.read().providers[J]?.settings;return $.saveProviderSettings({...W??{},provider:J},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function hY($,Z={}){let Q=$.read(),J=d0.getProviderIds(),W=await Promise.all(J.map(async(j)=>{let[Y,V]=await Promise.all([d0.getProvider(j),d0.getModelsForProvider(j)]),B=oA(V),H=Q.providers[j]?.settings,K=$.getProviderSettings(j),G=Y?.name??aA(j),F=Bm(Y?.capabilities,K?.capabilities),U=Gm(Y?.metadata)??Fm(Y);return{provider:{id:j,name:G,models:B.length,color:jm(j),letter:Xm(G),enabled:Boolean(H),apiKey:K?Jm(K):void 0,oauthAccessTokenPresent:K?Wm(K):void 0,baseUrl:K?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:K?.protocol??Y?.protocol,client:K?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:U,configValues:_m(U,K,Y),modelList:B},rank:Hm(Y?.metadata)}}));W.sort((j,Y)=>{if(j.rank!==Y.rank)return j.rank-Y.rank;return j.provider.name.localeCompare(Y.provider.name)||j.provider.id.localeCompare(Y.provider.id)});let X=W.map((j)=>j.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((j)=>j.id!==nA);return{providers:X,settingsPath:$.getFilePath()}}async function xY($,Z){let Q=$.trim(),J=await Ym(Q,Z),W=oA(J);return{providerId:Q,models:W}}function P3($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function $O($,Z){if(!P3(Z))return P3($)?{...$}:void 0;let Q=P3($)?{...$}:{};for(let[J,W]of Object.entries(Z)){if(W==null||W===""){delete Q[J];continue}if(P3(W)){let X=$O(Q[J],W);if(X&&Object.keys(X).length>0)Q[J]=X;else delete Q[J];continue}Q[J]=W}return Object.keys(Q).length>0?Q:void 0}function gY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete W[X];else W[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))W[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let j=$O(W[X],Z[X]);if(j)W[X]=j;else delete W[X]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function vY($,Z){let Q=Z.trim(),J=$.getProviderSettings(Q),X=d0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,j=J?.baseUrl?.trim()||X?.baseUrl?.trim(),Y=MZ(j,X?.baseUrl,X?.modelsSourceUrl);if(!J||!X||!j||!Y)return{providerId:Q,refreshed:!1};let V=await S3($,{providerId:Q,name:X.name,baseUrl:j,apiKey:J.apiKey,headers:J.headers??null,timeoutMs:J.timeout??null,modelsSourceUrl:Y,protocol:J.protocol??X.protocol??null,client:J.client??X.client??null,capabilities:J.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function mY($){let Z=$.trim().toLowerCase(),Q=F0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function cY($,Z,Q,J){let W=F0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let X=q6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return W.login({settings:Z,callbacks:X,telemetry:J})}function uY($,Z,Q,J,W){return O2({manager:$,providerId:Z,settings:Q,credentials:J,setLastUsed:W?.setLastUsed})}async function dY($,Z,Q,J){let W=q6({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return R4($,Z,{callbacks:W,telemetry:J})}function pY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var QO={};w(QO,{getProviderConfigFields:()=>lY});import*as y3 from"@cline/llms";var Lm=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Am={"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 Om($,Z){let Q={};for(let J of Lm){let W=$[J],X=Z[J];if(W||X)Q[J]={...W,...X}}return Q}function qm($){let Z=Am[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Om($.fields,Z.fields)}}var zm=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Tm($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return zm.has($)}function lY($){let Z=y3.normalizeProviderId($);if(S$(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=y3.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let J=Q?.provider.baseUrl,W={apiKey:{}};if(Tm(Z,Q))W.baseUrl={defaultValue:J};return qm({providerId:Z,authMethod:"api-key",fields:W})}var WO={};w(WO,{resolveLegacyClineAuth:()=>nY,migrateLegacyProviderSettings:()=>X9});import{existsSync as Nm,readFileSync as fm}from"node:fs";import{dirname as Rm,join as iY}from"node:path";import*as T$ from"@cline/llms";import{ReasoningLevelSchema as Mm}from"@cline/shared";import{resolveClineDataDir as Em}from"@cline/shared/storage";var k3="openai",Cm=T$.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,wm=128000;function nY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let J=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:J,accountId:Q.userInfo?.id}}catch{return}}function C($){let Z=$?.trim();return Z?Z:void 0}function Pm($){return $==="credentials"?"iam":$}function JO($){if(!Nm($))return;try{let Z=fm($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Sm($){let Z=$.dataDir??Em(),Q=$.globalStatePath??iY(Z,"globalState.json"),J=$.secretsPath??iY(Z,"secrets.json"),W=JO(Q),X=JO(J);if(!W&&!X)return;return{globalState:W??{},secrets:X??{}}}function rY($){return T$.normalizeProviderId($)}function I3($){if($===k3)return $;return T$.normalizeProviderId($)}function bm($,Z,Q,J){let W=Q==="plan"?"planMode":"actMode",X=Z===J?C(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[Z];return(Y?C(typeof $[Y]==="string"?$[Y]:void 0):void 0)??X}function ym($,Z,Q){let J=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,W=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).find(Boolean),X=Mm.safeParse(W),j=X.success?X.data:void 0,Y=typeof J==="number"&&Number.isInteger(J)&&J>0?J:void 0;if(!j&&Y===void 0)return;return{...j?{effort:j}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function km($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),J=C(Q.access_token),W=C(Q.refresh_token),X=C(Q.accountId);if(!J&&!W&&!X)return;return{...J?{apiKey:J}:{},auth:{...J?{accessToken:J}:{},...W?{refreshToken:W}:{},...X?{accountId:X}:{}}}}catch{return}}function Im($){let Z=T$.getGeneratedModelsForProvider($),J=T$.getProviderCollectionSync($)?.provider.defaultModelId;if(J&&Z[J])return J;return Object.keys(Z)[0]??void 0}function hm($,Z,Q,J){let W=rY($),X=C(J==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),j=X?I3(X):void 0,Y=bm(Z,$,J,j)??Im(W),V=ym(Z,W,J),B=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},K={};if($==="openai-codex")Object.assign(K,km(Q));if($==="cline")try{let D=C(Q["cline:clineAccountId"]);if(D)K.auth={...K.auth??{},...nY(D)}}catch{}if($===k3&&Z.openAiHeaders)K.headers=Z.openAiHeaders;if($==="bedrock"){let D=Pm(Z.awsAuthentication),q=D==="profile"||Z.awsUseProfile===!0;K.aws={accessKey:C(Q.awsAccessKey),secretKey:C(Q.awsSecretKey),sessionToken:C(Q.awsSessionToken),region:C(Z.awsRegion),authentication:D,profile:q?C(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:C(Z.awsBedrockEndpoint),customModelBaseId:C(J==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")K.gcp={projectId:C(Z.vertexProjectId),region:C(Z.vertexRegion)};if($===k3&&(Z.azureApiVersion||Z.azureIdentity!==void 0))K.azure={apiVersion:C(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;K.sap={clientId:C(Q.sapAiCoreClientId),clientSecret:C(Q.sapAiCoreClientSecret),tokenUrl:C(Z.sapAiCoreTokenUrl),resourceGroup:C(Z.sapAiResourceGroup),deploymentId:D?void 0:C(J==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){K.oca={mode:Z.ocaMode};let D=C(Q.ocaRefreshToken);if(D)K.auth={...K.auth??{},refreshToken:D}}if($==="qwen")K.apiLine=Z.qwenApiLine;if($==="moonshot")K.apiLine=Z.moonshotApiLine;if($==="zai")K.apiLine=Z.zaiApiLine;if($==="minimax")K.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},F=C(H[$]),U=C(G[$]),_={provider:W,...F?{apiKey:F}:{},...Y?{model:Y}:{},...U?{baseUrl:U}:{},...V?{reasoning:V}:{},...B?{timeout:B}:{},...K},L=_6.safeParse(_);if(!L.success)return;return Object.keys(_).filter((D)=>D!=="provider").length>0?L.data:void 0}function W9($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function xm($,Z,Q){if($!==Cm)return;if(!Z.baseUrl||!Z.model)return;let J=W9(Q?.contextWindow)??wm,W=W9(Q?.maxTokens),X=W9(Q?.inputPrice),j=W9(Q?.outputPrice),Y=W9(Q?.temperature),V=["streaming","tools"];if(Q?.supportsImages!==!1)V.push("images");if(Q?.supportsPromptCache===!0)V.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:J,maxInputTokens:J,capabilities:V,...W!==void 0?{maxTokens:W}:{},...X!==void 0?{inputPrice:X}:{},...j!==void 0?{outputPrice:j}:{},...Y!==void 0?{temperature:Y}:{}}}}}function gm($,Z){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let X=C(W);if(X)Q.add(I3(X))}if(C(Z.apiKey))Q.add("anthropic");if(C(Z.openRouterApiKey))Q.add("openrouter");if(C(Z.openAiApiKey))Q.add(k3);if(C(Z.openAiNativeApiKey))Q.add("openai-native");if(C(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(C(Z.geminiApiKey))Q.add("gemini");if(C(Z.ollamaApiKey))Q.add("ollama");if(C(Z.deepSeekApiKey))Q.add("deepseek");if(C(Z.requestyApiKey))Q.add("requesty");if(C(Z.togetherApiKey))Q.add("together");if(C(Z.fireworksApiKey))Q.add("fireworks");if(C(Z.qwenApiKey))Q.add("qwen");if(C(Z.doubaoApiKey))Q.add("doubao");if(C(Z.mistralApiKey))Q.add("mistral");if(C(Z.liteLlmApiKey))Q.add("litellm");if(C(Z.asksageApiKey))Q.add("asksage");if(C(Z.xaiApiKey))Q.add("xai");if(C(Z.moonshotApiKey))Q.add("moonshot");if(C(Z.zaiApiKey))Q.add("zai");if(C(Z.huggingFaceApiKey))Q.add("huggingface");if(C(Z.nebiusApiKey))Q.add("nebius");if(C(Z.sambanovaApiKey))Q.add("sambanova");if(C(Z.cerebrasApiKey))Q.add("cerebras");if(C(Z.groqApiKey))Q.add("groq");if(C(Z.huaweiCloudMaasApiKey))Q.add("huawei-cloud-maas");if(C(Z.basetenApiKey))Q.add("baseten");if(C(Z.vercelAiGatewayApiKey))Q.add("vercel-ai-gateway");if(C(Z.difyApiKey))Q.add("dify");if(C(Z.minimaxApiKey))Q.add("minimax");if(C(Z.hicapApiKey))Q.add("hicap");if(C(Z.aihubmixApiKey))Q.add("aihubmix");if(C(Z.nousResearchApiKey))Q.add("nousResearch");if(C(Z.awsAccessKey)||C(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Q.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Q.add("vertex");if(C(Z.clineApiKey))Q.add("cline");let J=nY(C(Z["cline:clineAccountId"]));if(J?.accessToken||J?.refreshToken||J?.accountId)Q.add("cline");if(C(Z.ocaApiKey))Q.add("oca");if(C(Z.sapAiCoreClientId)||C(Z.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function X9($){let Z=$.providerSettingsManager.read(),Q=Sm($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:J,secrets:W}=Q,X=J.mode==="plan"?"plan":"act",j=X==="plan"?"act":"plan",Y=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),V=Y?I3(Y):void 0,B=C(X==="plan"?J.actModeApiProvider:J.planModeApiProvider),H=B?I3(B):void 0,K=gm(J,W),G=s$();G.providers={...Z.providers},G.lastUsedProvider=Z.lastUsedProvider;let F=new Date().toISOString(),U=0,_=iY(Rm($.providerSettingsManager.getFilePath()),"models.json"),L=K4(_),O=0;for(let T of K){let z=rY(T);if(G.providers[z])continue;let A=T!==V&&T===H?j:X,R=hm(T,J,W,A);if(!R)continue;G.providers[z]={settings:R,updatedAt:F,tokenSource:"migration"},U+=1;let N=xm(z,R,A==="plan"?J.planModeOpenAiModelInfo:J.actModeOpenAiModelInfo);if(N&&!L.providers[z])L.providers[z]=N,O+=1}if(U===0&&O===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let D=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),q=D?rY(D):void 0;if(G.lastUsedProvider=Z.lastUsedProvider??(q&&G.providers[q]?q:Object.keys(G.providers)[0]),$.providerSettingsManager.write(G),O>0)e7(_,L);return{migrated:U>0||O>0,providerCount:Object.keys(G.providers).length,lastUsedProvider:G.lastUsedProvider}}Q3();q0();I7();var XO={};w(XO,{FileTeamPersistenceStore:()=>h3});import{appendFileSync as vm,existsSync as aY,mkdirSync as mm,readFileSync as cm,renameSync as um,unlinkSync as dm,writeFileSync as pm}from"node:fs";import{join as oY}from"node:path";import{resolveTeamDataDir as lm}from"@cline/shared/storage";function im($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class h3{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=im($.teamName),Q=$.baseDir?.trim()||lm();this.dirPath=oY(Q,Z),this.statePath=oY(this.dirPath,"state.json"),this.taskHistoryPath=oY(this.dirPath,"task-history.jsonl")}loadState(){if(!aY(this.statePath))return;try{let $=cm(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 D_(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`;pm(Q,`${JSON.stringify(Z,null,2)}
|
|
778
|
+
`)||void 0}}async function L3($,Z={}){let[Q]=_Y($),J=Q?.trim()||$.id;if(!J)throw Error("Plugin marketplace uninstalls require a plugin name.");let W=await l9({name:J,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??W.name??$.id}.`,output:[`Path: ${W.installPath}`,...W.removedPaths.map((X)=>`Removed: ${X}`)].join(`
|
|
779
|
+
`)}}async function AY($,Z={}){if($.type==="mcp"){let Q=r9($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else U3($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return _3($,Z);if($.type==="plugin")return L3($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var hA={};w(hA,{parsePluginSource:()=>M3,isOfficialPluginSlug:()=>R3,installPlugin:()=>fY,collectPluginMcpOAuthCandidates:()=>E3});import{spawn as og}from"node:child_process";import{createHash as sg}from"node:crypto";import{existsSync as c1,mkdirSync as zY,readdirSync as tg,readFileSync as eg,renameSync as A3,rmSync as z3,statSync as TY}from"node:fs";import{cp as qY,mkdir as PA,writeFile as T3}from"node:fs/promises";import{homedir as NA}from"node:os";import{basename as z$,dirname as fA,extname as $v,join as e,relative as SA,resolve as F2,sep as Zv}from"node:path";import{isPluginModulePath as q3,resolveClineDir as Qv,resolvePluginModuleEntries as Jv}from"@cline/shared/storage";var B4="_installed",N3="package",Wv="https://github.com/cline/plugins.git",RA=30000,O3=10485760,MA="@cline/",Xv=["dependencies","devDependencies","optionalDependencies","peerDependencies"],jv={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function f3($){if($==="~")return NA();if($.startsWith("~/"))return e(NA(),$.slice(2));return $}function bA($){return $.split(Zv).join("/")}function M8($){return sg("sha256").update($).digest("hex").slice(0,12)}function Yv($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function q$($){let Z="",Q=!1,J=$.startsWith("@")?$.slice(1):$;for(let X of J.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return Yv(Z)||"plugin"}function R3($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Vv($){return $?.trim()||Wv}function EA($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Bv($){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 Hv($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let j=Z[2]??"",Y=j.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${Z[1]}:${j.slice(0,Y)}`,ref:j.slice(Y+1)||void 0}}if($.includes("://"))try{let j=new URL($),Y=j.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return j.pathname=`/${Y.slice(0,V)}`,{repo:j.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let J=$.slice(0,Q),W=$.slice(Q+1),X=W.indexOf("@");if(X<0)return{repo:$};return{repo:`${J}/${W.slice(0,X)}`,ref:W.slice(X+1)||void 0}}function Kv($){try{return decodeURIComponent($)}catch{return $}}function Gv($){return z$(Kv($))||"plugin"}function Fv($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function CA($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),J=Gv(Z.pathname),W=q3(J),X=(Q==="github.com"||Q==="www.github.com")&&Fv(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||W)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let j=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[j[0],j[1],...j.slice(3)].join("/")}`,filename:J}}if(Q==="raw.githubusercontent.com"){if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:J}}if(!W)return null;return{type:"remote",url:Z.toString(),filename:J}}function wA($,Z={}){let Q=$.trim(),J=Q.startsWith("git:")&&!Q.startsWith("git://"),W=J?Q.slice(4).trim():Q;if(!Z.force&&!J&&!/^(https?|ssh|git):\/\//i.test(W))return null;let{repo:X,ref:j}=Hv(W),Y="",V="";if(X.startsWith("git@")){let K=X.match(/^git@([^:]+):(.+)$/);Y=K?.[1]??"",V=K?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let K=new URL(X);Y=K.hostname,V=K.pathname.replace(/^\/+/,"")}else{let K=X.indexOf("/");if(K<0)return null;Y=X.slice(0,K),V=X.slice(K+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:j,host:Y,path:B}}function M3($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let j=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:Y}=EA(j);return{type:"npm",spec:j,name:Y}}if(Z==="git"){let j=wA(Q,{force:!0});if(!j)throw Error(`Invalid git plugin source: ${$}`);return j}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let j=CA(Q);if(!j)throw Error(`Invalid remote plugin source: ${$}`);return j}if(Q.startsWith("npm:")){let j=Q.slice(4).trim(),{name:Y}=EA(j);return{type:"npm",spec:j,name:Y}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let W=CA(Q);if(W)return W;let X=wA(Q);if(X)return X;if(R3(Q))return{type:"official",slug:Q};if(Bv(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 Uv($){return $?e($,".cline","plugins"):e(Qv(),"plugins")}function Dv($,Z,Q){if(Z.type==="npm")return e($,B4,"npm",`${q$(Z.name)}-${M8(Q)}`);if(Z.type==="git")return e($,B4,"git",q$(Z.host),`${q$(Z.path)}-${M8(Q)}`);if(Z.type==="remote")return e($,B4,"remote",`${q$(Z.filename)}-${M8(Q)}`);if(Z.type==="official")return e($,B4,"official",`${q$(Z.slug)}-${M8(Q)}`);return e($,B4,"local",`${q$(z$(f3(Z.path)))}-${M8(Q)}`)}function _v($,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:${F2(Z,f3($.path))}`}function Lv($,Z){if($.type==="npm")return $.name;if($.type==="git")return q$(z$($.path));if($.type==="remote")return q$(z$($.filename,$v($.filename)));if($.type==="official")return $.slug;return q$(z$(F2(Z,f3($.path))))}async function H4($,Z,Q={}){await new Promise((J,W)=>{let X=og($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),j="";X.stderr.on("data",(Y)=>{j+=String(Y)}),X.on("error",W),X.on("close",(Y)=>{if(Y===0){J();return}let V=j.trim();W(Error(`${$} ${Z.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function yA($){let Z=e($,"package.json");if(!c1(Z))return null;try{return JSON.parse(eg(Z,"utf8"))}catch{return null}}function Av($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function Ov($){let Z=e($,"package.json"),Q=yA($);if(!Q)return;let J=!1;for(let W of Xv){let X=Q[W];if(!X||typeof X!=="object")continue;for(let j of Object.keys(X)){if(!j.startsWith(MA))continue;delete X[j],delete Q.peerDependenciesMeta?.[j],J=!0}if(Object.keys(X).length===0)delete Q[W]}if(Q.peerDependenciesMeta){for(let W of Object.keys(Q.peerDependenciesMeta)){if(!W.startsWith(MA))continue;delete Q.peerDependenciesMeta[W],J=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!J)return;await T3(Z,`${JSON.stringify(Q,null,2)}
|
|
780
|
+
`,"utf8")}function qv($,Z){let Q=e($,"node_modules","@cline");if(!c1(Q))return;for(let J of IA(Q)){if(`@cline/${J.name}`===Z)continue;z3(e(Q,J.name),{recursive:!0,force:!0})}}function kA($){let Z=Av(yA($)).map((X)=>F2($,X)).filter((X)=>c1(X)&&TY(X).isFile()&&q3(X));if(Z.length>0)return Z;let Q=Jv($);if(Q?.length)return Q;let J=[],W=[$];while(W.length>0){let X=W.pop();if(!X)continue;for(let j of IA(X)){let Y=e(X,j.name);if(j.name==="node_modules"||j.name===".git")continue;if(j.isDirectory()){W.push(Y);continue}if(j.isFile()&&!j.name.startsWith(".")&&q3(Y))J.push(Y)}}return J.sort((X,j)=>X.localeCompare(j))}function IA($){try{return tg($,{withFileTypes:!0})}catch{return[]}}function zv($,Z){let Q=kA(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((J)=>`./${bA(SA($,J))}`)}async function Tv($,Z,Q){let J=zv($,Z);return await T3(e($,"package.json"),JSON.stringify({...jv,name:Q,cline:{plugins:[{paths:J}]}},null,2),"utf8"),J}async function Nv($,Z,Q){let J=e(Z,N3);return await PA(J,{recursive:!0}),await T3(e(J,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await H4(Q,["install",$.spec,"--prefix",J,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),qv(J,$.name),e(J,"node_modules",$.name)}async function NY($,Z){if(!c1(e($,"package.json")))return;await Ov($),await H4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function fv($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let J=e(Z,N3),W=["clone","--filter=blob:none"];if($.ref)W.push("--branch",$.ref);W.push("--",$.repo,J);try{await H4("git",W)}catch(X){if(!$.ref)throw X;await H4("git",["clone","--filter=blob:none","--",$.repo,J]),await H4("git",["checkout","--detach",$.ref],{cwd:J})}return await NY(J,Q),J}async function Rv($,Z,Q,J){let W=e(Z,"repo");await H4("git",["clone","--filter=blob:none","--depth","1","--",J,W]);let X=e(W,"plugins",$.slug);if(!c1(X)||!TY(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${J}`);let j=e(Z,N3);return await qY(X,j,{recursive:!0,filter:(Y)=>{let V=z$(Y);return V!==".git"&&V!=="node_modules"}}),z3(W,{recursive:!0,force:!0}),await NY(j,Q),j}function OY($){return Error(`Remote plugin file from ${$} exceeds the ${O3} byte limit`)}function Mv($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Ev($,Z){let Q=Mv($);if(Q!==void 0&&Q>O3)throw OY(Z);if(!$.body){let j=Buffer.from(await $.text(),"utf8");if(j.byteLength>O3)throw OY(Z);return j}let J=$.body.getReader(),W=[],X=0;try{while(!0){let{done:j,value:Y}=await J.read();if(j)break;let V=Buffer.from(Y);if(X+=V.byteLength,X>O3)throw await J.cancel().catch(()=>{return}),OY(Z);W.push(V)}return Buffer.concat(W,X)}finally{J.releaseLock()}}async function Cv($,Z){let Q=new AbortController,J=setTimeout(()=>{Q.abort()},RA);try{let W=await fetch($.url,{signal:Q.signal});if(!W.ok){let j=W.statusText?` ${W.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${W.status}${j}`)}let X=await Ev(W,$.url);return zY(Z,{recursive:!0}),await T3(e(Z,$.filename),X),Z}catch(W){if(W instanceof Error&&W.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${RA}ms`);throw W}finally{clearTimeout(J)}}async function wv($,Z,Q,J){let W=F2(Q,f3($.path));if(!c1(W))throw Error(`Plugin source path does not exist: ${W}`);let X=TY(W);if(X.isFile()){if(!q3(W))throw Error(`Plugin file must be .js or .ts: ${W}`);zY(Z,{recursive:!0});let Y=e(Z,z$(W));return await qY(W,Y),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${W}`);let j=e(Z,N3);return await qY(W,j,{recursive:!0,filter:(Y)=>{let V=z$(Y);return V!==".git"&&V!=="node_modules"}}),await NY(j,J),j}function Pv($,Z){if(c1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Sv($,Z,Q){if(zY(fA(Z),{recursive:!0}),!c1(Z)){A3($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let J=e(fA(Z),`.replace-${z$(Z)}-${Date.now()}-${process.pid}-${M8(`${Z}:${Math.random()}`)}`);A3(Z,J);try{A3($,Z)}catch(W){if(!c1(Z)&&c1(J))A3(J,Z);throw W}try{z3(J,{recursive:!0,force:!0})}catch{}}function bv($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function yv($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function kv($){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 E3($){let Z=new Set($.pluginPaths.map((W)=>F2(W)));if(Z.size===0)return[];let Q;try{Q=W1({filePath:$.settingsPath??J0()})}catch{return[]}let J=[];for(let W of Q){let X=kv(W);if(!X||!Z.has(F2(X.pluginPath)))continue;let j=W.transport.type;if(j==="stdio")continue;if(bv(W)||yv(W))continue;J.push({name:W.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:j,lastError:W.oauth?.lastError})}return J.sort((W,X)=>W.name.localeCompare(X.name))}async function fY($){let Z=$.source.trim(),Q=M3(Z,$.sourceType),J=$.cwd?.trim(),W=J?F2(J):process.cwd(),X=Uv(J?W:void 0),j=Vv($.officialPluginsRepo),Y=_v(Q,W,j),V=Dv(X,Q,Y),B=Lv(Q,W),H=e(X,B4,".tmp"),K=e(H,`${Date.now()}-${process.pid}-${M8(`${Z}:${Math.random()}`)}`),G=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Pv(V,F),await PA(H,{recursive:!0});let U;try{if(Q.type==="npm")U=await Nv(Q,K,G);else if(Q.type==="git")U=await fv(Q,K,G);else if(Q.type==="official")U=await Rv(Q,K,G,j);else if(Q.type==="remote")U=await Cv(Q,K);else U=await wv(Q,K,W,G);let _=(Q.type==="local"||Q.type==="remote")&&U===K?kA(K).map((D)=>`./${bA(SA(K,D))}`):await Tv(K,U,B);if(_.length===0)throw Error(`No plugin entry files found for ${Z}`);Sv(K,V,F);let L={source:Z,installPath:V,entryPaths:_.map((D)=>F2(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},O=await d9({pluginPaths:L.entryPaths,cwd:W,workspacePath:W});return L.mcpSyncFailures=O.failures,L.mcpOAuthCandidates=E3({pluginPaths:L.entryPaths}),L}catch(_){throw z3(K,{recursive:!0,force:!0}),_}}var iA={};w(iA,{writeModelsFileSync:()=>e9,writeModelsFile:()=>$Z,toProviderModel:()=>PY,syncStoredProviderRegistration:()=>SY,resolveModelsRegistryPath:()=>u1,registerProviderSettingsProvider:()=>lA,registerCustomProvider:()=>C8,registerConfiguredProvidersFromSettings:()=>ZZ,readModelsFileSync:()=>K4,readModelsFile:()=>E8,parseModelsFile:()=>wY,ensureCustomProvidersLoadedSync:()=>QZ,ensureCustomProvidersLoaded:()=>JZ,emptyModelsFile:()=>t9,StoredProviderMetadataSchema:()=>gA,StoredProviderEntrySchema:()=>EY,StoredModelsFileSchema:()=>CY,StoredModelEntrySchema:()=>xA});import{existsSync as Iv,mkdirSync as hv,readFileSync as xv,renameSync as gv,rmSync as vv,writeFileSync as mv}from"node:fs";import{mkdir as cv,readFile as uv,rename as dv,rm as pv,writeFile as lv}from"node:fs/promises";import{dirname as MY,join as iv}from"node:path";import*as A0 from"@cline/llms";import{ApiFormatSchema as rv,ModelCapabilitySchema as nv,ProviderCapabilitySchema as av,ProviderClientSchema as ov,ProviderProtocolSchema as sv}from"@cline/shared";import{z as $0}from"zod";var RY=$0.number().finite().positive().optional().catch(void 0),s9=$0.number().finite().nonnegative().optional().catch(void 0),xA=$0.object({id:$0.string().optional(),name:$0.string().optional(),maxTokens:RY,contextWindow:RY,maxInputTokens:RY,capabilities:$0.array(nv).optional(),supportsVision:$0.boolean().optional(),supportsAttachments:$0.boolean().optional(),supportsReasoning:$0.boolean().optional(),inputPrice:s9,outputPrice:s9,cacheReadsPrice:s9,cacheWritesPrice:s9,temperature:s9,apiFormat:rv.optional()}).passthrough(),gA=$0.object({name:$0.string(),baseUrl:$0.string(),defaultModelId:$0.string().optional(),protocol:sv.optional(),client:ov.optional(),capabilities:$0.array(av).optional(),modelsSourceUrl:$0.string().optional()}).passthrough(),EY=$0.object({provider:gA.optional(),models:$0.record($0.string(),xA).optional()}).passthrough(),CY=$0.object({version:$0.literal(1),providers:$0.record($0.string(),EY)}),tv=$0.object({version:$0.literal(1),providers:$0.record($0.string(),$0.unknown())}),C3=new Set;function vA($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function u1($){return iv(MY($.getFilePath()),"models.json")}function t9(){return{version:1,providers:{}}}function wY($){let Z=tv.safeParse($);if(!Z.success)return t("models.json content is not a valid models file envelope; starting from an empty registry"),t9();let Q={};for(let[J,W]of Object.entries(Z.data.providers)){let X=EY.safeParse(W);if(X.success)Q[J]=X.data;else t(`models.json: dropping invalid entry for provider=${J}`)}return{version:1,providers:Q}}function K4($){if(!Iv($))return t9();try{let Z=xv($,"utf8");return wY(JSON.parse(Z))}catch{t(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return t9()}async function E8($){try{let Z=await uv($,"utf8");return wY(JSON.parse(Z))}catch(Z){if(Z?.code!=="ENOENT")t(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return t9()}function e9($,Z){hv(MY($),{recursive:!0});let Q=CY.parse(Z),J=`${$}.${process.pid}.tmp`;try{mv(J,`${JSON.stringify(Q,null,2)}
|
|
781
|
+
`,"utf8"),gv(J,$)}catch(W){throw vv(J,{force:!0}),W}}async function $Z($,Z){await cv(MY($),{recursive:!0});let Q=CY.parse(Z),J=`${$}.${process.pid}.tmp`;try{await lv(J,`${JSON.stringify(Q,null,2)}
|
|
782
|
+
`,"utf8"),await dv(J,$)}catch(W){throw await pv(J,{force:!0}).catch(()=>{}),W}}function PY($,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 mA($){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 cA($){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 ev($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function uA($,Z){return $??Z??"openai-chat"}function dA($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function pA($,Z,Q){let J=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision!==void 0)if(Z.supportsVision)J.add("images");else J.delete("images");if(Z?.supportsAttachments!==void 0)if(Z.supportsAttachments)J.add("files");else J.delete("files");if(Z?.supportsReasoning!==void 0)if(Z.supportsReasoning)J.add("reasoning");else J.delete("reasoning");let W=Z?.apiFormat,X=Z?.inputPrice!==void 0||Z?.outputPrice!==void 0||Z?.cacheReadsPrice!==void 0||Z?.cacheWritesPrice!==void 0;return{id:$,name:Z?.name??$,...Z?.maxTokens!==void 0?{maxTokens:Z.maxTokens}:{},...Z?.contextWindow!==void 0?{contextWindow:Z.contextWindow}:{},...Z?.maxInputTokens!==void 0?{maxInputTokens:Z.maxInputTokens}:{},...J.size>0?{capabilities:[...J]}:{},...Z?.temperature!==void 0?{temperature:Z.temperature}:{},...W!==void 0?{apiFormat:W}:{},...X?{pricing:{...Z?.inputPrice!==void 0?{input:Z.inputPrice}:{},...Z?.outputPrice!==void 0?{output:Z.outputPrice}:{},...Z?.cacheReadsPrice!==void 0?{cacheRead:Z.cacheReadsPrice}:{},...Z?.cacheWritesPrice!==void 0?{cacheWrite:Z.cacheWritesPrice}:{}}}:{}}}function $m($,Z){for(let[Q,J]of Object.entries(Z??{})){let W=J.id?.trim()||Q.trim();if(!W)continue;A0.registerModel($,W,pA(W,J))}}function Zm($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function Qm($){return Object.assign({},...A0.resolveProviderModelCatalogKeys($).map((Q)=>A0.getGeneratedModelsForProvider(Q)))}function lA($){let Z=$.provider.trim();if(!Z||A0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let J=A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],W=Qm(Z),X=cA($.capabilities),j=X.length>0?X:void 0,Y=$.model?.trim(),V={...W,...J?.models??{}};if(Y)V[Y]=Zm(Y,V[Y],j);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let K=uA($.protocol,J?.provider.protocol),G=dA($.client,K,J?.provider.client);A0.registerProvider({provider:{id:Z,name:J?.provider.name??vA(Z),description:J?.provider.description,protocol:K,client:G,baseUrl:Q,modelsSourceUrl:J?.provider.modelsSourceUrl,defaultModelId:H,capabilities:mA($.capabilities)??J?.provider.capabilities,source:"file"},models:V})}function ZZ($){for(let Z of Object.values($.providers))lA(Z.settings)}function C8($,Z){let Q=Z.models??{};if(!ev(Z.provider)){$m($,Q);return}let J=cA(Z.provider.capabilities),W=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||W[0]?.id||"default",j=uA(Z.provider.protocol,void 0),Y=dA(Z.provider.client,j,void 0),V=Object.fromEntries(W.map(({id:B,model:H})=>[B,{...pA(B,H,J.length>0?J:void 0),status:"active"}]));A0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||vA($),protocol:j,client:Y,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:mA(Z.provider.capabilities),source:"file"},models:V})}function SY($,Z,Q){let J=Q?.models??{},W=new Set;for(let[Y,V]of Object.entries(Z?.models??{})){if(Object.hasOwn(J,Y))continue;let B=V.id?.trim()||Y.trim();if(B)W.add(B),A0.unregisterModel($,B)}if(!Q)return;let X=A0.getProviderCollectionSync($);C8($,Q);let j=A0.getProviderCollectionSync($);if(X&&j&&j!==X){let Y=Object.fromEntries(Object.entries(X.models).filter(([V])=>!W.has(V)));A0.registerProvider({...j,models:{...Y,...j.models}})}}function QZ($){let Z=u1($);if(C3.has(Z))return;let Q=K4(Z);for(let[J,W]of Object.entries(Q.providers))C8(J,W);C3.add(Z)}async function JZ($){let Z=u1($);if(C3.has(Z))return;let Q=await E8(Z);for(let[J,W]of Object.entries(Q.providers))C8(J,W);C3.add(Z)}var ZO={};w(ZO,{updateLocalProvider:()=>S3,saveLocalProviderSettings:()=>gY,saveLocalProviderOAuthCredentials:()=>uY,resolveLocalClineAuthToken:()=>pY,refreshProviderModelsFromSource:()=>vY,normalizeOAuthProvider:()=>mY,markLocalProviderEnabled:()=>IY,loginLocalProvider:()=>cY,loginAndSaveLocalProviderOAuthCredentials:()=>dY,listLocalProviders:()=>hY,getLocalProviderModels:()=>xY,ensureCustomProvidersLoaded:()=>JZ,deleteLocalProvider:()=>b3,addLocalProvider:()=>kY});import*as d0 from"@cline/llms";var nA="cline-pass";function Jm($){return $.apiKey??$.auth?.apiKey}function Wm($){return($.auth?.accessToken?.trim()??"").length>0}function aA($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Xm($){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 jm($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let J of $)Q=Q*31+J.charCodeAt(0)>>>0;return Z[Q%Z.length]}function oA($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>PY(Z,Q))}async function Ym($,Z){let Q=await d0.getModelsForProvider($),J=$===nA;if(!Z&&!J)return Q;let W=await f5($,{loadLatestOnInit:J,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&W?.knownModels)return W.knownModels;if(J&&W?.knownModels)return W.knownModels;return W?.knownModels?{...Q,...W.knownModels}:Q}function bY($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Vm($){if(!$?.length)return;return[...new Set($)]}function Bm($,Z){return Vm([...$??[],...Z??[]])}function Hm($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Km($){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 Gm($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Km)}var w3={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},rA={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Fm($){if(!$)return[w3];if($.source!=="system")return $.baseUrl?[w3,rA]:[w3];let Z=[];if($.env?.length)Z.push(w3);if($.baseUrl)Z.push(rA);return Z}function Um($,Z){return Z.split(".").reduce((Q,J)=>{if(!Q||typeof Q!=="object")return;return Q[J]},$)}function Dm($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function _m($,Z,Q){if(!$?.length)return;let J={};for(let W of $){let j=Dm(W.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Um(Z,W.path))??W.defaultValue;if(j!==void 0)J[W.path]=j}return J}function sA($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function yY($,Z){let Q=Z?.includes("vision")??!1,J=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:J}]))}async function tA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await RQ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function eA($,Z){let Q=$.read(),J=!1;if(Q.providers[Z])delete Q.providers[Z],J=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,J=!0;if(J)$.write(Q);d0.unregisterProvider(Z)}async function kY($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=Z.baseUrl.trim(),W=Z.apiKey?.trim()??"";if(!J&&!W){let U=u1($);if((await E8(U)).providers[Q]){let L=await b3($,{providerId:Q});return{providerId:Q,settingsPath:L.settingsPath,modelsPath:L.modelsPath,modelsCount:0}}return eA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:U,modelsCount:0}}if(d0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!J)throw Error("baseUrl is required");let j=bY(Z.models),Y=Z.modelsSourceUrl?.trim(),V=await tA({providerId:Q,explicitModels:j,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,K=sA(Z.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:J,headers:K,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let G=u1($),F=await E8(G);return F.providers[Q]={provider:{name:X,baseUrl:J,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:Y},models:yY(V,H)},await $Z(G,F),C8(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:V.length}}async function S3($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=u1($),W=await E8(J),X=W.providers[Q];if(!X){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),A=bY(Z.models)[0]??T.model?.trim();if(!A&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||aA(Q),baseUrl:Z.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:A,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:A?yY([A],T.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let j=Z.name?.trim()??X.provider.name.trim();if(!j)throw Error("name is required");let Y=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,K=bY(Z.models),G=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!G,U=Object.keys(X.models??{}).map((T)=>T.trim()).filter(Boolean),_=await tA({providerId:Q,explicitModels:K,modelsSourceUrl:G,fallbackModelIds:U,shouldRecompute:F});if(_.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let L=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),O=L&&_.includes(L)?L:_[0],q={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:Y,model:O};if(B)q.protocol=B;else delete q.protocol;if(H)q.client=H;else delete q.client;if(Z.apiKey!==void 0){let T=Z.apiKey?.trim()??"";if(T)q.apiKey=T;else delete q.apiKey}if(Z.headers!==void 0){let T=sA(Z.headers);if(T)q.headers=T;else delete q.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")q.timeout=Z.timeoutMs;else delete q.timeout;return $.saveProviderSettings(q,{setLastUsed:!1}),W.providers[Q]={provider:{name:j,baseUrl:Y,defaultModelId:O,protocol:B,client:H,capabilities:V,modelsSourceUrl:G},models:yY(_,V)},await $Z(J,W),C8(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J,modelsCount:_.length}}async function b3($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=u1($),W=await E8(J);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await $Z(J,W),d0.unregisterProvider(Q),eA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J}}function IY($,Z,Q={}){let J=Z.trim();if(!J)throw Error("providerId is required");let W=$.read().providers[J]?.settings;return $.saveProviderSettings({...W??{},provider:J},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function hY($,Z={}){let Q=$.read(),J=d0.getProviderIds(),W=await Promise.all(J.map(async(j)=>{let[Y,V]=await Promise.all([d0.getProvider(j),d0.getModelsForProvider(j)]),B=oA(V),H=Q.providers[j]?.settings,K=$.getProviderSettings(j),G=Y?.name??aA(j),F=Bm(Y?.capabilities,K?.capabilities),U=Gm(Y?.metadata)??Fm(Y);return{provider:{id:j,name:G,models:B.length,color:jm(j),letter:Xm(G),enabled:Boolean(H),apiKey:K?Jm(K):void 0,oauthAccessTokenPresent:K?Wm(K):void 0,baseUrl:K?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:K?.protocol??Y?.protocol,client:K?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:U,configValues:_m(U,K,Y),modelList:B},rank:Hm(Y?.metadata)}}));W.sort((j,Y)=>{if(j.rank!==Y.rank)return j.rank-Y.rank;return j.provider.name.localeCompare(Y.provider.name)||j.provider.id.localeCompare(Y.provider.id)});let X=W.map((j)=>j.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((j)=>j.id!==nA);return{providers:X,settingsPath:$.getFilePath()}}async function xY($,Z){let Q=$.trim(),J=await Ym(Q,Z),W=oA(J);return{providerId:Q,models:W}}function P3($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function $O($,Z){if(!P3(Z))return P3($)?{...$}:void 0;let Q=P3($)?{...$}:{};for(let[J,W]of Object.entries(Z)){if(W==null||W===""){delete Q[J];continue}if(P3(W)){let X=$O(Q[J],W);if(X&&Object.keys(X).length>0)Q[J]=X;else delete Q[J];continue}Q[J]=W}return Object.keys(Q).length>0?Q:void 0}function gY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete W[X];else W[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))W[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let j=$O(W[X],Z[X]);if(j)W[X]=j;else delete W[X]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function vY($,Z){let Q=Z.trim(),J=$.getProviderSettings(Q),X=d0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,j=J?.baseUrl?.trim()||X?.baseUrl?.trim(),Y=MQ(j,X?.baseUrl,X?.modelsSourceUrl);if(!J||!X||!j||!Y)return{providerId:Q,refreshed:!1};let V=await S3($,{providerId:Q,name:X.name,baseUrl:j,apiKey:J.apiKey,headers:J.headers??null,timeoutMs:J.timeout??null,modelsSourceUrl:Y,protocol:J.protocol??X.protocol??null,client:J.client??X.client??null,capabilities:J.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function mY($){let Z=$.trim().toLowerCase(),Q=F0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function cY($,Z,Q,J){let W=F0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let X=q6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return W.login({settings:Z,callbacks:X,telemetry:J})}function uY($,Z,Q,J,W){return O2({manager:$,providerId:Z,settings:Q,credentials:J,setLastUsed:W?.setLastUsed})}async function dY($,Z,Q,J){let W=q6({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return R4($,Z,{callbacks:W,telemetry:J})}function pY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var QO={};w(QO,{getProviderConfigFields:()=>lY});import*as y3 from"@cline/llms";var Lm=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Am={"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 Om($,Z){let Q={};for(let J of Lm){let W=$[J],X=Z[J];if(W||X)Q[J]={...W,...X}}return Q}function qm($){let Z=Am[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Om($.fields,Z.fields)}}var zm=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Tm($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return zm.has($)}function lY($){let Z=y3.normalizeProviderId($);if(S$(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=y3.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let J=Q?.provider.baseUrl,W={apiKey:{}};if(Tm(Z,Q))W.baseUrl={defaultValue:J};return qm({providerId:Z,authMethod:"api-key",fields:W})}var WO={};w(WO,{resolveLegacyClineAuth:()=>nY,migrateLegacyProviderSettings:()=>XZ});import{existsSync as Nm,readFileSync as fm}from"node:fs";import{dirname as Rm,join as iY}from"node:path";import*as T$ from"@cline/llms";import{ReasoningLevelSchema as Mm}from"@cline/shared";import{resolveClineDataDir as Em}from"@cline/shared/storage";var k3="openai",Cm=T$.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,wm=128000;function nY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let J=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:J,accountId:Q.userInfo?.id}}catch{return}}function C($){let Z=$?.trim();return Z?Z:void 0}function Pm($){return $==="credentials"?"iam":$}function JO($){if(!Nm($))return;try{let Z=fm($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Sm($){let Z=$.dataDir??Em(),Q=$.globalStatePath??iY(Z,"globalState.json"),J=$.secretsPath??iY(Z,"secrets.json"),W=JO(Q),X=JO(J);if(!W&&!X)return;return{globalState:W??{},secrets:X??{}}}function rY($){return T$.normalizeProviderId($)}function I3($){if($===k3)return $;return T$.normalizeProviderId($)}function bm($,Z,Q,J){let W=Q==="plan"?"planMode":"actMode",X=Z===J?C(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[Z];return(Y?C(typeof $[Y]==="string"?$[Y]:void 0):void 0)??X}function ym($,Z,Q){let J=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,W=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).find(Boolean),X=Mm.safeParse(W),j=X.success?X.data:void 0,Y=typeof J==="number"&&Number.isInteger(J)&&J>0?J:void 0;if(!j&&Y===void 0)return;return{...j?{effort:j}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function km($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),J=C(Q.access_token),W=C(Q.refresh_token),X=C(Q.accountId);if(!J&&!W&&!X)return;return{...J?{apiKey:J}:{},auth:{...J?{accessToken:J}:{},...W?{refreshToken:W}:{},...X?{accountId:X}:{}}}}catch{return}}function Im($){let Z=T$.getGeneratedModelsForProvider($),J=T$.getProviderCollectionSync($)?.provider.defaultModelId;if(J&&Z[J])return J;return Object.keys(Z)[0]??void 0}function hm($,Z,Q,J){let W=rY($),X=C(J==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),j=X?I3(X):void 0,Y=bm(Z,$,J,j)??Im(W),V=ym(Z,W,J),B=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},K={};if($==="openai-codex")Object.assign(K,km(Q));if($==="cline")try{let D=C(Q["cline:clineAccountId"]);if(D)K.auth={...K.auth??{},...nY(D)}}catch{}if($===k3&&Z.openAiHeaders)K.headers=Z.openAiHeaders;if($==="bedrock"){let D=Pm(Z.awsAuthentication),q=D==="profile"||Z.awsUseProfile===!0;K.aws={accessKey:C(Q.awsAccessKey),secretKey:C(Q.awsSecretKey),sessionToken:C(Q.awsSessionToken),region:C(Z.awsRegion),authentication:D,profile:q?C(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:C(Z.awsBedrockEndpoint),customModelBaseId:C(J==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")K.gcp={projectId:C(Z.vertexProjectId),region:C(Z.vertexRegion)};if($===k3&&(Z.azureApiVersion||Z.azureIdentity!==void 0))K.azure={apiVersion:C(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;K.sap={clientId:C(Q.sapAiCoreClientId),clientSecret:C(Q.sapAiCoreClientSecret),tokenUrl:C(Z.sapAiCoreTokenUrl),resourceGroup:C(Z.sapAiResourceGroup),deploymentId:D?void 0:C(J==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){K.oca={mode:Z.ocaMode};let D=C(Q.ocaRefreshToken);if(D)K.auth={...K.auth??{},refreshToken:D}}if($==="qwen")K.apiLine=Z.qwenApiLine;if($==="moonshot")K.apiLine=Z.moonshotApiLine;if($==="zai")K.apiLine=Z.zaiApiLine;if($==="minimax")K.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},F=C(H[$]),U=C(G[$]),_={provider:W,...F?{apiKey:F}:{},...Y?{model:Y}:{},...U?{baseUrl:U}:{},...V?{reasoning:V}:{},...B?{timeout:B}:{},...K},L=_6.safeParse(_);if(!L.success)return;return Object.keys(_).filter((D)=>D!=="provider").length>0?L.data:void 0}function WZ($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function xm($,Z,Q){if($!==Cm)return;if(!Z.baseUrl||!Z.model)return;let J=WZ(Q?.contextWindow)??wm,W=WZ(Q?.maxTokens),X=WZ(Q?.inputPrice),j=WZ(Q?.outputPrice),Y=WZ(Q?.temperature),V=["streaming","tools"];if(Q?.supportsImages!==!1)V.push("images");if(Q?.supportsPromptCache===!0)V.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:J,maxInputTokens:J,capabilities:V,...W!==void 0?{maxTokens:W}:{},...X!==void 0?{inputPrice:X}:{},...j!==void 0?{outputPrice:j}:{},...Y!==void 0?{temperature:Y}:{}}}}}function gm($,Z){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let X=C(W);if(X)Q.add(I3(X))}if(C(Z.apiKey))Q.add("anthropic");if(C(Z.openRouterApiKey))Q.add("openrouter");if(C(Z.openAiApiKey))Q.add(k3);if(C(Z.openAiNativeApiKey))Q.add("openai-native");if(C(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(C(Z.geminiApiKey))Q.add("gemini");if(C(Z.ollamaApiKey))Q.add("ollama");if(C(Z.deepSeekApiKey))Q.add("deepseek");if(C(Z.requestyApiKey))Q.add("requesty");if(C(Z.togetherApiKey))Q.add("together");if(C(Z.fireworksApiKey))Q.add("fireworks");if(C(Z.qwenApiKey))Q.add("qwen");if(C(Z.doubaoApiKey))Q.add("doubao");if(C(Z.mistralApiKey))Q.add("mistral");if(C(Z.liteLlmApiKey))Q.add("litellm");if(C(Z.asksageApiKey))Q.add("asksage");if(C(Z.xaiApiKey))Q.add("xai");if(C(Z.moonshotApiKey))Q.add("moonshot");if(C(Z.zaiApiKey))Q.add("zai");if(C(Z.huggingFaceApiKey))Q.add("huggingface");if(C(Z.nebiusApiKey))Q.add("nebius");if(C(Z.sambanovaApiKey))Q.add("sambanova");if(C(Z.cerebrasApiKey))Q.add("cerebras");if(C(Z.groqApiKey))Q.add("groq");if(C(Z.huaweiCloudMaasApiKey))Q.add("huawei-cloud-maas");if(C(Z.basetenApiKey))Q.add("baseten");if(C(Z.vercelAiGatewayApiKey))Q.add("vercel-ai-gateway");if(C(Z.difyApiKey))Q.add("dify");if(C(Z.minimaxApiKey))Q.add("minimax");if(C(Z.hicapApiKey))Q.add("hicap");if(C(Z.aihubmixApiKey))Q.add("aihubmix");if(C(Z.nousResearchApiKey))Q.add("nousResearch");if(C(Z.awsAccessKey)||C(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Q.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Q.add("vertex");if(C(Z.clineApiKey))Q.add("cline");let J=nY(C(Z["cline:clineAccountId"]));if(J?.accessToken||J?.refreshToken||J?.accountId)Q.add("cline");if(C(Z.ocaApiKey))Q.add("oca");if(C(Z.sapAiCoreClientId)||C(Z.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function XZ($){let Z=$.providerSettingsManager.read(),Q=Sm($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:J,secrets:W}=Q,X=J.mode==="plan"?"plan":"act",j=X==="plan"?"act":"plan",Y=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),V=Y?I3(Y):void 0,B=C(X==="plan"?J.actModeApiProvider:J.planModeApiProvider),H=B?I3(B):void 0,K=gm(J,W),G=s$();G.providers={...Z.providers},G.lastUsedProvider=Z.lastUsedProvider;let F=new Date().toISOString(),U=0,_=iY(Rm($.providerSettingsManager.getFilePath()),"models.json"),L=K4(_),O=0;for(let T of K){let z=rY(T);if(G.providers[z])continue;let A=T!==V&&T===H?j:X,R=hm(T,J,W,A);if(!R)continue;G.providers[z]={settings:R,updatedAt:F,tokenSource:"migration"},U+=1;let N=xm(z,R,A==="plan"?J.planModeOpenAiModelInfo:J.actModeOpenAiModelInfo);if(N&&!L.providers[z])L.providers[z]=N,O+=1}if(U===0&&O===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let D=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),q=D?rY(D):void 0;if(G.lastUsedProvider=Z.lastUsedProvider??(q&&G.providers[q]?q:Object.keys(G.providers)[0]),$.providerSettingsManager.write(G),O>0)e9(_,L);return{migrated:U>0||O>0,providerCount:Object.keys(G.providers).length,lastUsedProvider:G.lastUsedProvider}}Q3();q0();I9();var XO={};w(XO,{FileTeamPersistenceStore:()=>h3});import{appendFileSync as vm,existsSync as aY,mkdirSync as mm,readFileSync as cm,renameSync as um,unlinkSync as dm,writeFileSync as pm}from"node:fs";import{join as oY}from"node:path";import{resolveTeamDataDir as lm}from"@cline/shared/storage";function im($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class h3{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=im($.teamName),Q=$.baseDir?.trim()||lm();this.dirPath=oY(Q,Z),this.statePath=oY(this.dirPath,"state.json"),this.taskHistoryPath=oY(this.dirPath,"task-history.jsonl")}loadState(){if(!aY(this.statePath))return;try{let $=cm(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 D_(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`;pm(Q,`${JSON.stringify(Z,null,2)}
|
|
783
783
|
`,"utf8"),um(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(),vm(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
|
|
784
|
-
`,"utf8")}ensureDir(){if(!aY(this.dirPath))mm(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))dm(this.statePath)}}var jO={};w(jO,{ChatViewStateSchema:()=>sY,ChatSummarySchema:()=>u3,ChatSessionStatusSchema:()=>g3,ChatSessionConfigSchema:()=>x3,ChatMessageSchema:()=>c3,ChatMessageRoleSchema:()=>v3,ChatMessageImageSchema:()=>m3});import{z as I}from"zod";var x3=I.object({workspaceRoot:I.string().min(1),cwd:I.string().optional(),provider:I.string().min(1),model:I.string().min(1),mode:I.enum(["act","plan"]).default("act"),apiKey:I.string(),systemPrompt:I.string().optional(),rules:I.string().optional(),maxIterations:I.number().int().positive().optional(),enableTools:I.boolean(),enableSpawn:I.boolean().optional(),enableTeams:I.boolean().optional(),autoApproveTools:I.boolean().optional(),missionStepInterval:I.number().int().positive().optional(),missionTimeIntervalMs:I.number().int().positive().optional()}),g3=I.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),v3=I.enum(["user","assistant","tool","system","status","error"]),m3=I.object({id:I.string().min(1),mediaType:I.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:I.string().min(1)}),c3=I.object({id:I.string().min(1),sessionId:I.string().nullable(),role:v3,content:I.string(),images:I.array(m3).optional(),createdAt:I.number().int().nonnegative(),meta:I.object({stream:I.enum(["stdout","stderr"]).optional(),toolName:I.string().optional(),iteration:I.number().int().nonnegative().optional(),agentId:I.string().optional(),conversationId:I.string().optional(),hookEventName:I.string().optional(),inputTokens:I.number().int().nonnegative().optional(),outputTokens:I.number().int().nonnegative().optional(),checkpoint:I.object({ref:I.string(),createdAt:I.number().int().nonnegative(),runCount:I.number().int().positive(),kind:I.enum(["stash","commit"]).optional()}).optional()}).optional()}),u3=I.object({toolCalls:I.number().int().nonnegative(),tokensIn:I.number().int().nonnegative(),tokensOut:I.number().int().nonnegative()}),sY=I.object({sessionId:I.string().nullable(),status:g3,config:x3,messages:I.array(c3),rawTranscript:I.string(),error:I.string().nullable(),summary:u3});var YO={};w(YO,{CORE_BUILD_VERSION:()=>j9});var j9=J6;import{Agent as ac,createAgentRuntime as oc}from"@cline/agents";var VO={};w(VO,{fetchClineRecommendedModels:()=>eY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d3});import{getClineEnvironmentConfig as rm}from"@cline/shared";var nm=5000,d3={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 am($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function tY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function om($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],J=Array.isArray(Z.free)?Z.free:[],W=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(tY).filter((V)=>V!==null),j=J.map(tY).filter((V)=>V!==null),Y=W.map(tY).filter((V)=>V!==null);if(X.length===0&&j.length===0&&Y.length===0)return null;return{recommended:X,free:j,clinePass:Y}}function sm($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=rm().apiBaseUrl;try{return($.providerSettingsManager??new K1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function tm($,Z,Q){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await $(Z,{signal:J.signal})}finally{clearTimeout(W)}}async function eY($={}){try{let Z=sm($),Q=$.fetchImpl??fetch,J=await tm(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??nm);if(!J.ok)throw Error(`HTTP ${J.status}`);let W=await J.json(),X=om(W);if(X)return X}catch{}return am(d3)}var BO={};w(BO,{loadLlmsConfigFromFile:()=>ZV,defineLlmsConfig:()=>$V});import{readFile as em}from"node:fs/promises";import $c from"node:path";function $V($){return $}async function ZV($){let Z=$c.resolve($),Q=await em(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(W){let X=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return Zc(J,Z)}function Zc($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let J=$.providers;if(!Array.isArray(J))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!J.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var DO={};w(DO,{createLlmsSdk:()=>JV,DefaultLlmsSdk:()=>Y9});import{BUILT_IN_PROVIDER_IDS as GO,createHandler as Wc,createHandlerAsync as Xc,getProviderCollection as jc,hasProvider as FO,registerAsyncHandler as Yc,registerHandler as Vc,registerModel as Bc,registerProvider as UO}from"@cline/llms";function HO($){return $?{...$}:{}}function Qc($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function Jc($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function KO($){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 QV{providers=new Map;register($){Jc($.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??{},...HO($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Qc($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...HO($.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 Y9{configuredProviders=new QV;constructor($){this.applyConfig($)}createHandler($){return Wc(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Xc(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(UO($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Vc($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Yc($.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.`);UO({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($){Bc($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...GO]}async getBuiltInProviders(){return(await Promise.all(GO.map((Z)=>jc(Z)))).filter((Z)=>Z!==void 0).map((Z)=>KO({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=FO(Z.id),J=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,W=typeof J==="string"&&FO(J);if(!Q&&!W)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function JV($){return new Y9($)}zj();async function Hc(){return Promise.resolve().then(() => (Q3(),sL))}function Ju(){return new Date().toISOString()}var Wu="cline",Xu="cline-pass";function ju($){if(OO($)!=="providers.json")return;let Z=XV($);if(OO(Z)!=="settings")return;return XV(Z)}class K1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Qu(),this.dataDir=$.dataDir??ju(this.filePath),this.dataDir||!$.filePath)X9({providerSettingsManager:this,dataDir:this.dataDir});if(Q9(this),Z9(this.read()),WV(this.filePath))try{AO(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!WV(this.filePath))return s$();try{let $=tc(this.filePath,"utf8"),Z=JSON.parse($),Q=L6.safeParse(Z);if(Q.success){Z9(Q.data);let J=Q.data.providers.cline?.settings?.auth;return t(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!J?.accessToken} clineAccessTokenHash=${P0(J?.accessToken)} clineRefreshTokenHash=${P0(J?.refreshToken)}`),Q.data}}catch{}return s$()}write($){let Z=L6.parse($),Q=XV(this.filePath);if(!WV(Q))sc(Q,{recursive:!0,mode:448});let J=`${this.filePath}.${process.pid}.tmp`;try{Zu(J,`${JSON.stringify(Z,null,2)}
|
|
785
|
-
`,{encoding:"utf8",mode:384}),ec(J,this.filePath)}catch(W){throw $u(J,{force:!0}),W}try{AO(this.filePath,384)}catch{}
|
|
784
|
+
`,"utf8")}ensureDir(){if(!aY(this.dirPath))mm(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))dm(this.statePath)}}var jO={};w(jO,{ChatViewStateSchema:()=>sY,ChatSummarySchema:()=>u3,ChatSessionStatusSchema:()=>g3,ChatSessionConfigSchema:()=>x3,ChatMessageSchema:()=>c3,ChatMessageRoleSchema:()=>v3,ChatMessageImageSchema:()=>m3});import{z as I}from"zod";var x3=I.object({workspaceRoot:I.string().min(1),cwd:I.string().optional(),provider:I.string().min(1),model:I.string().min(1),mode:I.enum(["act","plan"]).default("act"),apiKey:I.string(),systemPrompt:I.string().optional(),rules:I.string().optional(),maxIterations:I.number().int().positive().optional(),enableTools:I.boolean(),enableSpawn:I.boolean().optional(),enableTeams:I.boolean().optional(),autoApproveTools:I.boolean().optional(),missionStepInterval:I.number().int().positive().optional(),missionTimeIntervalMs:I.number().int().positive().optional()}),g3=I.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),v3=I.enum(["user","assistant","tool","system","status","error"]),m3=I.object({id:I.string().min(1),mediaType:I.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:I.string().min(1)}),c3=I.object({id:I.string().min(1),sessionId:I.string().nullable(),role:v3,content:I.string(),images:I.array(m3).optional(),createdAt:I.number().int().nonnegative(),meta:I.object({stream:I.enum(["stdout","stderr"]).optional(),toolName:I.string().optional(),iteration:I.number().int().nonnegative().optional(),agentId:I.string().optional(),conversationId:I.string().optional(),hookEventName:I.string().optional(),inputTokens:I.number().int().nonnegative().optional(),outputTokens:I.number().int().nonnegative().optional(),checkpoint:I.object({ref:I.string(),createdAt:I.number().int().nonnegative(),runCount:I.number().int().positive(),kind:I.enum(["stash","commit"]).optional()}).optional()}).optional()}),u3=I.object({toolCalls:I.number().int().nonnegative(),tokensIn:I.number().int().nonnegative(),tokensOut:I.number().int().nonnegative()}),sY=I.object({sessionId:I.string().nullable(),status:g3,config:x3,messages:I.array(c3),rawTranscript:I.string(),error:I.string().nullable(),summary:u3});var YO={};w(YO,{CORE_BUILD_VERSION:()=>jZ});var jZ=J6;import{Agent as ac,createAgentRuntime as oc}from"@cline/agents";var VO={};w(VO,{fetchClineRecommendedModels:()=>eY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d3});import{getClineEnvironmentConfig as rm}from"@cline/shared";var nm=5000,d3={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 am($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function tY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function om($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],J=Array.isArray(Z.free)?Z.free:[],W=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(tY).filter((V)=>V!==null),j=J.map(tY).filter((V)=>V!==null),Y=W.map(tY).filter((V)=>V!==null);if(X.length===0&&j.length===0&&Y.length===0)return null;return{recommended:X,free:j,clinePass:Y}}function sm($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=rm().apiBaseUrl;try{return($.providerSettingsManager??new K1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function tm($,Z,Q){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await $(Z,{signal:J.signal})}finally{clearTimeout(W)}}async function eY($={}){try{let Z=sm($),Q=$.fetchImpl??fetch,J=await tm(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??nm);if(!J.ok)throw Error(`HTTP ${J.status}`);let W=await J.json(),X=om(W);if(X)return X}catch{}return am(d3)}var BO={};w(BO,{loadLlmsConfigFromFile:()=>ZV,defineLlmsConfig:()=>$V});import{readFile as em}from"node:fs/promises";import $c from"node:path";function $V($){return $}async function ZV($){let Z=$c.resolve($),Q=await em(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(W){let X=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return Zc(J,Z)}function Zc($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let J=$.providers;if(!Array.isArray(J))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!J.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var DO={};w(DO,{createLlmsSdk:()=>JV,DefaultLlmsSdk:()=>YZ});import{BUILT_IN_PROVIDER_IDS as GO,createHandler as Wc,createHandlerAsync as Xc,getProviderCollection as jc,hasProvider as FO,registerAsyncHandler as Yc,registerHandler as Vc,registerModel as Bc,registerProvider as UO}from"@cline/llms";function HO($){return $?{...$}:{}}function Qc($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function Jc($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function KO($){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 QV{providers=new Map;register($){Jc($.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??{},...HO($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Qc($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...HO($.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 YZ{configuredProviders=new QV;constructor($){this.applyConfig($)}createHandler($){return Wc(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Xc(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(UO($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Vc($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Yc($.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.`);UO({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($){Bc($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...GO]}async getBuiltInProviders(){return(await Promise.all(GO.map((Z)=>jc(Z)))).filter((Z)=>Z!==void 0).map((Z)=>KO({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=FO(Z.id),J=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,W=typeof J==="string"&&FO(J);if(!Q&&!W)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function JV($){return new YZ($)}zj();async function Hc(){return Promise.resolve().then(() => (Q3(),sL))}function Ju(){return new Date().toISOString()}var Wu="cline",Xu="cline-pass";function ju($){if(OO($)!=="providers.json")return;let Z=XV($);if(OO(Z)!=="settings")return;return XV(Z)}class K1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Qu(),this.dataDir=$.dataDir??ju(this.filePath),this.dataDir||!$.filePath)XZ({providerSettingsManager:this,dataDir:this.dataDir});if(QZ(this),ZZ(this.read()),WV(this.filePath))try{AO(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!WV(this.filePath))return s$();try{let $=tc(this.filePath,"utf8"),Z=JSON.parse($),Q=L6.safeParse(Z);if(Q.success){ZZ(Q.data);let J=Q.data.providers.cline?.settings?.auth;return t(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!J?.accessToken} clineAccessTokenHash=${P0(J?.accessToken)} clineRefreshTokenHash=${P0(J?.refreshToken)}`),Q.data}}catch{}return s$()}write($){let Z=L6.parse($),Q=XV(this.filePath);if(!WV(Q))sc(Q,{recursive:!0,mode:448});let J=`${this.filePath}.${process.pid}.tmp`;try{Zu(J,`${JSON.stringify(Z,null,2)}
|
|
785
|
+
`,{encoding:"utf8",mode:384}),ec(J,this.filePath)}catch(W){throw $u(J,{force:!0}),W}try{AO(this.filePath,384)}catch{}ZZ(Z)}saveProviderSettings($,Z={}){let Q=_6.parse($),J=this.read(),W=Q.provider,X=Z.setLastUsed!==!1,j=J.providers[W],Y=Z.tokenSource??j?.tokenSource??"manual",V={...J,providers:{...J.providers,[W]:{settings:Q,updatedAt:Ju(),tokenSource:Y}},lastUsedProvider:X?W:J.lastUsedProvider};this.write(V);let B=J.providers.cline?.settings?.auth,H=Q.provider==="cline"?Q.auth:V.providers.cline?.settings?.auth,K=!!B?.accessToken&&!H?.accessToken;return t(`providers.save providerId=${W} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${K}`),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,W=F0(Z)?.storageProviderId;if(!W||W===Z)return Q;let X=$.providers[W]?.settings;if(!X)return Q;return _6.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===Xu&&Z.isClinePassEnabled===!1)return Wu;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return J1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return J1(Z,$)}async refreshCatalog(){try{await U6({})}catch{}}}q0();F8();import{mkdir as Yu,writeFile as Vu}from"node:fs/promises";import{join as Bu}from"node:path";import{AGENTS_RULES_FILE_NAME as Hu,resolveChatWorkspacePath as Ku}from"@cline/shared/storage";var Gu=`# Cline chat workspace
|
|
786
786
|
|
|
787
787
|
This directory is Cline's shared workspace for chat sessions that were
|
|
788
788
|
started without a project. It is not a project of its own, and other chat
|
|
@@ -801,7 +801,7 @@ user may refer back to them. Never assume loose files in this directory
|
|
|
801
801
|
belong to the current conversation, and keep new work inside a named folder
|
|
802
802
|
rather than at the top level.
|
|
803
803
|
`;async function Fu(){let $=Ku();await Yu($,{recursive:!0,mode:448});let Z=Bu($,Hu);try{await Vu(Z,Gu,{flag:"wx"})}catch(Q){if(Q.code!=="EEXIST")throw Q}return $}async function qO($){let Z=$.cwd?.trim()??"",Q=$.workspaceRoot?.trim()??"",J=Z||Q||await Fu();return{...$,cwd:Z||J,workspaceRoot:Q||J}}import{normalizeUserInput as Uu}from"@cline/shared";import{nanoid as Du}from"nanoid";class zO{list($){return $?F1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((V)=>V.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:F1($),updated:!1};let W=$.pendingPrompts[J];if(!W)return{sessionId:Z.sessionId,prompts:F1($),updated:!1};let X=Z.prompt===void 0?W.prompt:Uu(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let j=Z.delivery??W.delivery,Y={...W,prompt:X,mode:Z.mode??W.mode,delivery:j};return $.pendingPrompts.splice(J,1),_u($,Y,J,W.delivery),{sessionId:Z.sessionId,prompts:F1($),prompt:p3(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((X)=>X.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:F1($),removed:!1};let[W]=$.pendingPrompts.splice(J,1);return{sessionId:Z.sessionId,prompts:F1($),prompt:W?p3(W):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Q,mode:J??V.mode,userImages:X??V.userImages,userFiles:j??V.userFiles};if(W==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${Du(5)}`,prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j};if(W==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return F1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((J)=>J.delivery==="steer");if(Z<0)return{prompts:F1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:F1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:F1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),F1($)}clear($){return $.pendingPrompts.length=0,[]}}class jV{deps;service=new zO;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:F1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let J=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{J=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,J&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=p3(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 p3($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function F1($){return $.pendingPrompts.map(p3)}function _u($,Z,Q,J){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(J==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}q0();class VV{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let J=this.deps.getSession($),W={sessionId:$,config:Z,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=HW(Q),j=!!J&&(!X.agentId||X.agentId===YV(J.agent));KW(W,Q,j?{isPrimaryAgentEvent:!0,agentId:YV(J.agent),conversationId:J.agent.getConversationId(),...J?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(Qj(Q,Z),Z.type==="agent_event"){let J={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};KW(J,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let J=J$({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:YV(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(J)w$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...J})}}if(await Jj($,Z,this.deps.invokeBackendOptional),Q)Wj(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,J){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,J);return}if(Z.name==="automation_event"){let B=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!B)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await B.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,X=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,j=typeof W?.prompt==="string"?W.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(X,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let W=this.deps.getSession($)?.config.telemetry??Q;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.pluginName==="string"&&X.pluginName?X.pluginName:"unknown";if(X.kind==="event"){let Y=typeof X.event==="string"?X.event.trim():"";if(!Y)return;let V={...X.properties&&typeof X.properties==="object"?X.properties:{},plugin_name:j,session_id:$};if(X.required===!0)W.captureRequired(`plugin.${Y}`,V);else W.capture({event:`plugin.${Y}`,properties:V});return}if(X.kind==="metric"){let Y=typeof X.name==="string"?X.name.trim():"",V=typeof X.value==="number"?X.value:NaN;if(!Y||Number.isNaN(V))return;let B={...X.attributes&&typeof X.attributes==="object"?X.attributes:{},plugin_name:j},H=typeof X.description==="string"?X.description:void 0,K=X.required===!0,G=`plugin.${Y}`;if(X.metric==="counter")W.recordCounter(G,V,B,H,K);else if(X.metric==="histogram")W.recordHistogram(G,V,B,H,K);else if(X.metric==="gauge")W.recordGauge(G,V,B,H,K)}}handlePluginLog($,Z,Q){let J=this.deps.getSession($),W=Q??J?.config.extensionContext?.logger??J?.config.logger;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.message==="string"?X.message:"";if(!j)return;let Y=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(Y.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)Y.pluginName=X.pluginName;if(X.level==="debug"){W.debug(j,Y);return}if(X.level==="error"){if(W.error)W.error(j,Y);else W.log(j,{...Y,severity:"error"});return}W.log(j,Y)}}function YV($){return $.getAgentId()}function BV($){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:W$($.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 HV($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function TO($,Z,...Q){let J=HV($,Z);if(!J)throw Error(`session service method not available: ${Z}`);return Promise.resolve(J.apply($,Q))}async function NO($,Z,...Q){let J=HV($,Z);if(!J)return;await Promise.resolve(J.apply($,Q))}async function fO($,Z,...Q){let J=HV($,Z);if(!J)return;return await Promise.resolve(J.apply($,Q))}O1();q0();function KV($,Z,Q){return{onSubAgentEvent:(J)=>$.onAgentEvent(Q,Z,J),onSubAgentStart:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(J.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=J$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId});if(X)w$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});_4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:J.parentAgentId,agentId:J.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,J)},onSubAgentEnd:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(J.subAgentId),j=X?Date.now()-X.startedAt:0,Y=J.result?.text?J.result.text.split(`
|
|
804
|
-
`).length:0;_4(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...J$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function GV($,Z,Q,J){let W=KV($,Z,Q);return p$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?v2({cwd:Z.cwd,telemetry:Z.telemetry,...Q1[$$({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)j.push(GV($,Z,Q,J));return Z$(j)},...W})}import{readFile as Lu,stat as Au}from"node:fs/promises";var Ou=20480000;async function RO($){let Z=await Au($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Ou)throw Error("File is too large to read into context.");let Q=await Lu($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var MO=5000;function V9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Eu($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=V9(Z.inputTokens),J=V9(Z.outputTokens),W=V9(Z.cacheReadTokens),X=V9(Z.cacheWriteTokens),j=V9(Z.totalCost);if(Q===void 0||J===void 0||W===void 0||X===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:W,cacheWriteTokens:X,totalCost:j}}function Cu($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function EO($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class m1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultLogger;defaultFetch;events=new G7;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new K2;constructor($){let Z=zu();if(Z)Mu(Z);let Q=o0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new X4,this.createAgentInstance=$.createAgent??((J)=>new c$(J)),this.defaultCapabilities=y0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new K1,this.oauthTokenManager=$.oauthTokenManager??new j4({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new jV({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new VV({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,W,X)=>{this.invoke("persistSessionMessages",J,W,X)},enqueuePendingPrompt:(J,W)=>this.pendingPromptsController.enqueue(J,W),invokeBackendOptional:(J,...W)=>this.invokeOptional(J,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||Nu(),J=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),W=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),X=J&&!W?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=X?{...$.config,cwd:X.cwd,workspaceRoot:X.workspace_root}:await qO($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,X)}async startResolvedSession($,Z,Q,J){let W=$.source??L0.CLI,X=V0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?Q6(Y):w0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let H=FV(B,Z),K=FV(H,`${Z}.messages.json`),G=FV(H,`${Z}.json`),F=W$($.config),U=i0.parse({version:1,session_id:Z,source:W,pid:process.pid,started_at:X,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:F,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:K}),_,L;if(Q&&Y.length>0&&!j.prompt?.trim()){let h=J??await this.invokeOptionalValue("readSessionManifest",Z);if(h)U=h,_={manifestPath:G,messagesPath:h.messages_path||K,compactionPath:h.compaction_path,manifest:h},L=await this.invokeOptionalValue("readSessionCompactionState",Z)}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:H,rootMessagesPath:_?.messagesPath??K,manifest:U});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,D);let q=y0(this.defaultCapabilities,$.capabilities),T=q?.toolExecutors??this.toolExecutors,z=$.localRuntime,A=z?.extensionContext?.logger??z?.logger,R=z?.extensionContext?.automation,N=z?.extensionContext?.telemetry??z?.telemetry??this.defaultTelemetry,S,y={getSession:(h)=>this.sessions.get(h),subAgentStarts:this.subAgentStarts,onAgentEvent:(h,H0,E0)=>this.eventBridge.dispatchAgentEvent(h,H0,E0),invokeBackendOptional:(h,...H0)=>this.invokeOptional(h,...H0)};S=await BF({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:q,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(h)=>{if(h.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,h.payload,A);return}this.eventBridge.handlePluginEvent(Z,h,R,N)},onTeamEvent:(h)=>{this.eventBridge.handleTeamEvent(Z,h),S.config.onTeamEvent?.(h)},createSpawnTool:()=>GV(y,S.config,Z,T),createSubAgentLifecycleCallbacks:(h)=>KV(y,h,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(h)=>{await this.persistSessionMetadata(Z,()=>h)}});let s=aZ({..._?.manifest.metadata??{},...j.sessionMetadata??{}},S.gitState);if(!_)U.metadata=s;let c=await this.runtimeBuilder.build(S.runtimeBuilderInput),b=S.config,r=S.providerConfig;if(c.teamRuntime&&!b.teamName?.trim())b.teamName=c.teamRuntime.getTeamName();let O0=async()=>{let h=this.sessions.get(Z);if(!h||!S$(h.config.providerId))return!1;try{return await this.syncOAuthCredentials(h,{forceRefresh:!0}),!0}catch{return!1}};c.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:O0});let N$=[...c.tools,...b.extraTools??[]],f$=c.extensions??S.extensions,X0=j.initialCompactionState,d1,R$=y4(b),f1=X0??L,p0=f1?{...f1,conversation_id:f1.conversation_id?.trim()||Z}:void 0,M$=k4({compact:R$,getState:()=>d1?.compactionState,saveState:async(h,H0)=>{let E0=d1;if(!E0)return;let C0={...h,conversation_id:E0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(E0,C0,H0)).updated)b.logger?.debug?.("Skipped stale session compaction state",{sessionId:E0.sessionId,sourceMessageCount:C0.source_message_count})}catch(D2){b.logger?.error?.("Failed to persist session compaction state",{sessionId:E0.sessionId,error:D2}),U2(b.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:D2,context:{sessionId:E0.sessionId,providerId:b.providerId,modelId:b.modelId}})}}}),M0={sessionId:Z,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,onAuthError:O0,knownModels:r.knownModels,providerConfig:r,thinking:b.thinking,reasoningEffort:b.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:b.thinkingBudgetTokens,maxTokensPerTurn:b.maxTokensPerTurn,temperature:b.temperature,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:M$,tools:N$,hooks:S.hooks,extensions:f$,hookErrorMode:b.hookErrorMode,initialMessages:S.effectiveInput.initialMessages,userFileContentLoader:RO,toolPolicies:S.toolPolicies,requestToolApproval:S.requestToolApproval?async(h)=>{let H0=S.requestToolApproval,E0=this.sessions.get(Z);if(E0)await this.markTurnPending(E0);try{if(!H0)return{approved:!1,reason:"Tool approval callback is not configured."};return await H0(h)}finally{let C0=this.sessions.get(Z);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:c.completionPolicy,consumePendingUserMessage:()=>{let h=this.pendingPromptsController.consumeSteer(Z);return h?f7(h.prompt,h.mode??b.mode):void 0},logger:c.logger??b.logger,extensionContext:b.extensionContext,onEvent:(h)=>this.eventBridge.dispatchAgentEvent(Z,b,h)};M0.hooks={...M0.hooks,onEvent:async(h)=>{if(await S.hooks?.onEvent?.(h),h.type!=="assistant-message")return;let H0=this.sessions.get(Z);if(!H0)return;let E0=H0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,E0,b.systemPrompt)}catch(C0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:C0}),U2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:b.providerId,modelId:b.modelId}})}}};let I0=this.createAgentInstance(M0);if(M0.onEvent)I0.subscribeEvents(M0.onEvent);c.registerLeadAgent?.(I0);let R1=J$({agentId:I0.getAgentId(),conversationId:I0.getConversationId(),teamId:c.teamRuntime?.getTeamId(),teamName:c.teamRuntime?.getTeamName(),teamRole:c.teamRuntime?"lead":void 0});if(KF(b,Z,Q,F,R1),R1)w$(b.telemetry,{ulid:Z,modelId:b.modelId,provider:b.providerId,...R1});if(c.teamRuntime)T9(b.telemetry,{ulid:Z,teamId:c.teamRuntime.getTeamId(),teamName:c.teamRuntime.getTeamName(),leadAgentId:I0.getAgentId(),restoredFromPersistence:c.teamRestoredFromPersistence===!0});let u={sessionId:Z,config:b,sessionMetadata:s,..._?{artifacts:_}:{},source:W,startedAt:_?.manifest.started_at??X,updatedAt:_?.manifest.ended_at??_?.manifest.started_at??X,pendingPrompt:U.prompt,runtime:c,agent:I0,started:!1,status:_?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:p0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:S.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(d1=u,u.compactionState&&!this.isCompactionStateForSession(u.sessionId,u.compactionState,u))u.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:u.sessionId,conversationId:u.compactionState.conversation_id}),u.compactionState=void 0;if(this.sessions.set(Z,u),_)await this.refreshActiveSessionGitMetadata(u,S.gitState);if(this.emitStatus(Z,"running"),Y.length>0&&!_){if(await this.ensureSessionPersisted(u),await this.invoke("persistSessionMessages",u.sessionId,Y,u.config.systemPrompt),u.compactionState){if(!(await this.persistActiveSessionCompactionState(u,u.compactionState)).updated)u.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(u,"completed",0)}let x0;try{if(j.prompt?.trim())if(x0=await this.executeTurn(u,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!u.interactive)await this.finalizeSingleRun(u,x0.finishReason);else await this.completeInteractiveTurn(u,x0.finishReason)}catch(h){if(u.interactive&&u.aborting)x0=await this.completeAbortedInteractiveTurn(u);else{U2(u.config.telemetry,{component:"core",operation:"session.start",error:h,severity:"error",handled:!1,context:{sessionId:u.sessionId,providerId:u.config.providerId,modelId:u.config.modelId}});try{await this.failSession(u)}catch(H0){u.config.logger?.error?.("Session failure cleanup threw",{sessionId:u.sessionId,error:H0})}throw h}}return{sessionId:Z,manifest:U,manifestPath:G,messagesPath:K,result:x0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),J=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,W.finishReason);else await this.completeInteractiveTurn(Z,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw U2(Z.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),W}}async getAccumulatedUsage($){let Z=wX(this.usageBySession.get($)),Q=wX(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!_0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!_0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return BV(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return Y5(J);let W=await this.readManifest(Q);return W?TQ(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(Y5),J=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(J.has(W.sessionId))continue;Q.unshift(BV(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),W=J?void 0:await this.getSession(Q);if(!(J??W))return{updated:!1};if(J){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,J,void 0,Y))return{updated:!1};J.agent.restore(Y)}return await this.persistActiveSessionCompactionState(J,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,W))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(EO(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let W=Z.conversation_id?.trim();if(!W)return!0;if(W===$)return!0;let X=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return X?W===X:!1}async canPersistCompactionState($,Z,Q,J,W){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let X=W??Q?.agent.getMessages()??await this.readSessionMessages($);return b$(Z,X)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let J=$.compactionState,W=J!==void 0&&b$(J,Q??$.agent.getMessages())!==void 0;if(J&&(W?EO(Z,J):Date.parse(Z.updated_at)<Date.parse(J.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),W=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=W;try{return await J}finally{if($.compactionStateWriteQueue===W)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let J=Q.agent.getMessages();if(J.length>0)return J}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return W2(Q.messagesPath);let J=await this.readManifest(Z);return W2(J?.messages_path)}async dispatchHookEvent($){await oU($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=k2(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let W={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0;let X={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(W),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(X),Q.providerId||Q.modelId)await this.mutateSessionManifest(J,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let J=$.sessionId,X=(this.manifestMutationQueues.get(J)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",J)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=X.then(()=>{return},()=>{return});this.manifestMutationQueues.set(J,j);try{return await X}finally{if(this.manifestMutationQueues.get(J)===j)this.manifestMutationQueues.delete(J)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim(),W=Q?.userImages?.length,X=Q?.userFiles?.length;if(!J&&!W&&!X)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(Xj($,j.finishReason)){let Y=await jj($);if(Y.length===0)break;let V=Yj($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(N7($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),J=w0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let W=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??w0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=w0(),$.turnUsageByAgent=new Map,D9($.config.telemetry,$.sessionId,$.config.mode),w8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=W?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=DZ(B.messages,B,X);$.persistedMessages=H;let K=B5($.turnUsageByAgent?.values()??[]),G=N0(j,B.usage),F=N0(N0(w0(),B.usage),K),U=N0(Y,F);return this.usageBySession.set($.sessionId,G),this.aggregateUsageBySession.set($.sessionId,U),await this.persistSessionMetadata($.sessionId,(_)=>({..._??{},totalCost:G.totalCost,aggregatedAgentsCost:U.totalCost,usage:G,aggregateUsage:U})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw U2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((J)=>J.name===U0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,U4($.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=W$($.config),J=Ru(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let W=await l8(J,Q);GF($.config.telemetry,W);let X=f7(W.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=W$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await pW(W$($.config));if(!Q||!$.artifacts)return;if(dW($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(J)=>aZ({...J??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=Z(J?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,Z){if(N7($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)U4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});gQ($);let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),U2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(W){J("update_status",W)}try{await $.agent.shutdown(Z.shutdownReason)}catch(W){J("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),U2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(W){J("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let W=await this.mutateSessionManifest($,(X)=>{if(X.status=Z,_0(Z))delete X.ended_at,X.exit_code=null;else X.ended_at=J.endedAt??V0(),X.exit_code=typeof Q==="number"?Q:null});if(!W)return;$.status=Z,$.updatedAt=J.endedAt??V0(),$.endedAt=_0(Z)?null:W.ended_at,$.exitCode=W.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!S$($.config.providerId)||!fu(J))throw J;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(J){if(J instanceof f8)throw Error(`${J.providerId} requires re-authentication.`);throw J}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new K$($);throw U2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>Tu(J)?J:UV($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return J$({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=N0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let J=UV(Z),W=`${Q}.messages.json`,X;try{X=qu($)}catch{return w0()}let j=w0();for(let Y of X){if(!Y.endsWith(".messages.json"))continue;if(Y===W)continue;let V=UV($,Y);if(V===J)continue;let B=await W2(V);if(B.length===0)continue;j=N0(j,Q6(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=Eu(Z.metadata?.aggregateUsage);if(Q)return Cu($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:k1({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($)),MO))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(MO)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return TO(this.sessionService,$,...Z)}invokeOptional($,...Z){return NO(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return fO(this.sessionService,$,...Z)}}function Pu($){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 Su($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Z3($={}){let Z=async(J)=>J,Q=new m1({sessionService:new v1(new x1),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),X=await Q.startSession({source:J.source?.trim()||L0.CLI,interactive:!1,config:{providerId:wu(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:Su(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:X.sessionId,startResult:{sessionId:X.sessionId,manifestPath:X.manifestPath,messagesPath:X.messagesPath}}},async sendSession(J,W){let X=await Q.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((j)=>j.content)});if(!X)throw Error("local hub schedule runtime returned no turn result");return{result:Pu(X)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}import{release as bu}from"node:os";import{createClineTelemetryServiceConfig as yu}from"@cline/shared";q0();I7();var ku=300000,Iu=5000;function CO(){let $=yu({metadata:{extension_version:j9,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:bu()}}),Z=B2($),Q,J=()=>{try{return Q??=new K1,Q.getProviderSettings("cline")?.auth}catch{return}},W,X=()=>{let Y=J(),V=Y?.accountId?.trim();if(!Y||!V)return;let B=`${V}:${Y.organizationId??""}`;if(B===W)return;W=B,U1(Z.telemetry,{id:V,provider:"cline",organizationId:Y.organizationId,organizationName:Y.organizationName,memberId:Y.memberId})};X();let j=setInterval(X,ku);return j.unref?.(),{telemetry:Z.telemetry,dispose:async()=>{clearInterval(j);let Y;await Promise.race([(async()=>{await Z.flush(),await Z.dispose()})(),new Promise((V)=>{Y=setTimeout(V,Iu),Y.unref?.()})]),clearTimeout(Y)}}}xu(process.env.CLINE_VCR);var wO,PO,vu=new Promise(($,Z)=>{wO=$,PO=Z});vu.catch(()=>{return});function mu($){let Z=process.cwd(),Q,J,W;for(let X=0;X<$.length;X+=1){let j=$[X],Y=$[X+1];if(j==="--cwd"&&Y){Z=Y,X+=1;continue}if(j==="--host"&&Y){Q=Y,X+=1;continue}if(j==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))J=V;X+=1;continue}if(j==="--pathname"&&Y)W=Y,X+=1}return{cwd:Z,host:Q,port:J,pathname:W}}async function cu(){let $=mu(process.argv.slice(2));process.chdir($.cwd);let Z=V1({host:$.host,port:$.port,pathname:$.pathname}),Q=CO(),J;try{J=await T8({host:Z.host,port:Z.port,pathname:Z.pathname,owner:gu()==="production"?B1():a0(),telemetry:Q.telemetry,runtimeHandlers:Z3({telemetry:Q.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(Y){throw await Q.dispose().catch(()=>{return}),Y}let W=async()=>{await J.close(),await Q.dispose().catch(()=>{return}),process.exit(0)},X=!1,j=(Y,V)=>{if(X)return;X=!0;let B=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] ${Y}: ${B}
|
|
804
|
+
`).length:0;_4(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...J$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function GV($,Z,Q,J){let W=KV($,Z,Q);return p$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?v2({cwd:Z.cwd,telemetry:Z.telemetry,...Q1[$$({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)j.push(GV($,Z,Q,J));return Z$(j)},...W})}import{readFile as Lu,stat as Au}from"node:fs/promises";var Ou=20480000;async function RO($){let Z=await Au($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Ou)throw Error("File is too large to read into context.");let Q=await Lu($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var MO=5000;function VZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Eu($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=VZ(Z.inputTokens),J=VZ(Z.outputTokens),W=VZ(Z.cacheReadTokens),X=VZ(Z.cacheWriteTokens),j=VZ(Z.totalCost);if(Q===void 0||J===void 0||W===void 0||X===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:W,cacheWriteTokens:X,totalCost:j}}function Cu($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function EO($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class m1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultLogger;defaultFetch;events=new G9;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new K2;constructor($){let Z=zu();if(Z)Mu(Z);let Q=o0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new X4,this.createAgentInstance=$.createAgent??((J)=>new c$(J)),this.defaultCapabilities=y0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new K1,this.oauthTokenManager=$.oauthTokenManager??new j4({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new jV({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new VV({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,W,X)=>{this.invoke("persistSessionMessages",J,W,X)},enqueuePendingPrompt:(J,W)=>this.pendingPromptsController.enqueue(J,W),invokeBackendOptional:(J,...W)=>this.invokeOptional(J,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||Nu(),J=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),W=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),X=J&&!W?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=X?{...$.config,cwd:X.cwd,workspaceRoot:X.workspace_root}:await qO($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,X)}async startResolvedSession($,Z,Q,J){let W=$.source??L0.CLI,X=V0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?Q6(Y):w0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let H=FV(B,Z),K=FV(H,`${Z}.messages.json`),G=FV(H,`${Z}.json`),F=W$($.config),U=i0.parse({version:1,session_id:Z,source:W,pid:process.pid,started_at:X,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:F,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:K}),_,L;if(Q&&Y.length>0&&!j.prompt?.trim()){let h=J??await this.invokeOptionalValue("readSessionManifest",Z);if(h)U=h,_={manifestPath:G,messagesPath:h.messages_path||K,compactionPath:h.compaction_path,manifest:h},L=await this.invokeOptionalValue("readSessionCompactionState",Z)}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:H,rootMessagesPath:_?.messagesPath??K,manifest:U});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,D);let q=y0(this.defaultCapabilities,$.capabilities),T=q?.toolExecutors??this.toolExecutors,z=$.localRuntime,A=z?.extensionContext?.logger??z?.logger,R=z?.extensionContext?.automation,N=z?.extensionContext?.telemetry??z?.telemetry??this.defaultTelemetry,S,y={getSession:(h)=>this.sessions.get(h),subAgentStarts:this.subAgentStarts,onAgentEvent:(h,H0,E0)=>this.eventBridge.dispatchAgentEvent(h,H0,E0),invokeBackendOptional:(h,...H0)=>this.invokeOptional(h,...H0)};S=await BF({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:q,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(h)=>{if(h.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,h.payload,A);return}this.eventBridge.handlePluginEvent(Z,h,R,N)},onTeamEvent:(h)=>{this.eventBridge.handleTeamEvent(Z,h),S.config.onTeamEvent?.(h)},createSpawnTool:()=>GV(y,S.config,Z,T),createSubAgentLifecycleCallbacks:(h)=>KV(y,h,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(h)=>{await this.persistSessionMetadata(Z,()=>h)}});let s=aQ({..._?.manifest.metadata??{},...j.sessionMetadata??{}},S.gitState);if(!_)U.metadata=s;let c=await this.runtimeBuilder.build(S.runtimeBuilderInput),b=S.config,r=S.providerConfig;if(c.teamRuntime&&!b.teamName?.trim())b.teamName=c.teamRuntime.getTeamName();let O0=async()=>{let h=this.sessions.get(Z);if(!h||!S$(h.config.providerId))return!1;try{return await this.syncOAuthCredentials(h,{forceRefresh:!0}),!0}catch{return!1}};c.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:O0});let N$=[...c.tools,...b.extraTools??[]],f$=c.extensions??S.extensions,X0=j.initialCompactionState,d1,R$=y4(b),f1=X0??L,p0=f1?{...f1,conversation_id:f1.conversation_id?.trim()||Z}:void 0,M$=k4({compact:R$,getState:()=>d1?.compactionState,saveState:async(h,H0)=>{let E0=d1;if(!E0)return;let C0={...h,conversation_id:E0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(E0,C0,H0)).updated)b.logger?.debug?.("Skipped stale session compaction state",{sessionId:E0.sessionId,sourceMessageCount:C0.source_message_count})}catch(D2){b.logger?.error?.("Failed to persist session compaction state",{sessionId:E0.sessionId,error:D2}),U2(b.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:D2,context:{sessionId:E0.sessionId,providerId:b.providerId,modelId:b.modelId}})}}}),M0={sessionId:Z,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,onAuthError:O0,knownModels:r.knownModels,providerConfig:r,thinking:b.thinking,reasoningEffort:b.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:b.thinkingBudgetTokens,maxTokensPerTurn:b.maxTokensPerTurn,temperature:b.temperature,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:M$,tools:N$,hooks:S.hooks,extensions:f$,hookErrorMode:b.hookErrorMode,initialMessages:S.effectiveInput.initialMessages,userFileContentLoader:RO,toolPolicies:S.toolPolicies,requestToolApproval:S.requestToolApproval?async(h)=>{let H0=S.requestToolApproval,E0=this.sessions.get(Z);if(E0)await this.markTurnPending(E0);try{if(!H0)return{approved:!1,reason:"Tool approval callback is not configured."};return await H0(h)}finally{let C0=this.sessions.get(Z);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:c.completionPolicy,consumePendingUserMessage:()=>{let h=this.pendingPromptsController.consumeSteer(Z);return h?f9(h.prompt,h.mode??b.mode):void 0},logger:c.logger??b.logger,extensionContext:b.extensionContext,onEvent:(h)=>this.eventBridge.dispatchAgentEvent(Z,b,h)};M0.hooks={...M0.hooks,onEvent:async(h)=>{if(await S.hooks?.onEvent?.(h),h.type!=="assistant-message")return;let H0=this.sessions.get(Z);if(!H0)return;let E0=H0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,E0,b.systemPrompt)}catch(C0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:C0}),U2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:b.providerId,modelId:b.modelId}})}}};let I0=this.createAgentInstance(M0);if(M0.onEvent)I0.subscribeEvents(M0.onEvent);c.registerLeadAgent?.(I0);let R1=J$({agentId:I0.getAgentId(),conversationId:I0.getConversationId(),teamId:c.teamRuntime?.getTeamId(),teamName:c.teamRuntime?.getTeamName(),teamRole:c.teamRuntime?"lead":void 0});if(KF(b,Z,Q,F,R1),R1)w$(b.telemetry,{ulid:Z,modelId:b.modelId,provider:b.providerId,...R1});if(c.teamRuntime)TZ(b.telemetry,{ulid:Z,teamId:c.teamRuntime.getTeamId(),teamName:c.teamRuntime.getTeamName(),leadAgentId:I0.getAgentId(),restoredFromPersistence:c.teamRestoredFromPersistence===!0});let u={sessionId:Z,config:b,sessionMetadata:s,..._?{artifacts:_}:{},source:W,startedAt:_?.manifest.started_at??X,updatedAt:_?.manifest.ended_at??_?.manifest.started_at??X,pendingPrompt:U.prompt,runtime:c,agent:I0,started:!1,status:_?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:p0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:S.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(d1=u,u.compactionState&&!this.isCompactionStateForSession(u.sessionId,u.compactionState,u))u.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:u.sessionId,conversationId:u.compactionState.conversation_id}),u.compactionState=void 0;if(this.sessions.set(Z,u),_)await this.refreshActiveSessionGitMetadata(u,S.gitState);if(this.emitStatus(Z,"running"),Y.length>0&&!_){if(await this.ensureSessionPersisted(u),await this.invoke("persistSessionMessages",u.sessionId,Y,u.config.systemPrompt),u.compactionState){if(!(await this.persistActiveSessionCompactionState(u,u.compactionState)).updated)u.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(u,"completed",0)}let x0;try{if(j.prompt?.trim())if(x0=await this.executeTurn(u,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!u.interactive)await this.finalizeSingleRun(u,x0.finishReason);else await this.completeInteractiveTurn(u,x0.finishReason)}catch(h){if(u.interactive&&u.aborting)x0=await this.completeAbortedInteractiveTurn(u);else{U2(u.config.telemetry,{component:"core",operation:"session.start",error:h,severity:"error",handled:!1,context:{sessionId:u.sessionId,providerId:u.config.providerId,modelId:u.config.modelId}});try{await this.failSession(u)}catch(H0){u.config.logger?.error?.("Session failure cleanup threw",{sessionId:u.sessionId,error:H0})}throw h}}return{sessionId:Z,manifest:U,manifestPath:G,messagesPath:K,result:x0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),J=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,W.finishReason);else await this.completeInteractiveTurn(Z,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw U2(Z.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),W}}async getAccumulatedUsage($){let Z=wX(this.usageBySession.get($)),Q=wX(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!_0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!_0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return BV(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return Y5(J);let W=await this.readManifest(Q);return W?T7(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(Y5),J=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(J.has(W.sessionId))continue;Q.unshift(BV(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),W=J?void 0:await this.getSession(Q);if(!(J??W))return{updated:!1};if(J){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,J,void 0,Y))return{updated:!1};J.agent.restore(Y)}return await this.persistActiveSessionCompactionState(J,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,W))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(EO(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let W=Z.conversation_id?.trim();if(!W)return!0;if(W===$)return!0;let X=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return X?W===X:!1}async canPersistCompactionState($,Z,Q,J,W){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let X=W??Q?.agent.getMessages()??await this.readSessionMessages($);return b$(Z,X)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let J=$.compactionState,W=J!==void 0&&b$(J,Q??$.agent.getMessages())!==void 0;if(J&&(W?EO(Z,J):Date.parse(Z.updated_at)<Date.parse(J.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),W=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=W;try{return await J}finally{if($.compactionStateWriteQueue===W)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let J=Q.agent.getMessages();if(J.length>0)return J}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return W2(Q.messagesPath);let J=await this.readManifest(Z);return W2(J?.messages_path)}async dispatchHookEvent($){await oU($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=k2(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let W={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0;let X={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(W),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(X),Q.providerId||Q.modelId)await this.mutateSessionManifest(J,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let J=$.sessionId,X=(this.manifestMutationQueues.get(J)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",J)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=X.then(()=>{return},()=>{return});this.manifestMutationQueues.set(J,j);try{return await X}finally{if(this.manifestMutationQueues.get(J)===j)this.manifestMutationQueues.delete(J)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim(),W=Q?.userImages?.length,X=Q?.userFiles?.length;if(!J&&!W&&!X)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(Xj($,j.finishReason)){let Y=await jj($);if(Y.length===0)break;let V=Yj($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(N9($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),J=w0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let W=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??w0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=w0(),$.turnUsageByAgent=new Map,DZ($.config.telemetry,$.sessionId,$.config.mode),w8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=W?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=DQ(B.messages,B,X);$.persistedMessages=H;let K=B5($.turnUsageByAgent?.values()??[]),G=N0(j,B.usage),F=N0(N0(w0(),B.usage),K),U=N0(Y,F);return this.usageBySession.set($.sessionId,G),this.aggregateUsageBySession.set($.sessionId,U),await this.persistSessionMetadata($.sessionId,(_)=>({..._??{},totalCost:G.totalCost,aggregatedAgentsCost:U.totalCost,usage:G,aggregateUsage:U})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw U2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((J)=>J.name===U0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,U4($.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=W$($.config),J=Ru(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let W=await l8(J,Q);GF($.config.telemetry,W);let X=f9(W.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=W$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await pW(W$($.config));if(!Q||!$.artifacts)return;if(dW($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(J)=>aQ({...J??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=Z(J?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,Z){if(N9($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)U4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});g7($);let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),U2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(W){J("update_status",W)}try{await $.agent.shutdown(Z.shutdownReason)}catch(W){J("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),U2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(W){J("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let W=await this.mutateSessionManifest($,(X)=>{if(X.status=Z,_0(Z))delete X.ended_at,X.exit_code=null;else X.ended_at=J.endedAt??V0(),X.exit_code=typeof Q==="number"?Q:null});if(!W)return;$.status=Z,$.updatedAt=J.endedAt??V0(),$.endedAt=_0(Z)?null:W.ended_at,$.exitCode=W.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!S$($.config.providerId)||!fu(J))throw J;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(J){if(J instanceof f8)throw Error(`${J.providerId} requires re-authentication.`);throw J}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new K$($);throw U2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>Tu(J)?J:UV($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return J$({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=N0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let J=UV(Z),W=`${Q}.messages.json`,X;try{X=qu($)}catch{return w0()}let j=w0();for(let Y of X){if(!Y.endsWith(".messages.json"))continue;if(Y===W)continue;let V=UV($,Y);if(V===J)continue;let B=await W2(V);if(B.length===0)continue;j=N0(j,Q6(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=Eu(Z.metadata?.aggregateUsage);if(Q)return Cu($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:k1({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($)),MO))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(MO)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return TO(this.sessionService,$,...Z)}invokeOptional($,...Z){return NO(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return fO(this.sessionService,$,...Z)}}function Pu($){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 Su($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Z3($={}){let Z=async(J)=>J,Q=new m1({sessionService:new v1(new x1),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),X=await Q.startSession({source:J.source?.trim()||L0.CLI,interactive:!1,config:{providerId:wu(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:Su(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:X.sessionId,startResult:{sessionId:X.sessionId,manifestPath:X.manifestPath,messagesPath:X.messagesPath}}},async sendSession(J,W){let X=await Q.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((j)=>j.content)});if(!X)throw Error("local hub schedule runtime returned no turn result");return{result:Pu(X)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}import{release as bu}from"node:os";import{createClineTelemetryServiceConfig as yu}from"@cline/shared";q0();I9();var ku=300000,Iu=5000;function CO(){let $=yu({metadata:{extension_version:jZ,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:bu()}}),Z=B2($),Q,J=()=>{try{return Q??=new K1,Q.getProviderSettings("cline")?.auth}catch{return}},W,X=()=>{let Y=J(),V=Y?.accountId?.trim();if(!Y||!V)return;let B=`${V}:${Y.organizationId??""}`;if(B===W)return;W=B,U1(Z.telemetry,{id:V,provider:"cline",organizationId:Y.organizationId,organizationName:Y.organizationName,memberId:Y.memberId})};X();let j=setInterval(X,ku);return j.unref?.(),{telemetry:Z.telemetry,dispose:async()=>{clearInterval(j);let Y;await Promise.race([(async()=>{await Z.flush(),await Z.dispose()})(),new Promise((V)=>{Y=setTimeout(V,Iu),Y.unref?.()})]),clearTimeout(Y)}}}xu(process.env.CLINE_VCR);var wO,PO,vu=new Promise(($,Z)=>{wO=$,PO=Z});vu.catch(()=>{return});function mu($){let Z=process.cwd(),Q,J,W;for(let X=0;X<$.length;X+=1){let j=$[X],Y=$[X+1];if(j==="--cwd"&&Y){Z=Y,X+=1;continue}if(j==="--host"&&Y){Q=Y,X+=1;continue}if(j==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))J=V;X+=1;continue}if(j==="--pathname"&&Y)W=Y,X+=1}return{cwd:Z,host:Q,port:J,pathname:W}}async function cu(){let $=mu(process.argv.slice(2));process.chdir($.cwd);let Z=V1({host:$.host,port:$.port,pathname:$.pathname}),Q=CO(),J;try{J=await T8({host:Z.host,port:Z.port,pathname:Z.pathname,owner:gu()==="production"?B1():a0(),telemetry:Q.telemetry,runtimeHandlers:Z3({telemetry:Q.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(Y){throw await Q.dispose().catch(()=>{return}),Y}let W=async()=>{await J.close(),await Q.dispose().catch(()=>{return}),process.exit(0)},X=!1,j=(Y,V)=>{if(X)return;X=!0;let B=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] ${Y}: ${B}
|
|
805
805
|
`),J.close().catch((H)=>{let K=H instanceof Error?H.stack||H.message:String(H);process.stderr.write(`[hub-daemon] shutdown after ${Y} failed: ${K}
|
|
806
806
|
`)}).finally(()=>{Q.dispose().catch(()=>{return}).finally(()=>{process.exit(1)})})};process.on("SIGINT",()=>{W()}),process.on("SIGTERM",()=>{W()}),process.on("uncaughtException",(Y)=>{j("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof hu){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
|
|
807
807
|
`);return}j("unhandledRejection",Y)}),wO();try{await fV()}catch(Y){let V=Y instanceof Error?Y.stack||Y.message:String(Y);process.stderr.write(`[hub-daemon] connector reconnect failed: ${V}
|