@cline/core 0.0.39 → 0.0.40
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/README.md +2 -0
- package/dist/extensions/context/compaction-shared.d.ts +6 -5
- package/dist/extensions/mcp/client.d.ts +8 -1
- package/dist/extensions/mcp/config-loader.d.ts +11 -1
- package/dist/extensions/mcp/index.d.ts +6 -3
- package/dist/extensions/mcp/oauth.d.ts +48 -0
- package/dist/extensions/mcp/types.d.ts +17 -0
- package/dist/extensions/plugin-sandbox-bootstrap.js +1 -1
- package/dist/hub/daemon/entry.js +201 -199
- package/dist/hub/index.js +200 -198
- package/dist/hub/runtime-host/hub-runtime-host.d.ts +3 -1
- package/dist/hub/server/browser-websocket.d.ts +3 -1
- package/dist/hub/server/handlers/context.d.ts +2 -1
- package/dist/hub/server/hub-server-transport.d.ts +3 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +201 -199
- package/dist/runtime/config/agent-runtime-config-builder.d.ts +2 -9
- package/dist/runtime/host/history.d.ts +1 -0
- package/dist/runtime/host/runtime-host.d.ts +3 -1
- package/dist/runtime/turn-queue/pending-prompt-service.d.ts +6 -1
- package/dist/services/llms/handler-factory.d.ts +2 -2
- package/dist/services/llms/provider-settings.d.ts +1 -0
- package/dist/services/providers/local-provider-registry.d.ts +3 -0
- package/dist/services/providers/local-provider-service.d.ts +4 -2
- package/dist/services/telemetry/core-events.d.ts +4 -1
- package/dist/services/telemetry/index.js +1 -1
- package/dist/session/services/file-session-service.d.ts +2 -0
- package/dist/session/services/persistence-service.d.ts +2 -1
- package/dist/session/services/session-service.d.ts +2 -0
- package/dist/session/stores/session-manifest-store.d.ts +3 -1
- package/dist/settings/types.d.ts +3 -2
- package/dist/types/config.d.ts +2 -2
- package/dist/types/session.d.ts +2 -1
- package/package.json +9 -8
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import{createRequire as
|
|
2
|
-
`)}function
|
|
3
|
-
`,"utf8")}function jJ(){return J0().telemetryOptOut}function DV(f,$={}){x$({...J0(),telemetryOptOut:f},$)}function rf(f){return new Set(f??J0().disabledTools??[])}function V8(f){return new Set(f??J0().disabledPlugins??[])}function _V(f){return rf().has(f)}function XJ(f){let $=rf(),J=J0();if($.has(f))return $.delete(f),x$({...J,disabledTools:[...$]}),!1;return $.add(f),x$({...J,disabledTools:[...$]}),!0}function d3(f,$){let J=[...new Set(f.map((Q)=>Q.trim()).filter(Boolean))];if(J.length===0)return;let W=J0(),H=rf(W.disabledTools);for(let Q of J)if($)H.add(Q);else H.delete(Q);x$({...W,disabledTools:[...H]})}function r3(f,$){return d3([f],$),$}function MV(f){return V8().has(f)}function LV(f,$){let J=f.trim();if(!J)return;let W=J0(),H=V8(W.disabledPlugins);if($)H.add(J);else H.delete(J);x$({...W,disabledPlugins:[...H]})}function AJ(f,$){let J=V8($);if(J.size===0)return[...f];return f.filter((W)=>!J.has(W))}function g$(f,$){let J=rf($);if(J.size===0)return[...f];return f.filter((W)=>!J.has(W.name))}function PJ(f,$){if(!f||f.length===0)return f;let J=rf($);if(J.size===0)return f;return f.map((W)=>{if(!W.setup)return W;return{...W,setup:(H,Q)=>W.setup?.({...H,registerTool:(Z)=>{if(!J.has(Z.name))H.registerTool(Z)}},Q)}})}var v3,Y8;var W0=L$(()=>{Uf();v3=M1.preprocess((f)=>Array.isArray(f)?f.filter(($)=>typeof $==="string").map(($)=>$.trim()).filter(Boolean):void 0,M1.array(M1.string()).optional()).transform((f)=>{if(!f)return;let $=[...new Set(f)].sort((J,W)=>J.localeCompare(W));return $.length>0?$:void 0}),Y8=M1.object({telemetryOptOut:M1.boolean().default(!1).catch(!1),disabledTools:v3.optional(),disabledPlugins:v3.optional()}).strip().transform((f)=>{let $={telemetryOptOut:f.telemetryOptOut};if(f.disabledTools?.length)$.disabledTools=f.disabledTools;if(f.disabledPlugins?.length)$.disabledPlugins=f.disabledPlugins;return $})});import{existsSync as iy,mkdirSync as ny,readFileSync as ay,writeFileSync as ty}from"node:fs";import{resolve as sy}from"node:path";import{resolveSessionDataDir as oy}from"@cline/shared/storage";import{nanoid as ey}from"nanoid";import*as fU from"node-machine-id";function B$(f){let $=f?.trim();if($)return $;let J=WU();if(J)return J;return HU()}function JU(){let f=fU;return f.machineIdSync??f.default?.machineIdSync}function WU(){try{let f=JU();if(!f)return;return f().trim()||void 0}catch{return}}function HU(){let f=oy(),$=sy(f,$U);try{if(iy($)){let W=ay($,"utf8").trim();if(W.length>0)return W}}catch{}let J=`cl-${ey()}`;try{ny(f,{recursive:!0}),ty($,J,"utf8")}catch{}return J}var $U="machine-id";var k8=()=>{};class A2{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(f){this.name=f.name??"OpenTelemetryAdapter",this.metadata={...f.metadata},this.meterProvider=f.meterProvider,this.loggerProvider=f.loggerProvider,this.meter=f.meterProvider?.getMeter("cline")??null,this.logger=f.loggerProvider?.getLogger("cline")??null,this.enabled=f.enabled??!0,this.distinctId=f.distinctId,this.commonProperties=f.commonProperties?{...f.commonProperties}:{}}emit(f,$){if(!this.isEnabled())return;this.emitLog(f,$,!1)}emitRequired(f,$){this.emitLog(f,$,!0)}recordCounter(f,$,J,W,H=!1){if(!this.meter||!H&&!this.isEnabled())return;let Q=this.counters.get(f);if(!Q)Q=this.meter.createCounter(f,W?{description:W}:void 0),this.counters.set(f,Q);Q.add($,this.flattenProperties(this.buildAttributes(J)))}recordHistogram(f,$,J,W,H=!1){if(!this.meter||!H&&!this.isEnabled())return;let Q=this.histograms.get(f);if(!Q)Q=this.meter.createHistogram(f,W?{description:W}:void 0),this.histograms.set(f,Q);Q.record($,this.flattenProperties(this.buildAttributes(J)))}recordGauge(f,$,J,W,H=!1){if(!this.meter||!H&&!this.isEnabled())return;let Q=this.buildAttributes(J),Z=JSON.stringify(Q),j=this.gaugeValues.get(f);if($===null){if(j){if(j.delete(Z),j.size===0)this.gaugeValues.delete(f),this.gauges.delete(f)}return}let X=j;if(!X)X=new Map,this.gaugeValues.set(f,X);if(!this.gauges.has(f)){let A=this.meter.createObservableGauge(f,W?{description:W}:void 0);A.addCallback((P)=>{for(let B of this.snapshotGaugeSeries(f))P.observe(B.value,this.flattenProperties(B.attributes))}),this.gauges.set(f,A)}X.set(Z,{value:$,attributes:Q})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(f){this.distinctId=f}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(f,$,J){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes($,J));this.logger.emit({severityText:"INFO",body:f,attributes:W})}buildAttributes(f,$=!1){return{...this.commonProperties,...this.metadata,...f,...this.distinctId?{distinct_id:this.distinctId}:{},...$?{_required:!0}:{}}}snapshotGaugeSeries(f){let $=this.gaugeValues.get(f);if(!$)return[];return Array.from($.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties(f,$="",J=new WeakSet,W=0){if(!f)return{};let H={},Q=100,Z=10;for(let[j,X]of Object.entries(f)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let A=$?`${$}.${j}`:j;if(X===null||X===void 0){H[A]=String(X);continue}if(Array.isArray(X)){let P=X.length>Q?X.slice(0,Q):X;try{H[A]=JSON.stringify(P)}catch{H[A]="[UnserializableArray]"}if(X.length>Q)H[`${A}_truncated`]=!0,H[`${A}_original_length`]=X.length;continue}if(typeof X==="object"){if(X instanceof Date){H[A]=X.toISOString();continue}if(X instanceof Error){H[A]=X.message;continue}if(J.has(X)){H[A]="[Circular]";continue}if(W>=Z){H[A]="[MaxDepthExceeded]";continue}J.add(X),Object.assign(H,this.flattenProperties(X,A,J,W+1));continue}if(__(X)){H[A]=X;continue}try{H[A]=JSON.stringify(X)}catch{H[A]=String(X)}}return H}}function __(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}class D4{name;logger;enabled;constructor(f={}){this.name=f.name??"TelemetryLoggerSink",this.logger=f.logger,this.enabled=f.enabled??!0}emit(f,$){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:f,properties:$})}emitRequired(f,$){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:f,properties:$})}recordCounter(f,$,J,W,H){if(!H&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:f,value:$,attributes:J,description:W,required:H===!0})}recordHistogram(f,$,J,W,H){if(!H&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:f,value:$,attributes:J,description:W,required:H===!0})}recordGauge(f,$,J,W,H){if(!H&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:f,value:$,attributes:J,description:W,required:H===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class P2{adapters;metadata;distinctId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new D4({logger:f.logger}));this.metadata={...f.metadata??{}},this.distinctId=f.distinctId,this.commonProperties={...f.commonProperties??{}}}addAdapter(f){this.adapters.push(f)}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return this.adapters.some((f)=>f.isEnabled())}capture(f){let $=this.buildAttributes(f.properties);for(let J of this.adapters)J.emit(f.event,$)}captureRequired(f,$){let J=this.buildAttributes($);for(let W of this.adapters)W.emitRequired(f,J)}recordCounter(f,$,J,W,H=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordCounter(f,$,Q,W,H)}recordHistogram(f,$,J,W,H=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordHistogram(f,$,Q,W,H)}recordGauge(f,$,J,W,H=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordGauge(f,$,Q,W,H)}async flush(){await Promise.all(this.adapters.map((f)=>f.flush()))}async dispose(){await Promise.all(this.adapters.map((f)=>f.dispose()))}buildAttributes(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var qW=()=>{};import{metrics as M_,trace as L_}from"@opentelemetry/api";import{logs as h_}from"@opentelemetry/api-logs";import{OTLPLogExporter as O_}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as z_}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as N_}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as q_}from"@opentelemetry/resources";import{BatchLogRecordProcessor as w_,ConsoleLogRecordExporter as b_,LoggerProvider as C_}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as E_,MeterProvider as S_,PeriodicExportingMetricReader as wj}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as k_,ConsoleSpanExporter as I_,SimpleSpanProcessor as m_}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as x_}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as g_,ATTR_SERVICE_VERSION as v_}from"@opentelemetry/semantic-conventions";class bj{distinctId;metadata;commonProperties;constructor(f={}){this.distinctId=f.distinctId,this.metadata={...f.metadata??{}},this.commonProperties={...f.commonProperties??{}}}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return!1}capture(f){this.resolveProperties(f.properties)}captureRequired(f,$){this.resolveProperties($)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class B2{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let $=q_({[g_]:f.serviceName??"cline",...f.serviceVersion?{[v_]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider($),this.loggerProvider=this.createLoggerProvider($),this.tracerProvider=this.createTracerProvider($),this.meterProvider)M_.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)h_.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",$){return L_.getTracer(f,$??this.options.serviceVersion)}createAdapter(f){return new A2({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let $=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new P2({...f,adapters:[$],distinctId:B$(f.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(f){let $=wW(this.options.metricsExporter);if($.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(J*0.8)),H=$.map((Q)=>d_(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:W})).filter((Q)=>Q!==null);if(H.length===0)return null;return new S_({resource:f,readers:H})}createTracerProvider(f){let $=wW(this.options.tracesExporter);if($.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,H=[];for(let Q of $){let Z=c_(Q,{endpoint:J,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Z)H.push(Z)}if(H.length===0)return null;return new x_({resource:f,spanProcessors:H})}createLoggerProvider(f){let $=wW(this.options.logsExporter);if($.length===0)return null;let J=$.map((W)=>{let H=u_(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!H)return null;return new w_(H,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(J.length===0)return null;return new C_({resource:f,processors:J})}}function _4(f){let $=new B2(f),J=$.createTelemetryService(f);return J.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:f.enabled??!0,logsExporter:Array.isArray(f.logsExporter)?f.logsExporter.join(","):f.logsExporter,metricsExporter:Array.isArray(f.metricsExporter)?f.metricsExporter.join(","):f.metricsExporter,tracesExporter:Array.isArray(f.tracesExporter)?f.tracesExporter.join(","):f.tracesExporter,otlpProtocol:f.otlpProtocol,hasOtlpEndpoint:Boolean(f.otlpEndpoint),serviceName:f.serviceName,serviceVersion:f.serviceVersion}),{provider:$,telemetry:J}}function G$(f){if(jJ())return{telemetry:new bj(f)};if(f.enabled!==!0)return{telemetry:new P2({...f,distinctId:B$(f.distinctId)})};return _4(f)}function M4(f){let{telemetry:$,provider:J}=G$(f);return{telemetry:$,provider:J,flush:async()=>{let Q=J;if(Q&&typeof Q.forceFlush==="function")try{await Q.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([$.dispose(),J?.dispose()])}}}function wW(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function u_(f,$){if(f==="console")return new b_;if(!$.endpoint)return null;let J=bW($.endpoint,"/v1/logs");return new O_({url:J,headers:$.headers})}function c_(f,$){if(f==="console")return new m_(new I_);if(!$.endpoint)return null;let J=bW($.endpoint,"/v1/traces");return new k_(new N_({url:J,headers:$.headers}))}function d_(f,$){if(f==="console")return new wj({exporter:new E_,exportIntervalMillis:$.interval,exportTimeoutMillis:$.timeout});if(!$.endpoint)return null;let J=bW($.endpoint,"/v1/metrics");return new wj({exporter:new z_({url:J,headers:$.headers}),exportIntervalMillis:$.interval,exportTimeoutMillis:$.timeout})}function bW(f,$){let J=new URL(f),W=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=W.endsWith($)?W:`${W}${$}`,J.toString()}var L4=L$(()=>{W0();k8();qW()});var MX={};JH(MX,{createOpenTelemetryTelemetryService:()=>_4,createConfiguredTelemetryService:()=>G$,createConfiguredTelemetryHandle:()=>M4,OpenTelemetryProvider:()=>B2,OpenTelemetryAdapter:()=>A2});var pW=L$(()=>{L4()});import*as Wu from"@cline/llms";import{buildClineSystemPrompt as Qu,ContributionRegistry as Zu,createClineTelemetryServiceConfig as ju,createClineTelemetryServiceMetadata as Xu,createContributionRegistry as Au,createTool as Pu,emptyWorkspaceManifest as Bu,formatDisplayUserInput as Yu,noopBasicLogger as Vu,normalizeUserInput as Ru,parseUserCommandEnvelope as Fu,registerDisposable as Ku}from"@cline/shared";export*from"@cline/shared/storage";function eX(f){if(typeof f!=="object"||f===null||!("error"in f))return;let $=f.error;return typeof $==="string"&&$.trim()?$:void 0}function HH(f,$,J){let W=eX(J);if(W)return W;let H=$.trim();if(H){let Q=H.length>200?`${H.slice(0,200)}...`:H;return`Cline account request failed with status ${f}: ${Q}`}return`Cline account request failed with status ${f}`}class C4{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor(f){let $=f.apiBaseUrl.trim();if(!$)throw Error("apiBaseUrl is required");this.apiBaseUrl=$,this.getAuthTokenFn=f.getAuthToken,this.getCurrentUserIdFn=f.getCurrentUserId,this.getOrganizationMemberIdFn=f.getOrganizationMemberId,this.getHeadersFn=f.getHeaders,this.requestTimeoutMs=f.requestTimeoutMs??30000,this.fetchImpl=f.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(f){let $=await this.resolveUserId(f);return this.request(`/api/v1/users/${encodeURIComponent($)}/balance`)}async fetchUsageTransactions(f){let $=await this.resolveUserId(f);return(await this.request(`/api/v1/users/${encodeURIComponent($)}/usages`)).items??[]}async fetchPaymentTransactions(f){let $=await this.resolveUserId(f);return(await this.request(`/api/v1/users/${encodeURIComponent($)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent($)}`)}async fetchOrganizationBalance(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent($)}/balance`)}async fetchOrganizationUsageTransactions(f){let $=f.organizationId.trim();if(!$)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId($,f.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent($)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount(f){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:f?.trim()||null},expectNoContent:!0})}async resolveUserId(f){let $=f?.trim();if($)return $;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let H=await this.fetchMe();if(!H.id?.trim())throw Error("Unable to resolve current user id");return H.id}async resolveOrganizationMemberId(f,$){let J=$?.trim();if(J)return J;let H=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn(f):void 0)?.trim();if(H)return H;let Z=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===f)?.memberId;if(!Z?.trim())throw Error(`Unable to resolve memberId for organization ${f}`);return Z}async request(f,$){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},H=new AbortController,Q=setTimeout(()=>H.abort(),this.requestTimeoutMs);try{let Z=await this.fetchImpl(new URL(f,this.apiBaseUrl),{method:$?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...W??{}},body:$?.body!==void 0?JSON.stringify($.body):void 0,signal:H.signal});if(Z.status===204||$?.expectNoContent){if(!Z.ok)throw Error(`Cline account request failed with status ${Z.status}`);return}let j=await Z.text(),X;if(j.trim())try{X=JSON.parse(j)}catch{if(!Z.ok)throw Error(HH(Z.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Z.ok)throw Error(HH(Z.status,j,X));if(typeof X==="object"&&X!==null){let A=X;if(typeof A.success==="boolean"){if(!A.success)throw Error(A.error||"Cline account request failed");if(A.data!==void 0)return A.data}}if(X===void 0||X===null)throw Error("Cline account response payload was empty");return X}finally{clearTimeout(Q)}}}function QH(f){return f.action==="clineAccount"}async function ZH(f,$){switch(f.operation){case"fetchMe":return $.fetchMe();case"fetchBalance":return $.fetchBalance(f.userId);case"fetchUsageTransactions":return $.fetchUsageTransactions(f.userId);case"fetchPaymentTransactions":return $.fetchPaymentTransactions(f.userId);case"fetchUserOrganizations":return $.fetchUserOrganizations();case"fetchOrganizationBalance":return $.fetchOrganizationBalance(f.organizationId);case"fetchOrganizationUsageTransactions":return $.fetchOrganizationUsageTransactions({organizationId:f.organizationId,memberId:f.memberId});case"switchAccount":return await $.switchAccount(f.organizationId),{updated:!0};case"fetchFeaturebaseToken":return $.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String(f)}`)}}class E4{executor;constructor(f){this.executor=f}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance(f){return this.request({action:"clineAccount",operation:"fetchBalance",...f?.trim()?{userId:f.trim()}:{}})}async fetchUsageTransactions(f){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...f?.trim()?{userId:f.trim()}:{}})}async fetchPaymentTransactions(f){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...f?.trim()?{userId:f.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:$})}async fetchOrganizationUsageTransactions(f){let $=f.organizationId.trim();if(!$)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:$,...f.memberId?.trim()?{memberId:f.memberId.trim()}:{}})}async switchAccount(f){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:f?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request(f){return(await this.executor.runProviderAction(f)).result}}function S4(f){return{onAuth:({url:$,instructions:J})=>{if(f.onOutput?.(J??"Complete sign-in in your browser."),f.openUrl)try{Promise.resolve(f.openUrl($)).catch((W)=>{f.onOpenUrlError?.({url:$,error:W})})}catch(W){f.onOpenUrlError?.({url:$,error:W})}f.onOutput?.($)},onPrompt:f.onPrompt,onServerListening:f.onServerListening,onServerClose:f.onServerClose}}Uf();import{getClineEnvironmentConfig as a4}from"@cline/shared";function HA(){let f;return{promise:new Promise((J)=>{f=J}),resolve:f}}async function r0(f){let $=await import("node:http"),J=f.host??"127.0.0.1",W=f.timeoutMs??300000,H=f.successHtml??QA,Q=HA(),Z=!1,j=null,X=null,A=null,P=(V)=>{if(Z)return;Z=!0,Q.resolve(V)},B=()=>{if(j)clearTimeout(j),j=null;let V=A;if(A=null,X)X.close(),X=null;if(V!==null&&f.onClose)Promise.resolve(f.onClose({host:J,port:V})).catch(()=>{})},Y=async()=>{return j=setTimeout(()=>{B(),P(null)},W),Q.promise};for(let V of f.ports){let R=$.createServer((K,F)=>{try{let y=new URL(K.url||"",`http://${J}:${V}`);if(y.pathname!==f.callbackPath){F.statusCode=404,F.end("Not found");return}let D={url:y,code:y.searchParams.get("code")??void 0,state:y.searchParams.get("state")??void 0,provider:y.searchParams.get("provider")??void 0,error:y.searchParams.get("error")??void 0};if(D.error){F.statusCode=400,F.end(`Authentication failed: ${D.error}`),B(),P(D);return}if(!D.code){F.statusCode=400,F.end("Missing authorization code");return}if(f.expectedState&&D.state!==f.expectedState){F.statusCode=400,F.end("State mismatch");return}F.statusCode=200,F.setHeader("Content-Type","text/html; charset=utf-8"),F.end(H),B(),P(D)}catch{F.statusCode=500,F.end("Internal error")}}),U=await new Promise((K)=>{let F=(y)=>{R.off("error",F),K({bound:!1,error:y})};R.once("error",F),R.listen(V,J,()=>{R.off("error",F),X=R,K({bound:!0})})});if(U.error){if(U.error.code==="EADDRINUSE")continue;throw B(),U.error}if(U.bound){A=V;let K=`http://${J}:${V}${f.callbackPath}`;if(f.onListening)await Promise.resolve(f.onListening({host:J,port:V,callbackUrl:K})).catch(()=>{});return{callbackUrl:K,waitForCallback:Y,cancelWait:()=>{B(),P(null)},close:()=>{B(),P(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var QA=`<!DOCTYPE html>
|
|
1
|
+
import{createRequire as SY}from"node:module";var MY=Object.defineProperty;var qY=($)=>$;function wY($,f){this[$]=qY.bind(null,f)}var t4=($,f)=>{for(var J in f)MY($,J,{get:f[J],enumerable:!0,configurable:!0,set:wY.bind(f,J)})};var p$=($,f)=>()=>($&&(f=$($=0)),f);var O7=SY(import.meta.url);import{SDK_ERROR_TELEMETRY_EVENT as hY}from"@cline/shared";function d($,f,J){$?.capture({event:f,properties:J})}function M2($){if(!$)return;return $.substring(0,EY)}function bY($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function kY($){return typeof $==="string"?$:$.message}function T7($,f){return $.some((J)=>f.has(J.trim().toLowerCase()))}function IY($){d($,g.CLIENT.EXTENSION_ACTIVATED)}function $6($,f){let J=[...f.vcs_types],Q={root_count:f.root_count,vcs_types:J,is_multi_root:f.root_count>1,has_git:T7(J,new Set(["git"])),has_mercurial:T7(J,new Set(["mercurial","hg"]))};if(f.init_duration_ms!==void 0)Q.init_duration_ms=f.init_duration_ms;if(f.feature_flag_enabled!==void 0)Q.feature_flag_enabled=f.feature_flag_enabled;if(f.is_remote_workspace!==void 0)Q.is_remote_workspace=f.is_remote_workspace;d($,g.WORKSPACE.INITIALIZED,Q)}function f6($,f,J){d($,g.WORKSPACE.INIT_ERROR,{error_type:bY(f),error_message:M2(kY(f)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function xY($,f){d($,g.WORKSPACE.PATH_RESOLVED,{...f})}function G$($,f){d($,g.USER.AUTH_STARTED,{provider:f})}function P$($,f){d($,g.USER.AUTH_SUCCEEDED,{provider:f})}function F$($,f,J){d($,g.USER.AUTH_FAILED,{provider:f,errorMessage:M2(J)})}function r$($,f,J){d($,g.USER.AUTH_LOGGED_OUT,{provider:f,reason:J})}function N7($,f){$?.captureRequired(g.USER.TELEMETRY_OPT_OUT,f)}function D$($,f){let J=f.id?.trim();if(J)$?.setDistinctId(J);$?.updateCommonProperties({account_id:f.id,account_email:f.email,provider:f.provider,organization_id:f.organizationId,organization_name:f.organizationName,member_id:f.memberId})}function J6($,f){d($,g.TASK.CREATED,f)}function Q6($,f){d($,g.TASK.RESTARTED,f)}function q2($,f){d($,g.TASK.COMPLETED,f)}function Hf($,f){d($,g.TASK.CONVERSATION_TURN,{...f,timestamp:new Date().toISOString()})}function Z6($,f){d($,g.TASK.TOKEN_USAGE,f)}function W6($,f,J){d($,g.TASK.MODE_SWITCH,{ulid:f,mode:J})}function j6($,f){d($,g.TASK.TOOL_USED,f)}function X6($,f){d($,g.TASK.SKILL_USED,f)}function H6($,f){d($,g.TASK.DIFF_EDIT_FAILED,f)}function w2($,f){d($,g.TASK.PROVIDER_API_ERROR,{...f,errorMessage:M2(f.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Y6($,f,J){d($,g.TASK.MENTION_USED,{mentionType:f,contentLength:J,timestamp:new Date().toISOString()})}function V6($,f,J,Q){d($,g.TASK.MENTION_FAILED,{mentionType:f,errorType:J,errorMessage:M2(Q),timestamp:new Date().toISOString()})}function A6($,f,J,Q,Z){d($,g.TASK.MENTION_SEARCH_RESULTS,{queryLength:f.length,resultCount:J,searchType:Q,isEmpty:Z,timestamp:new Date().toISOString()})}function i$($,f){d($,g.TASK.AGENT_CREATED,{...f,timestamp:new Date().toISOString()})}function B6($,f){d($,g.TASK.AGENT_TEAM_CREATED,{...f,timestamp:new Date().toISOString()})}function S2($,f){d($,f.event==="ended"?g.TASK.SUBAGENT_COMPLETED:g.TASK.SUBAGENT_STARTED,{...f,timestamp:new Date().toISOString()})}function K6($,f,J,Q){d($,g.HOOKS.DISCOVERY_COMPLETED,{hookName:f,globalCount:J,workspaceCount:Q,totalCount:J+Q,timestamp:new Date().toISOString()})}var EY=500,g;var R0=p$(()=>{g={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:hY}}});var LZ={};t4(LZ,{normalizeUserMessage:()=>XK,buildInitialUserContent:()=>jK});async function jK($,f,J,Q){let Z=HK(f),W=await VK(J,Q);if(Z.length===0&&!W)return $;let j=[{type:"text",text:$},...Z];if(W)j.push(...W);return j}function XK($){if($==null)return"";if(typeof $==="string")return $;let f=$.content;if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Q of f)if(Q&&typeof Q==="object"&&Q.type==="text"){let Z=Q.text;if(typeof Z==="string")J.push(Z)}return J.join(`
|
|
2
|
+
`)}function HK($){if(!$||$.length===0)return[];let f=[];for(let J of $){let Q=YK(J);if(Q)f.push(Q)}return f}function YK($){let f=$.trim();if(!f)return;let J=f.match(/^data:([^;,]+);base64,(.+)$/);if(J){let Q=J[1],Z=J[2];if(!Q||!Z)return;return{type:"image",mediaType:Q,data:Z}}return{type:"image",mediaType:"image/png",data:f}}async function VK($,f){if(!$||$.length===0)return;let J=f??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(Z)=>{let W=Z.replace(/\\/g,"/");try{let j=await J(Z);return{type:"file",path:W,content:j}}catch(j){let X=j instanceof Error?j.message:String(j);return{type:"file",path:W,content:`Error fetching content: ${X}`}}}));if(Q.length===0)return;return Q}var V3={};t4(V3,{updateMcpServerOAuthState:()=>Sf,setMcpServerDisabled:()=>qf,resolveMcpServerRegistrations:()=>N$,resolveDefaultMcpSettingsPath:()=>w0,registerMcpServersFromSettingsFile:()=>Cf,normalizeMcpServerOAuthState:()=>c1,loadMcpSettingsFile:()=>Mf,listMcpServerOAuthStatuses:()=>wJ,hasMcpSettingsFile:()=>Z1,getMcpServerOAuthState:()=>wf});import{existsSync as oK,mkdirSync as Z3,readFileSync as MJ,writeFileSync as W3}from"node:fs";import{dirname as j3}from"node:path";import{resolveMcpSettingsPath as eK}from"@cline/shared/storage";import{z as M}from"zod";function NJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function w0(){return eK()}function VG($){let f=MJ($,"utf8"),J;try{J=JSON.parse(f)}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Z}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object.`);return J}function Y3($,f){if(!Object.hasOwn($,f))return;let J=$[f];if(!J||typeof J!=="object"||Array.isArray(J))return;return J}function AG($,f,J){Object.defineProperty($,f,{value:J,enumerable:!0,configurable:!0,writable:!0})}function Mf($={}){let f=$.filePath??w0(),J=MJ(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${f}": ${j}`)}let Z=YG.safeParse(Q);if(!Z.success){let W=Z.error.issues.map((j)=>{let X=j.path.join(".");return X?`${X}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${f}": ${W}`)}return Z.data}function BG($){let f=MJ($,"utf8"),J;try{J=JSON.parse(f)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${j}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object`);let Q=J,Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Q}function c1($){if(!$)return;let f={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(f).length>0?f:void 0}function KG($){if($===void 0)return;let f=qJ.safeParse($);if(!f.success)return;return c1(f.data)}function Z1($={}){let f=$.filePath??w0();return oK(f)}function N$($={}){let f=Mf($);return Object.entries(f.mcpServers).map(([J,Q])=>({name:J,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function qf($){let f=$.filePath??w0(),J=$.name.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=VG(f),Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${f}": mcpServers must be an object.`);let W={...Z},j=Y3(W,J);if(!j)throw Error(`Unknown MCP server: ${J}`);let X={...j};if($.disabled)X.disabled=!0;else delete X.disabled;AG(W,J,X),Z3(j3(f),{recursive:!0}),W3(f,`${JSON.stringify({...Q,mcpServers:W},null,2)}
|
|
3
|
+
`)}function wf($,f={}){let J=Mf(f);if(!Object.hasOwn(J.mcpServers,$))return;return c1(J.mcpServers[$]?.oauth)}function Sf($,f,J={}){let Q=J.filePath??w0(),Z=BG(Q),W=Z.mcpServers,j=Y3(W,$);if(!j)throw Error(`Unknown MCP server: ${$}`);let X=KG(j.oauth)??{},H=c1(f(X));if(H)j.oauth=H;else delete j.oauth;return Z3(j3(Q),{recursive:!0}),W3(Q,`${JSON.stringify(Z,null,2)}
|
|
4
|
+
`,"utf8"),H??{}}function wJ($={}){return N$($).map((J)=>{let Q=J.transport.type!=="stdio",Z=J.oauth?.tokens?.access_token;return{serverName:J.name,oauthSupported:Q,oauthConfigured:Q&&typeof Z==="string"&&Z.trim().length>0,lastError:J.oauth?.lastError,lastAuthenticatedAt:J.oauth?.lastAuthenticatedAt}}).sort((J,Q)=>J.serverName.localeCompare(Q.serverName))}async function Cf($,f={}){let J=N$(f);for(let Q of J)await $.registerServer(Q);return J}var Nf,X3,qJ,$G,fG,JG,QG,ZG,WG,H3,jG,XG,HG,YG;var y8=p$(()=>{Nf=M.record(M.string(),M.string()),X3=M.record(M.string(),M.unknown()),qJ=M.object({clientInformation:M.record(M.string(),M.unknown()).optional(),tokens:M.record(M.string(),M.unknown()).optional(),codeVerifier:M.string().optional(),discoveryState:M.record(M.string(),M.unknown()).optional(),redirectUrl:M.string().url().optional(),lastError:M.string().optional(),lastAuthenticatedAt:M.number().int().positive().optional()}).strip(),$G=M.object({type:M.literal("stdio"),command:M.string().min(1),args:M.array(M.string()).optional(),cwd:M.string().min(1).optional(),env:Nf.optional()}),fG=M.object({type:M.literal("sse"),url:M.string().url(),headers:Nf.optional()}),JG=M.object({type:M.literal("streamableHttp"),url:M.string().url(),headers:Nf.optional()}),QG=M.discriminatedUnion("type",[$G,fG,JG]),ZG=M.object({transport:QG,disabled:M.boolean().optional(),metadata:X3.optional(),oauth:qJ.optional()}),WG=M.enum(["stdio","sse","http","streamableHttp"]).optional(),H3=M.object({type:M.enum(["stdio","sse","streamableHttp"]).optional(),transportType:WG,disabled:M.boolean().optional(),metadata:X3.optional(),oauth:qJ.optional()});jG=H3.extend({command:M.string().min(1),args:M.array(M.string()).optional(),cwd:M.string().min(1).optional(),env:Nf.optional()}).superRefine(($,f)=>{let J=$.type??NJ($.transportType);if(J&&J!=="stdio")f.addIssue({code:M.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),XG=H3.extend({url:M.string().url(),headers:Nf.optional()}).superRefine(($,f)=>{let J=$.type??NJ($.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")f.addIssue({code:M.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??NJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),HG=M.union([ZG,jG,XG]),YG=M.object({mcpServers:M.record(M.string(),HG)}).passthrough()});import{mkdirSync as gG,readFileSync as mG,writeFileSync as vG}from"node:fs";import{dirname as cG}from"node:path";import{resolveGlobalSettingsPath as T3}from"@cline/shared/storage";import{z as Ef}from"zod";function y3(){return C8.parse({})}function Q$(){let $=T3(),f;try{f=JSON.parse(mG($,"utf8"))}catch{return y3()}let J=C8.safeParse(f);return J.success?J.data:y3()}function u1($,f={}){let J=T3(),Q=Q$();gG(cG(J),{recursive:!0});let Z=C8.parse($);if(!Q.telemetryOptOut&&Z.telemetryOptOut)N7(f.telemetry);vG(J,`${JSON.stringify(Z,null,2)}
|
|
5
|
+
`,"utf8")}function EJ(){return Q$().telemetryOptOut}function uG($,f={}){u1({...Q$(),telemetryOptOut:$},f)}function r0($){return new Set($??Q$().disabledTools??[])}function h8($){return new Set($??Q$().disabledPlugins??[])}function dG($){return r0().has($)}function bJ($){let f=r0(),J=Q$();if(f.has($))return f.delete($),u1({...J,disabledTools:[...f]}),!1;return f.add($),u1({...J,disabledTools:[...f]}),!0}function N3($,f){let J=[...new Set($.map((W)=>W.trim()).filter(Boolean))];if(J.length===0)return;let Q=Q$(),Z=r0(Q.disabledTools);for(let W of J)if(f)Z.add(W);else Z.delete(W);u1({...Q,disabledTools:[...Z]})}function M3($,f){return N3([$],f),f}function lG($){return h8().has($)}function pG($,f){let J=$.trim();if(!J)return;let Q=Q$(),Z=h8(Q.disabledPlugins);if(f)Z.add(J);else Z.delete(J);u1({...Q,disabledPlugins:[...Z]})}function kJ($,f){let J=h8(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q))}function d1($,f){let J=r0(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q.name))}function IJ($,f){if(!$||$.length===0)return $;let J=r0(f);if(J.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(Z,W)=>Q.setup?.({...Z,registerTool:(j)=>{if(!J.has(j.name))Z.registerTool(j)}},W)}})}var _3,C8;var Z$=p$(()=>{R0();_3=Ef.preprocess(($)=>Array.isArray($)?$.filter((f)=>typeof f==="string").map((f)=>f.trim()).filter(Boolean):void 0,Ef.array(Ef.string()).optional()).transform(($)=>{if(!$)return;let f=[...new Set($)].sort((J,Q)=>J.localeCompare(Q));return f.length>0?f:void 0}),C8=Ef.object({telemetryOptOut:Ef.boolean().default(!1).catch(!1),disabledTools:_3.optional(),disabledPlugins:_3.optional()}).strip().transform(($)=>{let f={telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)f.disabledTools=$.disabledTools;if($.disabledPlugins?.length)f.disabledPlugins=$.disabledPlugins;return f})});import{existsSync as RU,mkdirSync as UU,readFileSync as LU,writeFileSync as OU}from"node:fs";import{resolve as zU}from"node:path";import{resolveSessionDataDir as _U}from"@cline/shared/storage";import{nanoid as yU}from"nanoid";import*as TU from"node-machine-id";function P1($){let f=$?.trim();if(f)return f;let J=qU();if(J)return J;return wU()}function MU(){let $=TU;return $.machineIdSync??$.default?.machineIdSync}function qU(){try{let $=MU();if(!$)return;return $().trim()||void 0}catch{return}}function wU(){let $=_U(),f=zU($,NU);try{if(RU(f)){let Q=LU(f,"utf8").trim();if(Q.length>0)return Q}}catch{}let J=`cl-${yU()}`;try{UU($,{recursive:!0}),OU(f,J,"utf8")}catch{}return J}var NU="machine-id";var J4=()=>{};class O2{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($,f){if(!this.isEnabled())return;this.emitLog($,f,!1)}emitRequired($,f){this.emitLog($,f,!0)}recordCounter($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,W);W.add(f,this.flattenProperties(this.buildAttributes(J)))}recordHistogram($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,W);W.record(f,this.flattenProperties(this.buildAttributes(J)))}recordGauge($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.buildAttributes(J),j=JSON.stringify(W),X=this.gaugeValues.get($);if(f===null){if(X){if(X.delete(j),X.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let H=X;if(!H)H=new Map,this.gaugeValues.set($,H);if(!this.gauges.has($)){let Y=this.meter.createObservableGauge($,Q?{description:Q}:void 0);Y.addCallback((V)=>{for(let A of this.snapshotGaugeSeries($))V.observe(A.value,this.flattenProperties(A.attributes))}),this.gauges.set($,Y)}H.set(j,{value:f,attributes:W})}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($,f,J){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(f,J));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,f=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...f?{_required:!0}:{}}}snapshotGaugeSeries($){let f=this.gaugeValues.get($);if(!f)return[];return Array.from(f.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties($,f="",J=new WeakSet,Q=0){if(!$)return{};let Z={},W=100,j=10;for(let[X,H]of Object.entries($)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let Y=f?`${f}.${X}`:X;if(H===null||H===void 0){Z[Y]=String(H);continue}if(Array.isArray(H)){let V=H.length>W?H.slice(0,W):H;try{Z[Y]=JSON.stringify(V)}catch{Z[Y]="[UnserializableArray]"}if(H.length>W)Z[`${Y}_truncated`]=!0,Z[`${Y}_original_length`]=H.length;continue}if(typeof H==="object"){if(H instanceof Date){Z[Y]=H.toISOString();continue}if(H instanceof Error){Z[Y]=H.message;continue}if(J.has(H)){Z[Y]="[Circular]";continue}if(Q>=j){Z[Y]="[MaxDepthExceeded]";continue}J.add(H),Object.assign(Z,this.flattenProperties(H,Y,J,Q+1));continue}if(M_(H)){Z[Y]=H;continue}try{Z[Y]=JSON.stringify(H)}catch{Z[Y]=String(H)}}return Z}}function M_($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class g4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,f){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:f})}emitRequired($,f){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:f})}recordCounter($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordHistogram($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordGauge($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:f,attributes:J,description:Q,required:Z===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class z2{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new g4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let f=this.buildAttributes($.properties);for(let J of this.adapters)J.emit($.event,f)}captureRequired($,f){let J=this.buildAttributes(f);for(let Q of this.adapters)Q.emitRequired($,J)}recordCounter($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordCounter($,f,W,Q,Z)}recordHistogram($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordHistogram($,f,W,Q,Z)}recordGauge($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordGauge($,f,W,Q,Z)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var i9=()=>{};import{metrics as q_,trace as w_}from"@opentelemetry/api";import{logs as S_}from"@opentelemetry/api-logs";import{OTLPLogExporter as C_}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as h_}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as E_}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as b_}from"@opentelemetry/resources";import{BatchLogRecordProcessor as k_,ConsoleLogRecordExporter as I_,LoggerProvider as x_}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as g_,MeterProvider as m_,PeriodicExportingMetricReader as HH}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as v_,ConsoleSpanExporter as c_,SimpleSpanProcessor as u_}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as d_}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as l_,ATTR_SERVICE_VERSION as p_}from"@opentelemetry/semantic-conventions";class YH{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($,f){this.resolveProperties(f)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class _2{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let f=b_({[l_]:$.serviceName??"cline",...$.serviceVersion?{[p_]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(f),this.loggerProvider=this.createLoggerProvider(f),this.tracerProvider=this.createTracerProvider(f),this.meterProvider)q_.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)S_.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",f){return w_.getTracer($,f??this.options.serviceVersion)}createAdapter($){return new O2({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let f=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new z2({...$,adapters:[f],distinctId:P1($.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 f=n9(this.options.metricsExporter);if(f.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(J*0.8)),Z=f.map((W)=>n_(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:Q})).filter((W)=>W!==null);if(Z.length===0)return null;return new m_({resource:$,readers:Z})}createTracerProvider($){let f=n9(this.options.tracesExporter);if(f.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,Z=[];for(let W of f){let j=i_(W,{endpoint:J,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)Z.push(j)}if(Z.length===0)return null;return new d_({resource:$,spanProcessors:Z})}createLoggerProvider($){let f=n9(this.options.logsExporter);if(f.length===0)return null;let J=f.map((Q)=>{let Z=r_(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!Z)return null;return new k_(Z,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(J.length===0)return null;return new x_({resource:$,processors:J})}}function m4($){let f=new _2($),J=f.createTelemetryService($);return J.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:f,telemetry:J}}function _1($){if(EJ())return{telemetry:new YH($)};if($.enabled!==!0)return{telemetry:new z2({...$,distinctId:P1($.distinctId)})};return m4($)}function v4($){let{telemetry:f,provider:J}=_1($);return{telemetry:f,provider:J,flush:async()=>{let W=J;if(W&&typeof W.forceFlush==="function")try{await W.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([f.dispose(),J?.dispose()])}}}function n9($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function r_($,f){if($==="console")return new I_;if(!f.endpoint)return null;let J=a9(f.endpoint,"/v1/logs");return new C_({url:J,headers:f.headers})}function i_($,f){if($==="console")return new u_(new c_);if(!f.endpoint)return null;let J=a9(f.endpoint,"/v1/traces");return new v_(new E_({url:J,headers:f.headers}))}function n_($,f){if($==="console")return new HH({exporter:new g_,exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout});if(!f.endpoint)return null;let J=a9(f.endpoint,"/v1/metrics");return new HH({exporter:new h_({url:J,headers:f.headers}),exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout})}function a9($,f){let J=new URL($),Q=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=Q.endsWith(f)?Q:`${Q}${f}`,J.toString()}var c4=p$(()=>{Z$();J4();i9()});var fY={};t4(fY,{createOpenTelemetryTelemetryService:()=>m4,createConfiguredTelemetryService:()=>_1,createConfiguredTelemetryHandle:()=>v4,OpenTelemetryProvider:()=>_2,OpenTelemetryAdapter:()=>O2});var A7=p$(()=>{c4()});import*as wu from"@cline/llms";import{buildClineSystemPrompt as Cu,buildSdkErrorProperties as hu,ContributionRegistry as Eu,captureSdkError as bu,createClineTelemetryServiceConfig as ku,createClineTelemetryServiceMetadata as Iu,createContributionRegistry as xu,createTool as gu,emptyWorkspaceManifest as mu,formatDisplayUserInput as vu,noopBasicLogger as cu,normalizeSdkError as uu,normalizeUserInput as du,parseUserCommandEnvelope as lu,registerDisposable as pu,SDK_ERROR_TELEMETRY_EVENT as ru}from"@cline/shared";export*from"@cline/shared/storage";function CY($){if(typeof $!=="object"||$===null||!("error"in $))return;let f=$.error;return typeof f==="string"&&f.trim()?f:void 0}function z7($,f,J){let Q=CY(J);if(Q)return Q;let Z=f.trim();if(Z){let W=Z.length>200?`${Z.slice(0,200)}...`:Z;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class s4{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let f=$.apiBaseUrl.trim();if(!f)throw Error("apiBaseUrl is required");this.apiBaseUrl=f,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 f=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(f)}/balance`)}async fetchUsageTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/usages`)).items??[]}async fetchPaymentTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}`)}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}/balance`)}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId(f,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(f)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let f=$?.trim();if(f)return f;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let Z=await this.fetchMe();if(!Z.id?.trim())throw Error("Unable to resolve current user id");return Z.id}async resolveOrganizationMemberId($,f){let J=f?.trim();if(J)return J;let Z=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(Z)return Z;let j=(await this.fetchUserOrganizations()).find((X)=>X.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,f){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},Z=new AbortController,W=setTimeout(()=>Z.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:f?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...Q??{}},body:f?.body!==void 0?JSON.stringify(f.body):void 0,signal:Z.signal});if(j.status===204||f?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let X=await j.text(),H;if(X.trim())try{H=JSON.parse(X)}catch{if(!j.ok)throw Error(z7(j.status,X,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(z7(j.status,X,H));if(typeof H==="object"&&H!==null){let Y=H;if(typeof Y.success==="boolean"){if(!Y.success)throw Error(Y.error||"Cline account request failed");if(Y.data!==void 0)return Y.data}}if(H===void 0||H===null)throw Error("Cline account response payload was empty");return H}finally{clearTimeout(W)}}}function _7($){return $.action==="clineAccount"}async function y7($,f){switch($.operation){case"fetchMe":return f.fetchMe();case"fetchBalance":return f.fetchBalance($.userId);case"fetchUsageTransactions":return f.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return f.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return f.fetchUserOrganizations();case"fetchOrganizationBalance":return f.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return f.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await f.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return f.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class o4{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 f=$.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:f})}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:f,...$.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}}function e4($){return{onAuth:({url:f,instructions:J})=>{if($.onOutput?.(J??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(f)).catch((Q)=>{$.onOpenUrlError?.({url:f,error:Q})})}catch(Q){$.onOpenUrlError?.({url:f,error:Q})}$.onOutput?.(f)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}R0();import{getClineEnvironmentConfig as G6}from"@cline/shared";function gY(){let $;return{promise:new Promise((J)=>{$=J}),resolve:$}}async function $$($){let f=await import("node:http"),J=$.host??"127.0.0.1",Q=$.timeoutMs??300000,Z=$.successHtml??mY,W=gY(),j=!1,X=null,H=null,Y=null,V=(K)=>{if(j)return;j=!0,W.resolve(K)},A=()=>{if(X)clearTimeout(X),X=null;let K=Y;if(Y=null,H)H.close(),H=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:J,port:K})).catch(()=>{})},B=async()=>{return X=setTimeout(()=>{A(),V(null)},Q),W.promise};for(let K of $.ports){let G=f.createServer((F,P)=>{try{let D=new URL(F.url||"",`http://${J}:${K}`);if(D.pathname!==$.callbackPath){P.statusCode=404,P.end("Not found");return}let O={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(O.error){P.statusCode=400,P.end(`Authentication failed: ${O.error}`),A(),V(O);return}if(!O.code){P.statusCode=400,P.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){P.statusCode=400,P.end("State mismatch");return}P.statusCode=200,P.setHeader("Content-Type","text/html; charset=utf-8"),P.end(Z),A(),V(O)}catch{P.statusCode=500,P.end("Internal error")}}),R=await new Promise((F)=>{let P=(D)=>{G.off("error",P),F({bound:!1,error:D})};G.once("error",P),G.listen(K,J,()=>{G.off("error",P),H=G,F({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw A(),R.error}if(R.bound){Y=K;let F=`http://${J}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:J,port:K,callbackUrl:F})).catch(()=>{});return{callbackUrl:F,waitForCallback:B,cancelWait:()=>{A(),V(null)},close:()=>{A(),V(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var mY=`<!DOCTYPE html>
|
|
4
6
|
<html lang="en">
|
|
5
7
|
<head>
|
|
6
8
|
<meta charset="utf-8">
|
|
@@ -41,17 +43,17 @@ import{createRequire as oX}from"node:module";var aX=Object.defineProperty;var tX
|
|
|
41
43
|
</div>
|
|
42
44
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
43
45
|
</body>
|
|
44
|
-
</html>`;function AH(f){let $="";for(let J=0;J<f.length;J+=1)$+=String.fromCharCode(f[J]??0);return btoa($).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function ZA(f){let J=new TextEncoder().encode(f),W=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(W)}function jA(f=32){let $=new Uint8Array(f);return crypto.getRandomValues($),AH($)}async function G2(){let f=jA(),$=AH(await ZA(f));return{verifier:f,challenge:$}}function T2(f){return f.endsWith("/")?f.slice(0,-1):f}function l0(f,$){return new URL($,`${T2(f)}/`).toString()}function h$(f,$={}){let J=f.trim();if(!J)return{};try{let W=new URL(J);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:$.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if($.allowHashCodeState&&J.includes("#")){let[W,H]=J.split("#",2);return{code:W||void 0,state:H||void 0}}if(J.includes("code=")){let W=new URLSearchParams(J);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:$.includeProvider?W.get("provider")??void 0:void 0}}return{code:J}}function XA(f){if(typeof atob==="function")try{return atob(f)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from(f,"base64").toString("utf8")}catch{return null}return null}function Zf(f){if(!f)return null;try{let $=f.split(".");if($.length!==3)return null;let J=$[1];if(!J)return null;let W=J.replace(/-/g,"+").replace(/_/g,"/"),H=W.padEnd(W.length+(4-W.length%4)%4,"="),Q=XA(H);if(!Q)return null;return JSON.parse(Q)}catch{return null}}function O$(f){try{let $=JSON.parse(f),J=$.error,W=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,H=typeof $.error_description==="string"?$.error_description:typeof $.message==="string"?$.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:W,message:H}}catch{return{}}}function p0(f,$){return Date.now()>=f.expires-$}async function z$(f){if(!f.onManualCodeInput){let Q=await f.waitForCallback();return{code:Q?.code,state:Q?.state,provider:Q?.provider,error:Q?.error}}let $,J,W=f.onManualCodeInput().then((Q)=>{$=Q,f.cancelWait()}).catch((Q)=>{J=Q instanceof Error?Q:Error(String(Q)),f.cancelWait()}),H=await f.waitForCallback();if(J)throw J;if(H?.code||H?.error)return{code:H.code,state:H.state,provider:H.provider,error:H.error};if($)return h$($,f.parseOptions);if(await W,J)throw J;if($)return h$($,f.parseOptions);return{}}var D2={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},VH={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},t4="https://api.workos.com",AA="/auth",PH=Array.from({length:11},(f,$)=>48801+$),PA=300000,BA=30000,N$=30000,YA=300,VA=5;class y0 extends Error{status;errorCode;constructor(f,$){super(f);this.name="ClineOAuthTokenError",this.status=$?.status,this.errorCode=$?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function RA(f){let $=Date.parse(f);if(Number.isNaN($))throw Error(`Invalid expiresAt value: ${f}`);return $}function s4(f,$,J={}){let W=f.userInfo.clineUserId??J.accountId,H=f.refreshToken??J.refresh;if(!H)throw Error("Token response did not include a refresh token");return{access:f.accessToken,refresh:H,expires:RA(f.expiresAt),accountId:W??void 0,email:f.userInfo.email||J.email,metadata:{provider:$,tokenType:f.tokenType,userInfo:f.userInfo}}}async function o4(f){if(!f)return{};return typeof f==="function"?await f():f}function BH(f,$){if(typeof f!=="number"||!Number.isFinite(f)||f<=0)return $;return Math.floor(f)}async function YH(f){await new Promise(($)=>setTimeout($,f))}function e4(f,$){if(!f.success||!f.data?.accessToken)throw Error($);return f.data}async function RH(f,$){let J=await fetch(l0(t4,VH.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:f}),signal:AbortSignal.timeout($?.requestTimeoutMs??N$)}),W=await J.json().catch(()=>({}));if(!J.ok)throw new y0(`Device authorization failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:BH(W.expires_in,YA),pollIntervalSeconds:BH(W.interval,VA)}}async function FH(f){let $=Date.now()+f.expiresInSeconds*1000,J=Math.max(1,f.initialPollIntervalSeconds);while(Date.now()<=$){let W=await fetch(l0(f.workosApiBaseUrl,VH.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:f.deviceCode,client_id:f.clientId}),signal:AbortSignal.timeout(f.requestTimeoutMs)}),H=await W.json().catch(()=>({}));if(W.ok){if(!H.access_token||!H.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:H.access_token,refreshToken:H.refresh_token,tokenType:H.token_type??"Bearer"}}switch(H.error){case"authorization_pending":{await YH(J*1000);break}case"slow_down":{J+=1,await YH(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new y0(H.error_description||"WorkOS authorization failed",{status:W.status,errorCode:H.error});default:throw new y0(`WorkOS token polling failed: ${W.status}${H.error_description?` - ${H.error_description}`:""}`,{status:W.status,errorCode:H.error})}f.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function KH(f,$,J){let W={accessToken:f.accessToken,refreshToken:f.refreshToken},H=await fetch(l0($.apiBaseUrl,D2.register),{method:"POST",headers:{"Content-Type":"application/json",...await o4($.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout($.requestTimeoutMs??N$)});if(!H.ok){let Z=await H.text().catch(()=>""),j=O$(Z);throw new y0(`Token registration failed: ${H.status}${j.message?` - ${j.message}`:""}`,{status:H.status,errorCode:j.code})}let Q=await H.json();return s4(e4(Q,"Invalid token exchange response"),J??$.provider)}async function FA(f,$,J,W){let H={grant_type:"authorization_code",code:f,client_type:"extension",redirect_uri:$,provider:W??J.provider},Q=await fetch(l0(J.apiBaseUrl,D2.token),{method:"POST",headers:{"Content-Type":"application/json",...await o4(J.headers)},body:JSON.stringify(H),signal:AbortSignal.timeout(J.requestTimeoutMs??N$)});if(!Q.ok){let j=await Q.text().catch(()=>""),X=O$(j);throw new y0(`Token exchange failed: ${Q.status}${X.message?` - ${X.message}`:""}`,{status:Q.status,errorCode:X.code})}let Z=await Q.json();return s4(e4(Z,"Invalid token exchange response"),W??J.provider)}async function _2(f){V0(f.telemetry,f.provider??"cline");let $=f.useWorkOSDeviceAuth??!0,J=f.callbackPorts?.length?f.callbackPorts:PH,W=f.callbackPath??AA,H=$?null:await r0({ports:J,callbackPath:W,onListening:f.callbacks.onServerListening,onClose:f.callbacks.onServerClose}),Q=H?.callbackUrl||`http://127.0.0.1:${J[0]??PH[0]}${W}`;try{let Z;if($){let j=a4().workOsClientId,X=await RH(j,f);f.callbacks.onAuth({url:X.verificationUriComplete??X.verificationUri,instructions:`Enter this code in your browser: ${X.userCode}`});let A=await FH({clientId:j,deviceCode:X.deviceCode,expiresInSeconds:X.expiresInSeconds,initialPollIntervalSeconds:X.pollIntervalSeconds,requestTimeoutMs:f.requestTimeoutMs??N$,workosApiBaseUrl:t4,onProgress:f.callbacks.onProgress});Z=await KH(A,f,f.provider)}else{let j=new URL(l0(f.apiBaseUrl,D2.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",Q),j.searchParams.set("redirect_uri",Q),f.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let X,A=f.provider,P=await z$({waitForCallback:H?.waitForCallback??(async()=>null),cancelWait:H?.cancelWait??(()=>{}),onManualCodeInput:f.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(P.error)throw Error(`OAuth error: ${P.error}`);if(X=P.code,A=P.provider??A,!X){let B=await f.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),Y=h$(B,{includeProvider:!0});X=Y.code,A=Y.provider??A}if(!X)throw Error("Missing authorization code");Z=await FA(X,Q,f,A)}return R0(f.telemetry,f.provider??"cline"),K0(f.telemetry,{id:Z.accountId,email:Z.email,provider:f.provider??"cline"}),Z}catch(Z){throw F0(f.telemetry,f.provider??"cline",Z instanceof Error?Z.message:String(Z)),Z}finally{H?.close()}}async function KA(f){return await RH(a4().workOsClientId,f)}async function yA(f){let $=f.provider??"cline";V0(f.telemetry,$);try{let J=await FH({clientId:a4().workOsClientId,deviceCode:f.deviceCode,expiresInSeconds:f.expiresInSeconds,initialPollIntervalSeconds:f.pollIntervalSeconds,requestTimeoutMs:f.requestTimeoutMs??N$,workosApiBaseUrl:t4}),W=await KH(J,{apiBaseUrl:f.apiBaseUrl,headers:f.headers,requestTimeoutMs:f.requestTimeoutMs,provider:f.provider},f.provider);return R0(f.telemetry,$),K0(f.telemetry,{id:W.accountId,email:W.email,provider:$}),W}catch(J){throw F0(f.telemetry,$,J instanceof Error?J.message:String(J)),J}}async function f6(f,$){let J=await fetch(l0($.apiBaseUrl,D2.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await o4($.headers)},body:JSON.stringify({refreshToken:f.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout($.requestTimeoutMs??N$)});if(!J.ok){let Q=await J.text().catch(()=>""),Z=O$(Q);throw new y0(`Token refresh failed: ${J.status}${Z.message?` - ${Z.message}`:""}`,{status:J.status,errorCode:Z.code})}let W=await J.json(),H=f.metadata?.provider??$.provider;return s4(e4(W,"Invalid token refresh response"),H,f)}async function $6(f,$,J){if(!f)return null;let W=J?.refreshBufferMs??PA,H=J?.retryableTokenGraceMs??BA;if(J?.forceRefresh!==!0&&!p0(f,W))return f;try{return await f6(f,$)}catch(Z){if(Z instanceof y0&&Z.isLikelyInvalidGrant())return c0($.telemetry,$.provider??"cline","invalid_grant"),null;if(f.expires-Date.now()>H)return f;return null}}function UA(f){return{id:"cline",name:"Cline Account",usesCallbackServer:!(f.useWorkOSDeviceAuth??!0),async login($){return _2({...f,callbacks:$})},async refreshToken($){return f6($,f)},getApiKey($){return`workos:${$.access}`}}}Uf();import{nanoid as GA}from"nanoid";var t={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 M2 extends Error{status;errorCode;constructor(f,$){super(f);this.name="OpenAICodexOAuthTokenError",this.status=$?.status,this.errorCode=$?.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 TA(f,$,J=t.redirectUri){let W=await fetch(t.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:t.clientId,code:f,code_verifier:$,redirect_uri:J}),signal:AbortSignal.timeout(t.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let H=await W.json();if(!H.access_token||!H.refresh_token||typeof H.expires_in!=="number")return{type:"failed"};return{type:"success",access:H.access_token,refresh:H.refresh_token,expires:Date.now()+H.expires_in*1000,email:H.email,idToken:H.id_token}}async function DA(f){try{let $=await fetch(t.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:f,client_id:t.clientId}),signal:AbortSignal.timeout(t.httpTimeoutMs)});if(!$.ok){let W=await $.text().catch(()=>""),H=O$(W);throw new M2(`Token refresh failed: ${$.status}${H.message?` - ${H.message}`:""}`,{status:$.status,errorCode:H.code})}let J=await $.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}catch($){if($ instanceof M2)throw $;return{type:"failed"}}}async function _A(f="pi"){let{verifier:$,challenge:J}=await G2(),W=GA(32),H=new URL(t.authorizationEndpoint);return H.searchParams.set("response_type","code"),H.searchParams.set("client_id",t.clientId),H.searchParams.set("redirect_uri",t.redirectUri),H.searchParams.set("scope",t.scopes),H.searchParams.set("code_challenge",J),H.searchParams.set("code_challenge_method","S256"),H.searchParams.set("state",W),H.searchParams.set("id_token_add_organizations","true"),H.searchParams.set("codex_cli_simplified_flow","true"),H.searchParams.set("originator",f),{verifier:$,state:W,url:H.toString()}}function MA(){try{let f=new URL(t.redirectUri),$=f.port.length>0?Number.parseInt(f.port,10):t.callbackPort;return{host:f.hostname||"localhost",port:Number.isFinite($)?$:t.callbackPort,callbackPath:f.pathname||"/auth/callback",redirectUri:f.toString()}}catch{return{host:"localhost",port:t.callbackPort,callbackPath:"/auth/callback",redirectUri:t.redirectUri}}}function yH(f,$){let J=$?Zf($):Zf(f),W=J?J:Zf(f),Q=W?.[t.jwtClaimPath]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=W?.organizations;if(Array.isArray(Z)&&Z.length>0){let X=Z[0];if(typeof X?.id==="string"&&X.id.length>0)return X.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function UH(f,$){let J=yH(f.access,f.idToken)??$?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:f.access,refresh:f.refresh||$?.refresh||"",expires:f.expires,accountId:J,email:f.email??$?.email,metadata:{...$?.metadata??{},provider:"openai-codex"}}}async function L2(f){V0(f.telemetry,"openai-codex");let $=MA(),{verifier:J,state:W,url:H}=await _A(f.originator),Q=await r0({host:$.host,ports:[$.port],callbackPath:$.callbackPath,expectedState:W});f.onAuth({url:H,instructions:"Continue the authentication process in your browser."});let Z;try{let j=await z$({waitForCallback:Q.waitForCallback,cancelWait:Q.cancelWait,onManualCodeInput:f.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Z=j.code,!Z){let P=await f.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=h$(P,{allowHashCodeState:!0});if(B.state&&B.state!==W)throw Error("State mismatch");Z=B.code}if(!Z)throw Error("Missing authorization code");let X=await TA(Z,J,$.redirectUri);if(X.type!=="success")throw Error("Token exchange failed");let A=UH(X);return R0(f.telemetry,"openai-codex"),K0(f.telemetry,{id:A.accountId,email:A.email,provider:"openai-codex"}),A}catch(j){throw F0(f.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{Q.close()}}async function J6(f,$){let J=await DA(f);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=UH(J,$);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function W6(f,$){if(!f)return null;let J=$?.refreshBufferMs??t.refreshBufferMs,W=$?.retryableTokenGraceMs??t.retryableTokenGraceMs;if($?.forceRefresh!==!0&&!p0(f,J))return f;try{return await J6(f.refresh,f)}catch(Q){if(Q instanceof M2&&Q.isLikelyInvalidGrant())return c0($?.telemetry,"openai-codex","invalid_grant"),null;if(f.expires-Date.now()>W)return f;return null}}function LA(f,$=t.refreshBufferMs){return p0(f,$)}function hA(f){let $=f.accountId??yH(f.access);if(!$)throw Error("Failed to extract accountId from token");return{...f,accountId:$,metadata:{...f.metadata??{},provider:"openai-codex"}}}var OA={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login(f){return L2({onAuth:f.onAuth,onPrompt:f.onPrompt,onProgress:f.onProgress,onManualCodeInput:f.onManualCodeInput})},async refreshToken(f){return J6(f.refresh,f)},getApiKey(f){return f.access}};Uf();import{nanoid as GH}from"nanoid";class H6{ttlMs;maxEntries;entries=new Map;constructor(f,$){this.ttlMs=f;this.maxEntries=$}get(f,$=Date.now()){this.pruneExpired($);let J=this.entries.get(f);if(!J)return;return this.entries.delete(f),this.entries.set(f,J),J.value}set(f,$,J=Date.now(),W=this.ttlMs){this.pruneExpired(J),this.entries.delete(f);while(this.entries.size>=this.maxEntries){let H=this.entries.keys().next().value;if(H===void 0)break;this.entries.delete(H)}this.entries.set(f,{value:$,expiresAt:J+W})}pruneExpired(f){for(let[$,J]of this.entries)if(J.expiresAt<=f)this.entries.delete($)}}var zA="a8331954c0cf48ba99b5dd223a14c6ea",NA="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",qA="openid offline_access",Z6="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",wA="c1aba3deed5740659981a752714eba33",bA="https://login-ext.identity.oraclecloud.com",CA="openid offline_access",j6="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",EA="opc-request-id",SA="/auth/oca",kA=Array.from({length:11},(f,$)=>48801+$),IA=300000,mA=30000,TH=30000,xA=600000;class h2 extends Error{status;errorCode;constructor(f,$){super(f);this.name="OcaOAuthTokenError",this.status=$?.status,this.errorCode=$?.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 U0={internal:{clientId:zA,idcsUrl:NA,scopes:qA,baseUrl:Z6},external:{clientId:wA,idcsUrl:bA,scopes:CA,baseUrl:j6}},Z1=new Map,gA=86400000,vA=300000,uA=32,Q6=new H6(gA,uA);function DH(f){if(typeof f==="function")return f();return f??"internal"}function _H(f){return{internal:{clientId:f?.internal?.clientId??U0.internal.clientId,idcsUrl:f?.internal?.idcsUrl??U0.internal.idcsUrl,scopes:f?.internal?.scopes??U0.internal.scopes,baseUrl:f?.internal?.baseUrl??U0.internal.baseUrl},external:{clientId:f?.external?.clientId??U0.external.clientId,idcsUrl:f?.external?.idcsUrl??U0.external.idcsUrl,scopes:f?.external?.scopes??U0.external.scopes,baseUrl:f?.external?.baseUrl??U0.external.baseUrl}}}function cA(f=Date.now()){let $=f-xA;for(let[J,W]of Z1.entries())if(W.createdAt<$)Z1.delete(J)}function dA(f,$,J){if(typeof f.expires_in==="number"&&f.expires_in>0)return Date.now()+f.expires_in*1000;let H=Zf($)?.exp;if(typeof H==="number"&&H>0)return H*1000;let Z=Zf(J)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return Date.now()+3600000}function MH(f,$,J){let W=f.access_token;if(!W)throw Error("Token response did not include an access token");let H=f.refresh_token??J?.refresh;if(!H)throw Error("Token response did not include a refresh token");let Q=Zf(f.id_token),Z=Zf(W),j=Q?.sub??Z?.sub,X=Q?.email??Z?.email;return{access:W,refresh:H,expires:dA(f,W,f.id_token),accountId:j??J?.accountId,email:X??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:$,subject:j,idToken:f.id_token}}}async function LH(f,$){let J=T2(f),W=Q6.get(J);if(W)return W;let H=`${J}/.well-known/openid-configuration`,Q=await fetch(H,{method:"GET",signal:AbortSignal.timeout($)});if(!Q.ok){let X=`${J}/oauth2/v1/token`;return Q6.set(J,X,Date.now(),vA),X}let j=(await Q.json()).token_endpoint||`${J}/oauth2/v1/token`;return Q6.set(J,j),j}function hH(f){return{code:f.error,message:f.error_description}}async function rA(f){let $=Z1.get(f.state);if(!$)throw Error("No PKCE verifier found for this state");Z1.delete(f.state);let J=f.mode==="external"?f.config.external:f.config.internal,W=await LH(J.idcsUrl,f.requestTimeoutMs),H=new URLSearchParams({grant_type:"authorization_code",code:f.code,redirect_uri:$.redirectUri,client_id:J.clientId,code_verifier:$.verifier}),Q=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(f.requestTimeoutMs)}),Z=await Q.json();if(!Q.ok){let X=hH(Z);throw new h2(`Token exchange failed: ${Q.status}${X.message?` - ${X.message}`:""}`,{status:Q.status,errorCode:X.code})}let j=Zf(Z.id_token);if(!Z.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==$.nonce)throw Error("OIDC nonce verification failed");return MH(Z,f.mode)}function lA(f){let $=f.mode==="external"?f.config.external:f.config.internal,J=new URL(`${T2($.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",$.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",$.scopes),J.searchParams.set("code_challenge",f.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",f.callbackUrl),J.searchParams.set("state",f.state),J.searchParams.set("nonce",f.nonce),J.toString()}async function O2(f){V0(f.telemetry,"oca");let $=_H(f.config),J=DH(f.mode),W=f.callbackPorts?.length?f.callbackPorts:kA,H=f.callbackPath??SA,Q=f.requestTimeoutMs??TH,Z=await r0({ports:W,callbackPath:H,onListening:f.callbacks.onServerListening,onClose:f.callbacks.onServerClose}),j=Z.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let X=GH(16),A=GH(16),{verifier:P,challenge:B}=await G2();cA(),Z1.set(X,{verifier:P,nonce:A,mode:J,redirectUri:j,createdAt:Date.now()});let Y=lA({callbackUrl:j,mode:J,state:X,nonce:A,challenge:B,config:$});f.callbacks.onAuth({url:Y,instructions:"Continue the authentication process in your browser."});try{let V=await z$({waitForCallback:Z.waitForCallback,cancelWait:Z.cancelWait,onManualCodeInput:f.callbacks.onManualCodeInput}),R=V.code,U=V.state;if(V.error)throw Error(`OAuth error: ${V.error}`);if(!R){if(!f.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!U||U!==X)throw Error("State mismatch");let K=await rA({code:R,state:U,mode:J,config:$,requestTimeoutMs:Q});return R0(f.telemetry,"oca"),K0(f.telemetry,{id:K.accountId,email:K.email,provider:"oca"}),K}catch(V){throw F0(f.telemetry,"oca",V instanceof Error?V.message:String(V)),V}finally{Z.close()}}async function X6(f,$={}){let J=_H($.config),W=$.requestTimeoutMs??TH,H=f.metadata?.mode,Q=H==="internal"||H==="external"?H:DH($.mode),Z=Q==="external"?J.external:J.internal,j=await LH(Z.idcsUrl,W),X=new URLSearchParams({grant_type:"refresh_token",refresh_token:f.refresh,client_id:Z.clientId}),A=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:X,signal:AbortSignal.timeout(W)}),P=await A.json();if(!A.ok){let B=hH(P);throw new h2(`Token refresh failed: ${A.status}${B.message?` - ${B.message}`:""}`,{status:A.status,errorCode:B.code})}return MH(P,Q,f)}async function A6(f,$,J){if(!f)return null;let W=$?.refreshBufferMs??J?.refreshBufferMs??IA,H=$?.retryableTokenGraceMs??J?.retryableTokenGraceMs??mA;if($?.forceRefresh!==!0&&!p0(f,W))return f;try{return await X6(f,J)}catch(Z){if(Z instanceof h2&&Z.isLikelyInvalidGrant())return c0(J?.telemetry,"oca","invalid_grant"),null;if(f.expires-Date.now()>H)return f;return null}}function pA(f={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login($){return O2({...f,callbacks:$})},async refreshToken($){return X6($,f)},getApiKey($){return $.access}}}async function OH(f,$){let J=new TextEncoder,W=async(A)=>{let P=await crypto.subtle.digest("SHA-256",J.encode(A));return Array.from(new Uint8Array(P).slice(0,4),(B)=>B.toString(16).padStart(2,"0")).join("")},[H,Q]=await Promise.all([W($),W(f)]),Z=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),j=new Uint32Array(1);crypto.getRandomValues(j);let X=(j[0]??0).toString(16).padStart(8,"0");return H+Q+Z+X}async function iA(f){let $=await OH(f.taskId,f.accessToken);return{Authorization:`Bearer ${f.accessToken}`,"Content-Type":"application/json",client:f.metadata?.client??"Cline","client-version":f.metadata?.clientVersion??"unknown","client-ide":f.metadata?.clientIde??"unknown","client-ide-version":f.metadata?.clientIdeVersion??"unknown",[EA]:$}}import*as hf from"@cline/llms";import{z as h}from"zod";import*as s from"@cline/llms";function P6(f){if(!Array.isArray(f))return[];return f.map(($)=>{if(typeof $==="string")return $.trim();if($&&typeof $==="object"){let J=$;for(let W of[J.id,J.name,J.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter(($)=>$.length>0)}function nA(f,$){let J=P6(f);if(J.length>0)return J;if(!f||typeof f!=="object")return[];let W=f,H=P6(W.data??W.models);if(H.length>0)return H;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Z=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Z.length>0)return Z}let Q=W.providers?.[$];if(Q&&typeof Q==="object"){let j=P6(Q.models??Q);if(j.length>0)return j}return[]}async function z2(f,$){let J=await fetch(f,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${f}: HTTP ${J.status}`);return nA(await J.json(),$)}function zH(f){return f.replace(/\/+$/,"")}function N2(f,$,J){let W=J?.trim();if(!W)return;let H=f?.trim();if(!H||!$?.trim())return W;try{let Q=new URL(W),Z=new URL($),j=new URL(H);if(Q.origin!==Z.origin)return W;let X=zH(Z.pathname),A=zH(j.pathname);if(X&&Q.pathname.startsWith(`${X}/`)){let P=Q.pathname.slice(X.length);j.pathname=`${A}${P}`}else j.pathname=Q.pathname;return j.search=Q.search,j.hash=Q.hash,j.toString()}catch{return W}}function aA(f){return Object.fromEntries(Object.entries(f).map(([$,J])=>[$,{...J}]))}function tA(f){if(f.baseUrl.length===0)return!1;switch(f.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return f.protocol==="openai-chat"}}var sA=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map((f)=>({id:f.provider.id,baseUrl:f.provider.baseUrl??"",modelsSourceUrl:f.provider.modelsSourceUrl,modelId:f.provider.defaultModelId,knownModels:aA(f.models),capabilities:f.provider.capabilities?[...f.provider.capabilities]:void 0,env:f.provider.env?[...f.provider.env]:void 0,client:f.provider.client,protocol:f.provider.protocol})),qH=Object.fromEntries(sA.map((f)=>[f.id,f]));function oA(f){return qH[f]}function eA(){return Object.fromEntries(Object.entries(qH).filter(([,f])=>tA(f)))}function wH(f=[]){let $=f.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return $.length>0?$:void 0}var bH="https://models.dev/api.json",fP=600000,CH=300000,$P=5000,w2=new Map,j1=new Map,V6=new Map,q2=new Map;async function JP(){return s.getGeneratedProviderModels()}async function WP(f,$={},J={},W={},H={},Q={}){let Z=await JP(),j=s.resolveProviderModelCatalogKeys(f),X=Object.assign({},...j.map((Y)=>Z[Y]??{})),A=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[f]?.provider.modelsSourceUrl),P=Object.keys(H).length>0;if(A&&P)return s.sortModelsByReleaseDate({...H,...Q});let B=Object.keys(W).length>0;if(f==="openai-codex"&&B)return s.sortModelsByReleaseDate({...W,...Q});return s.sortModelsByReleaseDate({...X,...$,...J,...W,...H,...Q})}function HP(f,$){let J=s.resolveProviderModelCatalogKeys(f);return Object.assign({},...J.map((W)=>$[W]??{}))}function R6(f){let $=f?.trim();return $&&$.length>0?$:""}function F6(f){let $=f.apiKey?.trim()||f.accessToken?.trim();return $&&$.length>0?$:void 0}function QP(f){let $=2166136261;for(let J=0;J<f.length;J+=1)$^=f.charCodeAt(J),$+=($<<1)+($<<4)+($<<7)+($<<8)+($<<24);return($>>>0).toString(16)}function ZP(f,$){return`${f}:${R6($.baseUrl)}:${QP(F6($)??"")}`}function jP(f){let $=f?.trim();if(!$)return;let J=Zf($),W=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let H=J?.organizations?.[0]?.id;if(typeof H==="string"&&H.length>0)return H;let Q=J?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;return}async function K6(f,$,J=$P){let W=new AbortController,H=setTimeout(()=>W.abort(),J);try{return await fetch(f,{...$,signal:W.signal})}finally{clearTimeout(H)}}function B6(f,$,J){if(J&&!f.includes($))f.push($)}function X1(f,$){let J=["streaming","tools"];return B6(J,"images",Boolean($.supportsImages)),B6(J,"prompt-cache",Boolean($.supportsPromptCache)),B6(J,"reasoning",Boolean($.supportsReasoning)),{id:f,name:$.name??f,contextWindow:$.contextWindow,maxTokens:$.maxTokens,capabilities:J,releaseDate:$.releaseDate,status:"active"}}function XP(f){let $=s.getGeneratedModelsForProvider("openai")[f.id];if($)return{...$,id:f.id,name:f.name??$.name??f.id};return X1(f.id,{name:f.name??f.id})}async function AP(f,$){let J=await K6("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${$}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let H=(await J.json())?.data??[],Q={};for(let Z of H){let j=Z.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let X=Z.supported_features??[];Q[j]=X1(j,{name:j,contextWindow:Z.context_length,maxTokens:Z.max_completion_tokens,supportsReasoning:X.includes("reasoning")||X.includes("reasoning_effort"),supportsImages:!1})}return Q}async function PP(f,$){let J=await K6("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":$}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let H=(await J.json())?.data??[],Q={};for(let Z of H){let j=Z.id?.trim();if(!j)continue;Q[j]=X1(j,{name:j,contextWindow:128000,supportsImages:!0,supportsPromptCache:!0})}return Q}function BP(f){let $=R6(f);if(!$)return"http://localhost:4000";return $.endsWith("/v1")?$.slice(0,-3):$}async function YP(f,$){let W=`${BP(f.baseUrl)}/v1/model/info`,H=async(A)=>K6(W,{method:"GET",headers:{accept:"application/json",...A}}),Q=await H({"x-litellm-api-key":$});if(!Q.ok)Q=await H({Authorization:`Bearer ${$}`});if(!Q.ok)throw Error(`LiteLLM model refresh failed: HTTP ${Q.status}`);let j=(await Q.json())?.data??[],X={};for(let A of j){let P=A.model_name?.trim(),Y=A.litellm_params?.model?.trim()||P;if(!Y)continue;let V=A.model_info,R=X1(Y,{name:P??Y,maxTokens:V?.max_output_tokens??V?.max_tokens,contextWindow:V?.max_input_tokens??V?.max_tokens,supportsImages:V?.supports_vision,supportsPromptCache:V?.supports_prompt_caching,supportsReasoning:V?.supports_reasoning});if(X[Y]=R,P)X[P]={...R,id:P,name:P}}return X}async function VP(f,$){let J=await s.listOpenAICodexModels({accessToken:$,accountId:f.accountId??jP($),cwd:typeof f.codex?.defaultSettings?.cwd==="string"?f.codex.defaultSettings.cwd:void 0,codexPath:typeof f.codex?.defaultSettings?.codexPath==="string"?f.codex.defaultSettings.codexPath:void 0,env:f.codex?.defaultSettings?.env&&typeof f.codex.defaultSettings.env==="object"&&!Array.isArray(f.codex.defaultSettings.env)?f.codex.defaultSettings.env:void 0});return Object.fromEntries(J.map((W)=>[W.id,XP(W)]))}var EH={baseten:AP,hicap:PP,litellm:YP,"openai-codex":VP},NH=new Map,Y6=new Map;function RP(f,$){return`${f}:${R6($.baseUrl)}`}async function FP(f,$,J){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],H=N2(J.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!H)return{};let Q=$?.cacheTtlMs??CH,Z=RP(f,J),j=Date.now(),X=NH.get(Z);if(X&&X.expiresAt>j)return X.data;let A=Y6.get(Z);if(A)return A;let P=z2(H,f).then((B)=>{let Y=Object.fromEntries(B.map((V)=>[V,X1(V,{name:V})]));return NH.set(Z,{data:Y,expiresAt:j+Q}),Y}).finally(()=>{Y6.delete(Z)});return Y6.set(Z,P),P}async function KP(f,$){let J=F6($);if(!J)return{};let W=EH[f];if(!W)return{};return W($,J)}function yP(f,$,J){if(!J)return!1;if(!EH[f])return!1;if($?.loadPrivateOnAuth===!1)return!1;return Boolean(F6(J))}async function UP(f,$,J){let W=$?.cacheTtlMs??CH,H=ZP(f,J),Q=Date.now(),Z=V6.get(H);if(Z&&Z.expiresAt>Q)return Z.data;let j=q2.get(H);if(j)return j;let X=KP(f,J).then((A)=>{return V6.set(H,{data:A,expiresAt:Q+W}),A}).finally(()=>{q2.delete(H)});return q2.set(H,X),X}async function GP(f){return s.fetchModelsDevProviderModels(f)}async function b2(f={}){let $=f.url??bH,J=f.cacheTtlMs??fP,W=Date.now(),H=w2.get($);if(H&&H.expiresAt>W)return H.data;let Q=j1.get($);if(Q)return Q;let Z=GP($).then((j)=>{return w2.set($,{data:j,expiresAt:W+J}),j}).finally(()=>{j1.delete($)});return j1.set($,Z),Z}function TP(f){if(f){w2.delete(f),j1.delete(f);return}w2.clear(),j1.clear()}function DP(){V6.clear(),q2.clear()}function _P(f){return Object.fromEntries(Object.entries(f).map(([$,J])=>[$,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:wH(J.capabilities)}]))}var y6=_P(eA());function SH(f){let $=oA(f);if(!$||!$.baseUrl)return;return{baseUrl:$.baseUrl,modelId:$.modelId,knownModels:$.knownModels,capabilities:wH($.capabilities)}}async function U6(f,$,J){let W=SH(f);if(!W)return;try{let H=$?.loadLatestOnInit?await b2($):void 0,Q=H?HP(f,H):{},Z=J&&yP(f,$,J)?await UP(f,$,J):{},X=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[f]?.provider.modelsSourceUrl)?J??{providerId:f,modelId:W.modelId,baseUrl:W.baseUrl}:J,A=X?await FP(f,$,X).catch(()=>({})):{},P=await WP(f,W.knownModels,Q,Z,A,J?.knownModels);return{...W,knownModels:P}}catch(H){if($?.failOnError)throw H;return W}}var G6=hf.BUILT_IN_PROVIDER,MP=hf.BUILT_IN_PROVIDER_IDS,LP=hf.isBuiltInProviderId,C2=hf.normalizeProviderId,T6=h.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),kH=h.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),IH=h.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),mH=h.object({apiKey:h.string().optional(),accessToken:h.string().optional(),refreshToken:h.string().optional(),expiresAt:h.number().int().positive().optional(),accountId:h.string().optional()}),hP=h.enum(["none","low","medium","high","xhigh"]),xH=h.object({enabled:h.boolean().optional(),effort:hP.optional(),budgetTokens:h.number().int().positive().optional()}),gH=h.object({accessKey:h.string().optional(),secretKey:h.string().optional(),sessionToken:h.string().optional(),region:h.string().optional(),profile:h.string().optional(),authentication:h.enum(["iam","api-key","profile"]).optional(),usePromptCache:h.boolean().optional(),useCrossRegionInference:h.boolean().optional(),useGlobalInference:h.boolean().optional(),endpoint:h.string().url().optional(),customModelBaseId:h.string().optional()}),vH=h.object({projectId:h.string().optional(),region:h.string().optional()}),uH=h.object({apiVersion:h.string().optional(),useIdentity:h.boolean().optional()}),cH=h.object({clientId:h.string().optional(),clientSecret:h.string().optional(),tokenUrl:h.string().url().optional(),resourceGroup:h.string().optional(),deploymentId:h.string().optional(),useOrchestrationMode:h.boolean().optional(),api:h.enum(["orchestration","foundation-models"]).optional(),defaultSettings:h.record(h.string(),h.unknown()).optional()}),dH=h.object({mode:h.enum(["internal","external"]).optional(),usePromptCache:h.boolean().optional()}),rH=h.object({loadLatestOnInit:h.boolean().optional(),loadPrivateOnAuth:h.boolean().optional(),url:h.string().url().optional(),cacheTtlMs:h.number().int().positive().optional(),failOnError:h.boolean().optional()}),q$=h.object({provider:T6,apiKey:h.string().optional(),auth:mH.optional(),model:h.string().optional(),protocol:kH.optional(),client:IH.optional(),routingProviderId:T6.optional(),maxTokens:h.number().int().positive().optional(),contextWindow:h.number().int().positive().optional(),baseUrl:h.string().url().optional(),headers:h.record(h.string(),h.string()).optional(),timeout:h.number().int().positive().optional(),reasoning:xH.optional(),aws:gH.optional(),gcp:vH.optional(),azure:uH.optional(),sap:cH.optional(),oca:dH.optional(),region:h.string().optional(),apiLine:h.enum(["china","international"]).optional(),capabilities:h.array(h.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth"])).optional(),modelCatalog:rH.optional()});function lH(f){return q$.parse(f)}function pH(f){return q$.safeParse(f)}function OP(f){return f.protocol==="openai-responses"||f.client==="openai"}function f0(f,$={}){let J=f.provider,W=C2(J),H=$.includeKnownModels!==!1,Q=f.reasoning?.effort||"none",Z=Q==="none"?void 0:Q,j=y6[W],X=Object.assign({},...hf.resolveProviderModelCatalogKeys(W).map((U)=>hf.getGeneratedModelsForProvider(U))),A=Object.keys(X)[0],P=f.auth?.accessToken??f.apiKey??f.auth?.apiKey,B=f.baseUrl??(W==="oca"?f.oca?.mode==="internal"?Z6:j6:j?.baseUrl),Y=f.routingProviderId??(OP(f)&&W!==G6.OPENAI_NATIVE?G6.OPENAI_NATIVE:void 0),V=H?j?.knownModels??(Object.keys(X).length>0?X:void 0):void 0,R={providerId:J,clientType:f.client,routingProviderId:Y,modelId:f.model??j?.modelId??A??"default",...H?{knownModels:V}:{},apiKey:P,accessToken:f.auth?.accessToken,refreshToken:f.auth?.refreshToken,accountId:f.auth?.accountId,baseUrl:B,headers:f.headers,timeoutMs:f.timeout,maxOutputTokens:f.maxTokens,maxContextTokens:f.contextWindow,thinking:f.reasoning?.enabled,reasoningEffort:Z,thinkingBudgetTokens:f.reasoning?.budgetTokens,region:f.region??f.aws?.region??f.gcp?.region,apiLine:f.apiLine,useCrossRegionInference:f.aws?.useCrossRegionInference,useGlobalInference:f.aws?.useGlobalInference,aws:f.aws?{accessKey:f.aws.accessKey,secretKey:f.aws.secretKey,sessionToken:f.aws.sessionToken,authentication:f.aws.authentication,profile:f.aws.profile,usePromptCache:f.aws.usePromptCache,endpoint:f.aws.endpoint,customModelBaseId:f.aws.customModelBaseId}:void 0,gcp:f.gcp?{projectId:f.gcp.projectId,region:f.gcp.region}:void 0,azure:f.azure,sap:f.sap,oca:f.oca,capabilities:f.capabilities??j?.capabilities,modelCatalog:f.modelCatalog?{loadLatestOnInit:f.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:f.modelCatalog.loadPrivateOnAuth,url:f.modelCatalog.url,cacheTtlMs:f.modelCatalog.cacheTtlMs,failOnError:f.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(R).filter(([U,K])=>K!==void 0))}function zP(f){let $=lH(f);return f0($)}function NP(f){let $=pH(f);if($.success)return{success:!0,config:f0($.data)};return{success:!1,error:$.error}}import{SESSION_STATUS_VALUES as qP}from"@cline/shared";var D6=qP,Rf={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"};function iH(f){if(f===!0)return{};if(!f)return;return f}function nH(f){if(f==="user")return"global";return f}class _6{getService;constructor(f){this.getService=f}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent(f){let $=this.getService().ingestEvent(f);return{event:$.event,duplicate:$.duplicate,matchedSpecIds:$.matchedSpecs.map((J)=>J.specId),queuedRuns:$.queuedRuns,suppressions:$.suppressions}}listEvents(f){return this.getService().listEventLogs(f)}getEvent(f){return this.getService().getEventLog(f)}listSpecs(f){return this.getService().listSpecs(f)}listRuns(f){return this.getService().listRuns(f)}}function aH(f){let{host:$}=f;return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),H=await $.startSession({source:J.source?.trim()||Rf.CLI,interactive:!1,config:{providerId:C2(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:CP(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:{extensionContext:f.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:H.sessionId,startResult:{sessionId:H.sessionId,manifestPath:H.manifestPath,messagesPath:H.messagesPath}}},async sendSession(J,W){let H=await $.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((Q)=>Q.content),delivery:W.delivery});if(!H)throw Error("ClineCore automation runtime returned no result");return{result:bP(H)}},async abortSession(J){return await $.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await $.stopSession(J),{applied:!0}}}}function E2(f){let $=wP(f.automationService,f.automation),J=f.context?.client??(f.clientName?{name:f.clientName}:void 0),W=f.context?.user??(f.distinctId?{distinctId:f.distinctId}:void 0),H=f.context?.logger??f.logger,Q=f.context?.telemetry??f.telemetry;if(!$&&!J&&!W&&!H&&!Q)return f.context;return{...f.context??{},...J?{client:J}:{},...W?{user:W}:{},...H?{logger:H}:{},...Q?{telemetry:Q}:{},...$?{automation:$}:{}}}function wP(f,$){if(!f)return;return{ingestEvent:(J)=>{$.ingestEvent(J)}}}function bP(f){return{text:f.text,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost},inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,iterations:f.iterations,finishReason:f.finishReason,toolCalls:f.toolCalls.map(($)=>({name:$.name,input:$.input,output:$.output,error:$.error,durationMs:$.durationMs}))}}function CP(f){return f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"}import{existsSync as LJ}from"node:fs";import{basename as PQ,isAbsolute as VR,relative as RR}from"node:path";import{createHash as EP}from"node:crypto";import{watch as SP}from"node:fs";import{readdir as kP,readFile as IP}from"node:fs/promises";import{join as mP}from"node:path";function xP(f){return EP("sha1").update(f).digest("hex")}function oH(f){return Boolean(f&&typeof f==="object"&&"code"in f)}function tH(f){return oH(f)&&f.code==="ENOENT"}function sH(f){return oH(f)&&(f.code==="EACCES"||f.code==="EPERM")}class A1{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(f,$){if(f.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=f,this.debounceMs=$?.debounceMs??75,this.emitParseErrors=$?.emitParseErrors??!1;for(let J of f){if(this.definitionsByType.has(J.type))throw Error(`Duplicate unified config definition type '${J.type}'.`);this.definitionsByType.set(J.type,J),this.recordsByType.set(J.type,new Map),this.discoveredDirectoriesByType.set(J.type,new Set);for(let W of J.directories){let H=this.baseTypesByDirectory.get(W);if(H)H.add(J.type);else this.baseTypesByDirectory.set(W,new Set([J.type]))}}}subscribe(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}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 f of this.watchersByDirectory.values())f.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let f of this.definitions)await this.refreshTypeInternal(f)})}async refreshType(f){let $=this.definitionsByType.get(f);if(!$)throw Error(`Unknown unified config type '${f}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal($)})}getSnapshot(f){let $=this.recordsByType.get(f);return new Map([...$?.entries()??[]].map(([J,W])=>[J,{...W}]))}getAllSnapshots(){let f=new Map;for(let[$,J]of this.recordsByType.entries())f.set($,new Map([...J.entries()].map(([W,H])=>[W,{...H}])));return f}emit(f){for(let $ of this.listeners)$(f)}enqueueRefresh(f){return this.refreshQueue=this.refreshQueue.then(f,f),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let f=this.buildDesiredTypesByDirectory();for(let[$,J]of this.watchersByDirectory.entries()){if(f.has($))continue;J.close(),this.watchersByDirectory.delete($)}this.watchedTypesByDirectory=f;for(let $ of f.keys()){if(this.watchersByDirectory.has($))continue;try{let J=SP($,()=>{let W=this.watchedTypesByDirectory.get($);if(!W)return;for(let H of W)this.pendingTypes.add(H);this.scheduleFlush()});this.watchersByDirectory.set($,J),J.on("error",(W)=>{let H=this.watchedTypesByDirectory.get($);if(!H)return;for(let Q of H)this.emit({kind:"error",type:Q,error:W,filePath:$})})}catch(J){if(!tH(J)&&!sH(J)){let W=f.get($);if(!W)continue;for(let H of W)this.emit({kind:"error",type:H,error:J,filePath:$})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let f=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let $ of f){let J=this.definitionsByType.get($);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal(f){let{records:$,discoveredDirectories:J}=await this.loadDefinition(f),W=this.recordsByType.get(f.type)??new Map;for(let[H,Q]of W.entries()){if($.has(H))continue;this.emit({kind:"remove",type:f.type,id:H,filePath:Q.filePath})}for(let[H,Q]of $.entries()){let Z=W.get(H);if(Z&&Z.filePath===Q.filePath&&Z.fingerprint===Q.fingerprint)continue;this.emit({kind:"upsert",record:{type:Q.type,id:H,item:Q.item,filePath:Q.filePath}})}if(this.recordsByType.set(f.type,$),this.discoveredDirectoriesByType.set(f.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition(f){let $=new Map,J=new Set;for(let W of f.directories){J.add(W);let H=f.discoverFiles?await f.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let Q of H){let{fileName:Z,filePath:j}=Q;if(J.add(Q.directoryPath),f.includeFile&&!f.includeFile(Z,j))continue;try{let X=await IP(j,"utf8"),A={type:f.type,directoryPath:Q.directoryPath,fileName:Z,filePath:j,content:X},P=f.parseFile(A),B=f.resolveId(P,A).trim();if(!B)continue;$.set(B,{type:f.type,id:B,item:P,filePath:j,fingerprint:xP(X)})}catch(X){if(this.emitParseErrors)this.emit({kind:"error",type:f.type,error:X,filePath:j})}}}return{records:$,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let f=new Map;for(let[$,J]of this.baseTypesByDirectory.entries())f.set($,new Set(J));for(let[$,J]of this.discoveredDirectoriesByType.entries())for(let W of J){let H=f.get(W);if(H)H.add($);else f.set(W,new Set([$]))}return f}async readDirectoryFileCandidates(f){try{return(await kP(f,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:f,fileName:J.name,filePath:mP(f,J.name)})).sort((J,W)=>J.fileName.localeCompare(W.fileName))}catch($){if(tH($)||sH($))return[];throw $}}}import{readdir as M6,readFile as gP,stat as eH}from"node:fs/promises";import{basename as i0,dirname as vP,extname as L6,join as Gf}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as f9,resolveRulesConfigSearchPaths as uP,resolveSkillsConfigSearchPaths as cP,resolveWorkflowsConfigSearchPaths as dP,SKILLS_CONFIG_DIRECTORY_NAME as h6,WORKFLOWS_CONFIG_DIRECTORY_NAME as O6}from"@cline/shared/storage";import rP from"yaml";var S2="SKILL.md",lP="managed.json",pP=new Set([".md",".markdown",".txt"]);function z6(f){return f.trim().toLowerCase()}function P1(f){let $=f;return $?.code==="ENOENT"||$?.code==="EACCES"||$?.code==="EPERM"}function k2(f){return pP.has(L6(f).toLowerCase())}async function N6(f){try{let $=await M6(f,{withFileTypes:!0}),J=[];for(let W of $){if(!W.isDirectory())continue;let H=Gf(f,W.name),Q=Gf(H,lP);try{let Z=await gP(Q,"utf8"),j=JSON.parse(Z);if(j&&typeof j==="object")J.push(H)}catch(Z){if(P1(Z))continue;if(Z?.name==="SyntaxError")continue;throw Z}}return J.sort((W,H)=>W.localeCompare(H))}catch($){if(P1($))return[];throw $}}function q6(f){let $=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=f.match($);if(!J)return{data:{},body:f,hadFrontmatter:!1};let[,W,H]=J;try{let Q=rP.parse(W);return{data:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{},body:H,hadFrontmatter:!0}}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);return{data:{},body:f,hadFrontmatter:!0,parseError:Z}}}function I2(f,$,J){if(f===void 0||f===null){if(J)throw Error(`Missing required frontmatter field '${$}'.`);return}if(typeof f!=="string")throw Error(`Frontmatter field '${$}' must be a string.`);let W=f.trim();if(!W&&J)throw Error(`Frontmatter field '${$}' cannot be empty.`);return W||void 0}function w$(f,$){if(f===void 0||f===null)return;if(typeof f!=="boolean")throw Error(`Frontmatter field '${$}' must be a boolean.`);return f}function w6(f,$){let{data:J,body:W,parseError:H}=q6(f);if(H)throw Error(`Failed to parse YAML frontmatter: ${H}`);let Q=W.trim();if(!Q)throw Error("Missing instructions body in skill file.");let j=I2(J.name,"name",!1)??$.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:I2(J.description,"description",!1),disabled:w$(J.disabled,"disabled")??(w$(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function b6(f,$){let{data:J,body:W,parseError:H}=q6(f);if(H)throw Error(`Failed to parse YAML frontmatter: ${H}`);let Q=W.trim();if(!Q)throw Error("Missing instructions body in rule file.");let Z=I2(J.name,"name",!1)??$.trim();if(!Z)throw Error("Missing rule name.");return{name:Z,disabled:w$(J.disabled,"disabled")??(w$(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function C6(f,$){let{data:J,body:W,parseError:H}=q6(f);if(H)throw Error(`Failed to parse YAML frontmatter: ${H}`);let Q=W.trim();if(!Q)throw Error("Missing instructions body in workflow file.");let Z=I2(J.name,"name",!1)??$.trim();if(!Z)throw Error("Missing workflow name.");return{name:Z,disabled:w$(J.disabled,"disabled")??(w$(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function E6(f){return cP(f)}function S6(f){return uP(f)}function k6(f){return dP(f)}async function $9(f){if(i0(f)===".cline"){let $=await N6(f);return(await Promise.all($.map((W)=>$9(Gf(W,h6))))).flat()}try{let $=await M6(f,{withFileTypes:!0}),J=[];for(let W of $){if(W.isFile()&&W.name===S2){J.push({directoryPath:f,fileName:W.name,filePath:Gf(f,W.name)});continue}if(W.isDirectory())J.push({directoryPath:Gf(f,W.name),fileName:S2,filePath:Gf(f,W.name,S2)})}return J}catch($){if(P1($))return[];throw $}}async function m2(f){if(i0(f)===".cline"){let $=await N6(f);return(await Promise.all($.map((W)=>m2(Gf(W,"rules.md"))))).flat()}try{if((await eH(f)).isFile())return[{directoryPath:vP(f),fileName:i0(f),filePath:f}]}catch($){if(!P1($))throw $}try{let J=(await M6(f,{withFileTypes:!0})).filter((H)=>H.isFile()&&k2(H.name)).map((H)=>({directoryPath:f,fileName:H.name,filePath:Gf(f,H.name)})),W=Gf(f,"AGENTS.md");try{if((await eH(W)).isFile()){if(!J.some((Z)=>Z.fileName==="AGENTS.md"))J.push({directoryPath:f,fileName:"AGENTS.md",filePath:W})}}catch{}return J}catch($){if(P1($))return[];throw $}}async function iP(f){if(i0(f)===".cline"){let $=await N6(f);return(await Promise.all($.map((W)=>m2(Gf(W,O6))))).flat()}return m2(f)}function I6(f){let $=f?.directories??E6(f?.workspacePath),J=f?.workspacePath?Gf(f.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...$,J]:$,discoverFiles:$9,includeFile:(W)=>W===S2,parseFile:(W)=>w6(W.content,i0(W.directoryPath)),resolveId:(W)=>z6(W.name)}}function m6(f){let $=f?.directories??S6(f?.workspacePath),J=f?.workspacePath?Gf(f.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...$,J]:$,discoverFiles:m2,includeFile:(W,H)=>W===".clinerules"||k2(W)||k2(H),parseFile:(W)=>b6(W.content,i0(W.filePath,L6(W.filePath))),resolveId:(W)=>z6(W.name)}}function x6(f){let $=f?.directories??k6(f?.workspacePath),J=f?.workspacePath?Gf(f.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...$,J]:$,discoverFiles:iP,includeFile:(W)=>k2(W),parseFile:(W)=>C6(W.content,i0(W.filePath,L6(W.filePath))),resolveId:(W)=>z6(W.name)}}function J9(f){let $=[I6(f?.skills),m6(f?.rules),x6(f?.workflows)];return new A1($,{debounceMs:f?.debounceMs,emitParseErrors:f?.emitParseErrors})}import{truncateSplit as W9}from"@cline/shared";function nP(f,$){if(f.description?.trim())return W9(f.description,".");if($==="workflow")return;return W9(f.instructions,".")}function aP(f){return f.disabled!==!0}function H9(f,$){return[...f.getSnapshot($).entries()].map(([J,W])=>({id:J,record:W})).filter(({record:J})=>aP(J.item)).map(({id:J,record:W})=>({id:J,name:W.item.name,instructions:W.item.instructions,description:nP(W.item,$),kind:$})).sort((J,W)=>J.name.localeCompare(W.name))}function B1(f){let $=new Map;for(let J of[...H9(f,"workflow"),...H9(f,"skill")])if(!$.has(J.name))$.set(J.name,J);return[...$.values()].sort((J,W)=>J.name.localeCompare(W.name))}function Q9(f,$){if(!f.startsWith("/")||f.length<2)return f;let J=f.match(/^\/(\S+)/);if(!J)return f;let W=J[1];if(!W)return f;let H=W.length+1,Q=f.slice(H),Z=B1($).find((j)=>j.name===W);return Z?`${Z.instructions}${Q}`:f}function Z9(f){return f.disabled!==!0}function x2(f){if(f.length===0)return"";return`
|
|
46
|
+
</html>`;function M7($){let f="";for(let J=0;J<$.length;J+=1)f+=String.fromCharCode($[J]??0);return btoa(f).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function vY($){let J=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(Q)}function cY($=32){let f=new Uint8Array($);return crypto.getRandomValues(f),M7(f)}async function C2(){let $=cY(),f=M7(await vY($));return{verifier:$,challenge:f}}function h2($){return $.endsWith("/")?$.slice(0,-1):$}function n$($,f){return new URL(f,`${h2($)}/`).toString()}function q1($,f={}){let J=$.trim();if(!J)return{};try{let Q=new URL(J);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:f.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(f.allowHashCodeState&&J.includes("#")){let[Q,Z]=J.split("#",2);return{code:Q||void 0,state:Z||void 0}}if(J.includes("code=")){let Q=new URLSearchParams(J);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:f.includeProvider?Q.get("provider")??void 0:void 0}}return{code:J}}function uY($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function j0($){if(!$)return null;try{let f=$.split(".");if(f.length!==3)return null;let J=f[1];if(!J)return null;let Q=J.replace(/-/g,"+").replace(/_/g,"/"),Z=Q.padEnd(Q.length+(4-Q.length%4)%4,"="),W=uY(Z);if(!W)return null;return JSON.parse(W)}catch{return null}}function w1($){try{let f=JSON.parse($),J=f.error,Q=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,Z=typeof f.error_description==="string"?f.error_description:typeof f.message==="string"?f.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:Q,message:Z}}catch{return{}}}function a$($,f){return Date.now()>=$.expires-f}async function S1($){if(!$.onManualCodeInput){let W=await $.waitForCallback();return{code:W?.code,state:W?.state,provider:W?.provider,error:W?.error}}let f,J,Q=$.onManualCodeInput().then((W)=>{f=W,$.cancelWait()}).catch((W)=>{J=W instanceof Error?W:Error(String(W)),$.cancelWait()}),Z=await $.waitForCallback();if(J)throw J;if(Z?.code||Z?.error)return{code:Z.code,state:Z.state,provider:Z.provider,error:Z.error};if(f)return q1(f,$.parseOptions);if(await Q,J)throw J;if(f)return q1(f,$.parseOptions);return{}}var E2={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},C7={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},P6="https://api.workos.com",dY="/auth",q7=Array.from({length:11},($,f)=>48801+f),lY=300000,pY=30000,C1=30000,rY=300,iY=5;class R$ extends Error{status;errorCode;constructor($,f){super($);this.name="ClineOAuthTokenError",this.status=f?.status,this.errorCode=f?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function nY($){let f=Date.parse($);if(Number.isNaN(f))throw Error(`Invalid expiresAt value: ${$}`);return f}function F6($,f,J={}){let Q=$.userInfo.clineUserId??J.accountId,Z=$.refreshToken??J.refresh;if(!Z)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:Z,expires:nY($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||J.email,metadata:{provider:f,tokenType:$.tokenType,userInfo:$.userInfo}}}async function D6($){if(!$)return{};return typeof $==="function"?await $():$}function w7($,f){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return f;return Math.floor($)}async function S7($){await new Promise((f)=>setTimeout(f,$))}function R6($,f){if(!$.success||!$.data?.accessToken)throw Error(f);return $.data}async function h7($,f){let J=await fetch(n$(P6,C7.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(f?.requestTimeoutMs??C1)}),Q=await J.json().catch(()=>({}));if(!J.ok)throw new R$(`Device authorization failed: ${J.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:J.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:w7(Q.expires_in,rY),pollIntervalSeconds:w7(Q.interval,iY)}}async function E7($){let f=Date.now()+$.expiresInSeconds*1000,J=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=f){let Q=await fetch(n$($.workosApiBaseUrl,C7.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)}),Z=await Q.json().catch(()=>({}));if(Q.ok){if(!Z.access_token||!Z.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:Z.access_token,refreshToken:Z.refresh_token,tokenType:Z.token_type??"Bearer"}}switch(Z.error){case"authorization_pending":{await S7(J*1000);break}case"slow_down":{J+=1,await S7(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new R$(Z.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:Z.error});default:throw new R$(`WorkOS token polling failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function b7($,f,J){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},Z=await fetch(n$(f.apiBaseUrl,E2.register),{method:"POST",headers:{"Content-Type":"application/json",...await D6(f.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(f.requestTimeoutMs??C1)});if(!Z.ok){let j=await Z.text().catch(()=>""),X=w1(j);throw new R$(`Token registration failed: ${Z.status}${X.message?` - ${X.message}`:""}`,{status:Z.status,errorCode:X.code})}let W=await Z.json();return F6(R6(W,"Invalid token exchange response"),J??f.provider)}async function aY($,f,J,Q){let Z={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:f,provider:Q??J.provider},W=await fetch(n$(J.apiBaseUrl,E2.token),{method:"POST",headers:{"Content-Type":"application/json",...await D6(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??C1)});if(!W.ok){let X=await W.text().catch(()=>""),H=w1(X);throw new R$(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let j=await W.json();return F6(R6(j,"Invalid token exchange response"),Q??J.provider)}async function b2($){G$($.telemetry,$.provider??"cline");let f=$.useWorkOSDeviceAuth??!0,J=$.callbackPorts?.length?$.callbackPorts:q7,Q=$.callbackPath??dY,Z=f?null:await $$({ports:J,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),W=Z?.callbackUrl||`http://127.0.0.1:${J[0]??q7[0]}${Q}`;try{let j;if(f){let X=G6().workOsClientId,H=await h7(X,$);$.callbacks.onAuth({url:H.verificationUriComplete??H.verificationUri,instructions:`Enter this code in your browser: ${H.userCode}`});let Y=await E7({clientId:X,deviceCode:H.deviceCode,expiresInSeconds:H.expiresInSeconds,initialPollIntervalSeconds:H.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??C1,workosApiBaseUrl:P6,onProgress:$.callbacks.onProgress});j=await b7(Y,$,$.provider)}else{let X=new URL(n$($.apiBaseUrl,E2.authorize));X.searchParams.set("client_type","extension"),X.searchParams.set("callback_url",W),X.searchParams.set("redirect_uri",W),$.callbacks.onAuth({url:X.toString(),instructions:"Continue the authentication process in your browser."});let H,Y=$.provider,V=await S1({waitForCallback:Z?.waitForCallback??(async()=>null),cancelWait:Z?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(V.error)throw Error(`OAuth error: ${V.error}`);if(H=V.code,Y=V.provider??Y,!H){let A=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=q1(A,{includeProvider:!0});H=B.code,Y=B.provider??Y}if(!H)throw Error("Missing authorization code");j=await aY(H,W,$,Y)}return P$($.telemetry,$.provider??"cline"),D$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw F$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j)),j}finally{Z?.close()}}async function tY($){return await h7(G6().workOsClientId,$)}async function sY($){let f=$.provider??"cline";G$($.telemetry,f);try{let J=await E7({clientId:G6().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??C1,workosApiBaseUrl:P6}),Q=await b7(J,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return P$($.telemetry,f),D$($.telemetry,{id:Q.accountId,email:Q.email,provider:f}),Q}catch(J){throw F$($.telemetry,f,J instanceof Error?J.message:String(J)),J}}async function U6($,f){let J=await fetch(n$(f.apiBaseUrl,E2.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await D6(f.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(f.requestTimeoutMs??C1)});if(!J.ok){let W=await J.text().catch(()=>""),j=w1(W);throw new R$(`Token refresh failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let Q=await J.json(),Z=$.metadata?.provider??f.provider;return F6(R6(Q,"Invalid token refresh response"),Z,$)}async function L6($,f,J){if(!$)return null;let Q=J?.refreshBufferMs??lY,Z=J?.retryableTokenGraceMs??pY;if(J?.forceRefresh!==!0&&!a$($,Q))return $;try{return await U6($,f)}catch(j){if(j instanceof R$&&j.isLikelyInvalidGrant())return r$(f.telemetry,f.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function oY($){return{id:"cline",name:"Cline Account",usesCallbackServer:!($.useWorkOSDeviceAuth??!0),async login(f){return b2({...$,callbacks:f})},async refreshToken(f){return U6(f,$)},getApiKey(f){return`workos:${f.access}`}}}R0();import{nanoid as eY}from"nanoid";var t={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 k2 extends Error{status;errorCode;constructor($,f){super($);this.name="OpenAICodexOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 $V($,f,J=t.redirectUri){let Q=await fetch(t.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:t.clientId,code:$,code_verifier:f,redirect_uri:J}),signal:AbortSignal.timeout(t.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let Z=await Q.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}async function fV($){try{let f=await fetch(t.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:t.clientId}),signal:AbortSignal.timeout(t.httpTimeoutMs)});if(!f.ok){let Q=await f.text().catch(()=>""),Z=w1(Q);throw new k2(`Token refresh failed: ${f.status}${Z.message?` - ${Z.message}`:""}`,{status:f.status,errorCode:Z.code})}let J=await f.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}catch(f){if(f instanceof k2)throw f;return{type:"failed"}}}async function JV($="pi"){let{verifier:f,challenge:J}=await C2(),Q=eY(32),Z=new URL(t.authorizationEndpoint);return Z.searchParams.set("response_type","code"),Z.searchParams.set("client_id",t.clientId),Z.searchParams.set("redirect_uri",t.redirectUri),Z.searchParams.set("scope",t.scopes),Z.searchParams.set("code_challenge",J),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("state",Q),Z.searchParams.set("id_token_add_organizations","true"),Z.searchParams.set("codex_cli_simplified_flow","true"),Z.searchParams.set("originator",$),{verifier:f,state:Q,url:Z.toString()}}function QV(){try{let $=new URL(t.redirectUri),f=$.port.length>0?Number.parseInt($.port,10):t.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(f)?f:t.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:t.callbackPort,callbackPath:"/auth/callback",redirectUri:t.redirectUri}}}function k7($,f){let J=f?j0(f):j0($),Q=J?J:j0($),W=Q?.[t.jwtClaimPath]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.organizations;if(Array.isArray(j)&&j.length>0){let H=j[0];if(typeof H?.id==="string"&&H.id.length>0)return H.id}let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return null}function I7($,f){let J=k7($.access,$.idToken)??f?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||f?.refresh||"",expires:$.expires,accountId:J,email:$.email??f?.email,metadata:{...f?.metadata??{},provider:"openai-codex"}}}async function I2($){G$($.telemetry,"openai-codex");let f=QV(),{verifier:J,state:Q,url:Z}=await JV($.originator),W=await $$({host:f.host,ports:[f.port],callbackPath:f.callbackPath,expectedState:Q});$.onAuth({url:Z,instructions:"Continue the authentication process in your browser."});let j;try{let X=await S1({waitForCallback:W.waitForCallback,cancelWait:W.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(X.state&&X.state!==Q)throw Error("State mismatch");if(j=X.code,!j){let V=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=q1(V,{allowHashCodeState:!0});if(A.state&&A.state!==Q)throw Error("State mismatch");j=A.code}if(!j)throw Error("Missing authorization code");let H=await $V(j,J,f.redirectUri);if(H.type!=="success")throw Error("Token exchange failed");let Y=I7(H);return P$($.telemetry,"openai-codex"),D$($.telemetry,{id:Y.accountId,email:Y.email,provider:"openai-codex"}),Y}catch(X){throw F$($.telemetry,"openai-codex",X instanceof Error?X.message:String(X)),X}finally{W.close()}}async function O6($,f){let J=await fV($);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=I7(J,f);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function z6($,f){if(!$)return null;let J=f?.refreshBufferMs??t.refreshBufferMs,Q=f?.retryableTokenGraceMs??t.retryableTokenGraceMs;if(f?.forceRefresh!==!0&&!a$($,J))return $;try{return await O6($.refresh,$)}catch(W){if(W instanceof k2&&W.isLikelyInvalidGrant())return r$(f?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}function ZV($,f=t.refreshBufferMs){return a$($,f)}function WV($){let f=$.accountId??k7($.access);if(!f)throw Error("Failed to extract accountId from token");return{...$,accountId:f,metadata:{...$.metadata??{},provider:"openai-codex"}}}var jV={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login($){return I2({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput})},async refreshToken($){return O6($.refresh,$)},getApiKey($){return $.access}};R0();import{nanoid as x7}from"nanoid";class _6{ttlMs;maxEntries;entries=new Map;constructor($,f){this.ttlMs=$;this.maxEntries=f}get($,f=Date.now()){this.pruneExpired(f);let J=this.entries.get($);if(!J)return;return this.entries.delete($),this.entries.set($,J),J.value}set($,f,J=Date.now(),Q=this.ttlMs){this.pruneExpired(J),this.entries.delete($);while(this.entries.size>=this.maxEntries){let Z=this.entries.keys().next().value;if(Z===void 0)break;this.entries.delete(Z)}this.entries.set($,{value:f,expiresAt:J+Q})}pruneExpired($){for(let[f,J]of this.entries)if(J.expiresAt<=$)this.entries.delete(f)}}var XV="a8331954c0cf48ba99b5dd223a14c6ea",HV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",YV="openid offline_access",T6="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",VV="c1aba3deed5740659981a752714eba33",AV="https://login-ext.identity.oraclecloud.com",BV="openid offline_access",N6="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",KV="opc-request-id",GV="/auth/oca",PV=Array.from({length:11},($,f)=>48801+f),FV=300000,DV=30000,g7=30000,RV=600000;class x2 extends Error{status;errorCode;constructor($,f){super($);this.name="OcaOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 U$={internal:{clientId:XV,idcsUrl:HV,scopes:YV,baseUrl:T6},external:{clientId:VV,idcsUrl:AV,scopes:BV,baseUrl:N6}},Yf=new Map,UV=86400000,LV=300000,OV=32,y6=new _6(UV,OV);function m7($){if(typeof $==="function")return $();return $??"internal"}function v7($){return{internal:{clientId:$?.internal?.clientId??U$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??U$.internal.idcsUrl,scopes:$?.internal?.scopes??U$.internal.scopes,baseUrl:$?.internal?.baseUrl??U$.internal.baseUrl},external:{clientId:$?.external?.clientId??U$.external.clientId,idcsUrl:$?.external?.idcsUrl??U$.external.idcsUrl,scopes:$?.external?.scopes??U$.external.scopes,baseUrl:$?.external?.baseUrl??U$.external.baseUrl}}}function zV($=Date.now()){let f=$-RV;for(let[J,Q]of Yf.entries())if(Q.createdAt<f)Yf.delete(J)}function _V($,f,J){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let Z=j0(f)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;let j=j0(J)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function c7($,f,J){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let Z=$.refresh_token??J?.refresh;if(!Z)throw Error("Token response did not include a refresh token");let W=j0($.id_token),j=j0(Q),X=W?.sub??j?.sub,H=W?.email??j?.email;return{access:Q,refresh:Z,expires:_V($,Q,$.id_token),accountId:X??J?.accountId,email:H??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:f,subject:X,idToken:$.id_token}}}async function u7($,f){let J=h2($),Q=y6.get(J);if(Q)return Q;let Z=`${J}/.well-known/openid-configuration`,W=await fetch(Z,{method:"GET",signal:AbortSignal.timeout(f)});if(!W.ok){let H=`${J}/oauth2/v1/token`;return y6.set(J,H,Date.now(),LV),H}let X=(await W.json()).token_endpoint||`${J}/oauth2/v1/token`;return y6.set(J,X),X}function d7($){return{code:$.error,message:$.error_description}}async function yV($){let f=Yf.get($.state);if(!f)throw Error("No PKCE verifier found for this state");Yf.delete($.state);let J=$.mode==="external"?$.config.external:$.config.internal,Q=await u7(J.idcsUrl,$.requestTimeoutMs),Z=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:f.redirectUri,client_id:J.clientId,code_verifier:f.verifier}),W=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Z,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await W.json();if(!W.ok){let H=d7(j);throw new x2(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let X=j0(j.id_token);if(!j.id_token||!X)throw Error("No ID token received from OCA");if(X.nonce!==f.nonce)throw Error("OIDC nonce verification failed");return c7(j,$.mode)}function TV($){let f=$.mode==="external"?$.config.external:$.config.internal,J=new URL(`${h2(f.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",f.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",f.scopes),J.searchParams.set("code_challenge",$.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",$.callbackUrl),J.searchParams.set("state",$.state),J.searchParams.set("nonce",$.nonce),J.toString()}async function g2($){G$($.telemetry,"oca");let f=v7($.config),J=m7($.mode),Q=$.callbackPorts?.length?$.callbackPorts:PV,Z=$.callbackPath??GV,W=$.requestTimeoutMs??g7,j=await $$({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=j.callbackUrl;if(!X)throw Error("Unable to bind local OAuth callback server");let H=x7(16),Y=x7(16),{verifier:V,challenge:A}=await C2();zV(),Yf.set(H,{verifier:V,nonce:Y,mode:J,redirectUri:X,createdAt:Date.now()});let B=TV({callbackUrl:X,mode:J,state:H,nonce:Y,challenge:A,config:f});$.callbacks.onAuth({url:B,instructions:"Continue the authentication process in your browser."});try{let K=await S1({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),G=K.code,R=K.state;if(K.error)throw Error(`OAuth error: ${K.error}`);if(!G){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!R||R!==H)throw Error("State mismatch");let F=await yV({code:G,state:R,mode:J,config:f,requestTimeoutMs:W});return P$($.telemetry,"oca"),D$($.telemetry,{id:F.accountId,email:F.email,provider:"oca"}),F}catch(K){throw F$($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{j.close()}}async function M6($,f={}){let J=v7(f.config),Q=f.requestTimeoutMs??g7,Z=$.metadata?.mode,W=Z==="internal"||Z==="external"?Z:m7(f.mode),j=W==="external"?J.external:J.internal,X=await u7(j.idcsUrl,Q),H=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),Y=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(Q)}),V=await Y.json();if(!Y.ok){let A=d7(V);throw new x2(`Token refresh failed: ${Y.status}${A.message?` - ${A.message}`:""}`,{status:Y.status,errorCode:A.code})}return c7(V,W,$)}async function q6($,f,J){if(!$)return null;let Q=f?.refreshBufferMs??J?.refreshBufferMs??FV,Z=f?.retryableTokenGraceMs??J?.retryableTokenGraceMs??DV;if(f?.forceRefresh!==!0&&!a$($,Q))return $;try{return await M6($,J)}catch(j){if(j instanceof x2&&j.isLikelyInvalidGrant())return r$(J?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function NV($={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login(f){return g2({...$,callbacks:f})},async refreshToken(f){return M6(f,$)},getApiKey(f){return f.access}}}async function l7($,f){let J=new TextEncoder,Q=async(Y)=>{let V=await crypto.subtle.digest("SHA-256",J.encode(Y));return Array.from(new Uint8Array(V).slice(0,4),(A)=>A.toString(16).padStart(2,"0")).join("")},[Z,W]=await Promise.all([Q(f),Q($)]),j=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),X=new Uint32Array(1);crypto.getRandomValues(X);let H=(X[0]??0).toString(16).padStart(8,"0");return Z+W+j+H}async function MV($){let f=await l7($.taskId,$.accessToken);return{Authorization:`Bearer ${$.accessToken}`,"Content-Type":"application/json",client:$.metadata?.client??"Cline","client-version":$.metadata?.clientVersion??"unknown","client-ide":$.metadata?.clientIde??"unknown","client-ide-version":$.metadata?.clientIdeVersion??"unknown",[KV]:f}}import*as T0 from"@cline/llms";import{z as T}from"zod";import*as s from"@cline/llms";function w6($){if(!Array.isArray($))return[];return $.map((f)=>{if(typeof f==="string")return f.trim();if(f&&typeof f==="object"){let J=f;for(let Q of[J.id,J.name,J.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((f)=>f.length>0)}function qV($,f){let J=w6($);if(J.length>0)return J;if(!$||typeof $!=="object")return[];let Q=$,Z=w6(Q.data??Q.models);if(Z.length>0)return Z;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let j=Object.keys(Q.models).filter((X)=>X.trim().length>0);if(j.length>0)return j}let W=Q.providers?.[f];if(W&&typeof W==="object"){let X=w6(W.models??W);if(X.length>0)return X}return[]}async function m2($,f){let J=await fetch($,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${$}: HTTP ${J.status}`);return qV(await J.json(),f)}function p7($){return $.replace(/\/+$/,"")}function v2($,f,J){let Q=J?.trim();if(!Q)return;let Z=$?.trim();if(!Z||!f?.trim())return Q;try{let W=new URL(Q),j=new URL(f),X=new URL(Z);if(W.origin!==j.origin)return Q;let H=p7(j.pathname),Y=p7(X.pathname);if(H&&W.pathname.startsWith(`${H}/`)){let V=W.pathname.slice(H.length);X.pathname=`${Y}${V}`}else X.pathname=W.pathname;return X.search=W.search,X.hash=W.hash,X.toString()}catch{return Q}}function wV($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{...J}]))}function SV($){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 CV=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:wV($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),i7=Object.fromEntries(CV.map(($)=>[$.id,$]));function hV($){return i7[$]}function EV(){return Object.fromEntries(Object.entries(i7).filter(([,$])=>SV($)))}function n7($=[]){let f=$.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return f.length>0?f:void 0}var a7="https://models.dev/api.json",bV=600000,t7=300000,kV=5000,u2=new Map,Vf=new Map,h6=new Map,c2=new Map;async function IV(){return s.getGeneratedProviderModels()}async function xV($,f={},J={},Q={},Z={},W={}){let j=await IV(),X=s.resolveProviderModelCatalogKeys($),H=Object.assign({},...X.map((B)=>j[B]??{})),Y=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),V=Object.keys(Z).length>0;if(Y&&V)return s.sortModelsByReleaseDate({...Z,...W});let A=Object.keys(Q).length>0;if($==="openai-codex"&&A)return s.sortModelsByReleaseDate({...Q,...W});return s.sortModelsByReleaseDate({...H,...f,...J,...Q,...Z,...W})}function gV($,f){let J=s.resolveProviderModelCatalogKeys($);return Object.assign({},...J.map((Q)=>f[Q]??{}))}function E6($){let f=$?.trim();return f&&f.length>0?f:""}function b6($){let f=$.apiKey?.trim()||$.accessToken?.trim();return f&&f.length>0?f:void 0}function mV($){let f=2166136261;for(let J=0;J<$.length;J+=1)f^=$.charCodeAt(J),f+=(f<<1)+(f<<4)+(f<<7)+(f<<8)+(f<<24);return(f>>>0).toString(16)}function vV($,f){return`${$}:${E6(f.baseUrl)}:${mV(b6(f)??"")}`}function cV($){let f=$?.trim();if(!f)return;let J=j0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}async function k6($,f,J=kV){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await fetch($,{...f,signal:Q.signal})}finally{clearTimeout(Z)}}function S6($,f,J){if(J&&!$.includes(f))$.push(f)}function Af($,f){let J=["streaming","tools"];return S6(J,"images",Boolean(f.supportsImages)),S6(J,"prompt-cache",Boolean(f.supportsPromptCache)),S6(J,"reasoning",Boolean(f.supportsReasoning)),{id:$,name:f.name??$,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxTokens:f.maxTokens,capabilities:J,releaseDate:f.releaseDate,status:"active"}}function uV($){let f=s.getGeneratedModelsForProvider("openai-native")[$.id];if(f)return{...f,id:$.id,name:$.name??f.name??$.id};return Af($.id,{name:$.name??$.id})}async function dV($,f){let J=await k6("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;if(X.includes("whisper")||X.includes("tts")||X.includes("embedding"))continue;let H=j.supported_features??[];W[X]=Af(X,{name:X,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:H.includes("reasoning")||H.includes("reasoning_effort"),supportsImages:!1})}return W}async function lV($,f){let J=await k6("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":f}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;W[X]=Af(X,{name:X,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}function pV($){let f=E6($);if(!f)return"http://localhost:4000";return f.endsWith("/v1")?f.slice(0,-3):f}async function rV($,f){let Q=`${pV($.baseUrl)}/v1/model/info`,Z=async(Y)=>k6(Q,{method:"GET",headers:{accept:"application/json",...Y}}),W=await Z({"x-litellm-api-key":f});if(!W.ok)W=await Z({Authorization:`Bearer ${f}`});if(!W.ok)throw Error(`LiteLLM model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],H={};for(let Y of X){let V=Y.model_name?.trim(),B=Y.litellm_params?.model?.trim()||V;if(!B)continue;let K=Y.model_info,G=Af(B,{name:V??B,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(H[B]=G,V)H[V]={...G,id:V,name:V}}return H}async function iV($,f){let J=await s.listOpenAICodexModels({accessToken:f,accountId:$.accountId??cV(f),cwd:typeof $.codex?.defaultSettings?.cwd==="string"?$.codex.defaultSettings.cwd:void 0,codexPath:typeof $.codex?.defaultSettings?.codexPath==="string"?$.codex.defaultSettings.codexPath:void 0,env:$.codex?.defaultSettings?.env&&typeof $.codex.defaultSettings.env==="object"&&!Array.isArray($.codex.defaultSettings.env)?$.codex.defaultSettings.env:void 0});return Object.fromEntries(J.map((Q)=>[Q.id,uV(Q)]))}var s7={baseten:dV,hicap:lV,litellm:rV,"openai-codex":iV},r7=new Map,C6=new Map;function nV($,f){return`${$}:${E6(f.baseUrl)}`}async function aV($,f,J){let Q=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],Z=v2(J.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!Z)return{};let W=f?.cacheTtlMs??t7,j=nV($,J),X=Date.now(),H=r7.get(j);if(H&&H.expiresAt>X)return H.data;let Y=C6.get(j);if(Y)return Y;let V=m2(Z,$).then((A)=>{let B=Object.fromEntries(A.map((K)=>[K,Af(K,{name:K})]));return r7.set(j,{data:B,expiresAt:X+W}),B}).finally(()=>{C6.delete(j)});return C6.set(j,V),V}async function tV($,f){let J=b6(f);if(!J)return{};let Q=s7[$];if(!Q)return{};return Q(f,J)}function sV($,f,J){if(!J)return!1;if(!s7[$])return!1;if(f?.loadPrivateOnAuth===!1)return!1;return Boolean(b6(J))}async function oV($,f,J){let Q=f?.cacheTtlMs??t7,Z=vV($,J),W=Date.now(),j=h6.get(Z);if(j&&j.expiresAt>W)return j.data;let X=c2.get(Z);if(X)return X;let H=tV($,J).then((Y)=>{return h6.set(Z,{data:Y,expiresAt:W+Q}),Y}).finally(()=>{c2.delete(Z)});return c2.set(Z,H),H}async function eV($){return s.fetchModelsDevProviderModels($)}async function d2($={}){let f=$.url??a7,J=$.cacheTtlMs??bV,Q=Date.now(),Z=u2.get(f);if(Z&&Z.expiresAt>Q)return Z.data;let W=Vf.get(f);if(W)return W;let j=eV(f).then((X)=>{return u2.set(f,{data:X,expiresAt:Q+J}),X}).finally(()=>{Vf.delete(f)});return Vf.set(f,j),j}function $A($){if($){u2.delete($),Vf.delete($);return}u2.clear(),Vf.clear()}function fA(){h6.clear(),c2.clear()}function JA($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:n7(J.capabilities)}]))}var I6=JA(EV());function o7($){let f=hV($);if(!f||!f.baseUrl)return;return{baseUrl:f.baseUrl,modelId:f.modelId,knownModels:f.knownModels,capabilities:n7(f.capabilities)}}async function x6($,f,J){let Q=o7($);if(!Q)return;try{let Z=f?.loadLatestOnInit?await d2(f):void 0,W=Z?gV($,Z):{},j=J&&sV($,f,J)?await oV($,f,J):{},H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?J??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:J,Y=H?await aV($,f,H).catch(()=>({})):{},V=await xV($,Q.knownModels,W,j,Y,J?.knownModels);return{...Q,knownModels:V}}catch(Z){if(f?.failOnError)throw Z;return Q}}var g6=T0.BUILT_IN_PROVIDER,QA=T0.BUILT_IN_PROVIDER_IDS,ZA=T0.isBuiltInProviderId,l2=T0.normalizeProviderId,m6=T.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),e7=T.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),$Q=T.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),fQ=T.object({apiKey:T.string().optional(),accessToken:T.string().optional(),refreshToken:T.string().optional(),expiresAt:T.number().int().positive().optional(),accountId:T.string().optional()}),WA=T.enum(["none","low","medium","high","xhigh"]),JQ=T.object({enabled:T.boolean().optional(),effort:WA.optional(),budgetTokens:T.number().int().positive().optional()}),QQ=T.object({accessKey:T.string().optional(),secretKey:T.string().optional(),sessionToken:T.string().optional(),region:T.string().optional(),profile:T.string().optional(),authentication:T.enum(["iam","api-key","profile"]).optional(),usePromptCache:T.boolean().optional(),useCrossRegionInference:T.boolean().optional(),useGlobalInference:T.boolean().optional(),endpoint:T.string().url().optional(),customModelBaseId:T.string().optional()}),ZQ=T.object({projectId:T.string().optional(),region:T.string().optional()}),WQ=T.object({apiVersion:T.string().optional(),useIdentity:T.boolean().optional()}),jQ=T.object({clientId:T.string().optional(),clientSecret:T.string().optional(),tokenUrl:T.string().url().optional(),resourceGroup:T.string().optional(),deploymentId:T.string().optional(),useOrchestrationMode:T.boolean().optional(),api:T.enum(["orchestration","foundation-models"]).optional(),defaultSettings:T.record(T.string(),T.unknown()).optional()}),XQ=T.object({mode:T.enum(["internal","external"]).optional(),usePromptCache:T.boolean().optional()}),HQ=T.object({loadLatestOnInit:T.boolean().optional(),loadPrivateOnAuth:T.boolean().optional(),url:T.string().url().optional(),cacheTtlMs:T.number().int().positive().optional(),failOnError:T.boolean().optional()}),h1=T.object({provider:m6,apiKey:T.string().optional(),auth:fQ.optional(),model:T.string().optional(),protocol:e7.optional(),client:$Q.optional(),routingProviderId:m6.optional(),maxTokens:T.number().int().positive().optional(),contextWindow:T.number().int().positive().optional(),baseUrl:T.string().url().optional(),headers:T.record(T.string(),T.string()).optional(),timeout:T.number().int().positive().optional(),reasoning:JQ.optional(),aws:QQ.optional(),gcp:ZQ.optional(),azure:WQ.optional(),sap:jQ.optional(),oca:XQ.optional(),region:T.string().optional(),apiLine:T.enum(["china","international"]).optional(),capabilities:T.array(T.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:HQ.optional()});function YQ($){return h1.parse($)}function VQ($){return h1.safeParse($)}function jA($){return $.protocol==="openai-responses"||$.client==="openai"}function f$($,f={}){let J=$.provider,Q=l2(J),Z=f.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,X=I6[Q],H=Object.assign({},...T0.resolveProviderModelCatalogKeys(Q).map((R)=>T0.getGeneratedModelsForProvider(R))),Y=Object.keys(H)[0],V=$.auth?.accessToken??$.apiKey??$.auth?.apiKey,A=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?T6:N6:X?.baseUrl),B=$.routingProviderId??(jA($)&&Q!==g6.OPENAI_NATIVE?g6.OPENAI_NATIVE:void 0),K=Z?X?.knownModels??(Object.keys(H).length>0?H:void 0):void 0,G={providerId:J,clientType:$.client,routingProviderId:B,modelId:$.model??X?.modelId??Y??"default",...Z?{knownModels:K}:{},apiKey:V,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:A,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??X?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(G).filter(([R,F])=>F!==void 0))}function XA($){let f=YQ($);return f$(f)}function HA($){let f=VQ($);if(f.success)return{success:!0,config:f$(f.data)};return{success:!1,error:f.error}}import{SESSION_STATUS_VALUES as YA}from"@cline/shared";var v6=YA,G0={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"};function AQ($){if($===!0)return{};if(!$)return;return $}function BQ($){if($==="user")return"global";return $}class c6{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let f=this.getService().ingestEvent($);return{event:f.event,duplicate:f.duplicate,matchedSpecIds:f.matchedSpecs.map((J)=>J.specId),queuedRuns:f.queuedRuns,suppressions:f.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function KQ($){let{host:f}=$;return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||G0.CLI,interactive:!1,config:{providerId:l2(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:BA(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:{extensionContext:$.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content),delivery:Q.delivery});if(!Z)throw Error("ClineCore automation runtime returned no result");return{result:AA(Z)}},async abortSession(J){return await f.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}function p2($){let f=VA($.automationService,$.automation),J=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),Z=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!f&&!J&&!Q&&!Z&&!W)return $.context;return{...$.context??{},...J?{client:J}:{},...Q?{user:Q}:{},...Z?{logger:Z}:{},...W?{telemetry:W}:{},...f?{automation:f}:{}}}function VA($,f){if(!$)return;return{ingestEvent:(J)=>{f.ingestEvent(J)}}}function AA($){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((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function BA($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as m8}from"node:fs";import{basename as i3,isAbsolute as kP,relative as IP}from"node:path";import{createHash as KA}from"node:crypto";import{watch as GA}from"node:fs";import{readdir as PA,readFile as FA}from"node:fs/promises";import{join as DA}from"node:path";function RA($){return KA("sha1").update($).digest("hex")}function FQ($){return Boolean($&&typeof $==="object"&&"code"in $)}function GQ($){return FQ($)&&$.code==="ENOENT"}function PQ($){return FQ($)&&($.code==="EACCES"||$.code==="EPERM")}class Bf{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($,f){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=f?.debounceMs??75,this.emitParseErrors=f?.emitParseErrors??!1;for(let J of $){if(this.definitionsByType.has(J.type))throw Error(`Duplicate unified config definition type '${J.type}'.`);this.definitionsByType.set(J.type,J),this.recordsByType.set(J.type,new Map),this.discoveredDirectoriesByType.set(J.type,new Set);for(let Q of J.directories){let Z=this.baseTypesByDirectory.get(Q);if(Z)Z.add(J.type);else this.baseTypesByDirectory.set(Q,new Set([J.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 f=this.definitionsByType.get($);if(!f)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(f)})}getSnapshot($){let f=this.recordsByType.get($);return new Map([...f?.entries()??[]].map(([J,Q])=>[J,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[f,J]of this.recordsByType.entries())$.set(f,new Map([...J.entries()].map(([Q,Z])=>[Q,{...Z}])));return $}emit($){for(let f of this.listeners)f($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[f,J]of this.watchersByDirectory.entries()){if($.has(f))continue;J.close(),this.watchersByDirectory.delete(f)}this.watchedTypesByDirectory=$;for(let f of $.keys()){if(this.watchersByDirectory.has(f))continue;try{let J=GA(f,()=>{let Q=this.watchedTypesByDirectory.get(f);if(!Q)return;for(let Z of Q)this.pendingTypes.add(Z);this.scheduleFlush()});this.watchersByDirectory.set(f,J),J.on("error",(Q)=>{let Z=this.watchedTypesByDirectory.get(f);if(!Z)return;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:f})})}catch(J){if(!GQ(J)&&!PQ(J)){let Q=$.get(f);if(!Q)continue;for(let Z of Q)this.emit({kind:"error",type:Z,error:J,filePath:f})}}}}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 f of $){let J=this.definitionsByType.get(f);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal($){let{records:f,discoveredDirectories:J}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[Z,W]of Q.entries()){if(f.has(Z))continue;this.emit({kind:"remove",type:$.type,id:Z,filePath:W.filePath})}for(let[Z,W]of f.entries()){let j=Q.get(Z);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:Z,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,f),this.discoveredDirectoriesByType.set($.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let f=new Map,J=new Set;for(let Q of $.directories){J.add(Q);let Z=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let W of Z){let{fileName:j,filePath:X}=W;if(J.add(W.directoryPath),$.includeFile&&!$.includeFile(j,X))continue;try{let H=await FA(X,"utf8"),Y={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:X,content:H},V=$.parseFile(Y),A=$.resolveId(V,Y).trim();if(!A)continue;f.set(A,{type:$.type,id:A,item:V,filePath:X,fingerprint:RA(H)})}catch(H){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:H,filePath:X})}}}return{records:f,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let $=new Map;for(let[f,J]of this.baseTypesByDirectory.entries())$.set(f,new Set(J));for(let[f,J]of this.discoveredDirectoriesByType.entries())for(let Q of J){let Z=$.get(Q);if(Z)Z.add(f);else $.set(Q,new Set([f]))}return $}async readDirectoryFileCandidates($){try{return(await PA($,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:$,fileName:J.name,filePath:DA($,J.name)})).sort((J,Q)=>J.fileName.localeCompare(Q.fileName))}catch(f){if(GQ(f)||PQ(f))return[];throw f}}}import{readdir as u6,readFile as UA,stat as DQ}from"node:fs/promises";import{basename as t$,dirname as LA,extname as d6,join as U0}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as RQ,resolveRulesConfigSearchPaths as OA,resolveSkillsConfigSearchPaths as zA,resolveWorkflowsConfigSearchPaths as _A,SKILLS_CONFIG_DIRECTORY_NAME as l6,WORKFLOWS_CONFIG_DIRECTORY_NAME as p6}from"@cline/shared/storage";import yA from"yaml";var r2="SKILL.md",TA="managed.json",NA=new Set([".md",".markdown",".txt"]);function r6($){return $.trim().toLowerCase()}function Kf($){let f=$;return f?.code==="ENOENT"||f?.code==="EACCES"||f?.code==="EPERM"}function i2($){return NA.has(d6($).toLowerCase())}async function i6($){try{let f=await u6($,{withFileTypes:!0}),J=[];for(let Q of f){if(!Q.isDirectory())continue;let Z=U0($,Q.name),W=U0(Z,TA);try{let j=await UA(W,"utf8"),X=JSON.parse(j);if(X&&typeof X==="object")J.push(Z)}catch(j){if(Kf(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return J.sort((Q,Z)=>Q.localeCompare(Z))}catch(f){if(Kf(f))return[];throw f}}function n6($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J;try{let W=yA.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}catch(W){let j=W instanceof Error?W.message:String(W);return{data:{},body:$,hadFrontmatter:!0,parseError:j}}}function n2($,f,J){if($===void 0||$===null){if(J)throw Error(`Missing required frontmatter field '${f}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${f}' must be a string.`);let Q=$.trim();if(!Q&&J)throw Error(`Frontmatter field '${f}' cannot be empty.`);return Q||void 0}function E1($,f){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${f}' must be a boolean.`);return $}function a6($,f){let{data:J,body:Q,parseError:Z}=n6($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in skill file.");let X=n2(J.name,"name",!1)??f.trim();if(!X)throw Error("Missing skill name.");return{name:X,description:n2(J.description,"description",!1),disabled:E1(J.disabled,"disabled")??(E1(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function t6($,f){let{data:J,body:Q,parseError:Z}=n6($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=n2(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:E1(J.disabled,"disabled")??(E1(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function s6($,f){let{data:J,body:Q,parseError:Z}=n6($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=n2(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:E1(J.disabled,"disabled")??(E1(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function o6($){return zA($)}function e6($){return OA($)}function $J($){return _A($)}async function UQ($){if(t$($)===".cline"){let f=await i6($);return(await Promise.all(f.map((Q)=>UQ(U0(Q,l6))))).flat()}try{let f=await u6($,{withFileTypes:!0}),J=[];for(let Q of f){if(Q.isFile()&&Q.name===r2){J.push({directoryPath:$,fileName:Q.name,filePath:U0($,Q.name)});continue}if(Q.isDirectory())J.push({directoryPath:U0($,Q.name),fileName:r2,filePath:U0($,Q.name,r2)})}return J}catch(f){if(Kf(f))return[];throw f}}async function a2($){if(t$($)===".cline"){let f=await i6($);return(await Promise.all(f.map((Q)=>a2(U0(Q,"rules.md"))))).flat()}try{if((await DQ($)).isFile())return[{directoryPath:LA($),fileName:t$($),filePath:$}]}catch(f){if(!Kf(f))throw f}try{let J=(await u6($,{withFileTypes:!0})).filter((Z)=>Z.isFile()&&i2(Z.name)).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:U0($,Z.name)})),Q=U0($,"AGENTS.md");try{if((await DQ(Q)).isFile()){if(!J.some((j)=>j.fileName==="AGENTS.md"))J.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return J}catch(f){if(Kf(f))return[];throw f}}async function MA($){if(t$($)===".cline"){let f=await i6($);return(await Promise.all(f.map((Q)=>a2(U0(Q,p6))))).flat()}return a2($)}function fJ($){let f=$?.directories??o6($?.workspacePath),J=$?.workspacePath?U0($.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...f,J]:f,discoverFiles:UQ,includeFile:(Q)=>Q===r2,parseFile:(Q)=>a6(Q.content,t$(Q.directoryPath)),resolveId:(Q)=>r6(Q.name)}}function JJ($){let f=$?.directories??e6($?.workspacePath),J=$?.workspacePath?U0($.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...f,J]:f,discoverFiles:a2,includeFile:(Q,Z)=>Q===".clinerules"||i2(Q)||i2(Z),parseFile:(Q)=>t6(Q.content,t$(Q.filePath,d6(Q.filePath))),resolveId:(Q)=>r6(Q.name)}}function QJ($){let f=$?.directories??$J($?.workspacePath),J=$?.workspacePath?U0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...f,J]:f,discoverFiles:MA,includeFile:(Q)=>i2(Q),parseFile:(Q)=>s6(Q.content,t$(Q.filePath,d6(Q.filePath))),resolveId:(Q)=>r6(Q.name)}}function LQ($){let f=[fJ($?.skills),JJ($?.rules),QJ($?.workflows)];return new Bf(f,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as OQ}from"@cline/shared";function qA($,f){if($.description?.trim())return OQ($.description,".");if(f==="workflow")return;return OQ($.instructions,".")}function wA($){return $.disabled!==!0}function zQ($,f){return[...$.getSnapshot(f).entries()].map(([J,Q])=>({id:J,record:Q})).filter(({record:J})=>wA(J.item)).map(({id:J,record:Q})=>({id:J,name:Q.item.name,instructions:Q.item.instructions,description:qA(Q.item,f),kind:f})).sort((J,Q)=>J.name.localeCompare(Q.name))}function Gf($){let f=new Map;for(let J of[...zQ($,"workflow"),...zQ($,"skill")])if(!f.has(J.name))f.set(J.name,J);return[...f.values()].sort((J,Q)=>J.name.localeCompare(Q.name))}function _Q($,f){if(!$.startsWith("/")||$.length<2)return $;let J=$.match(/^\/(\S+)/);if(!J)return $;let Q=J[1];if(!Q)return $;let Z=Q.length+1,W=$.slice(Z),j=Gf(f).find((X)=>X.name===Q);return j?`${j.instructions}${W}`:$}function yQ($){return $.disabled!==!0}function t2($){if($.length===0)return"";return`
|
|
45
47
|
|
|
46
48
|
# Rules
|
|
47
|
-
${
|
|
49
|
+
${$.map((J)=>`## ${J.name}
|
|
48
50
|
${J.instructions}`).join(`
|
|
49
51
|
|
|
50
|
-
`)}`}function
|
|
52
|
+
`)}`}function s2($,f){let J=$?.trim(),Q=f?.trim();if(J&&Q)return`${J}
|
|
51
53
|
|
|
52
|
-
${
|
|
54
|
+
${Q}`;return J||Q||void 0}function SA($){return[...$.getSnapshot("rule").values()].map((J)=>J.item).filter(yQ).sort((J,Q)=>J.name.localeCompare(Q.name))}function TQ($){return t2(SA($))}import{validateWithZod as Yw,zodToJsonSchema as Vw}from"@cline/shared";var Z0={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"},b1=[Z0.READ_FILES,Z0.SEARCH_CODEBASE,Z0.RUN_COMMANDS,Z0.FETCH_WEB_CONTENT,Z0.APPLY_PATCH,Z0.EDITOR,Z0.SKILLS,Z0.ASK,Z0.SUBMIT_AND_EXIT];import{createTool as J$,validateWithZod as z$,zodToJsonSchema as l0}from"@cline/shared";import{validateWithZod as bQ}from"@cline/shared";import{z as U}from"zod";var L$=6000,ZJ=U.string().describe("The absolute file path of a text file to read content from"),NQ=U.object({start_line:U.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:U.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit for the end of the file")}).describe("Optional inclusive one-based file line range"),s$=U.object({path:ZJ,start_line:NQ.shape.start_line,end_line:NQ.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),o2=U.object({files:U.array(s$).describe("Array of file read requests. Omit start_line/end_line or set them to null to return the full file content boundaries; provide integers to return only that inclusive one-based line range. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),MQ=U.union([o2,s$,U.array(s$),U.array(U.string()),U.string(),U.object({files:s$}),U.object({file_paths:U.array(ZJ)}),U.object({file_paths:U.string()}),U.object({paths:U.array(U.union([ZJ,s$]))}),U.object({paths:s$}),U.object({paths:U.string()})]),e2=U.object({queries:U.array(U.string()).describe("Array of regex search queries to execute")}),qQ=U.union([e2,U.array(U.string()),U.string(),U.object({queries:U.string()})]),o$=U.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${L$*2} characters) to avoid timeouts.`),Pf=U.object({commands:U.array(o$).describe("Array of shell commands to execute")}),wQ=U.union([Pf,U.object({commands:o$}),U.object({command:o$}),U.object({cmd:o$}),U.array(U.string()),U.string()]),WJ=U.object({command:U.string().min(1).describe("The executable to run directly without shell parsing."),args:U.array(U.string()).optional().describe("Optional argv list passed directly to the executable.")}),SQ=U.union([o$,WJ]),jJ=U.object({commands:U.array(SQ).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),CQ=U.union([Pf,jJ,U.object({commands:SQ}),U.array(WJ),WJ,U.object({command:o$}),U.object({cmd:o$}),U.array(U.string()),U.string()]),hQ=U.object({url:U.string().describe("The URL to fetch"),prompt:U.string().min(2).describe("Analysis prompt for the fetched content")}),$8=U.object({requests:U.array(hQ).describe("Array of the URLs for the web fetch requests")}),f8=U.object({path:U.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:U.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 ${L$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:U.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 ${L$} 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:U.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."),J8=U.object({input:U.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."),EQ=U.union([J8,U.string()]),Q8=U.object({skill:U.string().min(1).describe("Name of the skill to execute."),args:U.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),Z8=U.object({question:U.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:U.array(U.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),W8=U.object({summary:U.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:U.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.
|
|
53
55
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
54
|
-
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
|
|
56
|
+
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 O$($){if($ instanceof Error)return $.message;return String($)}function kQ($){if(typeof $.old_text==="string"&&$.old_text.length>L$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${L$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>L$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${L$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}function d0($,f,J){return Promise.race([$,new Promise((Q,Z)=>{setTimeout(()=>Z(Error(J)),f)})])}function IQ($){let f=bQ(MQ,$);if(typeof f==="string")return[{path:f}];if(Array.isArray(f))return f.map((J)=>typeof J==="string"?{path:J}:J);if("files"in f)return Array.isArray(f.files)?f.files:[f.files];if("file_paths"in f)return(Array.isArray(f.file_paths)?f.file_paths:[f.file_paths]).map((Q)=>({path:Q}));if("paths"in f)return(Array.isArray(f.paths)?f.paths:[f.paths]).map((Q)=>typeof Q==="string"?{path:Q}:Q);return[f]}function j8($){let{path:f,start_line:J,end_line:Q}=$;if(J==null&&Q==null)return f;return`${f}:${J??1}-${Q??"EOF"}`}function xQ($){let{start_line:f,end_line:J}=$;if(f==null||J==null||f<=J)return null;return`start_line must be less than or equal to end_line (received start_line: ${f}, end_line: ${J})`}function gQ($){let f=bQ(CQ,$);if(typeof f==="string")return[f];if(Array.isArray(f))return f;if("commands"in f)return Array.isArray(f.commands)?f.commands:[f.commands];if("command"in f)return"args"in f?[f]:[f.command];if("cmd"in f)return[f.cmd];return[f]}function XJ($){if(typeof $==="string")return $;let f=$.args??[];if(f.length===0)return $.command;let J=f.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${J.join(" ")}`}function mQ($,f={}){let J=f.fileReadTimeoutMs??1e4;return J$({name:"read_files",description:"Read the full 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. Returns file contents or error messages for each path.",inputSchema:l0(o2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Q,Z)=>{let W=IQ(Q);return Promise.all(W.map(async(j)=>{let X=xQ(j);if(X)return{query:j8(j),result:"",error:`Invalid file range: ${X}`,success:!1};try{let H=await d0($(j,Z),J,`File read timed out after ${J}ms`);return{query:j8(j),result:H,success:!0}}catch(H){let Y=O$(H);return{query:j8(j),result:"",error:`Error reading file: ${Y}`,success:!1}}}))}})}function vQ($,f={}){let J=f.searchTimeoutMs??30000,Q=f.cwd??process.cwd();return J$({name:"search_codebase",description:"Perform regex pattern searches across the codebase. Supports multiple parallel searches. Use for finding code patterns, function definitions, class names, imports, etc.",inputSchema:l0(e2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Z,W)=>{let j=z$(qQ,Z),X=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(X.map(async(H)=>{try{let Y=await d0($(H,Q,W),J,`Search timed out after ${J}ms`),V=Y.length>0&&!Y.includes("No results found");return{query:H,result:Y,success:V}}catch(Y){let V=O$(Y);return{query:H,result:"",error:`Search failed: ${V}`,success:!1}}}))}})}function cQ($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return J$({name:"run_commands",description:"Run shell commands from the root of the workspace. Use for listing files, checking git status, running builds, executing tests, etc. Commands should be properly shell-escaped.",inputSchema:l0(Pf),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=z$(wQ,Z),X;if(typeof j==="string")X=[j];else if(Array.isArray(j))X=j;else if("commands"in j)X=Array.isArray(j.commands)?j.commands:[j.commands];else if("command"in j)X=[j.command];else X=[j.cmd];return Promise.all(X.map(async(H)=>{try{let Y=await d0($(H,Q,W),J,`Command timed out after ${J}ms`);return{query:H,result:Y,success:!0}}catch(Y){let V=O$(Y);return{query:H,result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function uQ($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return J$({name:"run_commands",description:"Run shell commands from the root of the workspacein Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped.",inputSchema:l0(jJ),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=gQ(Z);return Promise.all(j.map(async(X)=>{try{let H=await d0($(X,Q,W),J,`Command timed out after ${J}ms`);return{query:XJ(X),result:H,success:!0}}catch(H){let Y=O$(H);return{query:XJ(X),result:"",error:`Command failed: ${Y}`,success:!1}}}))}})}function dQ($,f={}){let J=f.webFetchTimeoutMs??30000;return J$({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.",inputSchema:l0($8),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(Q,Z)=>{let W=z$($8,Q);return Promise.all(W.requests.map(async(j)=>{try{let X=await d0($(j.url,j.prompt,Z),J,`Web fetch timed out after ${J}ms`);return{query:j.url,result:X,success:!0}}catch(X){let H=O$(X);return{query:j.url,result:"",error:`Error fetching web content: ${H}`,success:!1}}}))}})}var CA=`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:
|
|
55
57
|
|
|
56
58
|
*** Begin Patch
|
|
57
59
|
*** Update File: path/to/file.ts
|
|
@@ -87,106 +89,112 @@ Example:
|
|
|
87
89
|
</div>
|
|
88
90
|
);
|
|
89
91
|
}
|
|
90
|
-
*** End Patch`;function
|
|
91
|
-
`),
|
|
92
|
-
${this.lines[this.index]}`);if(
|
|
93
|
-
`);this.addWarning({path:this.currentPath
|
|
94
|
-
`),chunks:[]}}}function
|
|
95
|
-
`));for(let
|
|
96
|
-
`));if(
|
|
97
|
-
`)),
|
|
98
|
-
`));if(
|
|
99
|
-
`)),
|
|
100
|
-
`));if(
|
|
101
|
-
`)),
|
|
102
|
-
`).map((
|
|
103
|
-
`),
|
|
104
|
-
`)}async function
|
|
105
|
-
`)}return
|
|
106
|
-
`)}}import{spawn as
|
|
92
|
+
*** End Patch`;function lQ($,f={}){let J=f.applyPatchTimeoutMs??30000,Q=f.cwd??process.cwd();return J$({name:"apply_patch",description:CA,inputSchema:l0(J8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=z$(EQ,Z),X=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await d0($({input:X},Q,W),J,`apply_patch timed out after ${J}ms`),success:!0}}catch(H){return{query:"apply_patch",result:"",error:`apply_patch failed: ${O$(H)}`,success:!1}}}})}function pQ($,f={}){let J=f.editorTimeoutMs??30000,Q=f.cwd??process.cwd();return J$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tools for making small, precise edits to existing files or creating new files over shell commands.",inputSchema:l0(f8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=z$(f8,Z),X=j.insert_line==null?"edit":"insert",H=kQ(j);if(H)return{query:`${X}:${j.path}`,result:"",error:H,success:!1};try{let Y=await d0($(j,Q,W),J,`Editor operation timed out after ${J}ms`);return{query:`${X}:${j.path}`,result:Y,success:!0}}catch(Y){let V=O$(Y);return{query:`${X}:${j.path}`,result:"",error:`Editor operation failed: ${V}`,success:!1}}}})}function k1($,f={}){let J=f.skillsTimeoutMs??15000,Q='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',Z=J$({name:"skills",description:Q,inputSchema:l0(Q8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=z$(Q8,W);return d0($(X.skill,X.args||void 0,j),J,`Skills operation timed out after ${J}ms`)}});return Object.defineProperty(Z,"description",{get(){let W=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(W&&W.length>0)return`${Q} Available skills: ${W.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),Z}function rQ($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:l0(Z8),retryable:!1,maxRetries:0,execute:async(f,J)=>{let Q=z$(Z8,f);return $(Q.question,Q.options,J)}}}function iQ($,f={}){let J=f.submitTimeoutMs??15000;return J$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:l0(W8),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,Z)=>{let W=z$(W8,Q);return d0($(W.summary,W.verified,Z),J,`submit_and_exit timed out after ${J}ms`)}})}function I1($){let{executors:f,enableReadFiles:J=!0,enableSearch:Q=!0,enableBash:Z=!0,enableWebFetch:W=!0,enableApplyPatch:j=!1,enableEditor:X=!0,enableSkills:H=!0,enableAskQuestion:Y=!0,enableSubmitAndExit:V=!1,...A}=$,B=[];if(J&&f.readFile)B.push(mQ(f.readFile,A));if(Q&&f.search)B.push(vQ(f.search,A));if(Z&&f.bash)if(process.platform==="win32")B.push(uQ(f.bash,A));else B.push(cQ(f.bash,A));if(W&&f.webFetch)B.push(dQ(f.webFetch,A));if(X&&f.editor)B.push(pQ(f.editor,A));else if(j&&f.applyPatch)B.push(lQ(f.applyPatch,A));if(H&&f.skills)B.push(k1(f.skills,A));let K=V?f.submit:void 0;if(Y&&f.askQuestion&&!K)B.push(rQ(f.askQuestion));if(K)B.push(iQ(K,A));return B}import*as M0 from"node:fs/promises";import*as q0 from"node:path";var k={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},aQ=["%%bash","apply_patch","EOF","```"];class f0 extends Error{constructor($){super($);this.name="DiffError"}}function N0($){let f={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(J)=>f[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class HJ{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,f){this.lines=$;this.currentFiles=f}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(k.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(k.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(k.UPDATE)){this.parseUpdate($.substring(k.UPDATE.length).trim());return}if($?.startsWith(k.DELETE)){this.parseDelete($.substring(k.DELETE.length).trim());return}if($?.startsWith(k.ADD)){this.parseAdd($.substring(k.ADD.length).trim());return}throw new f0(`Unknown line while parsing: ${$}`)}checkDuplicate($,f){if($ in this.patch.actions)throw new f0(`Duplicate ${f} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let f=this.lines[this.index]?.startsWith(k.MOVE)?(this.lines[this.index++]??"").substring(k.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new f0(`Update File Error: Missing File: ${$}`);let J=this.currentFiles[$]??"",Q=this.parseUpdateFile(J,$);Q.movePath=f,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,f){let J={type:"update",chunks:[]},Q=$.split(`
|
|
93
|
+
`),Z=0,W=[k.END,k.UPDATE,k.DELETE,k.ADD,k.END_FILE];while(!W.some((j)=>this.lines[this.index]?.startsWith(j.trim()))){let j=this.lines[this.index],X=j?.startsWith("@@ ")?j.substring(3):void 0;if(X!==void 0||(j==="@@"?j:void 0)!==void 0)this.index++;else if(Z!==0)throw new f0(`Invalid Line:
|
|
94
|
+
${this.lines[this.index]}`);if(X?.trim()){let F=N0(X.trim());for(let P=Z;P<Q.length;P++){let D=Q[P];if(D&&(N0(D)===F||N0(D.trim())===F)){if(Z=P+1,N0(D.trim())===F&&N0(D)!==F)this.fuzz++;break}}}let[Y,V,A,B]=bA(this.lines,this.index),[K,G,R]=EA(Q,Y,Z,B);if(K===-1){let F=Y.join(`
|
|
95
|
+
`);this.addWarning({path:this.currentPath||f,chunkIndex:J.chunks.length,message:`Could not find matching context (similarity: ${R.toFixed(2)}). Chunk skipped.`,context:F.length>200?`${F.substring(0,200)}...`:F}),this.index=A}else{this.fuzz+=G;for(let F of V)F.origIndex+=K,J.chunks.push(F);Z=K+Y.length,this.index=A}}return J}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new f0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new f0(`Add File Error: File already exists: ${$}`);this.index++;let f=[],J=[k.END,k.UPDATE,k.DELETE,k.ADD];while(this.hasMoreLines()&&!J.some((Q)=>this.lines[this.index]?.startsWith(Q.trim()))){let Q=this.lines[this.index++];if(Q===void 0)break;if(!Q.startsWith("+"))throw new f0(`Invalid Add File line (missing '+'): ${Q}`);f.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:f.join(`
|
|
96
|
+
`),chunks:[]}}}function nQ($,f){let J=$.length>f.length?$:f,Q=$.length>f.length?f:$;if(J.length===0)return 1;let Z=hA(Q,J);return(J.length-Z)/J.length}function hA($,f){let J=f.length+1,Q=$.length+1,Z=Array(J*Q).fill(0),W=(X,H)=>Z[X*Q+H]??0,j=(X,H,Y)=>{Z[X*Q+H]=Y};for(let X=0;X<=f.length;X++)j(X,0,X);for(let X=0;X<=$.length;X++)j(0,X,X);for(let X=1;X<=f.length;X++)for(let H=1;H<=$.length;H++)if(f[X-1]===$[H-1])j(X,H,W(X-1,H-1));else j(X,H,1+Math.min(W(X-1,H-1),W(X,H-1),W(X-1,H)));return W(f.length,$.length)}function EA($,f,J,Q){if(f.length===0)return[J,0,1];let Z=0,W=(j)=>{let X=N0(f.join(`
|
|
97
|
+
`));for(let Y=j;Y<$.length;Y++){let V=N0($.slice(Y,Y+f.length).join(`
|
|
98
|
+
`));if(V===X)return[Y,0,1];let A=nQ(V,X);if(A>Z)Z=A}for(let Y=j;Y<$.length;Y++){let V=N0($.slice(Y,Y+f.length).map((B)=>B.trimEnd()).join(`
|
|
99
|
+
`)),A=N0(f.map((B)=>B.trimEnd()).join(`
|
|
100
|
+
`));if(V===A)return[Y,1,1]}for(let Y=j;Y<$.length;Y++){let V=N0($.slice(Y,Y+f.length).map((B)=>B.trim()).join(`
|
|
101
|
+
`)),A=N0(f.map((B)=>B.trim()).join(`
|
|
102
|
+
`));if(V===A)return[Y,100,1]}let H=0.66;for(let Y=j;Y<$.length;Y++){let V=N0($.slice(Y,Y+f.length).join(`
|
|
103
|
+
`)),A=nQ(V,X);if(A>=H)return[Y,1000,A];if(A>Z)Z=A}return[-1,0,Z]};if(Q){let[j,X,H]=W($.length-f.length);if(j!==-1)return[j,X,H];return[j,X,H]=W(J),[j,X+1e4,H]}return W(J)}function bA($,f){let J=f,Q=[],Z=[],W=[],j=[],X="keep",H=["@@",k.END,k.UPDATE,k.DELETE,k.ADD,k.END_FILE];while(J<$.length){let Y=$[J];if(!Y||H.some((B)=>Y.startsWith(B.trim())))break;if(Y==="***")break;if(Y.startsWith("***"))throw new f0(`Invalid line: ${Y}`);J++;let V=X,A=Y;if(A[0]==="+")X="add";else if(A[0]==="-")X="delete";else if(A[0]===" ")X="keep";else X="keep",A=` ${A}`;if(A=A.slice(1),X==="keep"&&V!==X){if(W.length||Z.length)j.push({origIndex:Q.length-Z.length,delLines:Z,insLines:W});Z=[],W=[]}if(X==="delete")Z.push(A),Q.push(A);else if(X==="add")W.push(A);else Q.push(A)}if(W.length||Z.length)j.push({origIndex:Q.length-Z.length,delLines:Z,insLines:W});if(J<$.length&&$[J]===k.END_FILE)return J++,[Q,j,J,!0];return[Q,j,J,!1]}function YJ($,f,J){let Q=q0.isAbsolute(f),Z=Q?q0.normalize(f):q0.resolve($,f);if(!J||Q)return Z;let W=q0.relative($,Z);if(W.startsWith("..")||q0.isAbsolute(W))throw new f0(`Path must stay within cwd: ${f}`);return Z}function kA($){return $.split(`
|
|
104
|
+
`).map((f)=>f.replace(/\r$/,""))}function tQ($){if($.trim()==="")return!1;return aQ.some((f)=>$.startsWith(f))}function IA($){let f=0,J=$.length;while(f<J&&tQ($[f]??""))f++;while(J>f&&tQ($[J-1]??""))J--;return $.slice(f,J)}function xA($){let f=kA($),J=f.findIndex((j)=>j.startsWith(k.BEGIN)),Q=-1;for(let j=f.length-1;j>=0;j--)if(f[j]?.startsWith(k.END)){Q=j;break}if(J!==-1||Q!==-1){if(J===-1||Q===-1||Q<J)throw new f0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:f.slice(J,Q+1)}}let Z=IA(f);while(Z.length>0&&Z[0]==="")Z.shift();while(Z.length>0&&Z[Z.length-1]==="")Z.pop();return{lines:[k.BEGIN,...Z,k.END]}}function gA($,f){let J=new Set;for(let Q of $)for(let Z of f)if(Q.startsWith(Z)){J.add(Q.substring(Z.length).trim());break}return[...J]}function mA($,f,J){if(f.length===0)return $;let Q=$.split(`
|
|
105
|
+
`),Z=[],W=0;for(let j of f){if(j.origIndex>Q.length)throw new f0(`${J}: chunk.origIndex ${j.origIndex} > lines.length ${Q.length}`);if(W>j.origIndex)throw new f0(`${J}: currentIndex ${W} > chunk.origIndex ${j.origIndex}`);Z.push(...Q.slice(W,j.origIndex)),Z.push(...j.insLines),W=j.origIndex+j.delLines.length}return Z.push(...Q.slice(W)),Z.join(`
|
|
106
|
+
`)}async function vA($,f,J,Q){let Z=gA($,[k.UPDATE,k.DELETE]),W={};for(let j of Z){let X=YJ(f,j,Q),H;try{H=await M0.readFile(X,J)}catch{throw new f0(`File not found: ${j}`)}W[j]=H.replace(/\r\n/g,`
|
|
107
|
+
`)}return W}function cA($,f){let J={};for(let[Q,Z]of Object.entries($.actions))switch(Z.type){case"delete":J[Q]={type:"delete",oldContent:f[Q]};break;case"add":if(Z.newFile===void 0)throw new f0("ADD action without file content");J[Q]={type:"add",newContent:Z.newFile};break;case"update":J[Q]={type:"update",oldContent:f[Q],newContent:mA(f[Q]??"",Z.chunks,Q),movePath:Z.movePath};break}return J}async function uA($,f,J,Q){let Z=[];for(let[W,j]of Object.entries($)){let X=YJ(f,W,Q);switch(j.type){case"delete":await M0.rm(X,{force:!0}),Z.push(`${W}: [deleted]`);break;case"add":if(j.newContent===void 0)throw new f0(`Cannot create ${W} with no content`);await M0.mkdir(q0.dirname(X),{recursive:!0}),await M0.writeFile(X,j.newContent,{encoding:J}),Z.push(W);break;case"update":{if(j.newContent===void 0)throw new f0(`UPDATE change for ${W} has no new content`);if(j.movePath){let H=YJ(f,j.movePath,Q);await M0.mkdir(q0.dirname(H),{recursive:!0}),await M0.writeFile(H,j.newContent,{encoding:J}),await M0.rm(X,{force:!0}),Z.push(`${W} -> ${j.movePath}`)}else await M0.writeFile(X,j.newContent,{encoding:J}),Z.push(W);break}}}return Z}function X8($={}){let{encoding:f="utf-8",restrictToCwd:J=!0}=$;return async(Q,Z,W)=>{let j=xA(Q.input),X=await vA(j.lines,Z,f,J),H=new HJ(j.lines,X),{patch:Y,fuzz:V}=H.parse(),A=cA(Y,X),B=await uA(A,Z,f,J),K=["Successfully applied patch to the following files:"];for(let G of B)K.push(G);if(V>0)K.push(`Note: Patch applied with fuzz factor ${V}`);if(Y.warnings&&Y.warnings.length>0)for(let G of Y.warnings)K.push(`Warning (${G.path}): ${G.message}`);return K.join(`
|
|
108
|
+
`)}}import{spawn as sQ}from"node:child_process";import{getDefaultShell as dA,getShellArgs as lA}from"@cline/shared";function pA($,f,J,Q,Z){return new Promise((W,j)=>{let X=process.platform==="win32",H=sQ($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!X}),Y=H.pid,V="",A="",B=0,K=!1,G=!1,R=(L)=>{if(G)return;G=!0,L()},F=()=>{if(!Y)return;if(X){sQ("taskkill",["/pid",String(Y),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-Y,"SIGKILL")}catch{H.kill("SIGKILL")}},P=(L)=>{K=!0,F(),R(()=>j(L))},D=setTimeout(()=>P(Error(`Command timed out after ${J}ms`)),J),O=()=>P(Error("Command was aborted"));if(f.signal)f.signal.addEventListener("abort",O);let _=()=>{clearTimeout(D),f.signal?.removeEventListener("abort",O)};H.stdout?.on("data",(L)=>{if(B+=L.length,B<=Q)V+=L.toString()}),H.stderr?.on("data",(L)=>{if(B+=L.length,B<=Q)A+=L.toString()}),H.on("close",(L)=>{if(_(),K)return;let z=Z?V+(A?`
|
|
107
109
|
[stderr]
|
|
108
|
-
${
|
|
109
|
-
|
|
110
|
-
[Output truncated: ${
|
|
111
|
-
`),
|
|
112
|
-
`),
|
|
113
|
-
`)}async function
|
|
114
|
-
${
|
|
115
|
-
`),
|
|
116
|
-
`)),await
|
|
117
|
-
`),{encoding:
|
|
118
|
-
`),
|
|
119
|
-
`)}return
|
|
120
|
-
`)}}import{spawn as
|
|
121
|
-
`).filter((
|
|
122
|
-
`)}let
|
|
123
|
-
`);for(let
|
|
124
|
-
Searched ${
|
|
125
|
-
`)}}function
|
|
126
|
-
`).replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&#(\d+);/g,(
|
|
110
|
+
${A}`:""):V;if(B>Q)z+=`
|
|
111
|
+
|
|
112
|
+
[Output truncated: ${B} bytes total, showing first ${Q} bytes]`;if(L!==0)R(()=>j(Error(A||`Command exited with code ${L}`)));else R(()=>W(z))}),H.on("error",(L)=>{_(),R(()=>j(Error(`Failed to execute command: ${L.message}`)))})})}function H8($={}){let{shell:f=dA(process.platform),timeoutMs:J=30000,maxOutputBytes:Q=1e6,env:Z={},combineOutput:W=!0}=$;return(j,X,H)=>{let Y=typeof j!=="string";return pA({executable:Y?j.command:f,args:Y?j.args??[]:lA(f,j),cwd:X,env:Z},H,J,Q,W)}}import*as m0 from"node:fs/promises";import*as g0 from"node:path";function rA($,f,J){let Q=g0.isAbsolute(f),Z=Q?g0.normalize(f):g0.resolve($,f);if(!J)return Z;if(Q)return Z;let W=g0.relative($,Z);if(W.startsWith("..")||g0.isAbsolute(W))throw Error(`Path must stay within cwd: ${f}`);return Z}function iA($,f){if(f.length===0)return 0;return $.split(f).length-1}function nA($,f,J){let Q=$.split(`
|
|
113
|
+
`),Z=f.split(`
|
|
114
|
+
`),W=Math.max(Q.length,Z.length),j=["```diff"],X=0;for(let H=0;H<W;H++){if(X>=J){j.push("... diff truncated ...");break}let Y=Q[H],V=Z[H];if(Y===V)continue;let A=H+1;if(Y!==void 0)j.push(`-${A}: ${Y}`),X++;if(V!==void 0&&X<J)j.push(`+${A}: ${V}`),X++}return j.push("```"),j.join(`
|
|
115
|
+
`)}async function aA($,f,J){return await m0.mkdir(g0.dirname($),{recursive:!0}),await m0.writeFile($,f,{encoding:J}),`File created successfully at: ${$}`}async function tA($){try{return await m0.access($),!0}catch{return!1}}async function sA($,f,J,Q,Z){let W=await m0.readFile($,Q),j=iA(W,f);if(j===0)throw Error(`No replacement performed: text not found in ${$}.`);if(j>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let X=W.replace(f,J??"");await m0.writeFile($,X,{encoding:Q});let H=nA(W,X,Z);return`Edited ${$}
|
|
116
|
+
${H}`}async function oA($,f,J,Q){let W=(await m0.readFile($,Q)).split(`
|
|
117
|
+
`),j=W.length+1;if(f<1||f>j)throw Error(`Invalid insert_line: ${f}. insert_line must be a positive one-based boundary line in the range 1-${j}. Use ${j} to append at EOF.`);let X=f-1;return W.splice(X,0,...J.split(`
|
|
118
|
+
`)),await m0.writeFile($,W.join(`
|
|
119
|
+
`),{encoding:Q}),`Inserted content at line ${f} in ${$}.`}function Y8($={}){let{encoding:f="utf-8",restrictToCwd:J=!0,maxDiffLines:Q=200}=$;return async(Z,W,j)=>{let X=rA(W,Z.path,J);if(Z.insert_line!=null)return oA(X,Z.insert_line,Z.new_text,f);if(!await tA(X))return aA(X,Z.new_text,f);if(Z.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return sA(X,Z.old_text,Z.new_text,f,Q)}}import*as Ff from"node:fs/promises";import*as _$ from"node:path";var eA=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),$B={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0};function V8($={}){let{maxFileSizeBytes:f,encoding:J,includeLineNumbers:Q}={...$B,...$};return async(Z,W)=>{let{path:j,start_line:X,end_line:H}=Z,Y=_$.isAbsolute(j)?_$.normalize(j):_$.resolve(process.cwd(),j),V=_$.extname(Y).toLowerCase(),A=eA.get(V),B=await Ff.stat(Y);if(!B.isFile())throw Error(`Path is not a file: ${Y}`);if(B.size>f)throw Error(`File too large: ${B.size} bytes (max: ${f} bytes). Consider reading specific sections or using a different approach.`);if(A){if(W.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let D=await Ff.readFile(Y);return[{type:"text",text:"Successfully read image"},{type:"image",data:D.toString("base64"),mediaType:A}]}let G=(await Ff.readFile(Y,J)).split(`
|
|
120
|
+
`),R=Math.max((X??1)-1,0),F=Math.min(H??G.length,G.length),P=G.slice(R,F);if(Q){let D=String(G.length).length;return P.map((O,_)=>`${String(R+_+1).padStart(D," ")} | ${O}`).join(`
|
|
121
|
+
`)}return P.join(`
|
|
122
|
+
`)}}import{spawn as ZZ}from"node:child_process";import*as WZ from"node:fs/promises";import*as K8 from"node:path";import{spawn as fB}from"node:child_process";import{readdir as JB}from"node:fs/promises";import AJ from"node:path";import{isMainThread as $Z,parentPort as oQ,Worker as QB}from"node:worker_threads";var ZB=15000,WB=600000,jB=1000,XB=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function eQ($){let f=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return f==="EACCES"||f==="EPERM"||f==="ENOENT"}var x1=new Map;function HB($){if(x1.size<=1)return;for(let[f,J]of x1.entries()){if(J.pending)continue;if($-J.lastAccessedAt>WB)x1.delete(f)}}function YB($,f){return AJ.relative($,f).split(AJ.sep).join("/")}async function VB($){let J=(await new Promise((Q,Z)=>{let W=fB("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"]}),j="",X="";W.stdout.on("data",(H)=>{j+=H.toString()}),W.stderr.on("data",(H)=>{X+=H.toString()}),W.on("error",Z),W.on("close",(H)=>{if(H===0){Q(j);return}Z(Error(X||`rg exited with code ${H}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(J)}async function fZ($,f,J){let Q;try{Q=await JB(f,{withFileTypes:!0})}catch(Z){if(eQ(Z))return;throw Z}for(let Z of Q){let W=AJ.join(f,Z.name);if(Z.isDirectory()){if(XB.has(Z.name))continue;try{await fZ($,W,J)}catch(j){if(eQ(j))continue;throw j}continue}if(Z.isFile())J.add(YB($,W))}}async function AB($){let f=new Set;return await fZ($,$,f),f}async function A8($){try{return await VB($)}catch{return AB($)}}function BB(){if($Z||!oQ)return;let $=oQ;$.on("message",(f)=>{if(f.type!=="index")return;A8(f.cwd).then((J)=>{let Q={type:"indexResult",requestId:f.requestId,files:Array.from(J)};$.postMessage(Q)}).catch((J)=>{let Q={type:"indexResult",requestId:f.requestId,error:J instanceof Error?J.message:"Failed to build file index"};$.postMessage(Q)})})}class JZ{worker=new QB(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let f=this.pending.get($.requestId);if(!f)return;if(this.pending.delete($.requestId),$.error){f.reject(Error($.error));return}f.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 f=++this.nextRequestId,J=new Promise((Z,W)=>{let j=setTimeout(()=>{this.pending.delete(f),Z(null)},jB);j.unref(),this.pending.set(f,{resolve:(X)=>{clearTimeout(j),Z(X)},reject:(X)=>{clearTimeout(j),W(X)}})}),Q={type:"index",requestId:f,cwd:$};return this.worker.postMessage(Q),J}flushPending($){for(let[f,J]of this.pending.entries())J.reject($),this.pending.delete(f)}}BB();var VJ;function KB(){if(!$Z)return null;if(VJ===void 0)VJ=new JZ;return VJ}async function GB($){let f=KB();if(!f)return A8($);try{let J=await f.requestIndex($);if(J===null)return A8($);return new Set(J)}catch{return A8($)}}async function e$($,f={}){let J=f.ttlMs??ZB,Q=Date.now();HB(Q);let Z=x1.get($);if(Z&&J>0&&Q-Z.lastBuiltAt<=J&&Z.files.size>0)return Z.lastAccessedAt=Q,Z.files;if(Z?.pending)return Z.lastAccessedAt=Q,Z.pending;let W=GB($).then((j)=>{return x1.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return x1.set($,{files:Z?.files??new Set,lastBuiltAt:Z?.lastBuiltAt??0,lastAccessedAt:Q,pending:W}),W}async function QZ($,f={}){await e$($,{...f,ttlMs:0})}import{stat as PB}from"node:fs/promises";import $1 from"node:path";var FB=/[),.:;!?`'"]+$/,DB=/^[(`'"]+/;function RB($){let f=$.matchAll(/(^|[\s])@([^\s]+)/g),J=[];for(let Q of f){let Z=(Q[2]??"").trim();if(Z.length===0)continue;let W=Z.replace(DB,"").replace(FB,"");if(W.length===0||W.includes("@"))continue;J.push(W)}return Array.from(new Set(J))}function UB($,f){let J=$.replace(/\\/g,"/"),Q=$1.isAbsolute(J)?$1.resolve(J):$1.resolve(f,J),Z=$1.relative(f,Q);if(Z.startsWith("..")||$1.isAbsolute(Z))return;return Z.split($1.sep).join("/")}async function B8($,f,J={}){let Q=RB($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:Z,maxFileBytes:W,maxTotalBytes:j}=J,X=await e$(f,{ttlMs:J.ttlMs}),H=[],Y=[],V=[],A=0;for(let B of Q){if(Z&&V.length>=Z){Y.push(B);continue}let K=UB(B,f);if(!K||!X.has(K)){Y.push(B);continue}if(!W||!j){H.push(K);continue}let G=$1.join(f,K);try{if(!(await PB(G)).isFile()){Y.push(B);continue}let F=A+W;if(F>j){Y.push(B);continue}A=F,H.push(K)}catch{Y.push(B)}}return{prompt:$,mentions:Q,matchedFiles:H,ignoredMentions:Y}}var LB=["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"],OB=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],f1=null;function zB(){if(f1!==null)return Promise.resolve(f1);return new Promise(($)=>{let f=ZZ("rg",["--version"],{stdio:["ignore","pipe","pipe"]});f.on("close",(J)=>{f1=J===0,$(f1)}),f.on("error",()=>{f1=!1,$(!1)}),setTimeout(()=>{if(!f.killed)f.kill("SIGTERM");if(f1===null)f1=!1,$(!1)},1000)})}function _B($,f,J,Q,Z=5000,W){return new Promise((j)=>{let X=ZZ("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:f,stdio:["ignore","pipe","pipe"]}),H="",Y=!1,V=()=>{if(!X.killed)X.kill("SIGTERM")},A=setTimeout(()=>{if(!Y)Y=!0,V(),j(null)},Z),B=(K)=>{if(!Y)Y=!0,clearTimeout(A),V(),j(K)};if(W?.aborted){V(),j(null);return}W?.addEventListener("abort",()=>{B(null)}),X.stdout.on("data",(K)=>{H+=K.toString()}),X.stderr.on("data",()=>{}),X.on("close",(K)=>{if(K===0||K===1){try{let G=[],R=H.split(`
|
|
123
|
+
`).filter((F)=>F.trim());for(let F of R){if(G.length>=J)break;let P=JSON.parse(F);if(P.type==="match"){let D=P.data,O=[];if(P.data.submatches&&P.data.submatches.length>0){let _=P.data.submatches[0];G.push({file:D.path.text,line:D.line_number,column:(_?.start??0)+1,match:_?.match?.text??"",context:O})}}else if(P.type==="context"&&G.length>0){let D=G[G.length-1],O=P.data.line_number===D.line?">":" ";D.context.push(`${O} ${P.data.line_number}: ${P.data.lines?.text??P.data.line?.text??""}`)}}B(G.length>0?G:null)}catch{B(null)}return}B(null)}),X.on("error",()=>{B(null)})})}function yB($,f,J,Q){let Z=$.split("/"),W=Z[Z.length-1]??"";if(Z.length-1>Q)return!1;for(let H=0;H<Z.length-1;H++)if(f.has(Z[H]??""))return!1;let X=K8.posix.extname(W).slice(1).toLowerCase();return J.has(X)||!X&&!W.startsWith(".")}function G8($={}){let{includeExtensions:f=LB,excludeDirs:J=OB,maxResults:Q=100,contextLines:Z=2,maxDepth:W=20}=$,j=new Set(J),X=new Set(f.map((H)=>H.toLowerCase()));return async(H,Y,V)=>{if(V.signal?.aborted)throw Error("Search operation aborted");let A=await zB(),B=null;if(A)B=await _B(H,Y,Q,Z,5000,V.signal);if(B){let D=[`Found ${B.length} result${B.length===1?"":"s"} for pattern: ${H}`,""];for(let O of B)D.push(`${O.file}:${O.line}:${O.column}`),D.push(...O.context),D.push("");if(B.length>=Q)D.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return D.join(`
|
|
124
|
+
`)}let K;try{K=new RegExp(H,"gim")}catch(D){throw Error(`Invalid regex pattern: ${H}. ${D instanceof Error?D.message:""}`)}let G=[],R=0,F=await e$(Y);for(let D of F){if(V.signal?.aborted)throw Error("Search operation aborted");if(!yB(D,j,X,W))continue;if(G.length>=Q)break;R++;let O=K8.join(Y,D);try{let L=(await WZ.readFile(O,"utf-8")).split(`
|
|
125
|
+
`);for(let z=0;z<L.length;z++){let y=L[z];K.lastIndex=0;let N=K.exec(y);while(N!==null){if(G.length>=Q)break;let e=Math.max(0,z-Z),$0=Math.min(L.length-1,z+Z),a=[];for(let m=e;m<=$0;m++){let V0=m===z?">":" ";a.push(`${V0} ${m+1}: ${L[m]}`)}if(G.push({file:D,line:z+1,column:N.index+1,match:N[0],context:a}),N.index===K.lastIndex)K.lastIndex++;N=K.exec(y)}}}catch{}}if(G.length===0)return`No results found for pattern: ${H}
|
|
126
|
+
Searched ${R} files.`;let P=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${H}`,`Searched ${R} files.`,""];for(let D of G)P.push(`${D.file}:${D.line}:${D.column}`),P.push(...D.context),P.push("");if(G.length>=Q)P.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return P.join(`
|
|
127
|
+
`)}}function TB($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
|
|
128
|
+
`).replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&#(\d+);/g,(f,J)=>String.fromCharCode(parseInt(J,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
|
|
127
129
|
`).replace(/\n{3,}/g,`
|
|
128
130
|
|
|
129
|
-
`).trim()}function
|
|
130
|
-
[Content truncated: showing first 50000 of ${
|
|
131
|
-
`)}catch(
|
|
131
|
+
`).trim()}function P8($={}){let{timeoutMs:f=30000,maxResponseBytes:J=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:Z={},followRedirects:W=!0}=$;return async(j,X,H)=>{let Y;try{Y=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(Y.protocol))throw Error(`Invalid protocol: ${Y.protocol}. Only http and https are supported.`);let V=new AbortController,A=setTimeout(()=>V.abort(),f),B;if(H.signal)B=()=>V.abort(),H.signal.addEventListener("abort",B);try{let K=await fetch(j,{method:"GET",headers:{"User-Agent":Q,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",...Z},redirect:W?"follow":"manual",signal:V.signal});if(clearTimeout(A),!W&&K.status>=300&&K.status<400)return`Redirect to: ${K.headers.get("location")}`;if(!K.ok)throw Error(`HTTP ${K.status}: ${K.statusText}`);let G=K.headers.get("content-type")||"",R=K.body?.getReader();if(!R)throw Error("Failed to read response body");let F=[],P=0;while(!0){let{done:y,value:N}=await R.read();if(y)break;if(P+=N.length,P>J)throw R.cancel(),Error(`Response too large: exceeded ${J} bytes`);F.push(N)}let D=new Uint8Array(P),O=0;for(let y of F)D.set(y,O),O+=y.length;let _=new TextDecoder("utf-8").decode(D),L;if(G.includes("text/html")||G.includes("application/xhtml"))L=TB(_);else if(G.includes("application/json"))try{let y=JSON.parse(_);L=JSON.stringify(y,null,2)}catch{L=_}else L=_;let z=[`URL: ${j}`,`Content-Type: ${G}`,`Size: ${P} bytes`,"","--- Content ---",L.slice(0,50000)];if(L.length>50000)z.push(`
|
|
132
|
+
[Content truncated: showing first 50000 of ${L.length} characters]`);return z.push("","--- Analysis Request ---",`Prompt: ${X}`),z.join(`
|
|
133
|
+
`)}catch(K){if(clearTimeout(A),K instanceof Error){if(K.name==="AbortError")throw Error(`Request timed out after ${f}ms`);throw K}throw Error(`Fetch failed: ${String(K)}`)}finally{if(H.signal&&B)H.signal.removeEventListener("abort",B)}}}function F8($={}){return{readFile:V8($.fileRead),search:G8($.search),bash:H8($.bash),webFetch:P8($.webFetch),applyPatch:X8($.applyPatch),editor:Y8($.editor)}}var NB={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"},Df=[{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 jZ($,f){if(!f||f.length===0)return!0;let J=$.toLowerCase();return f.some((Q)=>J.includes(Q.toLowerCase()))}function MB($,f,J,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return jZ(f,$.providerIdIncludes)&&jZ(J,$.modelIdIncludes)}function Rf($,f,J,Q){if(!Q||Q.length===0)return{};let Z=new Map;for(let j of Q){if(!MB(j,$,f,J))continue;for(let X of j.disableTools??[])Z.set(X,!1);for(let X of j.enableTools??[])Z.set(X,!0)}let W={};for(let[j,X]of Z.entries())W[NB[j]]=X;return W}var p0={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 y$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function XZ($){if($!=="yolo")return{};let f={enabled:!0,autoApprove:!0},J={"*":f};for(let Q of b1)J[Q]=f;return J}function HZ($,f){let J=p0[$],{enableSpawnAgent:Q,enableAgentTeams:Z,...W}=J;return I1({...W,...f})}import{createTool as LK,zodToJsonSchema as OK}from"@cline/shared";import{z as OJ}from"zod";import{createAgentRuntime as AK}from"@cline/agents";import{createContributionRegistry as BK}from"@cline/shared";import{createGateway as qB,MODEL_COLLECTIONS_BY_PROVIDER_ID as wB}from"@cline/llms";function BJ($){let f=$.providerConfig;if(f?.knownModels)return f.knownModels;if($.knownModels)return $.knownModels;return wB[$.providerId]?.models??void 0}function SB($){if(!$?.length)return;let f=new Set;for(let J of $)switch(J){case"tools":case"reasoning":case"prompt-cache":case"images":f.add(J);break;case"structured_output":f.add("structured-output");break;default:f.add("text")}return f.add("text"),[...f]}function CB($,f){return{id:$,name:f.name??$,description:f.description,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxOutputTokens:f.maxTokens,capabilities:SB(f.capabilities),metadata:{family:f.family,pricing:f.pricing,status:f.status,releaseDate:f.releaseDate}}}function YZ($,f,J){let Q=$.providerConfig,Z=Q?.providerId===$.providerId?Q:void 0,W={...Z??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??Z?.apiKey,baseUrl:$.baseUrl??Z?.baseUrl,headers:$.headers??Z?.headers,knownModels:BJ($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:f,extensionContext:$.extensionContext};return qB({providerConfigs:[{providerId:W.providerId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,models:W.knownModels?Object.entries(W.knownModels).map(([j,X])=>CB(j,X)):void 0}],logger:f,telemetry:J??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:W.providerId,modelId:W.modelId},{maxTokens:W.maxOutputTokens})}import{normalizeUserInput as VZ}from"@cline/shared";var hB=50000,EB=6000000,AZ=8000,bB=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),kB=new Set(["read","read_files"]),J1="[outdated - see the latest file content]",BZ="Tool execution was interrupted before a result was produced.",IB=($)=>`
|
|
132
134
|
|
|
133
|
-
...[truncated ${
|
|
135
|
+
...[truncated ${$} chars]...
|
|
134
136
|
|
|
135
|
-
|
|
137
|
+
`,xB=($)=>`
|
|
136
138
|
|
|
137
|
-
...[truncated ${
|
|
139
|
+
...[truncated ${$} chars to fit provider request budget]...
|
|
138
140
|
|
|
139
|
-
`;class a6{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor(f=tB,$=oB,J=sB){this.maxToolResultChars=f;this.targetToolNames=$;this.maxTotalTextBytes=J}buildForApi(f){this.reindex(f);let J=this.addMissingToolResults(f).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let Z=p9(W.content);if(Z!==W.content)return{...W,content:Z}}return W}let H=!1,Q=W.content.map((Z)=>{let j=this.transformBlock(Z,W.role);if(j!==Z)H=!0;return j});return H?{...W,content:Q}:W});return this.truncateToTotalTextBudget(J)}transformBlock(f,$){if($==="user"&&f.type==="text"&&typeof f.text==="string"){let H=p9(f.text);if(H!==f.text)return{...f,text:H};return f}if(f.type==="file"){let H=this.truncateMiddle(f.content);return H===f.content?f:{...f,content:H}}if(f.type!=="tool_result")return f;let J=this.toolNameByIdCache.get(f.tool_use_id),W=f.content;if(this.isReadTool(J)&&f.is_error!==!0){let H=this.getReadLocators(f);if(H.length>0){let Q=H.filter((Z)=>this.isOutdatedReadLocator(Z,f.tool_use_id));if(Q.length>0)W=this.replaceOutdatedReadContent(W,Q)}}if(this.shouldTruncateTool(J))W=this.truncateToolResultContent(W);return W===f.content?f:{...f,content:W}}reindex(f){let $=this.indexedMessageCount===0||f.length>=this.indexedMessageCount&&f[this.indexedMessageCount-1]===this.indexedTailRef;if(f.length<this.indexedMessageCount||!$)this.resetIndexes();for(let J=this.indexedMessageCount;J<f.length;J++){let W=f[J];if(!Array.isArray(W.content))continue;for(let H=0;H<W.content.length;H++){let Q=W.content[H];if(Q.type==="file")this.latestFullContentOwnerByPathCache.set(Q.path,`file:${J}:${H}`);else if(Q.type==="tool_use"){let Z=Q.name.toLowerCase();if(this.toolNameByIdCache.set(Q.id,Z),this.isReadTool(Z)){let j=this.extractLocatorsFromReadToolInput(Q.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(Q.id,j)}}else if(Q.type==="tool_result"){let Z=this.toolNameByIdCache.get(Q.tool_use_id);if(!this.isReadTool(Z)||Q.is_error===!0)continue;let j=this.getReadLocators(Q);for(let X of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(X),Q.tool_use_id),this.isFullFileRead(X))this.latestFullContentOwnerByPathCache.set(X.path,Q.tool_use_id)}}}this.indexedMessageCount=f.length,this.indexedTailRef=f.length>0?f[f.length-1]:void 0}addMissingToolResults(f){let $=this.collectToolResultIds(f),J=[],W=new Map,H=!1,Q=()=>{if(W.size===0)return;Z(this.createMissingToolResultMessage(W)),W.clear(),H=!0},Z=(j)=>{let X=J.at(-1);if(this.shouldMergeUserAfterToolResults(X,j)){J[J.length-1]={...X,content:[...X.content,...this.contentBlocksForUserMerge(j.content)]},H=!0;return}J.push(j)};for(let j of f){if(this.isToolResultOnlyMessage(j)){if(Z(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),H=!0;continue}if(Array.isArray(j.content)){let X=j.content.filter((P)=>P.type==="tool_result"),A=j.content.filter((P)=>P.type!=="tool_result");if(X.length>0){let P=this.appendMissingToolResults({...j,role:"user",content:X},W);if(Z(P),W.size>0)W.clear();H=!0}if(A.length>0||X.length===0){if(X.length===0)Q();let P=X.length>0?{...j,content:A}:j;if(Z(P),P.role==="assistant")this.trackMissingToolCalls(P,$,W)}continue}Q(),Z(j)}return Q(),H?J:f}appendMissingToolResults(f,$){if($.size===0||!Array.isArray(f.content))return f;return{...f,role:"user",content:[...f.content,...this.createMissingToolResultBlocks($)]}}shouldMergeUserAfterToolResults(f,$){return f?.role==="user"&&$.role==="user"&&this.isToolResultOnlyMessage(f)&&this.contentBlocksForUserMerge($.content).length>0}contentBlocksForUserMerge(f){return typeof f==="string"?f.length>0?[{type:"text",text:f}]:[]:f}collectToolResultIds(f){let $=new Set;for(let J of f){if(!Array.isArray(J.content))continue;for(let W of J.content)if(W.type==="tool_result")$.add(W.tool_use_id)}return $}isToolResultOnlyMessage(f){return f.role==="user"&&Array.isArray(f.content)&&f.content.length>0&&f.content.every(($)=>$.type==="tool_result")}trackMissingToolCalls(f,$,J){if(!Array.isArray(f.content))return;for(let W of f.content){if(W.type!=="tool_use"||$.has(W.id))continue;J.set(W.id,W.name)}}createMissingToolResultMessage(f){return{role:"user",content:this.createMissingToolResultBlocks(f)}}createMissingToolResultBlocks(f){return Array.from(f,([$,J])=>({type:"tool_result",tool_use_id:$,content:[{type:"text",text:this.formatMissingToolResultText(J)}],is_error:!0}))}formatMissingToolResultText(f){return f?`${n9} Tool: ${f}.`:n9}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(f){let $=f,J=this.readResultLocatorCache.get($);if(J===void 0)J=this.extractReadLocatorsFromToolResultContent(f.content),this.readResultLocatorCache.set($,J);if(J.length>0)return J;return this.readLocatorsByToolUseIdCache.get(f.tool_use_id)??[]}extractLocatorsFromReadToolInput(f){if(!f||typeof f!=="object")return[];let $=f,J=[],W=this.extractLocatorFromReadRequest($);if(W)J.push(W);if(Array.isArray($.files))for(let H of $.files){let Q=this.extractLocatorFromReadRequest(H);if(Q)J.push(Q)}if(Array.isArray($.file_paths)){for(let H of $.file_paths)if(typeof H==="string"&&H.length>0)J.push({path:H,startLine:null,endLine:null})}return this.dedupeReadLocators(J)}extractReadLocatorsFromToolResultContent(f){if(typeof f==="string")return this.tryParseReadLocators(f);for(let $ of f){if($.type!=="text")continue;let J=this.tryParseReadLocators($.text);if(J.length>0)return J}return[]}tryParseReadLocators(f){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(f))}catch{return[]}}extractLocatorsFromParsedReadResult(f){if(Array.isArray(f)){let J=[];for(let W of f){let H=this.extractLocatorFromResultEntry(W);if(H)J.push(H)}return this.dedupeReadLocators(J)}let $=this.extractLocatorFromResultEntry(f);return $?[$]:[]}extractLocatorFromReadRequest(f){if(!f||typeof f!=="object")return;let $=f,J=this.extractPath($);if(!J)return;return{path:J,startLine:this.extractLineNumber($.start_line),endLine:this.extractLineNumber($.end_line)}}extractLocatorFromResultEntry(f){if(!f||typeof f!=="object")return;let $=f,J=this.extractPath($);if(J)return{path:J,startLine:this.extractLineNumber($.start_line),endLine:this.extractLineNumber($.end_line)};if(typeof $.query==="string"&&$.query.length>0)return this.parseReadQuery($.query);return}extractPath(f){let $=[f.path,f.file_path,f.filePath];for(let J of $)if(typeof J==="string"&&J.length>0)return J;return}extractLineNumber(f){return typeof f==="number"&&Number.isInteger(f)?f:null}parseReadQuery(f){let $=/^(.*):(\d+)-(EOF|\d+)$/.exec(f);if(!$)return{path:f,startLine:null,endLine:null};return{path:$[1],startLine:Number($[2]),endLine:$[3]==="EOF"?null:Number($[3])}}dedupeReadLocators(f){let $=new Map;for(let J of f)$.set(this.toReadLocatorKey(J),J);return Array.from($.values())}toReadLocatorKey(f){if(this.isFullFileRead(f))return f.path;return`${f.path}:${f.startLine??1}-${f.endLine??"EOF"}`}isFullFileRead(f){return f.startLine==null&&f.endLine==null}isOutdatedReadLocator(f,$){let J=this.latestFullContentOwnerByPathCache.get(f.path);if(J&&J!==$)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(f))!==$}replaceOutdatedReadContent(f,$){let J=new Set($.map((Q)=>this.toReadLocatorKey(Q))),W=new Set($.map((Q)=>Q.path));if(typeof f==="string")return this.replaceOutdatedInString(f,J)??e0;let H=0;for(let Q of f)if(Q.type==="text")H+=this.countOutdatedImageEntries(Q.text,J);return f.map((Q)=>{if(Q.type==="file"){if(!W.has(Q.path))return Q;return{...Q,content:e0}}if(Q.type==="image"){if(H===0)return Q;return H-=1,{type:"text",text:e0}}if(Q.type!=="text")return Q;let Z=this.replaceOutdatedInString(Q.text,J);if(Z===null)return{...Q,text:e0};return Z===Q.text?Q:{...Q,text:Z}})}countOutdatedImageEntries(f,$){let J;try{J=JSON.parse(f)}catch{return 0}let W=Array.isArray(J)?J:[J],H=0;for(let Q of W){if(!Q||typeof Q!=="object")continue;let Z=Q,j=this.extractLocatorFromResultEntry(Z);if(!j)continue;if(!$.has(this.toReadLocatorKey(j)))continue;if(Z.result==="Successfully read image"||Z.content==="Successfully read image")H+=1}return H}replaceOutdatedInString(f,$){let J;try{J=JSON.parse(f)}catch{return null}let W=Array.isArray(J)?J.map((H)=>this.replaceOutdatedReadEntry(H,$)):this.replaceOutdatedReadEntry(J,$);return JSON.stringify(W)}replaceOutdatedReadEntry(f,$){if(!f||typeof f!=="object")return f;let J=this.extractLocatorFromResultEntry(f);if(!J||!$.has(this.toReadLocatorKey(J)))return f;let W={...f};if(typeof W.result==="string")W.result=e0;else if(typeof W.content==="string")W.content=e0;else W.result=e0;return W}isReadTool(f){return!!f&&eB.has(f)}shouldTruncateTool(f){return!!f&&this.targetToolNames.has(f)}truncateToolResultContent(f){if(typeof f==="string")return this.truncateMiddle(f);return f.map(($)=>{if($.type==="file"){let W=this.truncateMiddle($.content);return W===$.content?$:{...$,content:W}}if($.type!=="text")return $;let J=this.truncateMiddle($.text);return J===$.text?$:{...$,text:J}})}truncateMiddle(f){return n6(f,this.maxToolResultChars,fY)}truncateToTotalTextBudget(f){if(this.maxTotalTextBytes<=0)return f;let $=this.countMessageTextBytes(f);if($<=this.maxTotalTextBytes)return f;let J=f.map((H)=>{if(!Array.isArray(H.content))return H;return{...H,content:H.content.map((Q)=>WY(Q))}}),W=this.collectTruncationCandidates(J);for(let H of W){if($<=this.maxTotalTextBytes)break;let Q=H.byteLength;if(Q<=i9)continue;let Z=$-this.maxTotalTextBytes,j=Math.max(i9,Q-Z),X=JY(H.get(),j,$Y);H.set(X),$-=Q-Tf(X)}return J}countMessageTextBytes(f){let $=0;for(let J of f){if(typeof J.content==="string"){$+=Tf(J.content);continue}for(let W of J.content)if(W.type==="text")$+=Tf(W.text);else if(W.type==="thinking")$+=Tf(W.thinking);else if(W.type==="file")$+=Tf(W.content);else if(W.type==="tool_result"){if(typeof W.content==="string")$+=Tf(W.content);else for(let H of W.content)if(H.type==="text")$+=Tf(H.text);else if(H.type==="file")$+=Tf(H.content)}}return $}collectTruncationCandidates(f){let $=[];for(let J of f){if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type!=="tool_result")continue;let H=this.toolNameByIdCache.get(W.tool_use_id);if(!this.shouldTruncateTool(H))continue;if(typeof W.content==="string"){$.push({byteLength:Tf(W.content),get:()=>W.content,set:(Q)=>{W.content=Q}});continue}for(let Q of W.content)if(Q.type==="text")$.push({byteLength:Tf(Q.text),get:()=>Q.text,set:(Z)=>{Q.text=Z}});else if(Q.type==="file")$.push({byteLength:Tf(Q.content),get:()=>Q.content,set:(Z)=>{Q.content=Z}})}}return $.sort((J,W)=>W.byteLength-J.byteLength)}}function Tf(f){return Buffer.byteLength(f,"utf8")}function n6(f,$,J){if(f.length<=$)return f;let W=J(f.length-$),H=Math.max(0,Math.floor(($-W.length)/2)),Q=Math.max(0,f.length-H*2),Z=J(Q),j=Math.max(0,Math.floor(($-Z.length)/2)),X=f.slice(0,j),A=j>0?f.slice(-j):"";return`${X}${Z}${A}`}function JY(f,$,J){if(Tf(f)<=$)return f;let W=0,H=f.length,Q=n6(f,0,J);while(W<=H){let Z=W+H>>>1,j=n6(f,Z,J);if(Tf(j)<=$)Q=j,W=Z+1;else H=Z-1}return Q}function WY(f){if(f.type!=="tool_result"||typeof f.content==="string")return{...f};return{...f,content:f.content.map(($)=>({...$}))}}function t6(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class s6{messages=[];conversationId=t6();sessionStarted=!1;constructor(f){if((f?.length??0)>0)this.restore(f??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(f){this.messages.push(f)}appendMessages(f){if(f.length===0)return;this.messages.push(...f)}replaceMessages(f){this.messages=[...f]}resetForRun(){this.messages=[],this.conversationId=t6(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=t6(),this.sessionStarted=!1}restore(f){this.messages=[...f],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function HY(f){let $=ZY(f.content),J=[],W=f.id??AY(),H=0,Q=[],Z=()=>{if(Q.length===0)return;let j=H===0?W:`${W}_part_${H}`;H+=1,J.push({id:j,role:f.role,content:Q.map(jY),createdAt:f.ts??Date.now(),metadata:f.metadata,modelInfo:f.modelInfo,metrics:a9(f.metrics)}),Q=[]};if($.length===0)return J.push({id:W,role:f.role,content:[],createdAt:f.ts??Date.now(),metadata:f.metadata,modelInfo:f.modelInfo,metrics:a9(f.metrics)}),J;for(let j of $){if(j.type!=="tool_result"){Q.push(j);continue}Z(),J.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[o9(j)],createdAt:f.ts??Date.now(),metadata:f.metadata})}return Z(),J}function Q8(f){return f.flatMap(HY)}function QY(f){let $=f.content.map(e9).filter((J)=>J!==void 0);return{id:f.id,role:f.role==="tool"?"user":f.role,content:$,ts:f.createdAt,metadata:f.metadata,modelInfo:f.modelInfo,metrics:XY(f.metrics)}}function k$(f){return f.map(QY)}function s9(f){let $=[];for(let J of f){let W=J.content.map(e9).filter((Z)=>Z!==void 0),H=J.role==="tool"?"user":J.role,Q=$[$.length-1];if(H==="user"&&W.length>0&&W.every((Z)=>Z.type==="tool_result")&&Q?.role==="user"&&Array.isArray(Q.content)&&Q.content.every((Z)=>Z.type==="tool_result")){Q.content.push(...W);continue}$.push({role:H,content:W})}return $}function ZY(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];return[...f]}function jY(f){switch(f.type){case"text":return{type:"text",text:f.text};case"thinking":return{type:"reasoning",text:f.thinking,metadata:f.signature?{signature:f.signature,details:f.details}:f.details?{details:f.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:f.data}};case"image":return{type:"image",image:f.data,mediaType:f.mediaType};case"file":return{type:"file",path:f.path,content:f.content};case"tool_use":return{type:"tool-call",toolCallId:f.id,toolName:f.name,input:f.input,metadata:f.signature?{signature:f.signature}:void 0};case"tool_result":return o9(f)}}function o9(f){return{type:"tool-result",toolCallId:f.tool_use_id,toolName:"",output:f.content,isError:f.is_error}}function e9(f){switch(f.type){case"text":return{type:"text",text:f.text};case"reasoning":{if(f.redacted===!0)return{type:"redacted_thinking",data:f.metadata?.data??""};let $=f.metadata;return{type:"thinking",thinking:f.text,signature:$?.signature,details:$?.details}}case"image":return typeof f.image==="string"?{type:"image",data:f.image,mediaType:f.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:f.path,content:f.content};case"tool-call":return{type:"tool_use",id:f.toolCallId,name:f.toolName,input:f.input??{},signature:f.metadata?.signature};case"tool-result":{let $=f.output,J=typeof $==="string"?$:Array.isArray($)?$:JSON.stringify($);return{type:"tool_result",tool_use_id:f.toolCallId,content:J,is_error:f.isError}}}}function a9(f){if(!f)return;return{inputTokens:f.inputTokens??0,outputTokens:f.outputTokens??0,cacheReadTokens:f.cacheReadTokens??0,cacheWriteTokens:f.cacheWriteTokens??0,cost:f.cost}}function XY(f){if(!f)return;return{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheWriteTokens:f.cacheWriteTokens,cost:f.cost}}var t9=0;function AY(){return t9+=1,`msg_${Date.now().toString(36)}_${t9.toString(36)}`}function f3(f){let{agentConfig:$}=f,J=PY($),W=BY($),H=f.hooks,Q=YY($.maxParallelToolCalls);return{sessionId:f.sessionId??$.sessionId,agentId:f.agentId,conversationId:f.conversationId,parentAgentId:f.parentAgentId,agentRole:f.agentRole,systemPrompt:f.systemPrompt??$.systemPrompt,messageModelInfo:W,model:f.model,modelOptions:J,tools:f.tools,hooks:H,prepareTurn:f.prepareTurn,consumePendingUserMessage:$.consumePendingUserMessage,plugins:f.plugins,logger:f.logger??$.logger,telemetry:f.telemetry??VY($.telemetry),initialMessages:f.initialMessages,completionPolicy:$.completionPolicy,maxIterations:$.maxIterations,toolExecution:Q,toolPolicies:$.toolPolicies,toolContextMetadata:f.toolContextMetadata,requestToolApproval:$.requestToolApproval}}function PY(f){let $={};if(f.thinking!==void 0)$.thinking=f.thinking;if(f.reasoningEffort!==void 0)$.reasoningEffort=f.reasoningEffort;if(f.thinkingBudgetTokens!==void 0)$.thinkingBudgetTokens=f.thinkingBudgetTokens;if(f.maxTokensPerTurn!==void 0)$.maxTokensPerTurn=f.maxTokensPerTurn;if(f.apiTimeoutMs!==void 0)$.apiTimeoutMs=f.apiTimeoutMs;return Object.keys($).length>0?$:void 0}function BY(f){let $=f.providerConfig?.family;return{id:f.modelId,provider:f.providerId,family:$}}function YY(f){if(f===void 0)return;return f>=2?"parallel":"sequential"}function VY(f){if(!f)return;return{capture:($,J)=>{f.capture({event:$,properties:J})}}}function RY(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function FY(f){f.lastToolName="",f.lastToolSignature="",f.consecutiveIdenticalCount=0}function o6(f){if(f==null||typeof f!=="object")return f;if(Array.isArray(f))return f.map(o6);let $={};for(let J of Object.keys(f).sort())$[J]=o6(f[J]);return $}function KY(f){if(f==null)return"null";if(typeof f==="string")return f;if(typeof f!=="object")return String(f);try{return JSON.stringify(o6(f))}catch{return String(f)}}function yY(f,$,J,W){if($===f.lastToolName&&J===f.lastToolSignature)f.consecutiveIdenticalCount++;else f.consecutiveIdenticalCount=1;return f.lastToolName=$,f.lastToolSignature=J,{softWarning:f.consecutiveIdenticalCount===W.softThreshold,hardEscalation:f.consecutiveIdenticalCount>=W.hardThreshold}}var $3={softThreshold:3,hardThreshold:5};class e6{config;state=RY();constructor(f){this.config={softThreshold:f?.softThreshold??$3.softThreshold,hardThreshold:f?.hardThreshold??$3.hardThreshold}}inspect(f){let $=KY(f.input),J=yY(this.state,f.name,$,this.config);if(J.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${f.name}\`; stopping to avoid a loop.`};if(J.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${f.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){FY(this.state)}}class fJ{consecutiveMistakes=0;options;constructor(f){this.options=f}async record(f){let $=this.options.maxConsecutiveMistakes,J=f.forceAtLimit&&$?$:this.consecutiveMistakes+1;this.consecutiveMistakes=J;let W=f.details?.trim()||`consecutive mistake (${f.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:f.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:f.iteration,reason:f.reason,details:f.details,consecutiveMistakes:J,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!$||J<$)return{action:"continue"};let H=await GY({iteration:f.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:$,reason:f.reason,details:f.details},this.options.onLimitReached);if(H.action==="continue"){let Q=H.guidance?.trim();if(Q)this.options.appendRecoveryNotice(Q,f.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:Q}}return{action:"stop",reason:H.reason?.trim()||void 0,message:UY({iteration:f.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:$,reason:f.reason,details:f.details,stopReason:H.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function UY(f){let $=[`Stopped after ${f.consecutiveMistakes}/${f.maxConsecutiveMistakes} consecutive mistakes (${f.reason}) at iteration ${f.iteration}.`],J=f.details?.trim();if(J)$.push(`Error: ${J}`);let W=f.stopReason?.trim();if(W)$.push(`Decision: ${W}`);return $.push("Session state was preserved. Send a new prompt to resume from the latest state."),$.join(" ")}async function GY(f,$){if(!$)return{action:"stop",reason:`maximum consecutive mistakes reached (${f.maxConsecutiveMistakes})`};try{return await $(f)}catch(J){return{action:"stop",reason:J instanceof Error?J.message:`maximum consecutive mistakes reached (${f.maxConsecutiveMistakes})`}}}function TY(f){let $=f.content.filter((J)=>J.type==="text");if($.length===0)return;return $.map((J)=>J.text).join("")}function DY(f){let $=f.content.filter((J)=>J.type==="reasoning");if($.length===0)return;return{reasoning:$.map((J)=>J.text).join(""),redacted:$.some((J)=>J.redacted===!0)}}function _Y(f){return f.content.find(($)=>$.type==="tool-result")}function MY(f){switch(f){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function LY(f){if(!f||f.isError!==!0)return;if(typeof f.output==="string")return f.output;if(f.output instanceof Error)return f.output.message;try{return JSON.stringify(f.output)}catch{return String(f.output)}}class $J{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate(f){switch(f.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:f.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:f.iteration,hadToolCalls:f.toolCallCount>0,toolCallCount:f.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:f.text,accumulated:f.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:f.text,redacted:f.redacted===!0}];case"assistant-message":return this.translateAssistantMessage(f.message);case"tool-started":return this.translateToolStarted(f);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,update:f.update}];case"tool-finished":return this.translateToolFinished(f);case"usage-updated":return this.translateUsage(f.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:f.message,reason:f.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:f.metadata}];case"run-finished":return this.translateRunFinished(f.result);case"run-failed":return[{type:"error",error:f.error,recoverable:!1,iteration:f.snapshot.iteration}];default:return f}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage(f){let $=[],J=TY(f);if(J!==void 0)$.push({type:"content_end",contentType:"text",text:J});let W=DY(f);if(W!==void 0)$.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return $}translateToolStarted(f){return this.toolStartedAt.set(f.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,input:f.toolCall.input}]}translateToolFinished(f){let $=this.toolStartedAt.get(f.toolCall.toolCallId),J=$===void 0?void 0:Date.now()-$;this.toolStartedAt.delete(f.toolCall.toolCallId);let W=_Y(f.message),H=W?.output,Q=LY(W);return[{type:"content_end",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,output:H,error:Q,durationMs:J}]}translateUsage(f){let $=f.inputTokens-this.lastUsage.inputTokens,J=f.outputTokens-this.lastUsage.outputTokens,W=f.cacheReadTokens-this.lastUsage.cacheReadTokens,H=f.cacheWriteTokens-this.lastUsage.cacheWriteTokens,Q=this.lastUsage.totalCost??0,j=(f.totalCost??0)-Q;return this.lastUsage={inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheWriteTokens:f.cacheWriteTokens,totalCost:f.totalCost},[{type:"usage",inputTokens:Math.max(0,$),outputTokens:Math.max(0,J),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:H===0?void 0:Math.max(0,H),cost:j===0?void 0:j,totalInputTokens:f.inputTokens,totalOutputTokens:f.outputTokens,totalCacheReadTokens:f.cacheReadTokens===0?void 0:f.cacheReadTokens,totalCacheWriteTokens:f.cacheWriteTokens===0?void 0:f.cacheWriteTokens,totalCost:f.totalCost}]}translateRunFinished(f){let $={inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens===0?void 0:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens===0?void 0:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost};return[{type:"done",reason:MY(f.status),text:f.outputText,iterations:f.iterations,usage:$}]}}function CY(f){if(typeof f==="string")return f;if(f instanceof Error)return f.message;try{return JSON.stringify(f)}catch{return String(f)}}async function EY(f){let J=(typeof f.content==="function"?await f.content():f.content).trim();return J.length>0?J:void 0}function SY(f,$){let J=f.trim(),W=$.map((H)=>H.trim()).filter(Boolean).join(`
|
|
141
|
+
`;class GJ{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor($=hB,f=bB,J=EB){this.maxToolResultChars=$;this.targetToolNames=f;this.maxTotalTextBytes=J}buildForApi($){this.reindex($);let J=this.addMissingToolResults($).map((Q)=>{if(!Array.isArray(Q.content)){if(Q.role==="user"&&typeof Q.content==="string"){let j=VZ(Q.content);if(j!==Q.content)return{...Q,content:j}}return Q}let Z=!1,W=Q.content.map((j)=>{let X=this.transformBlock(j,Q.role);if(X!==j)Z=!0;return X});return Z?{...Q,content:W}:Q});return this.truncateToTotalTextBudget(J)}transformBlock($,f){if(f==="user"&&$.type==="text"&&typeof $.text==="string"){let Z=VZ($.text);if(Z!==$.text)return{...$,text:Z};return $}if($.type==="file"){let Z=this.truncateMiddle($.content);return Z===$.content?$:{...$,content:Z}}if($.type!=="tool_result")return $;let J=this.toolNameByIdCache.get($.tool_use_id),Q=$.content;if(this.isReadTool(J)&&$.is_error!==!0){let Z=this.getReadLocators($);if(Z.length>0){let W=Z.filter((j)=>this.isOutdatedReadLocator(j,$.tool_use_id));if(W.length>0)Q=this.replaceOutdatedReadContent(Q,W)}}if(this.shouldTruncateTool(J))Q=this.truncateToolResultContent(Q);return Q===$.content?$:{...$,content:Q}}reindex($){let f=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!f)this.resetIndexes();for(let J=this.indexedMessageCount;J<$.length;J++){let Q=$[J];if(!Array.isArray(Q.content))continue;for(let Z=0;Z<Q.content.length;Z++){let W=Q.content[Z];if(W.type==="file")this.latestFullContentOwnerByPathCache.set(W.path,`file:${J}:${Z}`);else if(W.type==="tool_use"){let j=W.name.toLowerCase();if(this.toolNameByIdCache.set(W.id,j),this.isReadTool(j)){let X=this.extractLocatorsFromReadToolInput(W.input);if(X.length>0)this.readLocatorsByToolUseIdCache.set(W.id,X)}}else if(W.type==="tool_result"){let j=this.toolNameByIdCache.get(W.tool_use_id);if(!this.isReadTool(j)||W.is_error===!0)continue;let X=this.getReadLocators(W);for(let H of X)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(H),W.tool_use_id),this.isFullFileRead(H))this.latestFullContentOwnerByPathCache.set(H.path,W.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let f=this.collectToolResultIds($),J=[],Q=new Map,Z=!1,W=()=>{if(Q.size===0)return;j(this.createMissingToolResultMessage(Q)),Q.clear(),Z=!0},j=(X)=>{let H=J.at(-1);if(this.shouldMergeUserAfterToolResults(H,X)){J[J.length-1]={...H,content:[...H.content,...this.contentBlocksForUserMerge(X.content)]},Z=!0;return}J.push(X)};for(let X of $){if(this.isToolResultOnlyMessage(X)){if(j(this.appendMissingToolResults(X,Q)),Q.size>0)Q.clear(),Z=!0;continue}if(Array.isArray(X.content)){let H=X.content.filter((V)=>V.type==="tool_result"),Y=X.content.filter((V)=>V.type!=="tool_result");if(H.length>0){let V=this.appendMissingToolResults({...X,role:"user",content:H},Q);if(j(V),Q.size>0)Q.clear();Z=!0}if(Y.length>0||H.length===0){if(H.length===0)W();let V=H.length>0?{...X,content:Y}:X;if(j(V),V.role==="assistant")this.trackMissingToolCalls(V,f,Q)}continue}W(),j(X)}return W(),Z?J:$}appendMissingToolResults($,f){if(f.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(f)]}}shouldMergeUserAfterToolResults($,f){return $?.role==="user"&&f.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(f.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let f=new Set;for(let J of $){if(!Array.isArray(J.content))continue;for(let Q of J.content)if(Q.type==="tool_result")f.add(Q.tool_use_id)}return f}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((f)=>f.type==="tool_result")}trackMissingToolCalls($,f,J){if(!Array.isArray($.content))return;for(let Q of $.content){if(Q.type!=="tool_use"||f.has(Q.id))continue;J.set(Q.id,Q.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([f,J])=>({type:"tool_result",tool_use_id:f,content:[{type:"text",text:this.formatMissingToolResultText(J)}],is_error:!0}))}formatMissingToolResultText($){return $?`${BZ} Tool: ${$}.`:BZ}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 f=$,J=this.readResultLocatorCache.get(f);if(J===void 0)J=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(f,J);if(J.length>0)return J;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let f=$,J=[],Q=this.extractLocatorFromReadRequest(f);if(Q)J.push(Q);if(Array.isArray(f.files))for(let Z of f.files){let W=this.extractLocatorFromReadRequest(Z);if(W)J.push(W)}if(Array.isArray(f.file_paths)){for(let Z of f.file_paths)if(typeof Z==="string"&&Z.length>0)J.push({path:Z,startLine:null,endLine:null})}return this.dedupeReadLocators(J)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);for(let f of $){if(f.type!=="text")continue;let J=this.tryParseReadLocators(f.text);if(J.length>0)return J}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let J=[];for(let Q of $){let Z=this.extractLocatorFromResultEntry(Q);if(Z)J.push(Z)}return this.dedupeReadLocators(J)}let f=this.extractLocatorFromResultEntry($);return f?[f]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let f=$,J=this.extractPath(f);if(!J)return;return{path:J,startLine:this.extractLineNumber(f.start_line),endLine:this.extractLineNumber(f.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let f=$,J=this.extractPath(f);if(J)return{path:J,startLine:this.extractLineNumber(f.start_line),endLine:this.extractLineNumber(f.end_line)};if(typeof f.query==="string"&&f.query.length>0)return this.parseReadQuery(f.query);return}extractPath($){let f=[$.path,$.file_path,$.filePath];for(let J of f)if(typeof J==="string"&&J.length>0)return J;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let f=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!f)return{path:$,startLine:null,endLine:null};return{path:f[1],startLine:Number(f[2]),endLine:f[3]==="EOF"?null:Number(f[3])}}dedupeReadLocators($){let f=new Map;for(let J of $)f.set(this.toReadLocatorKey(J),J);return Array.from(f.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,f){let J=this.latestFullContentOwnerByPathCache.get($.path);if(J&&J!==f)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==f}replaceOutdatedReadContent($,f){let J=new Set(f.map((W)=>this.toReadLocatorKey(W))),Q=new Set(f.map((W)=>W.path));if(typeof $==="string")return this.replaceOutdatedInString($,J)??J1;let Z=0;for(let W of $)if(W.type==="text")Z+=this.countOutdatedImageEntries(W.text,J);return $.map((W)=>{if(W.type==="file"){if(!Q.has(W.path))return W;return{...W,content:J1}}if(W.type==="image"){if(Z===0)return W;return Z-=1,{type:"text",text:J1}}if(W.type!=="text")return W;let j=this.replaceOutdatedInString(W.text,J);if(j===null)return{...W,text:J1};return j===W.text?W:{...W,text:j}})}countOutdatedImageEntries($,f){let J;try{J=JSON.parse($)}catch{return 0}let Q=Array.isArray(J)?J:[J],Z=0;for(let W of Q){if(!W||typeof W!=="object")continue;let j=W,X=this.extractLocatorFromResultEntry(j);if(!X)continue;if(!f.has(this.toReadLocatorKey(X)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")Z+=1}return Z}replaceOutdatedInString($,f){let J;try{J=JSON.parse($)}catch{return null}let Q=Array.isArray(J)?J.map((Z)=>this.replaceOutdatedReadEntry(Z,f)):this.replaceOutdatedReadEntry(J,f);return JSON.stringify(Q)}replaceOutdatedReadEntry($,f){if(!$||typeof $!=="object")return $;let J=this.extractLocatorFromResultEntry($);if(!J||!f.has(this.toReadLocatorKey(J)))return $;let Q={...$};if(typeof Q.result==="string")Q.result=J1;else if(typeof Q.content==="string")Q.content=J1;else Q.result=J1;return Q}isReadTool($){return!!$&&kB.has($)}shouldTruncateTool($){return!!$&&this.targetToolNames.has($)}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((f)=>{if(f.type==="file"){let Q=this.truncateMiddle(f.content);return Q===f.content?f:{...f,content:Q}}if(f.type!=="text")return f;let J=this.truncateMiddle(f.text);return J===f.text?f:{...f,text:J}})}truncateMiddle($){return KJ($,this.maxToolResultChars,IB)}truncateToTotalTextBudget($){if(this.maxTotalTextBytes<=0)return $;let f=this.countMessageTextBytes($);if(f<=this.maxTotalTextBytes)return $;let J=$.map((Z)=>{if(!Array.isArray(Z.content))return Z;return{...Z,content:Z.content.map((W)=>mB(W))}}),Q=this.collectTruncationCandidates(J);for(let Z of Q){if(f<=this.maxTotalTextBytes)break;let W=Z.byteLength;if(W<=AZ)continue;let j=f-this.maxTotalTextBytes,X=Math.max(AZ,W-j),H=gB(Z.get(),X,xB);Z.set(H),f-=W-L0(H)}return J}countMessageTextBytes($){let f=0;for(let J of $){if(typeof J.content==="string"){f+=L0(J.content);continue}for(let Q of J.content)if(Q.type==="text")f+=L0(Q.text);else if(Q.type==="thinking")f+=L0(Q.thinking);else if(Q.type==="file")f+=L0(Q.content);else if(Q.type==="tool_result"){if(typeof Q.content==="string")f+=L0(Q.content);else for(let Z of Q.content)if(Z.type==="text")f+=L0(Z.text);else if(Z.type==="file")f+=L0(Z.content)}}return f}collectTruncationCandidates($){let f=[];for(let J of $){if(!Array.isArray(J.content))continue;for(let Q of J.content){if(Q.type!=="tool_result")continue;let Z=this.toolNameByIdCache.get(Q.tool_use_id);if(!this.shouldTruncateTool(Z))continue;if(typeof Q.content==="string"){f.push({byteLength:L0(Q.content),get:()=>Q.content,set:(W)=>{Q.content=W}});continue}for(let W of Q.content)if(W.type==="text")f.push({byteLength:L0(W.text),get:()=>W.text,set:(j)=>{W.text=j}});else if(W.type==="file")f.push({byteLength:L0(W.content),get:()=>W.content,set:(j)=>{W.content=j}})}}return f.sort((J,Q)=>Q.byteLength-J.byteLength)}}function L0($){return Buffer.byteLength($,"utf8")}function KJ($,f,J){if($.length<=f)return $;let Q=J($.length-f),Z=Math.max(0,Math.floor((f-Q.length)/2)),W=Math.max(0,$.length-Z*2),j=J(W),X=Math.max(0,Math.floor((f-j.length)/2)),H=$.slice(0,X),Y=X>0?$.slice(-X):"";return`${H}${j}${Y}`}function gB($,f,J){if(L0($)<=f)return $;let Q=0,Z=$.length,W=KJ($,0,J);while(Q<=Z){let j=Q+Z>>>1,X=KJ($,j,J);if(L0(X)<=f)W=X,Q=j+1;else Z=j-1}return W}function mB($){if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((f)=>({...f}))}}function PJ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class FJ{messages=[];conversationId=PJ();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=PJ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=PJ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function vB($){let f=uB($.content),J=[],Q=$.id??pB(),Z=0,W=[],j=()=>{if(W.length===0)return;let X=Z===0?Q:`${Q}_part_${Z}`;Z+=1,J.push({id:X,role:$.role,content:W.map(dB),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:KZ($.metrics)}),W=[]};if(f.length===0)return J.push({id:Q,role:$.role,content:[],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:KZ($.metrics)}),J;for(let X of f){if(X.type!=="tool_result"){W.push(X);continue}j(),J.push({id:`${Q}_tool_${X.tool_use_id}`,role:"tool",content:[FZ(X)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return j(),J}function D8($){return $.flatMap(vB)}function cB($){let f=$.content.map(DZ).filter((J)=>J!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:f,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:lB($.metrics)}}function g1($){return $.map(cB)}function PZ($){let f=[];for(let J of $){let Q=J.content.map(DZ).filter((j)=>j!==void 0),Z=J.role==="tool"?"user":J.role,W=f[f.length-1];if(Z==="user"&&Q.length>0&&Q.every((j)=>j.type==="tool_result")&&W?.role==="user"&&Array.isArray(W.content)&&W.content.every((j)=>j.type==="tool_result")){W.content.push(...Q);continue}f.push({role:Z,content:Q})}return f}function uB($){if(typeof $==="string")return $.length>0?[{type:"text",text:$}]:[];return[...$]}function dB($){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 FZ($)}}function FZ($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:"",output:$.content,isError:$.is_error}}function DZ($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let f=$.metadata;return{type:"thinking",thinking:$.text,signature:f?.signature,details:f?.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":return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:$.metadata?.signature};case"tool-result":{let f=$.output,J=typeof f==="string"?f:Array.isArray(f)?f:JSON.stringify(f);return{type:"tool_result",tool_use_id:$.toolCallId,content:J,is_error:$.isError}}}}function KZ($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function lB($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var GZ=0;function pB(){return GZ+=1,`msg_${Date.now().toString(36)}_${GZ.toString(36)}`}function RZ($){let{agentConfig:f}=$,J=rB(f),Q=iB(f),Z=$.hooks,W=nB(f.maxParallelToolCalls);return{sessionId:$.sessionId??f.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??f.systemPrompt,messageModelInfo:Q,model:$.model,modelOptions:J,tools:$.tools,hooks:Z,prepareTurn:$.prepareTurn,consumePendingUserMessage:f.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??f.logger,telemetry:$.telemetry??f.telemetry,initialMessages:$.initialMessages,completionPolicy:f.completionPolicy,maxIterations:f.maxIterations,toolExecution:W,toolPolicies:f.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:f.requestToolApproval}}function rB($){let f={};if($.thinking!==void 0)f.thinking=$.thinking;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)f.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)f.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(f).length>0?f:void 0}function iB($){let f=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:f}}function nB($){if($===void 0)return;return $>=2?"parallel":"sequential"}function aB(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function tB($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function DJ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(DJ);let f={};for(let J of Object.keys($).sort())f[J]=DJ($[J]);return f}function sB($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(DJ($))}catch{return String($)}}function oB($,f,J,Q){if(f===$.lastToolName&&J===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=f,$.lastToolSignature=J,{softWarning:$.consecutiveIdenticalCount===Q.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Q.hardThreshold}}var UZ={softThreshold:3,hardThreshold:5};class RJ{config;state=aB();constructor($){this.config={softThreshold:$?.softThreshold??UZ.softThreshold,hardThreshold:$?.hardThreshold??UZ.hardThreshold}}inspect($){let f=sB($.input),J=oB(this.state,$.name,f,this.config);if(J.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(J.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){tB(this.state)}}class UJ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let f=this.options.maxConsecutiveMistakes,J=$.forceAtLimit&&f?f:this.consecutiveMistakes+1;this.consecutiveMistakes=J;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),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:J,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!f||J<f)return{action:"continue"};let Z=await $K({iteration:$.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:f,reason:$.reason,details:$.details},this.options.onLimitReached);if(Z.action==="continue"){let W=Z.guidance?.trim();if(W)this.options.appendRecoveryNotice(W,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:W}}return{action:"stop",reason:Z.reason?.trim()||void 0,message:eB({iteration:$.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:f,reason:$.reason,details:$.details,stopReason:Z.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function eB($){let f=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],J=$.details?.trim();if(J)f.push(`Error: ${J}`);let Q=$.stopReason?.trim();if(Q)f.push(`Decision: ${Q}`);return f.push("Session state was preserved. Send a new prompt to resume from the latest state."),f.join(" ")}async function $K($,f){if(!f)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await f($)}catch(J){return{action:"stop",reason:J instanceof Error?J.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function fK($){let f=$.content.filter((J)=>J.type==="text");if(f.length===0)return;return f.map((J)=>J.text).join("")}function JK($){let f=$.content.filter((J)=>J.type==="reasoning");if(f.length===0)return;return{reasoning:f.map((J)=>J.text).join(""),redacted:f.some((J)=>J.redacted===!0)}}function QK($){return $.content.find((f)=>f.type==="tool-result")}function ZK($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function WK($){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 LJ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let f=[],J=fK($);if(J!==void 0)f.push({type:"content_end",contentType:"text",text:J});let Q=JK($);if(Q!==void 0)f.push({type:"content_end",contentType:"reasoning",reasoning:Q.reasoning});return f}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 f=this.toolStartedAt.get($.toolCall.toolCallId),J=f===void 0?void 0:Date.now()-f;this.toolStartedAt.delete($.toolCall.toolCallId);let Q=QK($.message),Z=Q?.output,W=WK(Q);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:Z,error:W,durationMs:J}]}translateUsage($){let f=$.inputTokens-this.lastUsage.inputTokens,J=$.outputTokens-this.lastUsage.outputTokens,Q=$.cacheReadTokens-this.lastUsage.cacheReadTokens,Z=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,W=this.lastUsage.totalCost??0,X=($.totalCost??0)-W;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,f),outputTokens:Math.max(0,J),cacheReadTokens:Q===0?void 0:Math.max(0,Q),cacheWriteTokens:Z===0?void 0:Math.max(0,Z),cost:X===0?void 0:X,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let f={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:ZK($.status),text:$.outputText,iterations:$.iterations,usage:f}]}}function KK($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function GK($){let J=(typeof $.content==="function"?await $.content():$.content).trim();return J.length>0?J:void 0}function PK($,f){let J=$.trim(),Q=f.map((Z)=>Z.trim()).filter(Boolean).join(`
|
|
140
142
|
|
|
141
|
-
`);if(J&&
|
|
143
|
+
`);if(J&&Q)return`${J}
|
|
142
144
|
|
|
143
|
-
${W}`;return J||W}function kY(f){let $=f.filter((J)=>J!==void 0);if($.length===0)return{};return{beforeRun:async(J)=>{for(let W of $){let H=await W.beforeRun?.(J);if(H?.stop)return H}return},afterRun:async(J)=>{for(let W of $)await W.afterRun?.(J)},beforeModel:async(J)=>{let W=J.request,H;for(let Q of $){let Z=await Q.beforeModel?.({...J,request:W});if(!Z)continue;if(Z.stop)return Z;H={...H,...Z,options:{...H?.options??{},...Z.options??{}}},W={...W,...Z.messages?{messages:Z.messages}:{},...Z.tools?{tools:Z.tools}:{},...Z.options?{options:{...W.options??{},...Z.options}}:{}}}return H},afterModel:async(J)=>{for(let W of $){let H=await W.afterModel?.(J);if(H?.stop)return H}return},beforeTool:async(J)=>{let W=J.input,H;for(let Q of $){let Z=await Q.beforeTool?.({...J,input:W});if(!Z)continue;if(Z.stop||Z.skip)return Z;if(H={...H,...Z},Object.hasOwn(Z,"input"))W=Z.input}return H},afterTool:async(J)=>{let W=J.result,H;for(let Q of $){let Z=await Q.afterTool?.({...J,result:W});if(!Z)continue;if(Z.stop)return Z;if(H={...H,...Z},Z.result)W=Z.result}return H},onEvent:async(J)=>{for(let W of $)await W.onEvent?.(J)}}}class L0{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 $J;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(f,$={}){this.config=f,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=f.parentAgentId,this.logger=$.logger??f.logger,this.telemetry=$.telemetry??f.telemetry,this.createAgentRuntimeImpl=$.createAgentRuntimeImpl??wY,this.conversation=new s6(f.initialMessages),this.messageBuilder=new a6,this.contributionRegistry=bY({extensions:f.extensions?[...f.extensions]:[],setupContext:{session:f.extensionContext?.session,client:f.extensionContext?.client,user:f.extensionContext?.user,workspaceInfo:f.extensionContext?.workspace,automation:f.extensionContext?.automation,logger:f.extensionContext?.logger??this.logger,telemetry:f.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let J=f.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new fJ({maxConsecutiveMistakes:J,onLimitReached:f.onConsecutiveMistakeLimitReached,emit:(Q)=>this.emitLegacyEvent(Q),log:(Q,Z,j)=>IY(this.logger,Q,Z,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(Q,Z)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q}]})}});let W=f.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let H=W===!1||W===void 0?void 0:W;this.loopTracker=new e6(H)}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(f){if(f.length===0)return;let $=new Set(this.config.tools.map((W)=>W.name)),J=[...this.config.tools];for(let W of f)if(!$.has(W.name))J.push(W),$.add(W.name);this.config={...this.config,tools:J}}updateConnection(f){let $={...this.config};if(f.providerId!==void 0)$.providerId=f.providerId;if(f.modelId!==void 0)$.modelId=f.modelId;if(f.apiKey!==void 0)$.apiKey=f.apiKey;if(f.baseUrl!==void 0)$.baseUrl=f.baseUrl;if(f.headers!==void 0)$.headers=f.headers;if(f.providerConfig!==void 0)$.providerConfig=f.providerConfig;if(f.reasoningEffort!==void 0)$.reasoningEffort=f.reasoningEffort;if(f.thinking!==void 0)$.thinking=f.thinking;if(f.thinkingBudgetTokens!==void 0)$.thinkingBudgetTokens=f.thinkingBudgetTokens;this.config=$}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore(f){this.conversation.restore(f),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}abort(f){let $=typeof f==="string"?f:f instanceof Error?f.message:f===void 0?void 0:String(f);if(this.abortRequested=!0,this.abortReason=$,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort($)}async shutdown(f,$){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(f,$,J){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:f,userImages:$,userFiles:J,isContinue:!1})}continue(f,$,J){return this.executeRun({userMessage:f,userImages:$,userFiles:J,isContinue:!0})}async composeSystemPrompt(){let f=[];for(let $ of this.contributionRegistry.getRegisteredRules()){let J=await EY($);if(J)f.push(J)}return SY(this.config.systemPrompt,f)}executeRun(f){let $;return $=this.executeRunInternal(f).finally(()=>{if(this.activeRunPromise===$)this.activeRunPromise=null}),this.activeRunPromise=$,$}async executeRunInternal(f){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 $=new Date,J=f.userMessage;if(J!==void 0){let F=await xY(J,f.userImages,f.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:F})}let W=await this.composeSystemPrompt(),H=l9(this.config,this.logger),Q=this.contributionRegistry.getRegisteredTools(),Z=new Map;for(let F of Q)Z.set(F.name,F);for(let F of this.config.tools)Z.set(F.name,F);let j=this.conversation.getConversationId(),X=W3(this.config),A=Array.from(Z.values()),P=Q8(this.conversation.getMessages()),B=f3({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:j,parentAgentId:this.parentAgentId,model:H,logger:this.logger,tools:A,toolContextMetadata:{modelSupportsImages:X?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(X,A),initialMessages:P,systemPrompt:W}),Y=this.createAgentRuntimeImpl(B);if(this.activeRuntime=Y,this.abortRequested)Y.abort(this.abortReason);let V=Y.subscribe((F)=>{this.handleRuntimeEvent(F)}),R,U;try{if(f.isContinue)R=await Y.continue(void 0);else R=await Y.run("")}catch(F){U=F instanceof Error?F:Error(String(F))}finally{V();try{await this.activeTrackerWork}catch(F){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:F})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(R&&R.messages.length>0){let F=k$(R.messages);this.conversation.replaceMessages(F)}let K=new Date;try{return this.buildLegacyResult({runResult:R,thrownError:U,startedAt:$,endedAt:K})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch(f){if(this.config.hookErrorMode==="throw")throw f;this.emitLegacyEvent({type:"error",error:f instanceof Error?f:Error(String(f)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let f=kY([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map(($)=>$.hooks)]);return{...f,beforeModel:async($)=>{let J=await f.beforeModel?.($);if(J?.stop)return J;let W=J?.messages??$.request.messages,H=await this.prepareMessagesForModelRequest(W);return{...J,messages:H}}}}createRuntimePrepareTurn(f,$){let J=this.config.prepareTurn;if(!J)return;return async(W)=>{let H=k$(W.messages),Q=await this.prepareProviderMessagesForApi(H),Z=await J({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:H,apiMessages:Q,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:$,model:{id:this.config.modelId,provider:this.config.providerId,info:f},emitStatusNotice:W.emitStatusNotice});if(!Z)return;return{...Z.messages?{messages:Q8(Z.messages)}:{},...Z.systemPrompt!==void 0?{systemPrompt:Z.systemPrompt}:{}}}}async prepareMessagesForModelRequest(f){let $=await this.prepareProviderMessagesForApi(s9(f));return Q8($)}async prepareProviderMessagesForApi(f){let $=f,J=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of J)$=await W.build($);return this.messageBuilder.buildForApi($)}handleRuntimeEvent(f){switch(f.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage(f.snapshot.messages,[f.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set(f.toolCall.toolCallId,new Date),this.toolInputs.set(f.toolCall.toolCallId,f.toolCall.input),this.inspectLoopForToolCall(f.toolCall.toolName,f.toolCall.input,f.iteration);break}case"tool-finished":{let $=this.toolStartedAt.get(f.toolCall.toolCallId),J=new Date,W=this.toolInputs.get(f.toolCall.toolCallId);this.toolStartedAt.delete(f.toolCall.toolCallId),this.toolInputs.delete(f.toolCall.toolCallId);let H=f.message.content.find((X)=>X.type==="tool-result"),Q=H?.type==="tool-result"&&H.isError===!0,Z=Q?CY(H?.type==="tool-result"?H.output:void 0):void 0,j={id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:W,output:H?.type==="tool-result"?H.output:void 0,error:Z,durationMs:$===void 0?0:J.getTime()-$.getTime(),startedAt:$??J,endedAt:J};if(this.currentRunToolCalls.push(j),Q){if(this.currentTurnFailedTools+=1,Z)this.currentTurnFailureDetails.push(`[${f.toolCall.toolName}] ${Z}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let $=this.currentTurnFailedTools,J=this.currentTurnSuccessfulTools;if($>0&&J===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:f.iteration,reason:"tool_execution_failed",details:`${$} tool call(s) failed${W?`: ${W}`:""}`})}else if(J>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens>0?f.usage.cacheReadTokens:void 0,cacheWriteTokens:f.usage.cacheWriteTokens>0?f.usage.cacheWriteTokens:void 0,totalCost:f.usage.totalCost};break}default:break}for(let $ of this.eventAdapter.translate(f))this.emitLegacyEvent($)}syncConversationFromRuntimeMessage(f,$){if(f.length>0){this.conversation.replaceMessages(k$(f));return}if($.length===0)return;let J=new Set(this.conversation.getMessages().map((H)=>H.id).filter((H)=>typeof H==="string")),W=k$($).filter((H)=>!H.id||!J.has(H.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent(f){for(let $ of this.listeners)try{$(f)}catch(J){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:J})}}inspectLoopForToolCall(f,$,J){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:f,input:$});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:J,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${f}\`; stopping to avoid a loop.`})}enqueueMistakeRecord(f){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let $=await this.mistakeTracker.record(f);if($.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:$.message}]}),this.activeRuntime?.abort($.reason??$.message)})}buildLegacyResult(f){let{runResult:$,thrownError:J,startedAt:W,endedAt:H}=f,Q=H.getTime()-W.getTime(),Z=J?"error":mY($),j=$?.outputText||($?.status==="failed"?$.error?.message:void 0)||"",X=$?{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}:this.currentRunUsage,A=$?k$($.messages):this.conversation.getMessages(),P=W3(this.config);if(J)throw J;return{text:j,usage:X,messages:A,toolCalls:this.currentRunToolCalls,iterations:$?.iterations??0,finishReason:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:P},startedAt:W,endedAt:H,durationMs:Q}}}function IY(f,$,J,W){if(!f)return;if($==="debug"){f.debug(J,W);return}if($==="error"&&f.error){f.error(J,W);return}let H=$==="warn"?"warn":$==="error"?"error":"info";f.log(J,{...W,severity:H})}function mY(f){if(!f)return"error";switch(f.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function xY(f,$,J,W){let{buildInitialUserContent:H}=await Promise.resolve().then(() => J3);return H(f,$,J,W)}function W3(f){if(f.knownModels?.[f.modelId])return f.knownModels[f.modelId];let $=i6(f);if($?.[f.modelId])return $[f.modelId];return}import{buildClineSystemPrompt as H3}from"@cline/shared";function Q3(f,$){let J=f.trim();if($.providerId.toLowerCase()!=="cline")return J;return H3({ide:$.clineIdeName?.trim()||"Terminal",workspaceRoot:$.cwd?.trim()||"/",providerId:$.providerId,rules:`# Team Teammate Role
|
|
144
|
-
${J}`,platform:$.clinePlatform,metadata:$.workspaceMetadata})}function Z3(f,$){let J=f.trim();if($.providerId.toLowerCase()!=="cline")return J;return H3({ide:$.clineIdeName||"Terminal",workspaceRoot:$.cwd?.trim()||"/",providerId:$.providerId,overridePrompt:J,metadata:$.workspaceMetadata,platform:$.clinePlatform})}function Z8(f){let $={...f};return{getRuntimeConfig:()=>$,getConnectionConfig:()=>({providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking}),updateConnectionDefaults:(J)=>{$={...$,...J}}}}function y1(f){let $=f.configProvider.getRuntimeConfig(),J=f.kind==="teammate"?Q3(f.prompt,$):Z3(f.prompt,$);return{...f.configProvider.getConnectionConfig(),systemPrompt:J,tools:f.tools,maxIterations:f.maxIterations??$.maxIterations,parentAgentId:f.parentAgentId,abortSignal:f.abortSignal,onEvent:f.onEvent,hooks:$.hooks,extensions:$.extensions,hookErrorMode:f.hookErrorMode,toolPolicies:f.toolPolicies,requestToolApproval:f.requestToolApproval,logger:$.logger,role:f.role}}function j8(f){let $=y1(f),J=new L0($);if($.onEvent)J.subscribeEvents($.onEvent);return J}var uY=JJ.object({systemPrompt:JJ.string().describe("System prompt defining the sub-agent's behavior"),task:JJ.string().describe("Task for the sub-agent to complete")});function I$(f){return gY({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:vY(uY),execute:async($,J)=>{let W=f.createSubAgentTools?await f.createSubAgentTools($,J):f.subAgentTools??[],H=j8({kind:"subagent",prompt:$.systemPrompt,configProvider:f.configProvider,tools:W,maxIterations:f.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:f.onSubAgentEvent,hookErrorMode:f.hookErrorMode,toolPolicies:f.toolPolicies,requestToolApproval:f.requestToolApproval}),Q=H.getAgentId(),Z=H.getConversationId(),j=J.agentId;if(f.onSubAgentStart)try{await f.onSubAgentStart({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$})}catch{}try{let X=await H.run($.task),A={text:X.text,iterations:X.iterations,finishReason:X.finishReason,usage:{inputTokens:X.usage.inputTokens,outputTokens:X.usage.outputTokens}};if(f.onSubAgentEnd)try{await f.onSubAgentEnd({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$,result:A,agentResult:X})}catch{}return A}catch(X){if(f.onSubAgentEnd)try{await f.onSubAgentEnd({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$,error:X instanceof Error?X:Error(String(X))})}catch{}throw X}},timeoutMs:300000,retryable:!1})}import{createTool as Jf,TEAM_AWAIT_TIMEOUT_MS as cY,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as dY,TEAM_RUN_TEXT_PREVIEW_LIMIT as rY,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as lY,TeamAttachOutcomeFragmentInputSchema as j3,TeamAwaitRunsInputSchema as X3,TeamBroadcastInputSchema as A3,TeamBroadcastToolResultSchema as pY,TeamCancelRunInputSchema as P3,TeamCancelRunToolResultSchema as iY,TeamCleanupInputSchema as B3,TeamCleanupToolResultSchema as nY,TeamCreateOutcomeInputSchema as Y3,TeamCreateOutcomeToolResultSchema as aY,TeamFinalizeOutcomeInputSchema as V3,TeamFinalizeOutcomeToolResultSchema as tY,TeamListOutcomesInputSchema as R3,TeamListRunsInputSchema as F3,TeamMailboxMessageToolResultSchema as sY,TeamMissionLogInputSchema as K3,TeamMissionLogToolResultSchema as oY,TeamOutcomeFragmentToolResultSchema as y3,TeamOutcomeToolResultSchema as eY,TeamReadMailboxInputSchema as U3,TeamReviewOutcomeFragmentInputSchema as G3,TeamRunTaskInputSchema as T3,TeamRunTaskToolResultSchema as WJ,TeamRunToolSummarySchema as HJ,TeamSendMessageInputSchema as D3,TeamSendMessageToolResultSchema as fV,TeamShutdownTeammateInputSchema as _3,TeamSimpleAgentStatusToolResultSchema as M3,TeamSpawnTeammateInputSchema as L3,TeamStatusInputSchema as h3,TeamStatusToolResultSchema as $V,TeamTaskInputSchema as O3,TeamTaskToolResultSchema as U1,validateWithZod as N,zodToJsonSchema as Wf}from"@cline/shared";function z3(f,$){let J=f.replace(/\s+/g," ").trim();if(J.length<=$)return J;return`${J.slice(0,Math.max(0,$-3)).trimEnd()}...`}function f$(f,$){if(f===void 0)throw Error(`Missing required field: ${$}`);return f}function JV(f){let $=f.result;if(!$)return;return{textPreview:z3($.text,rY),iterations:$.iterations,finishReason:$.finishReason,durationMs:$.durationMs,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost}}}function X8(f){return f?.toISOString()}function QJ(f){return{id:f.id,agentId:f.agentId,taskId:f.taskId,status:f.status,messagePreview:z3(f.message,dY),priority:f.priority,retryCount:f.retryCount,maxRetries:f.maxRetries,nextAttemptAt:X8(f.nextAttemptAt),continueConversation:f.continueConversation,startedAt:f.startedAt.toISOString(),endedAt:X8(f.endedAt),leaseOwner:f.leaseOwner,heartbeatAt:X8(f.heartbeatAt),lastProgressAt:X8(f.lastProgressAt),lastProgressMessage:f.lastProgressMessage,currentActivity:f.currentActivity,error:f.error,resultSummary:JV(f)}}function WV(f){if(f.status==="failed")throw Error(`Run "${f.id}" failed${f.error?`: ${f.error}`:""}`);if(f.status==="cancelled")throw Error(`Run "${f.id}" was cancelled${f.error?`: ${f.error}`:""}`);if(f.status==="interrupted")throw Error(`Run "${f.id}" was interrupted${f.error?`: ${f.error}`:""}`)}var A8=["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 N3(f){let $=[];if(f.createBaseTools)$.push(...f.createBaseTools());$.push(...G1({runtime:f.runtime,requesterId:f.spec.agentId,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,allowSpawn:!1})),f.runtime.spawnTeammate({agentId:f.spec.agentId,config:y1({kind:"teammate",prompt:f.spec.rolePrompt,role:f.spec.rolePrompt,configProvider:f.teammateConfigProvider,tools:$,maxIterations:f.spec.maxIterations,cwd:f.teammateConfigProvider.getRuntimeConfig().cwd})})}function P8(f){let $=f.leadAgentId??"lead",J=f.restoredFromPersistence===!0,W=G1({runtime:f.runtime,requesterId:$,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,allowSpawn:!0,includeSpawnTool:f.includeLeadSpawnTool,includeManagementTools:f.includeLeadManagementTools,onLeadToolsUnlocked:f.onLeadToolsUnlocked}),H=[];for(let Q of f.restoredTeammates??[]){if(f.runtime.isTeammateActive(Q.agentId))continue;N3({runtime:f.runtime,requesterId:$,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,spec:Q}),H.push(Q.agentId)}return{tools:W,restoredFromPersistence:J,restoredTeammates:H}}function G1(f){let $=f.allowSpawn??!0,J=f.includeSpawnTool??!0,W=f.includeManagementTools??!0,H=[];if(J)H.push(Jf({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:Wf(L3),execute:async(Z)=>{let j=N(L3,Z);if(f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!$)throw Error("Spawning teammates is disabled in this context.");let X={agentId:j.agentId,rolePrompt:j.rolePrompt};if(N3({runtime:f.runtime,requesterId:f.requesterId,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,spec:X}),!W)f.onLeadToolsUnlocked?.(G1({...f,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return N(M3,{agentId:j.agentId,status:"spawned"})}}));if(!W)return H;H.push(Jf({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:Wf(_3),execute:async(Z)=>{let j=N(_3,Z);if(f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return f.runtime.shutdownTeammate(j.agentId,j.reason),N(M3,{agentId:j.agentId,status:"stopped"})}})),H.push(Jf({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:Wf(h3),execute:async(Z)=>{return N(h3,Z),N($V,f.runtime.getSnapshot())}})),H.push(Jf({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:Wf(O3),execute:async(Z)=>{let j=N(O3,Z);switch(j.action){case"create":{let X=new Set(lY.create??[]),A=Object.entries(Z).filter(([B,Y])=>X.has(B)&&Y!=null).map(([B])=>B),P=f.runtime.createTask({title:f$(j.title,"title"),description:f$(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:f.requesterId});return N(U1,{action:"create",taskId:P.id,status:P.status,...A.length>0?{ignoredFields:A,note:`Ignored fields for action=create: ${A.join(", ")}`}:{}})}case"list":return N(U1,{action:"list",tasks:f.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let X=f.runtime.claimTask(f$(j.taskId,"taskId"),f.requesterId);return N(U1,{action:"claim",taskId:X.id,status:X.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 X=f.runtime.completeTask(f$(j.taskId,"taskId"),f.requesterId,f$(j.summary,"summary"));return N(U1,{action:"complete",taskId:X.id,status:X.status})}case"block":{let X=f.runtime.blockTask(f$(j.taskId,"taskId"),f.requesterId,f$(j.reason,"reason"));return N(U1,{action:"block",taskId:X.id,status:X.status})}}}}));let Q=new Map;return H.push(Jf({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:Wf(T3),execute:async(Z)=>{let j=N(T3,Z);if(j.runMode==="async"){let P=f.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:f.requesterId,continueConversation:j.continueConversation||void 0});return N(WJ,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${P.id}.`,runId:P.id})}let X=Q.get(j.agentId);if(X){let P=await X;return N(WJ,{...P,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let A=f.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:f.requesterId,continueConversation:j.continueConversation||void 0}).then((P)=>N(WJ,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:P.text,iterations:P.iterations})).finally(()=>{Q.delete(j.agentId)});return Q.set(j.agentId,A),await A}})),H.push(Jf({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:Wf(P3),execute:async(Z)=>{let j=N(P3,Z),X=f.runtime.cancelRun(j.runId,j.reason);return N(iY,{runId:X.id,status:X.status})}})),H.push(Jf({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:Wf(F3),execute:async(Z)=>N(HJ.array(),f.runtime.listRuns(N(F3,Z)).map(QJ))})),H.push(Jf({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:Wf(X3),timeoutMs:cY,execute:async(Z)=>{let j=N(X3,Z);if(j.runId){let P=await f.runtime.awaitRun(j.runId);return WV(P),N(HJ,QJ(P))}let X=await f.runtime.awaitAllRuns(),A=X.filter((P)=>["failed","cancelled","interrupted"].includes(P.status));if(A.length>0){let P=A.map((B)=>`${B.id}:${B.status}${B.error?`(${B.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${P}`)}return N(HJ.array(),X.map(QJ))}})),H.push(Jf({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:Wf(D3),execute:async(Z)=>{let j=N(D3,Z),X=f.runtime.sendMessage(f.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return N(fV,{id:X.id,toAgentId:X.toAgentId})}})),H.push(Jf({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:Wf(A3),execute:async(Z)=>{let j=N(A3,Z),X=f.runtime.broadcast(f.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return N(pY,{delivered:X.length})}})),H.push(Jf({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:Wf(U3),execute:async(Z)=>{let j=N(U3,Z);return N(sY.array(),f.runtime.listMailbox(f.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),H.push(Jf({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:Wf(K3),execute:async(Z)=>{let j=N(K3,Z),X=f.runtime.appendMissionLog({agentId:f.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return N(oY,{id:X.id})}})),H.push(Jf({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:Wf(B3),execute:async(Z)=>{if(N(B3,Z),f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return f.runtime.cleanup(),N(nY,{status:"cleaned"})}})),H.push(Jf({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:Wf(Y3),execute:async(Z)=>{let j=N(Y3,Z),X=f.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:f.requesterId});return N(aY,{outcomeId:X.id,status:X.status,requiredSections:X.requiredSections})}})),H.push(Jf({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:Wf(j3),execute:async(Z)=>{let j=N(j3,Z),X=f.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:f.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return N(y3,{fragmentId:X.id,status:X.status})}})),H.push(Jf({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:Wf(G3),execute:async(Z)=>{let j=N(G3,Z),X=f.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:f.requesterId,approved:j.approved});return N(y3,{fragmentId:X.id,status:X.status})}})),H.push(Jf({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:Wf(V3),execute:async(Z)=>{let j=N(V3,Z),X=f.runtime.finalizeOutcome(j.outcomeId);return N(tY,{outcomeId:X.id,status:X.status})}})),H.push(Jf({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:Wf(R3),execute:async(Z)=>{return N(R3,Z),N(eY.array(),f.runtime.listOutcomes())}})),H}function q3(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}var HV=[{id:"read_files",description:"Read the full 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.",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:I$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...A8]}],QV={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function ZV(f){return f==="plan"||f==="yolo"?f:"act"}function b3(f){let $=ZV(f.mode),J=df[M0({mode:$})],W=F1(f.providerId??"",f.modelId??"",$,R1);return{mode:$,flags:{...J,...W,...typeof f.enableSpawnAgent==="boolean"?{enableSpawnAgent:f.enableSpawnAgent}:{},...typeof f.enableAgentTeams==="boolean"?{enableAgentTeams:f.enableAgentTeams}:{}}}}function w3(f,$){if($.disabledToolIds?.has(f))return!1;let{flags:J}=b3($);if(f==="spawn_agent")return J.enableSpawnAgent===!0;if(f==="teams")return J.enableAgentTeams===!0;if(f==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let W=QV[f];return W?J[W]===!0:!1}function jV(f,$){if(f.id==="editor"){let{flags:J}=b3($),W=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...f,defaultEnabled:w3(f.id,$),headlessToolNames:[W?"apply_patch":"editor"]}}return{...f,defaultEnabled:w3(f.id,$)}}function T1(f={}){return HV.map(($)=>jV($,f))}function C3(f={}){return T1(f).filter(($)=>$.defaultEnabled).map(($)=>$.id)}function E3(f){if(!f.enabled)return new Set;let $=T1(f.availabilityContext),J=new Set($.map((W)=>W.id));if(!f.allowlist||f.allowlist.length===0)return new Set($.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of f.allowlist)if(!J.has(W))throw Error(`Unknown tool "${W}". Available tools: ${$.map((H)=>H.id).join(", ")}`);return new Set(f.allowlist)}function ZJ(f,$={}){return T1($).filter((J)=>f.has(J.id)).flatMap((J)=>J.headlessToolNames)}function S3(f,$={}){return ZJ(f,$)}function D1(f={}){let{executorOptions:$={},executors:J,...W}=f,H={...H8($),...J??{}};return E$({...W,executors:H})}function B8(f){return f.trim().replace(/^\/+/,"").toLowerCase()}function XV(f){if(!f||f.length===0)return;let $=f.map(B8).filter((J)=>J.length>0);return $.length>0?new Set($):void 0}function AV(f,$,J){if(!J)return!0;let W=B8(f),H=B8($),Q=W.includes(":")?W.split(":").at(-1)??W:W,Z=H.includes(":")?H.split(":").at(-1)??H:H;return J.has(W)||J.has(H)||J.has(Q)||J.has(Z)}function _1(f,$){let J=XV($);return[...f.getSnapshot("skill").entries()].map(([H,Q])=>{let Z=Q.item;return{id:H,name:Z.name.trim(),description:Z.description?.trim(),disabled:Z.disabled===!0,skill:Z}}).filter((H)=>AV(H.id,H.name,J))}function PV(f,$){return _1(f,$).filter((J)=>!J.disabled).map((J)=>J.name.trim()).filter((J)=>J.length>0).sort((J,W)=>J.localeCompare(W))}function BV(f,$,J){let W=B8($);if(!W)return{error:"Missing skill name."};let H=_1(f,J),Q=H.find((P)=>P.id===W);if(Q){let{skill:P}=Q;if(P.disabled===!0)return{error:`Skill "${P.name}" is configured but disabled.`};return{id:Q.id,skill:P}}let Z=W.includes(":")?W.split(":").at(-1)??W:W,j=H.filter(({id:P})=>{if(P===Z)return!0;return P.endsWith(`:${Z}`)}),X=j.filter(({skill:P})=>P.disabled!==!0);if(X.length===1){let{id:P,skill:B}=X[0];return{id:P,skill:B}}if(X.length>1)return{error:`Skill "${$}" is ambiguous. Use one of: ${X.map(({id:P})=>P).join(", ")}`};if(j.length===1){let{skill:P}=j[0];return{error:`Skill "${P.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${$}" is ambiguous, and all matches are disabled: ${j.map(({id:P})=>P).join(", ")}`};let A=PV(f,J);return{error:A.length>0?`Skill "${$}" not found. Available skills: ${A.join(", ")}`:"No skills are currently available."}}function YV(f,$=Promise.resolve(),J){let W=new Set,H=async(Q,Z)=>{await $;let j=BV(f,Q,J);if("error"in j)return j.error;let{id:X,skill:A}=j;if(W.has(X))return`Skill "${A.name}" is already running.`;W.add(X);try{let P=Z?.trim(),B=P?`
|
|
145
|
-
<command-args>${
|
|
145
|
+
${Q}`;return J||Q}function FK($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return{};return{beforeRun:async(J)=>{for(let Q of f){let Z=await Q.beforeRun?.(J);if(Z?.stop)return Z}return},afterRun:async(J)=>{for(let Q of f)await Q.afterRun?.(J)},beforeModel:async(J)=>{let Q=J.request,Z;for(let W of f){let j=await W.beforeModel?.({...J,request:Q});if(!j)continue;if(j.stop)return j;Z={...Z,...j,options:{...Z?.options??{},...j.options??{}}},Q={...Q,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:{...Q.options??{},...j.options}}:{}}}return Z},afterModel:async(J)=>{for(let Q of f){let Z=await Q.afterModel?.(J);if(Z?.stop)return Z}return},beforeTool:async(J)=>{let Q=J.input,Z;for(let W of f){let j=await W.beforeTool?.({...J,input:Q});if(!j)continue;if(j.stop||j.skip)return j;if(Z={...Z,...j},Object.hasOwn(j,"input"))Q=j.input}return Z},afterTool:async(J)=>{let Q=J.result,Z;for(let W of f){let j=await W.afterTool?.({...J,result:Q});if(!j)continue;if(j.stop)return j;if(Z={...Z,...j},j.result)Q=j.result}return Z},onEvent:async(J)=>{for(let Q of f)await Q.onEvent?.(J)}}}class T${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 LJ;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($,f={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=f.logger??$.logger,this.telemetry=f.telemetry??$.telemetry,this.createAgentRuntimeImpl=f.createAgentRuntimeImpl??AK,this.conversation=new FJ($.initialMessages),this.messageBuilder=new GJ,this.contributionRegistry=BK({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 J=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new UJ({maxConsecutiveMistakes:J,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(W)=>this.emitLegacyEvent(W),log:(W,j,X)=>DK(this.logger,W,j,X),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(W,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:W}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let Z=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new RJ(Z)}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 f=new Set(this.config.tools.map((Q)=>Q.name)),J=[...this.config.tools];for(let Q of $)if(!f.has(Q.name))J.push(Q),f.add(Q.name);this.config={...this.config,tools:J}}updateConnection($){let f={...this.config};if($.providerId!==void 0)f.providerId=$.providerId;if($.modelId!==void 0)f.modelId=$.modelId;if($.apiKey!==void 0)f.apiKey=$.apiKey;if($.baseUrl!==void 0)f.baseUrl=$.baseUrl;if($.headers!==void 0)f.headers=$.headers;if($.providerConfig!==void 0)f.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)f.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=f}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let f=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=f,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(f)}async shutdown($,f){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($,f,J){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!1})}continue($,f,J){return this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let f of this.contributionRegistry.getRegisteredRules()){let J=await GK(f);if(J)$.push(J)}return PK(this.config.systemPrompt,$)}executeRun($){let f;return f=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===f)this.activeRunPromise=null}),this.activeRunPromise=f,f}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 f=new Date,J=$.userMessage;if(J!==void 0){let P=await UK(J,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:P})}let Q=await this.composeSystemPrompt(),Z=YZ(this.config,this.logger,this.telemetry),W=this.contributionRegistry.getRegisteredTools(),j=new Map;for(let P of W)j.set(P.name,P);for(let P of this.config.tools)j.set(P.name,P);let X=this.conversation.getConversationId(),H=OZ(this.config),Y=Array.from(j.values()),V=D8(this.conversation.getMessages()),A=RZ({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:X,parentAgentId:this.parentAgentId,model:Z,logger:this.logger,telemetry:this.telemetry,tools:Y,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,Y),initialMessages:V,systemPrompt:Q}),B=this.createAgentRuntimeImpl(A);if(this.activeRuntime=B,this.abortRequested)B.abort(this.abortReason);let K=B.subscribe((P)=>{this.handleRuntimeEvent(P)}),G,R;try{if($.isContinue)G=await B.continue(void 0);else G=await B.run("")}catch(P){R=P instanceof Error?P:Error(String(P))}finally{K();try{await this.activeTrackerWork}catch(P){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:P})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(G&&G.messages.length>0){let P=g1(G.messages);this.conversation.replaceMessages(P)}let F=new Date;try{return this.buildLegacyResult({runResult:G,thrownError:R,startedAt:f,endedAt:F})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}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 $=FK([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((f)=>f.hooks)]);return{...$,beforeModel:async(f)=>{let J=await $.beforeModel?.(f);if(J?.stop)return J;let Q=J?.messages??f.request.messages,Z=await this.prepareMessagesForModelRequest(Q);return{...J,messages:Z}}}}createRuntimePrepareTurn($,f){let J=this.config.prepareTurn;if(!J)return;return async(Q)=>{let Z=g1(Q.messages),W=await this.prepareProviderMessagesForApi(Z),j=await J({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:Z,apiMessages:W,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:f,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!j)return;return{...j.messages?{messages:D8(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let f=await this.prepareProviderMessagesForApi(PZ($));return D8(f)}async prepareProviderMessagesForApi($){let f=$,J=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of J)f=await Q.build(f);return this.messageBuilder.buildForApi(f)}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 f=this.toolStartedAt.get($.toolCall.toolCallId),J=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let Z=$.message.content.find((H)=>H.type==="tool-result"),W=Z?.type==="tool-result"&&Z.isError===!0,j=W?KK(Z?.type==="tool-result"?Z.output:void 0):void 0,X={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:Z?.type==="tool-result"?Z.output:void 0,error:j,durationMs:f===void 0?0:J.getTime()-f.getTime(),startedAt:f??J,endedAt:J};if(this.currentRunToolCalls.push(X),W){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let f=this.currentTurnFailedTools,J=this.currentTurnSuccessfulTools;if(f>0&&J===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${f} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(J>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 f of this.eventAdapter.translate($))this.emitLegacyEvent(f)}syncConversationFromRuntimeMessage($,f){if($.length>0){this.conversation.replaceMessages(g1($));return}if(f.length===0)return;let J=new Set(this.conversation.getMessages().map((Z)=>Z.id).filter((Z)=>typeof Z==="string")),Q=g1(f).filter((Z)=>!Z.id||!J.has(Z.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let f of this.listeners)try{f($)}catch(J){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:J})}}inspectLoopForToolCall($,f,J){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:f});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:J,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.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 f=await this.mistakeTracker.record($);if(f.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:f.message}]}),this.activeRuntime?.abort(f.reason??f.message)})}buildLegacyResult($){let{runResult:f,thrownError:J,startedAt:Q,endedAt:Z}=$,W=Z.getTime()-Q.getTime(),j=J?"error":RK(f),X=f?.outputText||(f?.status==="failed"?f.error?.message:void 0)||"",H=f?{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens>0?f.usage.cacheReadTokens:void 0,cacheWriteTokens:f.usage.cacheWriteTokens>0?f.usage.cacheWriteTokens:void 0,totalCost:f.usage.totalCost}:this.currentRunUsage,Y=f?g1(f.messages):this.conversation.getMessages(),V=OZ(this.config);if(J)throw J;return{text:X,usage:H,messages:Y,toolCalls:this.currentRunToolCalls,iterations:f?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:V},startedAt:Q,endedAt:Z,durationMs:W}}}function DK($,f,J,Q){if(!$)return;if(f==="debug"){$.debug(J,Q);return}if(f==="error"&&$.error){$.error(J,Q);return}let Z=f==="warn"?"warn":f==="error"?"error":"info";$.log(J,{...Q,severity:Z})}function RK($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function UK($,f,J,Q){let{buildInitialUserContent:Z}=await Promise.resolve().then(() => LZ);return Z($,f,J,Q)}function OZ($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let f=BJ($);if(f?.[$.modelId])return f[$.modelId];return}import{buildClineSystemPrompt as zZ}from"@cline/shared";function _Z($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return zZ({ide:f.clineIdeName?.trim()||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,rules:`# Team Teammate Role
|
|
146
|
+
${J}`,platform:f.clinePlatform,metadata:f.workspaceMetadata})}function yZ($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return zZ({ide:f.clineIdeName||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,overridePrompt:J,metadata:f.workspaceMetadata,platform:f.clinePlatform})}function R8($){let f={...$};return{getRuntimeConfig:()=>f,getConnectionConfig:()=>({providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking}),updateConnectionDefaults:(J)=>{f={...f,...J}}}}function Lf($){let f=$.configProvider.getRuntimeConfig(),J=$.kind==="teammate"?_Z($.prompt,f):yZ($.prompt,f);return{...$.configProvider.getConnectionConfig(),systemPrompt:J,tools:$.tools,maxIterations:$.maxIterations??f.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:f.hooks,extensions:f.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:f.logger,role:$.role}}function U8($){let f=Lf($),J=new T$(f);if(f.onEvent)J.subscribeEvents(f.onEvent);return J}var zK=OJ.object({systemPrompt:OJ.string().describe("System prompt defining the sub-agent's behavior"),task:OJ.string().describe("Task for the sub-agent to complete")});function m1($){return LK({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:OK(zK),execute:async(f,J)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(f,J):$.subAgentTools??[],Z=U8({kind:"subagent",prompt:f.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),W=Z.getAgentId(),j=Z.getConversationId(),X=J.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:W,conversationId:j,parentAgentId:X,input:f})}catch{}try{let H=await Z.run(f.task),Y={text:H.text,iterations:H.iterations,finishReason:H.finishReason,usage:{inputTokens:H.usage.inputTokens,outputTokens:H.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,result:Y,agentResult:H})}catch{}return Y}catch(H){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,error:H instanceof Error?H:Error(String(H))})}catch{}throw H}},timeoutMs:300000,retryable:!1})}import{createTool as J0,TEAM_AWAIT_TIMEOUT_MS as _K,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as yK,TEAM_RUN_TEXT_PREVIEW_LIMIT as TK,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as NK,TeamAttachOutcomeFragmentInputSchema as TZ,TeamAwaitRunsInputSchema as NZ,TeamBroadcastInputSchema as MZ,TeamBroadcastToolResultSchema as MK,TeamCancelRunInputSchema as qZ,TeamCancelRunToolResultSchema as qK,TeamCleanupInputSchema as wZ,TeamCleanupToolResultSchema as wK,TeamCreateOutcomeInputSchema as SZ,TeamCreateOutcomeToolResultSchema as SK,TeamFinalizeOutcomeInputSchema as CZ,TeamFinalizeOutcomeToolResultSchema as CK,TeamListOutcomesInputSchema as hZ,TeamListRunsInputSchema as EZ,TeamMailboxMessageToolResultSchema as hK,TeamMissionLogInputSchema as bZ,TeamMissionLogToolResultSchema as EK,TeamOutcomeFragmentToolResultSchema as kZ,TeamOutcomeToolResultSchema as bK,TeamReadMailboxInputSchema as IZ,TeamReviewOutcomeFragmentInputSchema as xZ,TeamRunTaskInputSchema as gZ,TeamRunTaskToolResultSchema as zJ,TeamRunToolSummarySchema as _J,TeamSendMessageInputSchema as mZ,TeamSendMessageToolResultSchema as kK,TeamShutdownTeammateInputSchema as vZ,TeamSimpleAgentStatusToolResultSchema as cZ,TeamSpawnTeammateInputSchema as uZ,TeamStatusInputSchema as dZ,TeamStatusToolResultSchema as IK,TeamTaskInputSchema as lZ,TeamTaskToolResultSchema as Of,validateWithZod as w,zodToJsonSchema as Q0}from"@cline/shared";function pZ($,f){let J=$.replace(/\s+/g," ").trim();if(J.length<=f)return J;return`${J.slice(0,Math.max(0,f-3)).trimEnd()}...`}function Q1($,f){if($===void 0)throw Error(`Missing required field: ${f}`);return $}function xK($){let f=$.result;if(!f)return;return{textPreview:pZ(f.text,TK),iterations:f.iterations,finishReason:f.finishReason,durationMs:f.durationMs,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost}}}function L8($){return $?.toISOString()}function yJ($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:pZ($.message,yK),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:L8($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:L8($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:L8($.heartbeatAt),lastProgressAt:L8($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:xK($)}}function gK($){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 O8=["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 rZ($){let f=[];if($.createBaseTools)f.push(...$.createBaseTools());f.push(...zf({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:Lf({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:f,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function z8($){let f=$.leadAgentId??"lead",J=$.restoredFromPersistence===!0,Q=zf({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),Z=[];for(let W of $.restoredTeammates??[]){if($.runtime.isTeammateActive(W.agentId))continue;rZ({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:W}),Z.push(W.agentId)}return{tools:Q,restoredFromPersistence:J,restoredTeammates:Z}}function zf($){let f=$.allowSpawn??!0,J=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,Z=[];if(J)Z.push(J0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:Q0(uZ),execute:async(j)=>{let X=w(uZ,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!f)throw Error("Spawning teammates is disabled in this context.");let H={agentId:X.agentId,rolePrompt:X.rolePrompt};if(rZ({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:H}),!Q)$.onLeadToolsUnlocked?.(zf({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return w(cZ,{agentId:X.agentId,status:"spawned"})}}));if(!Q)return Z;Z.push(J0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:Q0(vZ),execute:async(j)=>{let X=w(vZ,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(X.agentId,X.reason),w(cZ,{agentId:X.agentId,status:"stopped"})}})),Z.push(J0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:Q0(dZ),execute:async(j)=>{return w(dZ,j),w(IK,$.runtime.getSnapshot())}})),Z.push(J0({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:Q0(lZ),execute:async(j)=>{let X=w(lZ,j);switch(X.action){case"create":{let H=new Set(NK.create??[]),Y=Object.entries(j).filter(([A,B])=>H.has(A)&&B!=null).map(([A])=>A),V=$.runtime.createTask({title:Q1(X.title,"title"),description:Q1(X.description,"description"),dependsOn:X.dependsOn,assignee:X.assignee,createdBy:$.requesterId});return w(Of,{action:"create",taskId:V.id,status:V.status,...Y.length>0?{ignoredFields:Y,note:`Ignored fields for action=create: ${Y.join(", ")}`}:{}})}case"list":return w(Of,{action:"list",tasks:$.runtime.listTaskItems({status:X.status,assignee:X.assignee})});case"claim":{let H=$.runtime.claimTask(Q1(X.taskId,"taskId"),$.requesterId);return w(Of,{action:"claim",taskId:H.id,status:H.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 H=$.runtime.completeTask(Q1(X.taskId,"taskId"),$.requesterId,Q1(X.summary,"summary"));return w(Of,{action:"complete",taskId:H.id,status:H.status})}case"block":{let H=$.runtime.blockTask(Q1(X.taskId,"taskId"),$.requesterId,Q1(X.reason,"reason"));return w(Of,{action:"block",taskId:H.id,status:H.status})}}}}));let W=new Map;return Z.push(J0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:Q0(gZ),execute:async(j)=>{let X=w(gZ,j);if(X.runMode==="async"){let V=$.runtime.startTeammateRun(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0});return w(zJ,{agentId:X.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${X.agentId} and queued as ${V.id}.`,runId:V.id})}let H=W.get(X.agentId);if(H){let V=await H;return w(zJ,{...V,status:"joined",deduped:!0,message:`Task for ${X.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let Y=$.runtime.routeToTeammate(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0}).then((V)=>w(zJ,{agentId:X.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${X.agentId} and completed in sync mode.`,text:V.text,iterations:V.iterations})).finally(()=>{W.delete(X.agentId)});return W.set(X.agentId,Y),await Y}})),Z.push(J0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:Q0(qZ),execute:async(j)=>{let X=w(qZ,j),H=$.runtime.cancelRun(X.runId,X.reason);return w(qK,{runId:H.id,status:H.status})}})),Z.push(J0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:Q0(EZ),execute:async(j)=>w(_J.array(),$.runtime.listRuns(w(EZ,j)).map(yJ))})),Z.push(J0({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:Q0(NZ),timeoutMs:_K,execute:async(j)=>{let X=w(NZ,j);if(X.runId){let V=await $.runtime.awaitRun(X.runId);return gK(V),w(_J,yJ(V))}let H=await $.runtime.awaitAllRuns(),Y=H.filter((V)=>["failed","cancelled","interrupted"].includes(V.status));if(Y.length>0){let V=Y.map((A)=>`${A.id}:${A.status}${A.error?`(${A.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${V}`)}return w(_J.array(),H.map(yJ))}})),Z.push(J0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:Q0(mZ),execute:async(j)=>{let X=w(mZ,j),H=$.runtime.sendMessage($.requesterId,X.toAgentId,X.subject,X.body,X.taskId??void 0);return w(kK,{id:H.id,toAgentId:H.toAgentId})}})),Z.push(J0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:Q0(MZ),execute:async(j)=>{let X=w(MZ,j),H=$.runtime.broadcast($.requesterId,X.subject,X.body,{taskId:X.taskId??void 0});return w(MK,{delivered:H.length})}})),Z.push(J0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:Q0(IZ),execute:async(j)=>{let X=w(IZ,j);return w(hK.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:X.unreadOnly,markRead:!0}))}})),Z.push(J0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:Q0(bZ),execute:async(j)=>{let X=w(bZ,j),H=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:X.taskId||void 0,kind:X.kind,summary:X.summary,evidence:X.evidence?.length?X.evidence:void 0,nextAction:X.nextAction||void 0});return w(EK,{id:H.id})}})),Z.push(J0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:Q0(wZ),execute:async(j)=>{if(w(wZ,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),w(wK,{status:"cleaned"})}})),Z.push(J0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:Q0(SZ),execute:async(j)=>{let X=w(SZ,j),H=$.runtime.createOutcome({title:X.title,requiredSections:X.requiredSections,createdBy:$.requesterId});return w(SK,{outcomeId:H.id,status:H.status,requiredSections:H.requiredSections})}})),Z.push(J0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:Q0(TZ),execute:async(j)=>{let X=w(TZ,j),H=$.runtime.attachOutcomeFragment({outcomeId:X.outcomeId,section:X.section,sourceAgentId:$.requesterId,sourceRunId:X.sourceRunId||void 0,content:X.content});return w(kZ,{fragmentId:H.id,status:H.status})}})),Z.push(J0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:Q0(xZ),execute:async(j)=>{let X=w(xZ,j),H=$.runtime.reviewOutcomeFragment({fragmentId:X.fragmentId,reviewedBy:$.requesterId,approved:X.approved});return w(kZ,{fragmentId:H.id,status:H.status})}})),Z.push(J0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:Q0(CZ),execute:async(j)=>{let X=w(CZ,j),H=$.runtime.finalizeOutcome(X.outcomeId);return w(CK,{outcomeId:H.id,status:H.status})}})),Z.push(J0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:Q0(hZ),execute:async(j)=>{return w(hZ,j),w(bK.array(),$.runtime.listOutcomes())}})),Z}function iZ($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}var mK=[{id:"read_files",description:"Read the full 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.",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:m1({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...O8]}],vK={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function cK($){return $==="plan"||$==="yolo"?$:"act"}function aZ($){let f=cK($.mode),J=p0[y$({mode:f})],Q=Rf($.providerId??"",$.modelId??"",f,Df);return{mode:f,flags:{...J,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function nZ($,f){if(f.disabledToolIds?.has($))return!1;let{flags:J}=aZ(f);if($==="spawn_agent")return J.enableSpawnAgent===!0;if($==="teams")return J.enableAgentTeams===!0;if($==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let Q=vK[$];return Q?J[Q]===!0:!1}function uK($,f){if($.id==="editor"){let{flags:J}=aZ(f),Q=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...$,defaultEnabled:nZ($.id,f),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:nZ($.id,f)}}function _f($={}){return mK.map((f)=>uK(f,$))}function tZ($={}){return _f($).filter((f)=>f.defaultEnabled).map((f)=>f.id)}function sZ($){if(!$.enabled)return new Set;let f=_f($.availabilityContext),J=new Set(f.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(f.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!J.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${f.map((Z)=>Z.id).join(", ")}`);return new Set($.allowlist)}function TJ($,f={}){return _f(f).filter((J)=>$.has(J.id)).flatMap((J)=>J.headlessToolNames)}function oZ($,f={}){return TJ($,f)}function yf($={}){let{executorOptions:f={},executors:J,...Q}=$,Z={...F8(f),...J??{}};return I1({...Q,executors:Z})}function _8($){return $.trim().replace(/^\/+/,"").toLowerCase()}function dK($){if(!$||$.length===0)return;let f=$.map(_8).filter((J)=>J.length>0);return f.length>0?new Set(f):void 0}function lK($,f,J){if(!J)return!0;let Q=_8($),Z=_8(f),W=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=Z.includes(":")?Z.split(":").at(-1)??Z:Z;return J.has(Q)||J.has(Z)||J.has(W)||J.has(j)}function Tf($,f){let J=dK(f);return[...$.getSnapshot("skill").entries()].map(([Z,W])=>{let j=W.item;return{id:Z,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((Z)=>lK(Z.id,Z.name,J))}function pK($,f){return Tf($,f).filter((J)=>!J.disabled).map((J)=>J.name.trim()).filter((J)=>J.length>0).sort((J,Q)=>J.localeCompare(Q))}function rK($,f,J){let Q=_8(f);if(!Q)return{error:"Missing skill name."};let Z=Tf($,J),W=Z.find((V)=>V.id===Q);if(W){let{skill:V}=W;if(V.disabled===!0)return{error:`Skill "${V.name}" is configured but disabled.`};return{id:W.id,skill:V}}let j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=Z.filter(({id:V})=>{if(V===j)return!0;return V.endsWith(`:${j}`)}),H=X.filter(({skill:V})=>V.disabled!==!0);if(H.length===1){let{id:V,skill:A}=H[0];return{id:V,skill:A}}if(H.length>1)return{error:`Skill "${f}" is ambiguous. Use one of: ${H.map(({id:V})=>V).join(", ")}`};if(X.length===1){let{skill:V}=X[0];return{error:`Skill "${V.name}" is configured but disabled.`}}if(X.length>1)return{error:`Skill "${f}" is ambiguous, and all matches are disabled: ${X.map(({id:V})=>V).join(", ")}`};let Y=pK($,J);return{error:Y.length>0?`Skill "${f}" not found. Available skills: ${Y.join(", ")}`:"No skills are currently available."}}function iK($,f=Promise.resolve(),J){let Q=new Set,Z=async(W,j)=>{await f;let X=rK($,W,J);if("error"in X)return X.error;let{id:H,skill:Y}=X;if(Q.has(H))return`Skill "${Y.name}" is already running.`;Q.add(H);try{let V=j?.trim(),A=V?`
|
|
147
|
+
<command-args>${V}</command-args>`:"",B=Y.description?.trim()?`Description: ${Y.description.trim()}
|
|
146
148
|
|
|
147
|
-
`:"";return`<command-name>${
|
|
149
|
+
`:"";return`<command-name>${Y.name}</command-name>${A}
|
|
148
150
|
<command-instructions>
|
|
149
|
-
${
|
|
150
|
-
</command-instructions>`}finally{
|
|
151
|
+
${B}${Y.instructions}
|
|
152
|
+
</command-instructions>`}finally{Q.delete(H)}};return Object.defineProperty(Z,"configuredSkills",{get:()=>Tf($,J).map(({skill:W,...j})=>j),enumerable:!0,configurable:!1}),Z}function eZ($){let f=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Q)=>Boolean(Q))},async setup(Q){if(await f,$.includeRules)Q.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>TQ($.watcher)});if($.registerSkillsTool)Q.registerTool(k1(iK($.watcher,f,$.allowedSkillNames)));for(let Z of Gf($.watcher).filter((W)=>W.kind==="skill"&&$.includeSkills||W.kind==="workflow"&&$.includeWorkflows))Q.registerCommand({name:Z.name,description:Z.description,handler:(W)=>{let j=W.trim();return j?`${Z.instructions}
|
|
151
153
|
|
|
152
|
-
${
|
|
153
|
-
${
|
|
154
|
+
${j}`:Z.instructions}})}}}class $3{watcher;ready;stopped=!1;constructor($){this.watcher=LQ($)}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(([f,J])=>({type:$,id:f,filePath:J.filePath,item:J.item}))}listRuntimeCommands(){return Gf(this.watcher)}resolveRuntimeSlashCommand($){return _Q($,this.watcher)}hasConfiguredSkills($){return Tf(this.watcher,$).length>0}createExtension($){return eZ({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function v1($){return new $3($)}import{readFile as nK,writeFile as aK}from"node:fs/promises";import J3 from"yaml";function tK($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J,W=J3.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}function f3($,f){return`---
|
|
155
|
+
${J3.stringify($).trimEnd()}
|
|
154
156
|
---
|
|
155
|
-
${$}`}function KV(f,$){let{data:J,body:W,hadFrontmatter:H}=FV(f);if(!H&&$)return f;if($){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return W;return m3(J,W)}return J.disabled=!0,m3(J,W)}async function g3({filePath:f,enabled:$}){let J=await VV(f,"utf8"),W=KV(J,$);return await RV(f,W),{filePath:f,enabled:$,disabled:!$}}W0();W0();import{existsSync as XR}from"node:fs";import{discoverPluginModulePaths as AR,resolveConfiguredPluginModulePaths as PR,resolvePluginConfigSearchPaths as BR}from"@cline/shared/storage";import{resolve as vV}from"node:path";import{normalizePluginManifest as uV}from"@cline/shared";import{existsSync as Bf,readFileSync as u$}from"node:fs";import{builtinModules as hV,createRequire as p3}from"node:module";import{dirname as h1,extname as RJ,isAbsolute as OV,resolve as v}from"node:path";import{fileURLToPath as i3}from"node:url";import{PLUGIN_FILE_EXTENSIONS as zV}from"@cline/shared";var n3=h1(i3(import.meta.url)),NV=p3(import.meta.url),qV=v(n3,"..","..","..","..",".."),BJ=CV(qV),wV=["@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"],FJ=new Set(hV.flatMap((f)=>[f,f.replace(/^node:/,"")])),L1=new Set(zV),bV=["development","node","import","require","default"];function CV(f){let $={},J={"@cline/agents":v(f,"packages/agents/src/index.ts"),"@cline/core":v(f,"packages/core/src/index.ts"),"@cline/llms":v(f,"packages/llms/src/index.ts"),"@cline/shared":v(f,"packages/shared/src/index.ts"),"@cline/shared/storage":v(f,"packages/shared/src/storage/index.ts"),"@cline/shared/db":v(f,"packages/shared/src/db/index.ts")};for(let[W,H]of Object.entries(J))if(Bf(H))$[W]=H;for(let W of["agents","core","llms","shared"]){let H=v(f,"packages",W),Q=v(H,"package.json");if(!Bf(Q))continue;try{let Z=JSON.parse(u$(Q,"utf8"));if(typeof Z.name!=="string"||!Z.exports)continue;if(typeof Z.exports==="string"){let j=v(H,Z.exports);if(Bf(j))$[Z.name]=j;continue}if(typeof Z.exports!=="object")continue;for(let[j,X]of Object.entries(Z.exports)){let A=EV(H,X);if(!A)continue;let P=j==="."?Z.name:`${Z.name}/${j.replace(/^\.\//,"")}`;$[P]=A}}catch{}}return $}function EV(f,$){let J=KJ($);if(!J)return null;let W=a3(f,J);for(let H of W)if(Bf(H))return H;return null}function KJ(f,$=new Set){if(typeof f==="string")return f;if(!f||typeof f!=="object")return null;if($.has(f))return null;$.add(f);let J=f;for(let W of bV){let H=KJ(J[W],$);if(H)return H}return null}function a3(f,$){let J=$.replace(/^\.\//,""),W=[v(f,$)];if(J.startsWith("dist/")){let H=J.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[v(f,`${H}.ts`),v(f,`${H}.tsx`),v(f,`${H}.mts`),v(f,`${H}.cts`),...W]}return W}function SV(f){return Object.fromEntries(Object.entries(f).sort(([$],[J])=>J.length-$.length))}function R8(f){return!(f.startsWith(".")||f.startsWith("/")||f.startsWith("file:")||f.startsWith("data:")||f.startsWith("http:")||f.startsWith("https:"))}function v$(f){if(f.startsWith("@")){let[$,J]=f.split("/",3);return J?`${$}/${J}`:f}return f.split("/",1)[0]??f}function kV(f){let $=v$(f);if(f===$)return".";return`.${f.slice($.length)}`}function t3(f){return v$(f).startsWith("@cline/")}function YJ(f,$){let J=v$($),W=h1(f);while(!0){let H=v(W,"node_modules",J);if(Bf(H)||Bf(v(H,"package.json")))return!0;let Q=v(W,"..");if(Q===W)return!1;W=Q}}function l3(f){return VJ(f)!==null}function VJ(f){try{return NV.resolve(f)}catch{}return IV(f)}function IV(f){let $=v$(f),J=mV($);if(!J)return null;let W=v(J,"package.json");try{let H=JSON.parse(u$(W,"utf8")),Q=kV(f),Z=Q==="."&&typeof H.exports==="string"?H.exports:H.exports&&typeof H.exports==="object"&&Object.hasOwn(H.exports,Q)?H.exports[Q]:void 0,j=KJ(Z)??(Q==="."&&typeof H.main==="string"?H.main:null);if(!j)return null;let X=v(J,j),A=[X,...a3(J,j).filter((P)=>P!==X)];for(let P of A)if(Bf(P))return P;return null}catch{return null}}function mV(f){let $=n3;while(!0){let J=v($,"package.json");if(Bf(J))try{if(JSON.parse(u$(J,"utf8")).name===f)return $}catch{}let W=v($,"node_modules",f,"package.json");if(Bf(W))return h1(W);let H=v($,"..");if(H===$)return null;$=H}}function xV(f){let J=h1(f);for(let W=0;W<4;W++){let H=v(J,"package.json");if(Bf(H))try{let Z=JSON.parse(u$(H,"utf8"));return Z!=null&&typeof Z==="object"&&"cline"in Z}catch{return!1}let Q=v(J,"..");if(Q===J)return!1;J=Q}return!1}function s3(f,$){let J=$.startsWith("file:")?i3($):OV($)?$:v(h1(f),$);if(Bf(J)&&L1.has(RJ(J)))return J;for(let W of L1){let H=`${J}${W}`;if(Bf(H))return H}for(let W of L1){let H=v(J,`index${W}`);if(Bf(H))return H}return null}function o3(f){let $=new Set,J=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of J)for(let H of f.matchAll(W)){let Q=H[1];if(Q)$.add(Q)}return[...$]}function e3(f,$,J=new Set){if(J.has(f)||!Bf(f))return;if(J.add(f),!L1.has(RJ(f)))return;let W=u$(f,"utf8");for(let H of o3(W)){if(H.startsWith("node:")||FJ.has(H))continue;if(R8(H)){if(Object.hasOwn(BJ,H)||Object.hasOwn(BJ,v$(H))||YJ(f,H)||t3(H)&&l3(H)||$&&l3(H))continue;throw Error(`Cannot find module '${v$(H)}'`)}let Q=s3(f,H);if(Q)e3(Q,$,J)}}function fQ(f,$=new Set,J=new Set){if($.has(f)||!Bf(f))return J;if($.add(f),!L1.has(RJ(f)))return J;let W=u$(f,"utf8");for(let H of o3(W)){if(J.add(H),R8(H))continue;let Q=s3(f,H);if(Q)fQ(Q,$,J)}return J}function gV(f,$){let J=p3(f),W={},H=fQ(f),Q=new Set(wV);for(let[Z,j]of Object.entries(BJ)){try{J.resolve(Z);continue}catch{}W[Z]=j}for(let Z of H)if(R8(Z)&&(t3(Z)||$))Q.add(Z);for(let Z of Q){if(Object.hasOwn(W,Z)||YJ(f,Z))continue;let j=VJ(Z);if(j)W[Z]=j}if(!$)return W;for(let Z of H){if(!R8(Z)||Object.hasOwn(W,Z)||YJ(f,Z)||Z.startsWith("node:")||FJ.has(Z))continue;let j=VJ(Z);if(j)W[Z]=j}return W}async function $Q(f,$={}){let J=!xV(f);e3(f,J);let W=gV(f,J),H=SV(W),Q=await import("jiti"),Z=typeof Q==="function"?Q:typeof Q.default==="function"?Q.default:void 0;if(!Z)throw Error("Unable to load jiti");return await Z(f,{alias:H,cache:$.useCache,requireCache:$.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...FJ],transformModules:Object.keys(H)}).import(f,{})}function JQ(f,$){if(!f)return!0;if(f.providerIds?.length){if(!$?.providerId||!f.providerIds.includes($.providerId))return!1}if(f.modelIds?.length){if(!$?.modelId||!f.modelIds.includes($.modelId))return!1}return!0}function WQ(f){return typeof f==="object"&&f!==null}function yJ(f){return Array.isArray(f)&&f.every(($)=>typeof $==="string")}function cV(f,$){if(!WQ(f.manifest))throw Error(`Invalid plugin module at ${$}: missing required "manifest"`);if(!yJ(f.manifest.capabilities))throw Error(`Invalid plugin module at ${$}: manifest.capabilities must be a string array`);if(f.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${$}: manifest.capabilities cannot be empty`);if(Object.hasOwn(f.manifest,"providerIds")&&!yJ(f.manifest.providerIds))throw Error(`Invalid plugin module at ${$}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn(f.manifest,"modelIds")&&!yJ(f.manifest.modelIds))throw Error(`Invalid plugin module at ${$}: manifest.modelIds must be a string array when provided`)}function dV(f,$){if(!WQ(f))throw Error(`Invalid plugin module at ${$}: expected object export`);if(typeof f.name!=="string"||f.name.length===0)throw Error(`Invalid plugin module at ${$}: expected non-empty "name"`);if(!Object.hasOwn(f,"manifest"))throw Error(`Invalid plugin module at ${$}: missing required "manifest"`);cV(f,$)}async function UJ(f,$={}){let J=vV($.cwd??process.cwd(),f),W=await $Q(J,{useCache:$.useCache}),H=$.exportName??"plugin",Q=W.default??W[H];dV(Q,J);let Z=Q,j=Z.setup,X=j?(A,P)=>{let B={...$.session,...P.session},Y={...P,session:Object.keys(B).length>0?B:void 0,client:$.client??P.client,user:$.user??P.user,workspaceInfo:$.workspaceInfo??P.workspaceInfo,automation:$.automation??P.automation,logger:$.logger??P.logger,telemetry:$.telemetry??P.telemetry};return j(A,Y)}:void 0;return{...Z,manifest:uV(Z.manifest),setup:X}}async function HQ(f,$={}){return(await $$(f,$)).plugins}async function $$(f,$={}){let J=[],W=[],H=new Map,Q=0;for(let Z of f)try{let j=await UJ(Z,$);if(!JQ(j.manifest,$))continue;let X=H.get(j.name);if(X)W.push({type:"duplicate_plugin_override",pluginName:j.name,pluginPath:Z,overriddenPluginPath:X.pluginPath,message:`Plugin "${j.name}" from ${Z} overrides ${X.pluginPath}`});H.set(j.name,{plugin:j,pluginPath:Z,order:Q++})}catch(j){let X=j instanceof Error?j.message:String(j);J.push({pluginPath:Z,phase:"load",message:X,stack:j instanceof Error?j.stack:void 0})}return{plugins:[...H.values()].sort((Z,j)=>Z.order-j.order).map((Z)=>Z.plugin),failures:J,warnings:W}}import{existsSync as tV}from"node:fs";import{createRequire as sV}from"node:module";import{dirname as oV,join as K8}from"node:path";import{fileURLToPath as eV}from"node:url";import{spawn as rV}from"node:child_process";import{basename as lV}from"node:path";import{augmentNodeCommandForDebug as pV,withResolvedClineBuildEnv as iV}from"@cline/shared";function QQ(f){if(f instanceof Error)return f;return Error(String(f))}var nV="CLINE_JS_RUNTIME_PATH";function ZQ(f){let $=f?.trim();if(!$)return!1;let J=lV($).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function jQ(f={}){let $=f.env??process.env,J=f.runtimeExecutable?.trim()||$[nV]?.trim();if(J)return J;let W=f.execPath?.trim()||process.execPath;if(ZQ(W))return W;for(let H of[$.BUN_EXEC_PATH,$.npm_node_execpath,$.NODE]){let Q=H?.trim();if(Q&&ZQ(Q))return Q}return"node"}function aV(f,$={}){let J=jQ({env:$.env,execPath:$.execPath,runtimeExecutable:$.runtimeExecutable});return pV([J,...f],{env:$.env,execArgv:$.execArgv,debugRole:$.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class F8{options;process=null;requestCounter=0;pending=new Map;constructor(f){this.options=f}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest(f){let $=this.pending.get(f);if(!$)return;if(this.pending.delete(f),$.timeout)clearTimeout($.timeout);return $}start(){if(this.process&&this.process.exitCode===null)return;let f=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],$=aV(f,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=rV($[0]??jQ(this.options),$.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:iV(process.env)});this.process=J;let W="",H=(Q)=>{let Z=W+Q;W=Z.length>4000?Z.slice(-4000):Z};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(Q)=>{H(Q)}),J.on("message",(Q)=>{this.onMessage(Q)}),J.on("error",(Q)=>{this.failPending(Error(`${this.processLabel} process error: ${QQ(Q).message}`))}),J.on("exit",(Q,Z)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(Q)}, signal=${String(Z)})${j?`: ${j}`:""}`))})}async call(f,$,J={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let H=`req_${++this.requestCounter}`,Q={type:"call",id:H,method:f,args:$};return await new Promise((Z,j)=>{let X={resolve:(A)=>Z(A),reject:j};if((J.timeoutMs??0)>0)X.timeout=setTimeout(()=>{this.clearPendingRequest(H),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${f}`))},J.timeoutMs);this.pending.set(H,X),W.send(Q,(A)=>{if(!A)return;let P=this.clearPendingRequest(H);if(!P)return;P.reject(Error(`${this.processLabel} failed to send call "${f}": ${QQ(A).message}`))})})}async shutdown(){let f=this.process;if(this.process=null,!f||f.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise(($)=>{let J=setTimeout(()=>{try{f.kill("SIGKILL")}catch{}$()},300);f.once("exit",()=>{clearTimeout(J),$()});try{f.kill("SIGTERM")}catch{clearTimeout(J),$()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage(f){if(!f)return;if(f.type==="event"){if(typeof f.name==="string"&&f.name.length>0)this.options.onEvent?.({name:f.name,payload:f.payload});return}if(f.type!=="response"||!f.id)return;let $=this.clearPendingRequest(f.id);if(!$)return;if(f.ok){$.resolve(f.result);return}$.reject(Error(f.error?.message||`${this.processLabel} call failed`))}failPending(f){for(let[$,J]of this.pending.entries()){if(this.pending.delete($),J.timeout)clearTimeout(J.timeout);J.reject(f)}}}function fR(f){return{...f,contributions:{tools:f.contributions?.tools??[],commands:f.contributions?.commands??[],messageBuilders:f.contributions?.messageBuilders??[],providers:f.contributions?.providers??[],automationEventTypes:f.contributions?.automationEventTypes??[],shortcuts:f.contributions?.shortcuts??[],flags:f.contributions?.flags??[]}}}function y8(f){return(f instanceof Error?f.message:String(f)).includes("Unknown sandbox plugin id:")}function $R(){let f=oV(eV(import.meta.url)),$=sV(import.meta.url),J=[K8(f,"plugin-sandbox-bootstrap.js"),K8(f,"extensions","plugin-sandbox-bootstrap.js"),K8(f,"agents","plugin-sandbox-bootstrap.js")];for(let Q of J)if(tV(Q))return{file:Q};let W=K8(f,"plugin-sandbox-bootstrap.ts"),H="jiti";try{H=$.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(H)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
156
|
-
`)}}var GJ=$R();function TJ(f,$){return typeof f==="number"&&f>0?f:$}async function AQ(f){let $=new F8({name:"plugin-sandbox",..."file"in GJ?{bootstrapFile:GJ.file}:{bootstrapScript:GJ.script},onEvent:f.onEvent}),J=TJ(f.importTimeoutMs,4000),W=TJ(f.hookTimeoutMs,3000),H=TJ(f.contributionTimeoutMs,60000),Q={pluginPaths:f.pluginPaths,exportName:f.exportName,providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,loggerEnabled:Boolean(f.logger)},Z,j=()=>{return Z??=$.call("initialize",Q,{timeoutMs:J}).finally(()=>{Z=void 0}),Z},X;try{X=await $.call("initialize",Q,{timeoutMs:J})}catch(B){throw await $.shutdown().catch(()=>{}),B}return{extensions:X.plugins.map(fR).map((B)=>{let Y={name:B.name,manifest:B.manifest,setup:(V)=>{JR(V,$,B,H,j),WR(V,$,B,H,j),QR(V,$,B,H,j),HR(V,B)}};return Y.hooks=jR($,B,W,j),Y}),failures:X.failures,shutdown:async()=>{await $.shutdown()},warnings:X.warnings}}function JR(f,$,J,W,H){for(let Q of J.contributions?.tools??[]){let Z={name:Q.name,description:Q.description??"",inputSchema:Q.inputSchema??{type:"object",properties:{}},timeoutMs:Q.timeoutMs,retryable:Q.retryable,execute:async(j,X)=>{try{return await $.call("executeTool",{pluginId:J.pluginId,contributionId:Q.id,input:j,context:X},{timeoutMs:W})}catch(A){if(!y8(A))throw A;return await H(),await $.call("executeTool",{pluginId:J.pluginId,contributionId:Q.id,input:j,context:X},{timeoutMs:W})}}};f.registerTool(Z)}}function WR(f,$,J,W,H){for(let Q of J.contributions?.commands??[])f.registerCommand({name:Q.name,description:Q.description,handler:async(Z)=>{try{return await $.call("executeCommand",{pluginId:J.pluginId,contributionId:Q.id,input:Z},{timeoutMs:W})}catch(j){if(!y8(j))throw j;return await H(),await $.call("executeCommand",{pluginId:J.pluginId,contributionId:Q.id,input:Z},{timeoutMs:W})}}})}function HR(f,$){for(let J of $.contributions?.providers??[])f.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of $.contributions?.automationEventTypes??[])f.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function QR(f,$,J,W,H){for(let Q of J.contributions?.messageBuilders??[])f.registerMessageBuilder({name:Q.name,async build(Z){try{let j=await $.call("buildMessages",{pluginId:J.pluginId,contributionId:Q.id,messages:Z},{timeoutMs:W});return XQ(j)?j:Z}catch(j){if(!y8(j))throw j;await H();let X=await $.call("buildMessages",{pluginId:J.pluginId,contributionId:Q.id,messages:Z},{timeoutMs:W});return XQ(X)?X:Z}}})}function XQ(f){return Array.isArray(f)&&f.every(($)=>typeof $==="object"&&$!==null&&("role"in $)&&("content"in $))}function ZR(f,$,J,W,H){return async(Q)=>{try{return await f.call("invokeHook",{pluginId:$,hookName:J,payload:Q},{timeoutMs:W})}catch(Z){if(!y8(Z))throw Z;return await H(),await f.call("invokeHook",{pluginId:$,hookName:J,payload:Q},{timeoutMs:W})}}}function jR(f,$,J,W){let H={};for(let Q of $.hooks??[])H[Q]=ZR(f,$.pluginId,Q,J,W);return Object.keys(H).length>0?H:void 0}function DJ(f){return BR(f)}function _J(f){return AR(f)}function O1(f={}){let $=f.cwd??process.cwd(),J=DJ(f.workspacePath).flatMap((Z)=>_J(Z)).filter((Z)=>XR(Z)),W=PR(f.pluginPaths??[],$),H=[],Q=new Set;for(let Z of[...W,...J]){if(Q.has(Z))continue;Q.add(Z),H.push(Z)}return AJ(H)}async function U8(f={}){let $=O1(f);if($.length===0)return{extensions:[],failures:[],warnings:[]};if(f.mode==="in_process"){let W=await $$($,{cwd:f.cwd,exportName:f.exportName,providerId:f.providerId,modelId:f.modelId,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,automation:f.automation,logger:f.logger,telemetry:f.telemetry});return{extensions:W.plugins,failures:W.failures,warnings:W.warnings}}let J=await AQ({pluginPaths:$,exportName:f.exportName,importTimeoutMs:f.importTimeoutMs,hookTimeoutMs:f.hookTimeoutMs,contributionTimeoutMs:f.contributionTimeoutMs,onEvent:f.onEvent,providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,logger:f.logger});return{extensions:J.extensions??[],shutdown:J.shutdown,failures:J.failures,warnings:J.warnings}}W0();function YR(f,$){if(!f.setup)return[];let J=[],W={registerTool:(H)=>J.push(H),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return f.setup(W,{workspaceInfo:$}),J}async function MJ(f){let $=O1({workspacePath:f.workspacePath,cwd:f.cwd}),J=rf(f.disabledToolNames),W=[];for(let H of $){let Q=await $$([H],{cwd:f.cwd,providerId:f.providerId,modelId:f.modelId});for(let Z of Q.plugins)for(let j of YR(Z,{rootPath:f.workspacePath}))W.push({name:j.name,pluginName:Z.name,path:H,source:H.startsWith(f.workspacePath)?"workspace-plugin":"global-plugin",enabled:!J.has(j.name),description:j.description?.trim()||void 0})}return W.sort((H,Q)=>{let Z=H.name.localeCompare(Q.name);if(Z!==0)return Z;return H.path.localeCompare(Q.path)})}function hJ(f,$){if(!$)return"global";let J=RR($,f);return!J.startsWith("..")&&!VR(J)?"workspace":"global"}function G8(f){return[...f].sort(($,J)=>{let W=(H)=>{switch(H){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if($.source!==J.source)return W($.source)-W(J.source);return $.name.localeCompare(J.name)})}function YQ(f){return f.workspaceRoot?.trim()||f.cwd?.trim()||""}async function BQ(f,$){if(f.userInstructionService)return await $(f.userInstructionService);let J=YQ(f);if(!J)return await $(void 0);let W=m$({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await W.start(),await $(W)}finally{W.stop()}}function FR(f,$){if(!f)return;let J=f.listRecords("skill");if($.id){let W=J.find((H)=>H.id===$.id);if(W)return W}for(let W of J)if(W.filePath===$.path||W.item.name===$.name||W.id===$.name)return W;return}class c${async list(f={}){return await BQ(f,async($)=>{let J=YQ(f),W=[],H=[],Q=[],Z=[];if($){for(let j of $.listRecords("workflow")){let X=j.item;W.push({id:j.id,name:X.name,path:j.filePath,enabled:X.disabled!==!0,kind:"workflow",source:hJ(j.filePath,J),description:X.instructions,toggleable:!1})}for(let j of $.listRecords("rule")){let X=j.item;H.push({id:j.id,name:X.name,path:j.filePath,enabled:X.disabled!==!0,kind:"rule",source:hJ(j.filePath,J),description:X.instructions,toggleable:!1})}for(let j of $.listRecords("skill")){let X=j.item;Q.push({id:j.id,name:X.name,path:j.filePath,enabled:X.disabled!==!0,kind:"skill",source:hJ(j.filePath,J),description:X.description,toggleable:!0})}}if(J)try{for(let j of await MJ({workspacePath:J,cwd:f.cwd,providerId:f.availabilityContext?.providerId,modelId:f.availabilityContext?.modelId}))Z.push({id:`${j.pluginName}:${j.name}:${j.path}`,name:j.name,path:j.path,enabled:j.enabled,kind:"tool",source:j.source,description:j.description,toggleable:!0})}catch{}return{workflows:G8(W.filter((j)=>LJ(j.path))),rules:G8(H.filter((j)=>LJ(j.path))),skills:G8(Q.filter((j)=>LJ(j.path))),tools:G8(Z)}})}async toggle(f){if(f.type==="skills")return await BQ(f,async($)=>{let J=FR($,f),W=J?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${f.id??f.name??PQ(f.path??"")}'.`);let H=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,Q=f.enabled??(H!==void 0?!H:void 0);if(Q===void 0)throw Error(`Cannot determine toggle state for skill '${f.id??f.name??PQ(f.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await g3({filePath:W,enabled:Q}),await $?.refreshType("skill"),{snapshot:await this.list({...f,userInstructionService:$}),changedTypes:["skills"]}});if(f.type==="tools"){if(!f.name?.trim())throw Error("Tool settings toggle requires a tool name.");if(f.enabled===void 0)XJ(f.name);else r3(f.name,!f.enabled);return{snapshot:await this.list(f),changedTypes:["tools"]}}throw Error(`Settings type '${f.type}' does not support toggles.`)}}function z1(){return new c$}function VQ(f){return{async list($){let J=f;if(J.listSettings)return await J.listSettings($);return await z1().list($)},async toggle($){let J=f;if(J.toggleSetting)return await J.toggleSetting($);return await z1().toggle($)}}}function RQ(f){function $(){let J=f.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return $().list(J)},update(J){return $().update(J)},delete(J){return $().delete(J)}}}function Ff(...f){let $,J;for(let H of f){if(!H)continue;if(H.toolExecutors)$={...$??{},...H.toolExecutors};if(H.requestToolApproval)J=H.requestToolApproval}let W=$&&Object.keys($).length>0;if(!W&&!J)return;return{...W?{toolExecutors:$}:{},...J?{requestToolApproval:J}:{}}}function OJ(f){let{hooks:$,logger:J,telemetry:W,extensionContext:H,extraTools:Q,extensions:Z,onTeamEvent:j,onConsecutiveMistakeLimitReached:X,checkpoint:A,compaction:P,...B}=f,Y={};if($)Y.hooks=$;if(J)Y.logger=J;if(W)Y.telemetry=W;if(H)Y.extensionContext=H;if(Q)Y.extraTools=Q;if(Z)Y.extensions=Z;if(j)Y.onTeamEvent=j;if(X)Y.onConsecutiveMistakeLimitReached=X;if(A?.createCheckpoint)Y.checkpoint=A;if(P?.compact)Y.compaction=P;let V=Object.keys(Y).length>0?Y:void 0;return{config:{...B,...A?{checkpoint:{enabled:A.enabled}}:{},...P?{compaction:{enabled:P.enabled,strategy:P.strategy,thresholdRatio:P.thresholdRatio,reserveTokens:P.reserveTokens,preserveRecentTokens:P.preserveRecentTokens,contextWindowTokens:P.contextWindowTokens,summarizer:P.summarizer}}:{}},...V?{localRuntime:V}:{}}}function FQ(f){let $=f.config;return"providerId"in $?{...f,config:{...$,...KR(f.localRuntime)},localRuntime:f.localRuntime}:f}function zJ(f,$={}){let J=OJ(f.config),W=Ff($.defaultCapabilities,f.capabilities),H=yR(J.localRuntime,f.localRuntime),Q=$.withExtensionContext?.(H?.extensionContext);if(Q)H={...H??{},extensionContext:Q};return{...f,...J,...H?{localRuntime:H}:{},...W?{capabilities:W}:{}}}function KR(f){if(!f)return{};let{modelCatalogDefaults:$,userInstructionService:J,configExtensions:W,onTeamRestored:H,...Q}=f;return Q}function yR(...f){let $={};for(let J of f)if(J)Object.assign($,J);return Object.keys($).length>0?$:void 0}Uf();function KQ(f){let $=f.input.config.telemetry??f.telemetry;if(!$)return;$.capture({event:x.SESSION.STARTED,properties:{sessionId:f.sessionId,source:f.input.source??Rf.CORE,providerId:f.input.config.providerId,modelId:f.input.config.modelId,enableTools:f.input.config.enableTools,enableSpawnAgent:f.input.config.enableSpawnAgent,enableAgentTeams:f.input.config.enableAgentTeams,clientName:f.clientName,runtimeAddress:f.runtimeAddress}})}function N1(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function NJ(f){let $=f?.trim();return $?$:void 0}function UR(f,$){let J=f?.trim();if(!J)return $;let W=Date.parse(J);if(!Number.isFinite(W))return $;return new Date(W).toISOString()}function yQ(f,$){return new Date(new Date(f).getTime()+Math.max(0,Math.floor($))*1000).toISOString()}function UQ(f,$){return new Date(new Date(f).getTime()-Math.max(0,Math.floor($))*1000).toISOString()}function GR(f,$){if(!f)return $;return new Date(f).getTime()>=new Date($).getTime()?f:$}function TR(f,$){let J=f.eventId.trim(),W=f.eventType.trim(),H=f.source.trim(),Q=NJ(f.subject),Z=NJ(f.dedupeKey)??`${W}:${H}:${Q??J}`;return{eventId:J,eventType:W,source:H,subject:Q,occurredAt:UR(f.occurredAt,$),workspaceRoot:NJ(f.workspaceRoot),payload:N1(f.payload)?f.payload:void 0,attributes:N1(f.attributes)?f.attributes:void 0,dedupeKey:Z}}function qJ(f,$){if(!$)return;let J=$.split("."),W=f;for(let H of J){if(!N1(W))return;W=W[H]}return W}function DR(f,$){if(f.attributes&&Object.hasOwn(f.attributes,$))return f.attributes[$];if(f.payload&&Object.hasOwn(f.payload,$))return f.payload[$];let J={eventId:f.eventId,eventType:f.eventType,source:f.source,subject:f.subject,occurredAt:f.occurredAt,workspaceRoot:f.workspaceRoot,dedupeKey:f.dedupeKey,attributes:f.attributes,payload:f.payload},W=qJ(J,$);if(W!==void 0)return W;if(f.attributes){let H=qJ(f.attributes,$);if(H!==void 0)return H}if(f.payload)return qJ(f.payload,$);return}function T8(f,$){if(Array.isArray($))return $.some((J)=>T8(f,J));if(Array.isArray(f))return f.some((J)=>T8(J,$));if(N1($)){if(!N1(f))return!1;return Object.entries($).every(([J,W])=>T8(f[J],W))}return Object.is(f,$)}function _R(f,$){if(!$||Object.keys($).length===0)return!0;return Object.entries($).every(([J,W])=>T8(DR(f,J),W))}class wJ{store;nowFn;logger;constructor(f){this.store=f.store,this.nowFn=f.now??(()=>Date.now()),this.logger=f.logger}ingestEvent(f){let $=new Date(this.nowFn()).toISOString(),J=TR(f,$),W=this.store.insertEventLog(J,{receivedAtIso:$});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let H=this.store.listEventSpecsForType(J.eventType),Q=[],Z=[],j=[];for(let P of H){if(!_R(J,P.filters)){Q.push({specId:P.specId,externalId:P.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}Z.push(P);let B=this.materializeForSpec(P,J,W.record.receivedAt);if(B.run)j.push(B.run);else Q.push({specId:P.specId,externalId:P.externalId,reason:B.reason,dedupeKey:J.dedupeKey})}let X=Z.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:X,matchedSpecCount:Z.length,queuedRunCount:j.length,suppressedCount:Q.filter((P)=>P.reason!=="filter_mismatch").length});let A=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:X,matchedSpecCount:Z.length,queuedRunCount:j.length}),{event:A??W.record,duplicate:!1,matchedSpecs:Z,queuedRuns:j,suppressions:Q}}catch(H){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:H instanceof Error?H.message:String(H)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:H});throw H}}materializeForSpec(f,$,J){let W=$.dedupeKey??$.eventId,H=f.debounceSeconds??0;if(H>0){let X=this.store.findQueuedEventRunForDedupe({specId:f.specId,dedupeKey:W});if(X){let A=GR(X.scheduledFor,yQ(J,H)),P=this.store.updateQueuedEventRunForDebounce({runId:X.runId,triggerEventId:$.eventId,scheduledFor:A});if(P)return{run:P,reason:"dedupe_window"}}}let Q=f.dedupeWindowSeconds??0;if(Q>0&&this.store.hasRecentEventRunForDedupe({specId:f.specId,dedupeKey:W,sinceIso:UQ(J,Q)}))return{reason:"dedupe_window"};let Z=f.cooldownSeconds??0;if(Z>0&&this.store.hasRecentEventRunForSpec({specId:f.specId,sinceIso:UQ(J,Z)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:f.specId,specRevision:f.revision,triggerKind:"event",triggerEventId:$.eventId,scheduledFor:H>0?yQ(J,H):J}),reason:"dedupe_window"}}}class q1{store;nowFn;constructor(f){this.store=f.store,this.nowFn=f.now??(()=>Date.now())}materializeAll(){let f={oneOffQueued:0,scheduleQueued:0},$=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of $)if(this.materializeOneOff(W))f.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of J)try{if(this.materializeSchedule(W))f.scheduleQueued+=1}catch{}return f}materializeOneOff(f){if(f.triggerKind!=="one_off")return!1;if(!f.enabled||f.removed)return!1;if(this.store.hasOneOffRunForRevision(f.specId,f.revision))return!1;return this.store.enqueueRun({specId:f.specId,specRevision:f.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule(f){if(f.triggerKind!=="schedule")return!1;if(!f.enabled||f.removed)return!1;if(!f.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:f.specId,nowMs:this.nowFn()}).queued}}import{basename as CR}from"node:path";import{buildClineSystemPrompt as ER}from"@cline/shared";import{nowIso as _Q}from"@cline/shared/db";import{basename as MR,resolve as LR}from"node:path";import{performance as GQ}from"node:perf_hooks";import{processWorkspaceInfo as TQ}from"@cline/shared";import hR from"simple-git";function J$(f){return LR(f)}async function _8(f){return(await bJ(f)).info}function D8(f){if(f instanceof Error)return{errorType:f.name?.trim()||f.constructor.name||"Error",message:f.message};return{errorType:"Error",message:String(f)}}async function bJ(f){let $=J$(f),J={rootPath:$,hint:MR($)},W;try{let H=hR({baseDir:$});if(!await H.checkIsRepo())return{info:J,vcsType:"none"};try{let Z=await H.getRemotes(!0);if(Z.length>0){let j=Z.map((X)=>{let A=X.refs.fetch||X.refs.push;return`${X.name}: ${A}`});J.associatedRemoteUrls=j}}catch(Z){W??=D8(Z)}try{let Z=(await H.revparse(["HEAD"])).trim();if(Z.length>0)J.latestGitCommitHash=Z}catch(Z){W??=D8(Z)}try{let Z=(await H.branch()).current.trim();if(Z.length>0)J.latestGitBranchName=Z}catch(Z){W??=D8(Z)}return{info:J,vcsType:"git",error:W}}catch(H){return{info:J,vcsType:"none",error:D8(H)}}}async function CJ(f){let $=await _8(f);return TQ($)}async function DQ(f){let $=GQ.now(),J=await bJ(f),W=GQ.now()-$,H=J.info;return{workspaceInfo:H,workspaceMetadata:TQ(H),durationMs:W,vcsType:J.vcsType,initError:J.error}}import{mkdirSync as OR,writeFileSync as zR}from"node:fs";import{join as NR}from"node:path";import{resolveCronReportsDir as qR}from"@cline/shared/storage";function h0(f){if(/[:#\n]/.test(f)||f.includes('"'))return JSON.stringify(f);return f}function W$(f,$){if($===void 0||$===null)return;return`${f}: ${h0($)}`}function wR(f,$,J){let W=[`runId: ${h0(f.runId)}`,`specId: ${h0($.specId)}`,`externalId: ${h0($.externalId)}`,`title: ${h0($.title)}`,`triggerKind: ${h0(f.triggerKind)}`,`status: ${h0(f.status)}`,`sourcePath: ${h0($.sourcePath)}`],H=[W$("sessionId",f.sessionId),W$("startedAt",f.startedAt),W$("completedAt",f.completedAt),W$("triggerEventId",f.triggerEventId),W$("triggerEventType",J?.eventType),W$("triggerEventSource",J?.source),W$("triggerEventSubject",J?.subject)];for(let Q of H)if(Q)W.push(Q);return`---
|
|
157
|
-
${
|
|
157
|
+
${f}`}function sK($,f){let{data:J,body:Q,hadFrontmatter:Z}=tK($);if(!Z&&f)return $;if(f){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return Q;return f3(J,Q)}return J.disabled=!0,f3(J,Q)}async function Q3({filePath:$,enabled:f}){let J=await nK($,"utf8"),Q=sK(J,f);return await aK($,Q),{filePath:$,enabled:f,disabled:!f}}import{spawn as yG}from"node:child_process";import{StringDecoder as D3}from"node:string_decoder";import{UnauthorizedError as K3}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as TG}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as GG}from"node:crypto";import{UnauthorizedError as PG}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as FG}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as DG}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as RG}from"@modelcontextprotocol/sdk/client/streamableHttp.js";y8();var UG="/mcp/oauth/callback",LG=[1456,1457,1458],OG=300000;function zG($){if($ instanceof Error){let f=$.message.trim();if(f.length>0)return f}return String($)}function _G($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function N8($){let f={};try{f=wf($.serverName,{filePath:$.settingsPath})??{}}catch{f={}}let J,Q,Z=async(j)=>{let X=c1(j(f))??{};try{f=Sf($.serverName,()=>X,{filePath:$.settingsPath})}catch{f=X}};return{provider:{get redirectUrl(){return f.redirectUrl??$.redirectUrl},get clientMetadata(){return _G(f.redirectUrl??$.redirectUrl)},state:()=>{return Q=GG(),Q},clientInformation:()=>f.clientInformation,saveClientInformation:async(j)=>{await Z((X)=>({...X,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>f.tokens,saveTokens:async(j)=>{await Z((X)=>({...X,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(j)=>{J=j.toString(),await $.onAuthorizationUrl?.(J)},saveCodeVerifier:async(j)=>{await Z((X)=>({...X,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!f.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return f.codeVerifier},invalidateCredentials:async(j)=>{await Z((X)=>{if(j==="all")return{lastError:X.lastError,redirectUrl:X.redirectUrl};return{...X,...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 Z((X)=>({...X,discoveryState:j}))},discoveryState:()=>f.discoveryState},getLastAuthorizationUrl:()=>J,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await Z((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await Z((X)=>({...X,lastError:j}))},clearError:async()=>{await Z((j)=>({...j,lastError:void 0}))}}}function T8($){let f=$.registration.transport;if(f.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let J=f.headers?{headers:f.headers}:void 0;if(f.type==="sse")return new DG(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch});return new RG(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch})}function A3($){return new FG({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function B3($){let f=$.serverName.trim();if(!f)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:J}=await Promise.resolve().then(() => (y8(),V3)),Q=J({filePath:$.filePath}).find((H)=>H.name===f);if(!Q)throw Error(`MCP server "${f}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${f}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${f}" uses stdio transport and does not support OAuth browser flow.`);let Z=await $$({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:LG,callbackPath:$.callbackPath??UG,timeoutMs:$.timeoutMs??OG,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!Z.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let W=N8({settingsPath:$.filePath,serverName:f,redirectUrl:Z.callbackUrl,onAuthorizationUrl:async(H)=>{await $.openUrl?.(H)}});await W.resetInteractiveState();let j=A3($),X;try{let H=T8({registration:Q,oauthProvider:W.provider,fetch:$.fetch});try{return await j.connect(H),await j.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" is already authorized.`}}catch(Y){if(!(Y instanceof PG))throw Y;if(!W.getLastAuthorizationUrl())throw Error(`MCP server "${f}" did not provide an authorization URL.`);let A=await Z.waitForCallback();if(!A)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(A.error)throw Error(`OAuth authorization failed: ${A.error}`);if(!A.code)throw Error("OAuth callback did not include an authorization code.");let B=W.getLastOAuthState();if(!B)throw Error(`MCP server "${f}" did not start an OAuth stateful authorization flow.`);if(A.state!==B)throw Error("OAuth authorization failed: state mismatch.");await H.finishAuth(A.code),X=A3($);let K=T8({registration:Q,oauthProvider:W.provider,fetch:$.fetch});return await X.connect(K),await X.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" OAuth authorization completed.`}}}catch(H){let Y=zG(H);throw await W.markError(Y),Error(Y)}finally{await j.close().catch(()=>{return}),await X?.close().catch(()=>{return}),Z.close()}}var NG="2024-11-05",MG=5000,qG=1500,G3="http://127.0.0.1:1456/mcp/oauth/callback";function M8($){return $ instanceof Error?$.message:String($)}function P3($){let f=Buffer.from(JSON.stringify($),"utf8"),J=Buffer.from(`Content-Length: ${f.byteLength}\r
|
|
158
|
+
\r
|
|
159
|
+
`,"utf8");return Buffer.concat([J,f])}function F3($){return Buffer.from(`${JSON.stringify($)}
|
|
160
|
+
`,"utf8")}class SJ{buffer="";decoder=new D3("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`\r
|
|
161
|
+
\r
|
|
162
|
+
`);if(J<0)break;let Z=this.buffer.slice(0,J).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!Z)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let W=Number.parseInt(Z[1],10),j=J+4,X=j+W;if(this.buffer.length<X)break;f.push(this.buffer.slice(j,X)),this.buffer=this.buffer.slice(X)}return f}}class CJ{buffer="";decoder=new D3("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`
|
|
163
|
+
`);if(J<0)break;let Q=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),Q.length>0)f.push(Q)}return f}}class R3{registration;process;nextRequestId=1;pending=new Map;framedParser=new SJ;newlineParser=new CJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],f;for(let J of $){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:NG,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},qG),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(Q){f=Q instanceof Error?Q:Error(String(Q))}}throw f??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((f)=>typeof f?.name==="string"&&typeof f.inputSchema==="object"&&f.inputSchema!==null).map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let f=this.registration.transport;if(f.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${f.type}`);this.framedParser=new SJ,this.newlineParser=new CJ,this.stderrBuffer="",this.protocolMode=$;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=yG(f.command,f.args??[],{cwd:f.cwd,env:{...process.env,...f.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=Q,Q.stdout.on("data",(Z)=>this.handleStdout(Z)),Q.stderr.on("data",(Z)=>{if(this.process!==Q)return;if(this.stderrBuffer+=Z.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(Z)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${M8(Z)}`))}),Q.once("exit",(Z,W)=>{if(this.process!==Q)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=${Z??"null"}, signal=${W??"null"}).${j}`))})}handleStdout($){try{let f=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let J of f){let Q=JSON.parse(J);if(typeof Q.id!=="number")continue;let Z=this.pending.get(Q.id);if(!Z)continue;if(this.pending.delete(Q.id),clearTimeout(Z.timeout),Q.error){let W=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;Z.reject(Error(W));continue}Z.resolve(Q.result)}}catch(f){this.handleProtocolFailure(f)}}handleProtocolFailure($){let f=this.process;if(!f)return;this.connected=!1,this.process=void 0;let J=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${M8($)}.${J}`)),f.kill()}async request($,f,J=MG){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let Z=this.nextRequestId++,W={jsonrpc:"2.0",id:Z,method:$,...f?{params:f}:{}},j=new Promise((X,H)=>{let Y=setTimeout(()=>{this.pending.delete(Z),H(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},J);this.pending.set(Z,{resolve:X,reject:H,timeout:Y})});try{Q.stdin.write(this.protocolMode==="framed"?P3(W):F3(W))}catch(X){let H=this.pending.get(Z);if(H)clearTimeout(H.timeout),this.pending.delete(Z);throw X}return j}notify($,f){let J=this.process;if(!J?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...f?{params:f}:{}};J.stdin.write(this.protocolMode==="framed"?P3(Q):F3(Q))}failAllPending($){for(let[f,J]of this.pending)clearTimeout(J.timeout),this.pending.delete(f),J.reject($)}}class U3{registration;options;client;authContext;constructor($,f){this.registration=$;this.options=f}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 $=N8({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??G3});this.authContext=$;try{let f=new TG({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),J=T8({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await f.connect(J),await $.clearError(),this.client=f}catch(f){let J=f instanceof K3?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):M8(f);throw await $.markError(J),Error(J)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema&&typeof J.inputSchema==="object"&&!Array.isArray(J.inputSchema)?J.inputSchema:{}}))}catch(f){return await this.handleOperationError(f)}}async callTool($){let f=await this.ensureConnectedClient();try{return await f.callTool({name:$.name,arguments:$.arguments??{}})}catch(J){return await this.handleOperationError(J)}}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 f=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${f} Run authorizeMcpServerOAuth for this server.`;return`${f} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let f=this.authContext??N8({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??G3}),J=$ instanceof K3?this.formatUnauthorizedMessage(f.getLastAuthorizationUrl()):M8($);throw await f.markError(J),Error(J)}}function q8($={}){return(f)=>f.transport.type==="stdio"?new R3(f):new U3(f,$)}y8();function S0(){return Date.now()}function wG($){return $.map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}class hf{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let f=this.servers.get($.name);if(!f){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:S0()});return}let J=JSON.stringify(f.registration.transport)!==JSON.stringify($.transport);if(f.registration={...$},f.updatedAt=S0(),J)await this.disconnectState(f),f.client=void 0,f.toolCache=void 0,f.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.connectState(f)})}async disconnectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f)})}async setServerDisabled($,f){await this.runExclusive($,async()=>{let J=this.requireServer($);if(J.registration={...J.registration,disabled:f},J.updatedAt=S0(),f)await this.disconnectState(J)})}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(($,f)=>$.name.localeCompare(f.name))}async listTools($){let f=this.requireServer($),J=f.toolCacheUpdatedAt??0;if(f.toolCache&&S0()-J<=this.toolsCacheTtlMs)return f.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let f=this.requireServer($),Q=await(await this.ensureConnectedClient(f)).listTools(),Z=wG(Q);return f.toolCache=Z,f.toolCacheUpdatedAt=S0(),f.updatedAt=S0(),Z})}async callTool($){return this.runExclusive($.serverName,async()=>{let f=this.requireServer($.serverName),J=await this.ensureConnectedClient(f);return f.updatedAt=S0(),J.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let f of $)await this.unregisterServer(f)}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=S0();try{let f=$.client??await this.clientFactory($.registration);await f.connect(),$.client=f,$.status="connected",$.lastError=void 0,$.updatedAt=S0()}catch(f){throw $.status="disconnected",$.lastError=f instanceof Error?f.message:String(f),$.updatedAt=S0(),f}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=S0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=S0()}}requireServer($){let f=this.servers.get($);if(!f)throw Error(`Unknown MCP server: ${$}`);return f}async runExclusive($,f){let J=this.operationLocks.get($)??Promise.resolve(),Q,Z=new Promise((j)=>{Q=j}),W=J.catch(()=>{return}).then(()=>Z);this.operationLocks.set($,W),await J.catch(()=>{return});try{return await f()}finally{if(Q?.(),this.operationLocks.get($)===W)this.operationLocks.delete($)}}}import{createHash as SG}from"node:crypto";var L3=128,CG=/[^a-zA-Z0-9_-]+/g,O3=8,hG=1,EG="mcp_tool";function bG($){return SG("sha1").update($).digest("hex").slice(0,O3)}function kG($){return $.replace(CG,"_")}var w8=({serverName:$,toolName:f})=>{let J=`${$}__${f}`,Q=kG(J);if(Q===J&&J.length<=L3)return J;let Z=bG(J),W=L3-hG-O3;return`${Q.slice(0,W)||EG}_${Z}`};function hJ($){return{[($.nameTransform??w8)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function z3($){let f={};for(let J of $.toolNames)Object.assign(f,hJ({serverName:$.serverName,toolName:J,nameTransform:$.nameTransform}));return f}import{createTool as IG}from"@cline/shared";function xG($,f){let J=f.description?.trim();if(J)return J;return`Execute MCP tool "${f.name}" from server "${$}".`}async function S8($){let f=await $.provider.listTools($.serverName),J=$.nameTransform??w8;return f.map((Q)=>{let Z=J({serverName:$.serverName,toolName:Q.name});return IG({name:Z,description:xG($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(W,j)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:W&&typeof W==="object"&&!Array.isArray(W)?W:void 0,context:j})})})}Z$();Z$();import{existsSync as SP}from"node:fs";import{discoverPluginModulePaths as CP,resolveConfiguredPluginModulePaths as hP,resolvePluginConfigSearchPaths as EP}from"@cline/shared/storage";import{resolve as HP}from"node:path";import{normalizePluginManifest as YP}from"@cline/shared";import{existsSync as A0,readFileSync as p1}from"node:fs";import{builtinModules as rG,createRequire as w3}from"node:module";import{dirname as kf,extname as b8,isAbsolute as iG,resolve as c}from"node:path";import{fileURLToPath as S3}from"node:url";import{PLUGIN_FILE_EXTENSIONS as nG}from"@cline/shared";var C3=kf(S3(import.meta.url)),aG=w3(import.meta.url),tG=c(C3,"..","..","..","..",".."),xJ=eG(tG),sG=["@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"],vJ=new Set(rG.flatMap(($)=>[$,$.replace(/^node:/,"")])),bf=new Set(nG),oG=["development","node","import","require","default"];function eG($){let f={},J={"@cline/agents":c($,"packages/agents/src/index.ts"),"@cline/core":c($,"packages/core/src/index.ts"),"@cline/llms":c($,"packages/llms/src/index.ts"),"@cline/shared":c($,"packages/shared/src/index.ts"),"@cline/shared/storage":c($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":c($,"packages/shared/src/db/index.ts")};for(let[Q,Z]of Object.entries(J))if(A0(Z))f[Q]=Z;for(let Q of["agents","core","llms","shared"]){let Z=c($,"packages",Q),W=c(Z,"package.json");if(!A0(W))continue;try{let j=JSON.parse(p1(W,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let X=c(Z,j.exports);if(A0(X))f[j.name]=X;continue}if(typeof j.exports!=="object")continue;for(let[X,H]of Object.entries(j.exports)){let Y=$P(Z,H);if(!Y)continue;let V=X==="."?j.name:`${j.name}/${X.replace(/^\.\//,"")}`;f[V]=Y}}catch{}}return f}function $P($,f){let J=cJ(f);if(!J)return null;let Q=h3($,J);for(let Z of Q)if(A0(Z))return Z;return null}function cJ($,f=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(f.has($))return null;f.add($);let J=$;for(let Q of oG){let Z=cJ(J[Q],f);if(Z)return Z}return null}function h3($,f){let J=f.replace(/^\.\//,""),Q=[c($,f)];if(J.startsWith("dist/")){let Z=J.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[c($,`${Z}.ts`),c($,`${Z}.tsx`),c($,`${Z}.mts`),c($,`${Z}.cts`),...Q]}return Q}function fP($){return Object.fromEntries(Object.entries($).sort(([f],[J])=>J.length-f.length))}function E8($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function l1($){if($.startsWith("@")){let[f,J]=$.split("/",3);return J?`${f}/${J}`:$}return $.split("/",1)[0]??$}function JP($){let f=l1($);if($===f)return".";return`.${$.slice(f.length)}`}function E3($){return l1($).startsWith("@cline/")}function gJ($,f){let J=l1(f),Q=kf($);while(!0){let Z=c(Q,"node_modules",J);if(A0(Z)||A0(c(Z,"package.json")))return!0;let W=c(Q,"..");if(W===Q)return!1;Q=W}}function q3($){return mJ($)!==null}function mJ($){try{return aG.resolve($)}catch{}return QP($)}function QP($){let f=l1($),J=ZP(f);if(!J)return null;let Q=c(J,"package.json");try{let Z=JSON.parse(p1(Q,"utf8")),W=JP($),j=W==="."&&typeof Z.exports==="string"?Z.exports:Z.exports&&typeof Z.exports==="object"&&Object.hasOwn(Z.exports,W)?Z.exports[W]:void 0,X=cJ(j)??(W==="."&&typeof Z.main==="string"?Z.main:null);if(!X)return null;let H=c(J,X),Y=[H,...h3(J,X).filter((V)=>V!==H)];for(let V of Y)if(A0(V))return V;return null}catch{return null}}function ZP($){let f=C3;while(!0){let J=c(f,"package.json");if(A0(J))try{if(JSON.parse(p1(J,"utf8")).name===$)return f}catch{}let Q=c(f,"node_modules",$,"package.json");if(A0(Q))return kf(Q);let Z=c(f,"..");if(Z===f)return null;f=Z}}function WP($){let J=kf($);for(let Q=0;Q<4;Q++){let Z=c(J,"package.json");if(A0(Z))try{let j=JSON.parse(p1(Z,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let W=c(J,"..");if(W===J)return!1;J=W}return!1}function b3($,f){let J=f.startsWith("file:")?S3(f):iG(f)?f:c(kf($),f);if(A0(J)&&bf.has(b8(J)))return J;for(let Q of bf){let Z=`${J}${Q}`;if(A0(Z))return Z}for(let Q of bf){let Z=c(J,`index${Q}`);if(A0(Z))return Z}return null}function k3($){let f=new Set,J=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of J)for(let Z of $.matchAll(Q)){let W=Z[1];if(W)f.add(W)}return[...f]}function jP($){return b8($)!==".ts"}function I3($,f,J=new Set){if(J.has($)||!A0($))return;if(J.add($),!bf.has(b8($)))return;let Q=p1($,"utf8"),Z=jP($);for(let W of k3(Q)){if(W.startsWith("node:")||vJ.has(W))continue;if(E8(W)){if(!Z)continue;if(Object.hasOwn(xJ,W)||Object.hasOwn(xJ,l1(W))||gJ($,W)||E3(W)&&q3(W)||f&&q3(W))continue;throw Error(`Cannot find module '${l1(W)}'`)}let j=b3($,W);if(j)I3(j,f,J)}}function x3($,f=new Set,J=new Set){if(f.has($)||!A0($))return J;if(f.add($),!bf.has(b8($)))return J;let Q=p1($,"utf8");for(let Z of k3(Q)){if(J.add(Z),E8(Z))continue;let W=b3($,Z);if(W)x3(W,f,J)}return J}function XP($,f){let J=w3($),Q={},Z=x3($),W=new Set(sG);for(let[j,X]of Object.entries(xJ)){try{J.resolve(j);continue}catch{}Q[j]=X}for(let j of Z)if(E8(j)&&(E3(j)||f))W.add(j);for(let j of W){if(Object.hasOwn(Q,j)||gJ($,j))continue;let X=mJ(j);if(X)Q[j]=X}if(!f)return Q;for(let j of Z){if(!E8(j)||Object.hasOwn(Q,j)||gJ($,j)||j.startsWith("node:")||vJ.has(j))continue;let X=mJ(j);if(X)Q[j]=X}return Q}async function g3($,f={}){let J=!WP($);I3($,J);let Q=XP($,J),Z=fP(Q),W=await import("jiti"),j=typeof W==="function"?W:typeof W.default==="function"?W.default:void 0;if(!j)throw Error("Unable to load jiti");return await j($,{alias:Z,cache:f.useCache,requireCache:f.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...vJ],transformModules:Object.keys(Z)}).import($,{})}function m3($,f){if(!$)return!0;if($.providerIds?.length){if(!f?.providerId||!$.providerIds.includes(f.providerId))return!1}if($.modelIds?.length){if(!f?.modelId||!$.modelIds.includes(f.modelId))return!1}return!0}function v3($){return typeof $==="object"&&$!==null}function uJ($){return Array.isArray($)&&$.every((f)=>typeof f==="string")}function VP($,f){if(!v3($.manifest))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);if(!uJ($.manifest.capabilities))throw Error(`Invalid plugin module at ${f}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${f}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!uJ($.manifest.providerIds))throw Error(`Invalid plugin module at ${f}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!uJ($.manifest.modelIds))throw Error(`Invalid plugin module at ${f}: manifest.modelIds must be a string array when provided`)}function AP($,f){if(!v3($))throw Error(`Invalid plugin module at ${f}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${f}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);VP($,f)}async function dJ($,f={}){let J=HP(f.cwd??process.cwd(),$),Q=await g3(J,{useCache:f.useCache}),Z=f.exportName??"plugin",W=Q.default??Q[Z];AP(W,J);let j=W,X=j.setup,H=X?(Y,V)=>{let A={...f.session,...V.session},B={...V,session:Object.keys(A).length>0?A:void 0,client:f.client??V.client,user:f.user??V.user,workspaceInfo:f.workspaceInfo??V.workspaceInfo,automation:f.automation??V.automation,logger:f.logger??V.logger,telemetry:f.telemetry??V.telemetry};return X(Y,B)}:void 0;return{...j,manifest:YP(j.manifest),setup:H}}async function c3($,f={}){return(await W1($,f)).plugins}async function W1($,f={}){let J=[],Q=[],Z=new Map,W=0;for(let j of $)try{let X=await dJ(j,f);if(!m3(X.manifest,f))continue;let H=Z.get(X.name);if(H)Q.push({type:"duplicate_plugin_override",pluginName:X.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${X.name}" from ${j} overrides ${H.pluginPath}`});Z.set(X.name,{plugin:X,pluginPath:j,order:W++})}catch(X){let H=X instanceof Error?X.message:String(X);J.push({pluginPath:j,phase:"load",message:H,stack:X instanceof Error?X.stack:void 0})}return{plugins:[...Z.values()].sort((j,X)=>j.order-X.order).map((j)=>j.plugin),failures:J,warnings:Q}}import{existsSync as RP}from"node:fs";import{createRequire as UP}from"node:module";import{dirname as LP,join as I8}from"node:path";import{fileURLToPath as OP}from"node:url";import{spawn as BP}from"node:child_process";import{basename as KP}from"node:path";import{augmentNodeCommandForDebug as GP,withResolvedClineBuildEnv as PP}from"@cline/shared";function u3($){if($ instanceof Error)return $;return Error(String($))}var FP="CLINE_JS_RUNTIME_PATH";function d3($){let f=$?.trim();if(!f)return!1;let J=KP(f).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function l3($={}){let f=$.env??process.env,J=$.runtimeExecutable?.trim()||f[FP]?.trim();if(J)return J;let Q=$.execPath?.trim()||process.execPath;if(d3(Q))return Q;for(let Z of[f.BUN_EXEC_PATH,f.npm_node_execpath,f.NODE]){let W=Z?.trim();if(W&&d3(W))return W}return"node"}function DP($,f={}){let J=l3({env:f.env,execPath:f.execPath,runtimeExecutable:f.runtimeExecutable});return GP([J,...$],{env:f.env,execArgv:f.execArgv,debugRole:f.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let f=this.pending.get($);if(!f)return;if(this.pending.delete($),f.timeout)clearTimeout(f.timeout);return f}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],f=DP($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=BP(f[0]??l3(this.options),f.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:PP(process.env)});this.process=J;let Q="",Z=(W)=>{let j=Q+W;Q=j.length>4000?j.slice(-4000):j};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(W)=>{Z(W)}),J.on("message",(W)=>{this.onMessage(W)}),J.on("error",(W)=>{this.failPending(Error(`${this.processLabel} process error: ${u3(W).message}`))}),J.on("exit",(W,j)=>{this.process=null;let X=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(W)}, signal=${String(j)})${X?`: ${X}`:""}`))})}async call($,f,J={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let Z=`req_${++this.requestCounter}`,W={type:"call",id:Z,method:$,args:f};return await new Promise((j,X)=>{let H={resolve:(Y)=>j(Y),reject:X};if((J.timeoutMs??0)>0)H.timeout=setTimeout(()=>{this.clearPendingRequest(Z),this.shutdown().catch(()=>{}),X(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${$}`))},J.timeoutMs);this.pending.set(Z,H),Q.send(W,(Y)=>{if(!Y)return;let V=this.clearPendingRequest(Z);if(!V)return;V.reject(Error(`${this.processLabel} failed to send call "${$}": ${u3(Y).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((f)=>{let J=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}f()},300);$.once("exit",()=>{clearTimeout(J),f()});try{$.kill("SIGTERM")}catch{clearTimeout(J),f()}}),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 f=this.clearPendingRequest($.id);if(!f)return;if($.ok){f.resolve($.result);return}f.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[f,J]of this.pending.entries()){if(this.pending.delete(f),J.timeout)clearTimeout(J.timeout);J.reject($)}}}function zP($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function x8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function _P(){let $=LP(OP(import.meta.url)),f=UP(import.meta.url),J=[I8($,"plugin-sandbox-bootstrap.js"),I8($,"extensions","plugin-sandbox-bootstrap.js"),I8($,"agents","plugin-sandbox-bootstrap.js")];for(let W of J)if(RP(W))return{file:W};let Q=I8($,"plugin-sandbox-bootstrap.ts"),Z="jiti";try{Z=f.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(Z)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
164
|
+
`)}}var lJ=_P();function pJ($,f){return typeof $==="number"&&$>0?$:f}async function r3($){let f=new k8({name:"plugin-sandbox",..."file"in lJ?{bootstrapFile:lJ.file}:{bootstrapScript:lJ.script},onEvent:$.onEvent}),J=pJ($.importTimeoutMs,4000),Q=pJ($.hookTimeoutMs,3000),Z=pJ($.contributionTimeoutMs,60000),W={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},j,X=()=>{return j??=f.call("initialize",W,{timeoutMs:J}).finally(()=>{j=void 0}),j},H;try{H=await f.call("initialize",W,{timeoutMs:J})}catch(A){throw await f.shutdown().catch(()=>{}),A}return{extensions:H.plugins.map(zP).map((A)=>{let B={name:A.name,manifest:A.manifest,setup:(K)=>{yP(K,f,A,Z,X),TP(K,f,A,Z,X),MP(K,f,A,Z,X),NP(K,A)}};return B.hooks=wP(f,A,Q,X),B}),failures:H.failures,shutdown:async()=>{await f.shutdown()},warnings:H.warnings}}function yP($,f,J,Q,Z){for(let W of J.contributions?.tools??[]){let j={name:W.name,description:W.description??"",inputSchema:W.inputSchema??{type:"object",properties:{}},timeoutMs:W.timeoutMs,retryable:W.retryable,execute:async(X,H)=>{try{return await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}catch(Y){if(!x8(Y))throw Y;return await Z(),await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}}};$.registerTool(j)}}function TP($,f,J,Q,Z){for(let W of J.contributions?.commands??[])$.registerCommand({name:W.name,description:W.description,handler:async(j)=>{try{return await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}catch(X){if(!x8(X))throw X;return await Z(),await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}}})}function NP($,f){for(let J of f.contributions?.providers??[])$.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of f.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function MP($,f,J,Q,Z){for(let W of J.contributions?.messageBuilders??[])$.registerMessageBuilder({name:W.name,async build(j){try{let X=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return p3(X)?X:j}catch(X){if(!x8(X))throw X;await Z();let H=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return p3(H)?H:j}}})}function p3($){return Array.isArray($)&&$.every((f)=>typeof f==="object"&&f!==null&&("role"in f)&&("content"in f))}function qP($,f,J,Q,Z){return async(W)=>{try{return await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}catch(j){if(!x8(j))throw j;return await Z(),await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}}}function wP($,f,J,Q){let Z={};for(let W of f.hooks??[])Z[W]=qP($,f.pluginId,W,J,Q);return Object.keys(Z).length>0?Z:void 0}function rJ($){return EP($)}function iJ($){return CP($)}function If($={}){let f=$.cwd??process.cwd(),J=rJ($.workspacePath).flatMap((j)=>iJ(j)).filter((j)=>SP(j)),Q=hP($.pluginPaths??[],f),Z=[],W=new Set;for(let j of[...Q,...J]){if(W.has(j))continue;W.add(j),Z.push(j)}return kJ(Z)}async function g8($={}){let f=If($);if(f.length===0)return{extensions:[],failures:[],warnings:[]};if($.mode==="in_process"){let Q=await W1(f,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,warnings:Q.warnings}}let J=await r3({pluginPaths:f,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:J.extensions??[],shutdown:J.shutdown,failures:J.failures,warnings:J.warnings}}Z$();function bP($,f){if(!$.setup)return[];let J=[],Q={registerTool:(Z)=>J.push(Z),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return $.setup(Q,{workspaceInfo:f}),J}async function nJ($){let f=If({workspacePath:$.workspacePath,cwd:$.cwd}),J=r0($.disabledToolNames),Q=[];for(let Z of f){let W=await W1([Z],{cwd:$.cwd,providerId:$.providerId,modelId:$.modelId});for(let j of W.plugins)for(let X of bP(j,{rootPath:$.workspacePath}))Q.push({name:X.name,pluginName:j.name,path:Z,source:Z.startsWith($.workspacePath)?"workspace-plugin":"global-plugin",enabled:!J.has(X.name),description:X.description?.trim()||void 0})}return Q.sort((Z,W)=>{let j=Z.name.localeCompare(W.name);if(j!==0)return j;return Z.path.localeCompare(W.path)})}function v8($,f){if(!f)return"global";let J=IP(f,$);return!J.startsWith("..")&&!kP(J)?"workspace":"global"}function xf($){return[...$].sort((f,J)=>{let Q=(Z)=>{switch(Z){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(f.source!==J.source)return Q(f.source)-Q(J.source);return f.name.localeCompare(J.name)})}function a3($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function n3($,f){if($.userInstructionService)return await f($.userInstructionService);let J=a3($);if(!J)return await f(void 0);let Q=v1({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await Q.start(),await f(Q)}finally{Q.stop()}}function xP($,f){if(!$)return;let J=$.listRecords("skill");if(f.id){let Q=J.find((Z)=>Z.id===f.id);if(Q)return Q}for(let Q of J)if(Q.filePath===f.path||Q.item.name===f.name||Q.id===f.name)return Q;return}class r1{async list($={}){return await n3($,async(f)=>{let J=a3($),Q=[],Z=[],W=[],j=[],X=[];if(f){for(let Y of f.listRecords("workflow")){let V=Y.item;Q.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"workflow",source:v8(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("rule")){let V=Y.item;Z.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"rule",source:v8(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("skill")){let V=Y.item;W.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"skill",source:v8(Y.filePath,J),description:V.description,toggleable:!0})}}if(J)try{for(let Y of await nJ({workspacePath:J,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${Y.pluginName}:${Y.name}:${Y.path}`,name:Y.name,path:Y.path,enabled:Y.enabled,kind:"tool",source:Y.source,description:Y.description,toggleable:!0})}catch{}let H=w0();if(Z1({filePath:H}))try{for(let Y of N$({filePath:H}))X.push({id:Y.name,name:Y.name,path:H,enabled:Y.disabled!==!0,kind:"mcp",source:v8(H,J),description:Y.transport.type,toggleable:!0})}catch{}return{workflows:xf(Q.filter((Y)=>m8(Y.path))),rules:xf(Z.filter((Y)=>m8(Y.path))),skills:xf(W.filter((Y)=>m8(Y.path))),tools:xf(j),mcp:xf(X.filter((Y)=>m8(Y.path)))}})}async toggle($){if($.type==="skills")return await n3($,async(f)=>{let J=xP(f,$),Q=J?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??i3($.path??"")}'.`);let Z=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,W=$.enabled??(Z!==void 0?!Z:void 0);if(W===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??i3($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await Q3({filePath:Q,enabled:W}),await f?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:f}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)bJ($.name);else M3($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let f=$.name?.trim()||$.id?.trim();if(!f)throw Error("MCP server settings toggle requires a server name.");let J=$.path?.trim()||w0(),Q=$.enabled;if(Q===void 0){let Z=N$({filePath:J}).find((W)=>W.name===f);if(!Z)throw Error(`Unknown MCP server: ${f}`);Q=Z.disabled===!0}return qf({filePath:J,name:f,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function gf(){return new r1}function t3($){return{async list(f){let J=$;if(J.listSettings)return await J.listSettings(f);return await gf().list(f)},async toggle(f){let J=$;if(J.toggleSetting)return await J.toggleSetting(f);return await gf().toggle(f)}}}function s3($){function f(){let J=$.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return f().list(J)},update(J){return f().update(J)},delete(J){return f().delete(J)}}}function P0(...$){let f,J;for(let Z of $){if(!Z)continue;if(Z.toolExecutors)f={...f??{},...Z.toolExecutors};if(Z.requestToolApproval)J=Z.requestToolApproval}let Q=f&&Object.keys(f).length>0;if(!Q&&!J)return;return{...Q?{toolExecutors:f}:{},...J?{requestToolApproval:J}:{}}}function aJ($){let{hooks:f,logger:J,telemetry:Q,extensionContext:Z,extraTools:W,extensions:j,onTeamEvent:X,onConsecutiveMistakeLimitReached:H,checkpoint:Y,compaction:V,...A}=$,B={};if(f)B.hooks=f;if(J)B.logger=J;if(Q)B.telemetry=Q;if(Z)B.extensionContext=Z;if(W)B.extraTools=W;if(j)B.extensions=j;if(X)B.onTeamEvent=X;if(H)B.onConsecutiveMistakeLimitReached=H;if(Y?.createCheckpoint)B.checkpoint=Y;if(V?.compact)B.compaction=V;let K=Object.keys(B).length>0?B:void 0;return{config:{...A,...Y?{checkpoint:{enabled:Y.enabled}}:{},...V?{compaction:{enabled:V.enabled,strategy:V.strategy,thresholdRatio:V.thresholdRatio,reserveTokens:V.reserveTokens,preserveRecentTokens:V.preserveRecentTokens,maxInputTokens:V.maxInputTokens,summarizer:V.summarizer}}:{}},...K?{localRuntime:K}:{}}}function o3($){let f=$.config;return"providerId"in f?{...$,config:{...f,...gP($.localRuntime)},localRuntime:$.localRuntime}:$}function tJ($,f={}){let J=aJ($.config),Q=P0(f.defaultCapabilities,$.capabilities),Z=mP(J.localRuntime,$.localRuntime),W=f.withExtensionContext?.(Z?.extensionContext);if(W)Z={...Z??{},extensionContext:W};return{...$,...J,...Z?{localRuntime:Z}:{},...Q?{capabilities:Q}:{}}}function gP($){if(!$)return{};let{modelCatalogDefaults:f,userInstructionService:J,configExtensions:Q,onTeamRestored:Z,...W}=$;return W}function mP(...$){let f={};for(let J of $)if(J)Object.assign(f,J);return Object.keys(f).length>0?f:void 0}R0();function e3($){let f=$.input.config.telemetry??$.telemetry;if(!f)return;f.capture({event:g.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??G0.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 mf($){return!!$&&typeof $==="object"&&!Array.isArray($)}function sJ($){let f=$?.trim();return f?f:void 0}function vP($,f){let J=$?.trim();if(!J)return f;let Q=Date.parse(J);if(!Number.isFinite(Q))return f;return new Date(Q).toISOString()}function $W($,f){return new Date(new Date($).getTime()+Math.max(0,Math.floor(f))*1000).toISOString()}function fW($,f){return new Date(new Date($).getTime()-Math.max(0,Math.floor(f))*1000).toISOString()}function cP($,f){if(!$)return f;return new Date($).getTime()>=new Date(f).getTime()?$:f}function uP($,f){let J=$.eventId.trim(),Q=$.eventType.trim(),Z=$.source.trim(),W=sJ($.subject),j=sJ($.dedupeKey)??`${Q}:${Z}:${W??J}`;return{eventId:J,eventType:Q,source:Z,subject:W,occurredAt:vP($.occurredAt,f),workspaceRoot:sJ($.workspaceRoot),payload:mf($.payload)?$.payload:void 0,attributes:mf($.attributes)?$.attributes:void 0,dedupeKey:j}}function oJ($,f){if(!f)return;let J=f.split("."),Q=$;for(let Z of J){if(!mf(Q))return;Q=Q[Z]}return Q}function dP($,f){if($.attributes&&Object.hasOwn($.attributes,f))return $.attributes[f];if($.payload&&Object.hasOwn($.payload,f))return $.payload[f];let J={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=oJ(J,f);if(Q!==void 0)return Q;if($.attributes){let Z=oJ($.attributes,f);if(Z!==void 0)return Z}if($.payload)return oJ($.payload,f);return}function c8($,f){if(Array.isArray(f))return f.some((J)=>c8($,J));if(Array.isArray($))return $.some((J)=>c8(J,f));if(mf(f)){if(!mf($))return!1;return Object.entries(f).every(([J,Q])=>c8($[J],Q))}return Object.is($,f)}function lP($,f){if(!f||Object.keys(f).length===0)return!0;return Object.entries(f).every(([J,Q])=>c8(dP($,J),Q))}class eJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let f=new Date(this.nowFn()).toISOString(),J=uP($,f),Q=this.store.insertEventLog(J,{receivedAtIso:f});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let Z=this.store.listEventSpecsForType(J.eventType),W=[],j=[],X=[];for(let V of Z){if(!lP(J,V.filters)){W.push({specId:V.specId,externalId:V.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}j.push(V);let A=this.materializeForSpec(V,J,Q.record.receivedAt);if(A.run)X.push(A.run);else W.push({specId:V.specId,externalId:V.externalId,reason:A.reason,dedupeKey:J.dedupeKey})}let H=j.length===0?"unmatched":X.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:H,matchedSpecCount:j.length,queuedRunCount:X.length,suppressedCount:W.filter((V)=>V.reason!=="filter_mismatch").length});let Y=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:H,matchedSpecCount:j.length,queuedRunCount:X.length}),{event:Y??Q.record,duplicate:!1,matchedSpecs:j,queuedRuns:X,suppressions:W}}catch(Z){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:Z instanceof Error?Z.message:String(Z)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:Z});throw Z}}materializeForSpec($,f,J){let Q=f.dedupeKey??f.eventId,Z=$.debounceSeconds??0;if(Z>0){let H=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(H){let Y=cP(H.scheduledFor,$W(J,Z)),V=this.store.updateQueuedEventRunForDebounce({runId:H.runId,triggerEventId:f.eventId,scheduledFor:Y});if(V)return{run:V,reason:"dedupe_window"}}}let W=$.dedupeWindowSeconds??0;if(W>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:fW(J,W)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:fW(J,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:f.eventId,scheduledFor:Z>0?$W(J,Z):J}),reason:"dedupe_window"}}}class vf{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},f=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of f)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of J)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as $F}from"node:path";import{buildClineSystemPrompt as fF}from"@cline/shared";import{nowIso as WW}from"@cline/shared/db";import{basename as pP,resolve as rP}from"node:path";import{performance as JW}from"node:perf_hooks";import{processWorkspaceInfo as QW}from"@cline/shared";import iP from"simple-git";function j1($){return rP($)}async function d8($){return(await $5($)).info}function u8($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function $5($){let f=j1($),J={rootPath:f,hint:pP(f)},Q;try{let Z=iP({baseDir:f});if(!await Z.checkIsRepo())return{info:J,vcsType:"none"};try{let j=await Z.getRemotes(!0);if(j.length>0){let X=j.map((H)=>{let Y=H.refs.fetch||H.refs.push;return`${H.name}: ${Y}`});J.associatedRemoteUrls=X}}catch(j){Q??=u8(j)}try{let j=(await Z.revparse(["HEAD"])).trim();if(j.length>0)J.latestGitCommitHash=j}catch(j){Q??=u8(j)}try{let j=(await Z.branch()).current.trim();if(j.length>0)J.latestGitBranchName=j}catch(j){Q??=u8(j)}return{info:J,vcsType:"git",error:Q}}catch(Z){return{info:J,vcsType:"none",error:u8(Z)}}}async function f5($){let f=await d8($);return QW(f)}async function ZW($){let f=JW.now(),J=await $5($),Q=JW.now()-f,Z=J.info;return{workspaceInfo:Z,workspaceMetadata:QW(Z),durationMs:Q,vcsType:J.vcsType,initError:J.error}}import{mkdirSync as nP,writeFileSync as aP}from"node:fs";import{join as tP}from"node:path";import{resolveCronReportsDir as sP}from"@cline/shared/storage";function M$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function X1($,f){if(f===void 0||f===null)return;return`${$}: ${M$(f)}`}function oP($,f,J){let Q=[`runId: ${M$($.runId)}`,`specId: ${M$(f.specId)}`,`externalId: ${M$(f.externalId)}`,`title: ${M$(f.title)}`,`triggerKind: ${M$($.triggerKind)}`,`status: ${M$($.status)}`,`sourcePath: ${M$(f.sourcePath)}`],Z=[X1("sessionId",$.sessionId),X1("startedAt",$.startedAt),X1("completedAt",$.completedAt),X1("triggerEventId",$.triggerEventId),X1("triggerEventType",J?.eventType),X1("triggerEventSource",J?.source),X1("triggerEventSubject",J?.subject)];for(let W of Z)if(W)Q.push(W);return`---
|
|
165
|
+
${Q.join(`
|
|
158
166
|
`)}
|
|
159
167
|
---
|
|
160
|
-
`}function
|
|
168
|
+
`}function eP($){let f=[];if($.triggerEvent){let J=$.triggerEvent,Q=[`- eventId: ${J.eventId}`,`- eventType: ${J.eventType}`,`- source: ${J.source}`,J.subject?`- subject: ${J.subject}`:"",`- occurredAt: ${J.occurredAt}`,J.dedupeKey?`- dedupeKey: ${J.dedupeKey}`:"",J.attributes?`- attributes: ${JSON.stringify(J.attributes)}`:""].filter((Z)=>Z.length>0);f.push(`## Trigger Event
|
|
161
169
|
|
|
162
|
-
${
|
|
170
|
+
${Q.join(`
|
|
163
171
|
`)}
|
|
164
|
-
`)}if(f.
|
|
172
|
+
`)}if($.error)f.push(`## Error
|
|
165
173
|
|
|
166
|
-
${
|
|
167
|
-
`);if(
|
|
174
|
+
${$.error}
|
|
175
|
+
`);if($.finalText&&$.finalText.trim().length>0)f.push(`## Summary
|
|
168
176
|
|
|
169
|
-
${
|
|
170
|
-
`);if(
|
|
177
|
+
${$.finalText.trim()}
|
|
178
|
+
`);if($.usage){let J=$.usage,Q=[J.inputTokens!==void 0?`- inputTokens: ${J.inputTokens}`:"",J.outputTokens!==void 0?`- outputTokens: ${J.outputTokens}`:"",J.cacheReadTokens!==void 0?`- cacheReadTokens: ${J.cacheReadTokens}`:"",J.cacheWriteTokens!==void 0?`- cacheWriteTokens: ${J.cacheWriteTokens}`:"",J.totalCost!==void 0?`- totalCostUsd: ${J.totalCost}`:"",$.durationMs!==void 0?`- durationMs: ${$.durationMs}`:""].filter((Z)=>Z.length>0);if(Q.length>0)f.push(`## Usage
|
|
171
179
|
|
|
172
|
-
${
|
|
180
|
+
${Q.join(`
|
|
173
181
|
`)}
|
|
174
|
-
`)}if(
|
|
182
|
+
`)}if($.toolCalls&&$.toolCalls.length>0){let J=$.toolCalls.map((Q)=>{let Z=[`- ${Q.name}`];if(Q.durationMs!==void 0)Z.push(`(${Q.durationMs}ms)`);if(Q.error)Z.push(`error: ${Q.error}`);return Z.join(" ")});f.push(`## Tool Calls
|
|
175
183
|
|
|
176
184
|
${J.join(`
|
|
177
185
|
`)}
|
|
178
|
-
`)}return
|
|
179
|
-
`)}function
|
|
180
|
-
${
|
|
181
|
-
`)}class
|
|
186
|
+
`)}return f.join(`
|
|
187
|
+
`)}function J5($){let f=sP($.specs);nP(f,{recursive:!0});let J=tP(f,`${$.run.runId}.md`),Q=`${oP($.run,$.spec,$.data.triggerEvent)}
|
|
188
|
+
${eP($.data)}`;return aP(J,Q,"utf8"),J}class Q5{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,f,J){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(J)),Z=this.activeExecutions.get($)??new Set;if(Z.size>=Q)return!1;return Z.add(f),this.activeExecutions.set($,Z),!0}release($,f){let J=this.activeExecutions.get($);if(!J)return;if(J.delete(f),J.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let f of this.activeExecutions.values())$+=f.size;return $}}var JF=15000,QF=90,jW=["rules","skills","plugins"];function ZF($,f){return new Set($.extensions??jW).has(f)}function WF($,f){if($.tools===void 0)return{"*":{autoApprove:!0}};let J={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)J[Q]={enabled:!0,autoApprove:!0};if(f==="yolo")J[Z0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function jF($){let f=$?.trim();if(!f)return;return["# Notes Directory",`Use ${f} 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(`
|
|
189
|
+
`)}class Z5 extends Error{constructor($){super($);this.name="TimeoutError"}}async function XF($,f){if(f<=0)return $;let J,Q=new Promise((Z,W)=>{J=setTimeout(()=>{W(new Z5("cron run timed out"))},f)});try{return await Promise.race([$,Q])}finally{if(J)clearTimeout(J)}}class cf{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 Q5($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??QF)*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??JF);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 f=[...this.activeRuns.entries()];await Promise.all(f.map(async([J,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:J,claimToken:Q.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:WW(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((f)=>this.executeClaim(f)))}catch($){let f=this.options.logger;if(f)if(f.error)f.error("cron.runner.tick.failed",{error:$});else f.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,f])=>{let J=this.store.getRun($);return J?[{...J,...f}]:[]})}async executeClaim($){let f=$.run,J=this.store.getSpec(f.specId);if(!J){this.store.completeRun(f.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!J.enabled||J.removed){this.store.completeRun(f.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=J.maxParallel&&J.maxParallel>0?J.maxParallel:1;if(!this.limiter.acquire(J.specId,f.runId,Q)){this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(J.specId,f.runId),this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(f.runId,{claimToken:$.claimToken});let W=f.triggerEventId?this.store.getEventLog(f.triggerEventId):void 0,j,X,H=Date.now(),Y;if(J.timeoutSeconds&&J.timeoutSeconds>0)Y=H+J.timeoutSeconds*1000;try{X=this.startClaimLeaseHeartbeat($);let V=await this.buildStartRequest(J);if(j=(await this.options.runtimeHandlers.startSession(V)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(f.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(f.runId,j);let B={config:V,prompt:this.buildPrompt(J,W)},K=this.options.runtimeHandlers.sendSession(j,B),G=Y?Math.max(1,Y-Date.now()):0,F=(await XF(K,G)).result,P=Date.now(),D=J5({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"done"},spec:J,data:{finalText:F.text,usage:F.usage,toolCalls:F.toolCalls,durationMs:P-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"done",sessionId:j,reportPath:D,claimToken:$.claimToken}),this.store.updateSpecLastRunAt(J.specId,WW())}catch(V){let A=V instanceof Z5;if(j&&A)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let B=V instanceof Error?V.message:String(V),K=Date.now(),G=J5({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"failed"},spec:J,data:{error:B,durationMs:K-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"failed",sessionId:j,reportPath:G,error:B,claimToken:$.claimToken})}finally{if(X?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(f.runId),this.limiter.release(J.specId,f.runId)}}buildPrompt($,f){let J=$.prompt??"";if(!f)return J;let Q={eventId:f.eventId,eventType:f.eventType,source:f.source,subject:f.subject,occurredAt:f.occurredAt,workspaceRoot:f.workspaceRoot,dedupeKey:f.dedupeKey,attributes:f.attributes,payload:f.payload};return`${J}
|
|
182
190
|
|
|
183
191
|
Trigger event:
|
|
184
|
-
${JSON.stringify(
|
|
185
|
-
`);if(
|
|
186
|
-
`))return{frontmatter:void 0,body
|
|
187
|
-
---`);if(
|
|
188
|
-
`))
|
|
189
|
-
`),J.update(
|
|
192
|
+
${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Math.floor(this.claimLeaseMs/2)),J=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(J)},f);return()=>clearInterval(J)}async buildSystemPrompt($,f,J,Q){let Z=jF($.notesDirectory),W=s2(void 0,Z),j=await f5(f),X=fF({ide:"Cline Cron",workspaceRoot:f,workspaceName:$F(f),metadata:j,rules:$.systemPrompt?void 0:W,mode:J,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?s2(X,W)??X:X}async buildStartRequest($){let f=($.workspaceRoot??"").trim(),J=($.providerId??"").trim(),Q=($.modelId??"").trim(),Z=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,W=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():f;if(!f)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:f,cwd:W,provider:J,model:Q,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,f,j,J),maxIterations:$.maxIterations,enableTools:Z?.enableTools??!0,enableSpawn:Z?.enableSpawn??!0,enableTeams:Z?.enableTeams??!0,autoApproveTools:Z?.autoApproveTools??!0,toolPolicies:WF($,j),configExtensions:jW.filter((X)=>ZF($,X))}}}import{existsSync as SF,readdirSync as CF,readFileSync as hF,statSync as EF}from"node:fs";import{relative as bF}from"node:path";import{resolveCronSpecsDir as kF}from"@cline/shared/storage";function uf($,f,J,Q){let Z=new Set;function W(j){let X=j.toLowerCase();if(Q){let Y=Q.indexOf(X);if(Y!==-1)return Y+f}let H=Number(j);if(!Number.isInteger(H)||H<f||H>J)throw Error(`Invalid cron value "${j}" for range [${f}-${J}]`);return H}for(let j of $.split(",")){if(j==="*"){for(let Y=f;Y<=J;Y+=1)Z.add(Y);continue}let X=j.indexOf("/");if(X!==-1){let Y=j.slice(0,X),V=Number(j.slice(X+1));if(!Number.isInteger(V)||V<1)throw Error(`Invalid step "${j.slice(X+1)}"`);let A=f,B=J;if(Y!=="*"){let K=Y.indexOf("-");if(K!==-1)A=W(Y.slice(0,K)),B=W(Y.slice(K+1));else A=W(Y)}if(A>B)throw Error(`Invalid cron range "${Y}"`);for(let K=A;K<=B;K+=V)Z.add(K);continue}let H=j.indexOf("-");if(H!==-1){let Y=W(j.slice(0,H)),V=W(j.slice(H+1));if(Y>V)throw Error(`Invalid cron range "${j}"`);for(let A=Y;A<=V;A+=1)Z.add(A);continue}Z.add(W(j))}return[...Z].sort((j,X)=>j-X)}var HF=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],HW=["sun","mon","tue","wed","thu","fri","sat"];function df($,f,J){let Q=$[f];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${f+1}`);return Q}function W5($,f){let J=$[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${f}`);return J}function j5($){let f=$.trim().split(/\s+/);if(f.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${f.length}`);return{minutes:uf(df(f,0,$),0,59),hours:uf(df(f,1,$),0,23),daysOfMonth:uf(df(f,2,$),1,31),months:uf(df(f,3,$),1,12,HF),daysOfWeek:uf(df(f,4,$),0,6,HW)}}function X5($){j5($)}function YW($,f,J=Date.now()){H1($,J,f)}var XW=new Map,YF=new Map(HW.map(($,f)=>[$,f]));function VW($){let f=$?.trim();return f?f:void 0}function AW($){let f=XW.get($);if(f)return f;let J=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 XW.set($,J),J}function VF($){let f=VW($);if(!f)return;AW(f).format(new Date)}function AF($,f){let J=AW(f).formatToParts(new Date($)),Q=new Map(J.map((j)=>[j.type,j.value])),Z=Q.get("weekday")?.toLowerCase().slice(0,3)??"",W=YF.get(Z);if(W===void 0)throw Error(`Unable to resolve weekday for timezone "${f}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:W,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function BF($){let f=new Date($);return{month:f.getMonth()+1,dayOfMonth:f.getDate(),dayOfWeek:f.getDay(),hour:f.getHours(),minute:f.getMinutes()}}function KF($,f){return $.months.includes(f.month)&&$.daysOfMonth.includes(f.dayOfMonth)&&$.daysOfWeek.includes(f.dayOfWeek)&&$.hours.includes(f.hour)&&$.minutes.includes(f.minute)}function GF($,f,J){let Q=j5($),Z=new Date(f);Z.setSeconds(0,0);let W=Z.getTime()+60000,j=new Date(f);j.setFullYear(j.getFullYear()+4);let X=j.getTime();while(W<=X){if(KF(Q,AF(W,J)))return W;W+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${J}"`)}function H1($,f,J){let Q=VW(J);if(Q)return VF(Q),GF($,f,Q);let Z=j5($),W=new Date(f);W.setSeconds(0,0),W=new Date(W.getTime()+60000);let j=new Date(f);j.setFullYear(j.getFullYear()+4);while(W<=j){let{month:X,dayOfMonth:H,dayOfWeek:Y,hour:V,minute:A}=BF(W.getTime());if(!Z.months.includes(X)){let B=Z.months.find((G)=>G>X)??W5(Z.months,"months"),K=B<=X?1:0;W=new Date(W.getFullYear()+K,B-1,1,0,0,0,0);continue}if(!Z.daysOfMonth.includes(H)||!Z.daysOfWeek.includes(Y)){W=new Date(W.getFullYear(),W.getMonth(),H+1,0,0,0,0);continue}if(!Z.hours.includes(V)){let B=Z.hours.find((G)=>G>V)??W5(Z.hours,"hours"),K=B<=V?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate()+K,B,0,0,0);continue}if(!Z.minutes.includes(A)){let B=Z.minutes.find((G)=>G>A)??W5(Z.minutes,"minutes"),K=B<=A?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate(),W.getHours()+K,B,0,0);continue}return W.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as PF}from"node:crypto";import FF from"yaml";function DF($){let f=$.replace(/\\/g,"/");if(f.startsWith("events/")&&f.endsWith(".event.md"))return"event";if(f.endsWith(".cron.md"))return"schedule";return"one_off"}function RF($){let f=$.replace(/\r\n/g,`
|
|
193
|
+
`);if(!f.startsWith(`---
|
|
194
|
+
`))return{frontmatter:void 0,body:$};let J=f.slice(4),Q=J.indexOf(`
|
|
195
|
+
---`);if(Q===-1)return{frontmatter:void 0,body:$};let Z=J.slice(0,Q),W=J.slice(Q+4);if(W.startsWith(`
|
|
196
|
+
`))W=W.slice(1);return{frontmatter:Z,body:W}}function C0($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function UF($){if(!Array.isArray($))return;let f=$.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);return f.length>0?f:void 0}function V5($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function LF($){let f=V5($);if(!f)return;let J=C0(f.providerId),Q=C0(f.modelId);if(J===void 0&&Q===void 0)return;return{providerId:J,modelId:Q}}function OF($){if(typeof $!=="string")return;let f=$.trim().toLowerCase();if(f==="act"||f==="plan"||f==="yolo")return f;return}function KW($,f={}){let J=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!J)return;let Q=[...new Set(J.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0))];if(Array.isArray($)&&f.preserveEmptyArray)return Q;return Q.length>0?Q:void 0}var zF=new Set(b1);function _F($){let f=KW($,{preserveEmptyArray:!0});if(!f)return;let J=f.filter((Q)=>!zF.has(Q));if(J.length>0)throw Error(`unknown tool(s): ${J.join(", ")}`);return f}var yF=new Set(["rules","skills","plugins"]);function TF($){let f=KW($,{preserveEmptyArray:!0});if(!f)return;let J=f.filter((Q)=>!yF.has(Q));if(J.length>0)throw Error(`unknown extension(s): ${J.join(", ")}`);return f}function H5($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function Y5($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function A5($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((J)=>A5(J)).join(",")}]`;let f=Object.entries($).filter(([,J])=>J!==void 0);return f.sort(([J],[Q])=>J<Q?-1:J>Q?1:0),`{${f.map(([J,Q])=>`${JSON.stringify(J)}:${A5(Q)}`).join(",")}}`}function GW($,f){let J=PF("sha256");return J.update(A5($)),J.update(`
|
|
197
|
+
`),J.update(f),J.digest("hex")}function NF($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var MF=["schedule","timezone"],qF=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],wF=["cwd"];function BW($,f,J,Q,Z){return{externalId:$,relativePath:$,triggerKind:f,body:J,contentHash:GW(Q,J),error:Z}}function i0($,f,J,Q,Z,W){return{externalId:$,relativePath:f,triggerKind:J,body:Q,contentHash:Z,error:W}}function PW($){let f=$.relativePath.replace(/\\/g,"/"),J=DF(f),{frontmatter:Q,body:Z}=RF($.raw),W={};if(Q!==void 0&&Q.trim().length>0)try{let D=FF.parse(Q);if(D&&typeof D==="object"&&!Array.isArray(D))W=D;else if(D!==null&&D!==void 0)return BW(f,J,Z,{},"frontmatter must be a YAML mapping")}catch(D){return BW(f,J,Z,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let j=GW(W,Z),X=C0(W.id),H=X??f;if(J!=="schedule"){for(let D of MF)if(W[D]!==void 0)return i0(H,f,J,Z,j,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of wF)if(W[D]!==void 0)return i0(H,f,J,Z,j,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(J!=="event"){for(let D of qF)if(W[D]!==void 0)return i0(H,f,J,Z,j,`field "${D}" is only allowed on .event.md specs`)}let Y=C0(W.prompt),V=Z.trim(),A=Y??(V.length>0?V:void 0);if(!A)return i0(H,f,J,Z,j,"prompt is required (frontmatter `prompt` or markdown body)");let B=C0(W.workspaceRoot);if(!B)return i0(H,f,J,Z,j,"workspaceRoot is required");let K,G;try{K=_F(W.tools),G=TF(W.extensions)}catch(D){return i0(H,f,J,Z,j,D instanceof Error?D.message:String(D))}let R=OF(W.mode);if(W.mode!==void 0&&R===void 0)return i0(H,f,J,Z,j,"mode must be one of: act, plan, yolo");let F={id:X,title:C0(W.title)??X??NF(f),prompt:A,workspaceRoot:B,mode:R??"yolo",systemPrompt:C0(W.systemPrompt),modelSelection:LF(W.modelSelection),maxIterations:H5(W.maxIterations),timeoutSeconds:H5(W.timeoutSeconds),tools:K,notesDirectory:C0(W.notesDirectory),extensions:G,source:C0(W.source)??"user",tags:UF(W.tags),enabled:typeof W.enabled==="boolean"?W.enabled:!0,metadata:V5(W.metadata)},P;if(J==="schedule"){let D=C0(W.schedule);if(!D)return i0(H,f,J,Z,j,"schedule is required for *.cron.md specs");let O=C0(W.timezone);try{YW(D,O)}catch(L){return i0(H,f,J,Z,j,L instanceof Error?L.message:String(L))}P={...F,triggerKind:"schedule",schedule:D,timezone:O}}else if(J==="event"){let D=C0(W.event);if(!D)return i0(H,f,J,Z,j,"event is required for .event.md specs");P={...F,triggerKind:"event",event:D,filters:V5(W.filters),debounceSeconds:Y5(W.debounceSeconds),dedupeWindowSeconds:Y5(W.dedupeWindowSeconds),cooldownSeconds:Y5(W.cooldownSeconds),maxParallel:H5(W.maxParallel)}}else P={...F,triggerKind:"one_off"};return{externalId:H,relativePath:f,triggerKind:J,body:Z,contentHash:j,spec:P}}function IF($,f){return bF($,f).replace(/\\/g,"/")}function xF($){if(!SF($))return[];let f=[],J=[$];while(J.length>0){let Q=J.pop();if(!Q)continue;let Z;try{Z=CF(Q,{withFileTypes:!0})}catch{continue}for(let W of Z){let j=`${Q}/${W.name}`;if(W.isDirectory()){if(W.name==="reports")continue;J.push(j);continue}if(!W.isFile())continue;if(!W.name.endsWith(".md"))continue;f.push(j)}}return f}class B5{store;cronDir;constructor($){this.store=$.store,this.cronDir=kF($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},f=xF(this.cronDir),J=new Set;for(let Z of f){let W=IF(this.cronDir,Z);J.add(W),$.scanned+=1;let j=await this.reconcileFile(W,Z);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let Q=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let Z of Q)if(!J.has(Z.sourcePath))this.handleFileDeleted(Z),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,f){let J=this.store.getSpecBySourcePath($),Q,Z;try{Q=hF(f,"utf8"),Z=EF(f).mtimeMs}catch{return}let j=PW({relativePath:$,raw:Q}),X=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:Z,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&X.record.enabled)this.applyScheduleNextRunAt(X.record,{forceReset:!J||J.removed||!J.enabled||J.scheduleExpr!==X.record.scheduleExpr||J.timezone!==X.record.timezone});return{relativePath:$,result:X,parse:j}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let f of $)this.applyScheduleNextRunAt(f,{forceReset:!1})}applyScheduleNextRunAt($,f){if(!$.scheduleExpr)return;if(!f.forceReset&&$.nextRunAt)return;try{let J=Date.now(),Q=$.lastRunAt?Math.max(J,new Date($.lastRunAt).getTime()):J,Z=H1($.scheduleExpr,Q,$.timezone),W=new Date(Z).toISOString();if($.nextRunAt!==W)this.store.updateSpecNextRunAt($.specId,W)}catch{}}}import{existsSync as gF,mkdirSync as mF,watch as vF}from"node:fs";import{relative as cF,resolve as uF}from"node:path";var dF=250;class K5{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??dF),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{mF($,{recursive:!0}),this.watcher=vF($,{recursive:!0},(f,J)=>{if(!J)return;let Q=String(J).replace(/\\/g,"/");if(!Q.endsWith(".md"))return;if(Q.startsWith("reports/"))return;this.scheduleReconcile(Q)}),this.watcher.on("error",this.onError)}catch(f){this.onError(f)}}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 f=this.pending.get($);if(f)clearTimeout(f);let J=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,J)}async reconcileNow($){try{let f=uF(this.reconciler.getCronDir(),$);if(!gF(f)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let J=cF(this.reconciler.getCronDir(),f).replace(/\\/g,"/");await this.reconciler.reconcileFile(J,f),await this.onReconciled()}catch(f){this.onError(f)}}}import{randomUUID as lf}from"node:crypto";import{asOptionalString as E,asString as r,loadSqliteDb as pF,nowIso as X0}from"@cline/shared/db";import{resolveCronDbPath as rF}from"@cline/shared/storage";var lF=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
190
198
|
spec_id TEXT PRIMARY KEY,
|
|
191
199
|
external_id TEXT NOT NULL,
|
|
192
200
|
source_path TEXT NOT NULL UNIQUE,
|
|
@@ -277,17 +285,17 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
|
|
|
277
285
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
278
286
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
279
287
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
280
|
-
ON cron_specs(source_path);`];function
|
|
288
|
+
ON cron_specs(source_path);`];function FW($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let f of lF)$.exec(f)}function l8($){if(!$)return;try{let f=JSON.parse($);if(f&&typeof f==="object"&&!Array.isArray(f))return f}catch{}return}function G5($,f={}){if(!$)return;try{let J=JSON.parse($);if(!Array.isArray(J))return;let Q=J.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);if(f.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function Y1($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function q$($){return{specId:r($.spec_id),externalId:r($.external_id),sourcePath:r($.source_path),triggerKind:r($.trigger_kind),sourceMtimeMs:Y1($.source_mtime_ms),sourceHash:E($.source_hash),parseStatus:r($.parse_status)==="invalid"?"invalid":"valid",parseError:E($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:r($.title),prompt:E($.prompt),workspaceRoot:E($.workspace_root),scheduleExpr:E($.schedule_expr),timezone:E($.timezone),eventType:E($.event_type),filters:l8(E($.filters_json)),debounceSeconds:Y1($.debounce_seconds),dedupeWindowSeconds:Y1($.dedupe_window_seconds),cooldownSeconds:Y1($.cooldown_seconds),mode:E($.mode),systemPrompt:E($.system_prompt),providerId:E($.provider_id),modelId:E($.model_id),maxIterations:Y1($.max_iterations),timeoutSeconds:Y1($.timeout_seconds),maxParallel:Y1($.max_parallel),tools:G5(E($.tools_json),{preserveEmpty:!0}),notesDirectory:E($.notes_directory),extensions:G5(E($.extensions_json),{preserveEmpty:!0}),source:E($.source),tags:G5(E($.tags_json)),metadata:l8(E($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:E($.last_materialized_run_id),lastRunAt:E($.last_run_at),nextRunAt:E($.next_run_at),createdAt:r($.created_at),updatedAt:r($.updated_at)}}function P5($){return{runId:r($.run_id),specId:r($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:r($.trigger_kind),status:r($.status),claimToken:E($.claim_token),claimStartedAt:E($.claim_started_at),claimUntilAt:E($.claim_until_at),scheduledFor:E($.scheduled_for),triggerEventId:E($.trigger_event_id),startedAt:E($.started_at),completedAt:E($.completed_at),sessionId:E($.session_id),reportPath:E($.report_path),error:E($.error),attemptCount:Number($.attempt_count??0),createdAt:r($.created_at),updatedAt:r($.updated_at)}}function DW($){return{eventId:r($.event_id),eventType:r($.event_type),source:r($.source),subject:E($.subject),occurredAt:r($.occurred_at),receivedAt:r($.received_at),workspaceRoot:E($.workspace_root),dedupeKey:E($.dedupe_key),payload:l8(E($.payload_json)),attributes:l8(E($.attributes_json)),processingStatus:r($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:E($.error),createdAt:r($.created_at),updatedAt:r($.updated_at)}}function RW($){return $?JSON.stringify($):null}var iF=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function UW($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function nF($,f,J,Q){for(let Z of iF){let W=$[Z],j=f[Z];if(UW(W)!==UW(j))return!0}if(J===!1&&Q===!0)return!0;return!1}function aF($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function tF($){return`hub/schedules/${$}.cron.md`}function sF($){let f={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(f).length>0?f:void 0}function F5($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((f)=>f.trim().length>0),enabled:$.enabled!==!1,metadata:sF($)}}function LW($){return JSON.stringify(F5($))}function oF($,f){let J=$.metadata?{...$.metadata}:{},Q=f.createdBy===null?void 0:f.createdBy!==void 0?f.createdBy:typeof J.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,Z=f.cwd!==void 0?f.cwd:typeof J.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,W=f.runtimeOptions!==void 0?f.runtimeOptions:J.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0;return delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions,{name:f.name??$.title,cronPattern:f.cronPattern??$.scheduleExpr??"",prompt:f.prompt??$.prompt??"",workspaceRoot:f.workspaceRoot??$.workspaceRoot??"",cwd:Z,modelSelection:f.modelSelection!==void 0?f.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:f.enabled??$.enabled,mode:f.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:f.systemPrompt===null?void 0:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,maxIterations:f.maxIterations===null?void 0:f.maxIterations!==void 0?f.maxIterations:$.maxIterations,timeoutSeconds:f.timeoutSeconds===null?void 0:f.timeoutSeconds!==void 0?f.timeoutSeconds:$.timeoutSeconds,maxParallel:f.maxParallel??$.maxParallel??1,createdBy:Q,tags:f.tags??$.tags,runtimeOptions:W,metadata:f.metadata!==void 0?f.metadata:Object.keys(J).length>0?J:void 0}}class pf{db;constructor($={}){let f=$.dbPath??rF();this.db=pF(f),FW(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return f?q$(f):void 0}getSpec($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return f?q$(f):void 0}getSpecByExternalId($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return f?q$(f):void 0}listSpecs($={}){let f=[],J=[];if($.triggerKind)f.push("trigger_kind = ?"),J.push($.triggerKind);if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.parseStatus)f.push("parse_status = ?"),J.push($.parseStatus);if(!$.includeRemoved)f.push("removed = 0");let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((j)=>q$(j))}createHubSchedule($){let f=`sched_${lf()}`,J=this.upsertSpec({externalId:f,sourcePath:tF(f),triggerKind:"schedule",sourceHash:LW($),parseStatus:"valid",spec:F5($)});this.initializeScheduleNextRun(J.record.specId);let Q=this.getSpec(J.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let f=this.db.prepare(`SELECT * FROM cron_specs
|
|
281
289
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
282
|
-
ORDER BY created_at ASC LIMIT 1`).get(
|
|
283
|
-
WHERE ${
|
|
284
|
-
ORDER BY created_at DESC LIMIT ?`).all(...J,
|
|
290
|
+
ORDER BY created_at ASC LIMIT 1`).get($);return f?q$(f):void 0}listHubSchedules($={}){let f=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],J=[];if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let W of $.tags)f.push("tags_json LIKE ?"),J.push(`%"${W.trim()}"%`);let Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
291
|
+
WHERE ${f.join(" AND ")}
|
|
292
|
+
ORDER BY created_at DESC LIMIT ?`).all(...J,Q).map((W)=>q$(W))}updateHubSchedule($,f){let J=this.getHubSchedule($);if(!J)return;let Q=oF(J,f),Z=this.upsertSpec({externalId:$,sourcePath:J.sourcePath,triggerKind:"schedule",sourceHash:LW(Q),parseStatus:"valid",spec:F5(Q)});if(f.cronPattern!==void 0||f.enabled!==void 0)this.initializeScheduleNextRun(Z.record.specId);return this.getSpec(Z.record.specId)}deleteHubSchedule($){let f=this.getHubSchedule($);if(!f)return!1;return this.markSpecRemoved(f.specId),this.cancelQueuedRunsForSpec(f.specId),!0}enqueueHubScheduleRun($,f="manual"){let J=this.getHubSchedule($);if(!J||!J.enabled||J.removed||J.parseStatus!=="valid")return;return this.enqueueRun({specId:J.specId,specRevision:J.revision,triggerKind:f,scheduledFor:X0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
|
|
285
293
|
WHERE trigger_kind = 'event'
|
|
286
294
|
AND event_type = ?
|
|
287
295
|
AND enabled = 1
|
|
288
296
|
AND removed = 0
|
|
289
297
|
AND parse_status = 'valid'
|
|
290
|
-
ORDER BY created_at ASC`).all(
|
|
298
|
+
ORDER BY created_at ASC`).all($).map((J)=>q$(J))}upsertSpec($){let f=X0(),J=this.getSpecBySourcePath($.sourcePath),Q=$.spec,Z={title:Q?.title??J?.title??aF($.sourcePath),prompt:Q?.prompt,workspaceRoot:Q?.workspaceRoot,scheduleExpr:Q?.triggerKind==="schedule"?Q.schedule:void 0,timezone:Q?.triggerKind==="schedule"?Q.timezone:void 0,eventType:Q?.triggerKind==="event"?Q.event:void 0,filters:Q?.triggerKind==="event"?Q.filters:void 0,debounceSeconds:Q?.triggerKind==="event"?Q.debounceSeconds:void 0,dedupeWindowSeconds:Q?.triggerKind==="event"?Q.dedupeWindowSeconds:void 0,cooldownSeconds:Q?.triggerKind==="event"?Q.cooldownSeconds:void 0,mode:Q?.mode,systemPrompt:Q?.systemPrompt,providerId:Q?.modelSelection?.providerId,modelId:Q?.modelSelection?.modelId,maxIterations:Q?.maxIterations,timeoutSeconds:Q?.timeoutSeconds,maxParallel:Q&&"maxParallel"in Q?Q.maxParallel:void 0,tools:Q?.tools,notesDirectory:Q?.notesDirectory,extensions:Q?.extensions,source:Q?.source},W=$.parseStatus==="valid"&&(Q?.enabled??!0);if(!J){let V=`cspec_${lf()}`;this.insertSpecRow(V,$,Z,W,f);let A=this.getSpec(V);if(!A)throw Error("failed to insert cron_spec row");return{record:A,created:!0,revisionChanged:!0}}let X=J.sourceHash!==$.sourceHash&&nF(J,Z,J.enabled,W),H=X?J.revision+1:J.revision;this.updateSpecRow(J.specId,$,Z,W,H,f);let Y=this.getSpec(J.specId);if(!Y)throw Error("failed to reload cron_spec after update");return{record:Y,created:!1,revisionChanged:X}}insertSpecRow($,f,J,Q,Z){let W=f.spec;this.db.prepare(`INSERT INTO cron_specs (
|
|
291
299
|
spec_id, external_id, source_path, trigger_kind,
|
|
292
300
|
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
293
301
|
enabled, removed, title, prompt, workspace_root,
|
|
@@ -298,7 +306,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
|
|
|
298
306
|
tools_json, notes_directory, extensions_json, source,
|
|
299
307
|
tags_json, metadata_json, revision,
|
|
300
308
|
created_at, updated_at
|
|
301
|
-
) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run(f
|
|
309
|
+
) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,f.externalId,f.sourcePath,f.triggerKind,f.sourceMtimeMs??null,f.sourceHash,f.parseStatus,f.parseError??null,Q?1:0,0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,W?.tags?JSON.stringify(W.tags):null,W?.metadata?JSON.stringify(W.metadata):null,1,Z,Z)}updateSpecRow($,f,J,Q,Z,W){let j=f.spec;this.db.prepare(`UPDATE cron_specs SET
|
|
302
310
|
external_id = ?, trigger_kind = ?,
|
|
303
311
|
source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
|
|
304
312
|
enabled = ?, removed = 0, title = ?, prompt = ?,
|
|
@@ -310,63 +318,63 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
|
|
|
310
318
|
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
311
319
|
tags_json = ?, metadata_json = ?,
|
|
312
320
|
revision = ?, updated_at = ?
|
|
313
|
-
WHERE spec_id = ?`).run(
|
|
321
|
+
WHERE spec_id = ?`).run(f.externalId,f.triggerKind,f.sourceMtimeMs??null,f.sourceHash,f.parseStatus,f.parseError??null,Q?1:0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,Z,W,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(X0(),$)}updateSpecNextRunAt($,f){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(f??null,X0(),$)}updateSpecLastRunAt($,f){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(f,X0(),$)}updateLastMaterializedRunId($,f){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(f,X0(),$)}initializeScheduleNextRun($){let f=this.getSpec($);if(!f||f.triggerKind!=="schedule"||!f.enabled||!f.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let J=new Date(H1(f.scheduleExpr,Date.now(),f.timezone)).toISOString();this.updateSpecNextRunAt($,J)}materializeDueScheduleRun($){let f=$.nowMs,J=new Date(f).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Q)return this.db.exec("COMMIT;"),{queued:!1};let Z=q$(Q);if(Z.triggerKind!=="schedule"||!Z.enabled||Z.removed||Z.parseStatus!=="valid"||!Z.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let W=Z.nextRunAt;if(!W){let H=new Date(H1(Z.scheduleExpr,f,Z.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(H,J,Z.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:H}}if(new Date(W).getTime()>f)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:W};let j=`crun_${lf()}`,X;try{X=new Date(H1(Z.scheduleExpr,f,Z.timezone)).toISOString()}catch{X=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
314
322
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
315
323
|
scheduled_for, trigger_event_id, attempt_count,
|
|
316
324
|
created_at, updated_at
|
|
317
|
-
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Z
|
|
325
|
+
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(j,Z.specId,Z.revision,"schedule","queued",W,null,0,J,J),this.db.prepare(`UPDATE cron_specs SET
|
|
318
326
|
last_materialized_run_id = ?,
|
|
319
327
|
last_run_at = ?,
|
|
320
328
|
next_run_at = ?,
|
|
321
329
|
updated_at = ?
|
|
322
|
-
WHERE spec_id = ?`).run(
|
|
330
|
+
WHERE spec_id = ?`).run(j,J,X??null,J,Z.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(j),nextRunAt:X}}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}getRun($){let f=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return f?P5(f):void 0}insertEventLog($,f={}){let J=X0(),Q=f.receivedAtIso??J,Z=$.eventId.trim();if(!Z)throw Error("automation event requires eventId");let W=$.eventType.trim();if(!W)throw Error("automation event requires eventType");let j=$.source.trim();if(!j)throw Error("automation event requires source");let X=$.occurredAt.trim()||Q,H=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
|
|
323
331
|
event_id, event_type, source, subject,
|
|
324
332
|
occurred_at, received_at, workspace_root, dedupe_key,
|
|
325
333
|
payload_json, attributes_json, processing_status,
|
|
326
334
|
matched_spec_count, queued_run_count, suppressed_count,
|
|
327
335
|
error, created_at, updated_at
|
|
328
|
-
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(
|
|
336
|
+
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(Z,W,j,$.subject?.trim()||null,X,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,RW($.payload),RW($.attributes),"received",0,0,0,null,J,J).changes??0,Y=this.getEventLog(Z);if(!Y)throw Error("failed to insert cron_event_log row");return{record:Y,created:H===1}}getEventLog($){let f=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return f?DW(f):void 0}listEventLogs($={}){let f=[],J=[];if($.eventType)f.push("event_type = ?"),J.push($.eventType);if($.source)f.push("source = ?"),J.push($.source);if($.processingStatus)f.push("processing_status = ?"),J.push($.processingStatus);let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Q}
|
|
329
337
|
ORDER BY received_at DESC, created_at DESC
|
|
330
|
-
LIMIT ?`).all(...J,
|
|
338
|
+
LIMIT ?`).all(...J,Z).map((j)=>DW(j))}updateEventLogProcessing($,f){return(this.db.prepare(`UPDATE cron_event_log SET
|
|
331
339
|
processing_status = ?,
|
|
332
340
|
matched_spec_count = COALESCE(?, matched_spec_count),
|
|
333
341
|
queued_run_count = COALESCE(?, queued_run_count),
|
|
334
342
|
suppressed_count = COALESCE(?, suppressed_count),
|
|
335
343
|
error = ?,
|
|
336
344
|
updated_at = ?
|
|
337
|
-
WHERE event_id = ?`).run(
|
|
345
|
+
WHERE event_id = ?`).run(f.status,f.matchedSpecCount??null,f.queuedRunCount??null,f.suppressedCount??null,f.error??null,X0(),$).changes??0)===1}listRuns($={}){let f=[],J=[];if($.specId)f.push("spec_id = ?"),J.push($.specId);if($.status){let j=Array.isArray($.status)?$.status:[$.status];if(j.length>0){let X=j.map(()=>"?").join(",");f.push(`status IN (${X})`);for(let H of j)J.push(H)}}let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((j)=>P5(j))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
338
346
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
339
347
|
WHERE r.spec_id = ?
|
|
340
348
|
AND r.trigger_kind = 'event'
|
|
341
349
|
AND e.dedupe_key = ?
|
|
342
350
|
AND e.received_at >= ?
|
|
343
|
-
LIMIT 1`).get(
|
|
351
|
+
LIMIT 1`).get($.specId,$.dedupeKey,$.sinceIso)}hasRecentEventRunForSpec($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
344
352
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
345
353
|
WHERE r.spec_id = ?
|
|
346
354
|
AND r.trigger_kind = 'event'
|
|
347
355
|
AND e.received_at >= ?
|
|
348
|
-
LIMIT 1`).get(
|
|
356
|
+
LIMIT 1`).get($.specId,$.sinceIso)}findQueuedEventRunForDedupe($){let f=this.db.prepare(`SELECT r.* FROM cron_runs r
|
|
349
357
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
350
358
|
WHERE r.spec_id = ?
|
|
351
359
|
AND r.trigger_kind = 'event'
|
|
352
360
|
AND r.status = 'queued'
|
|
353
361
|
AND e.dedupe_key = ?
|
|
354
362
|
ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
|
|
355
|
-
LIMIT 1`).get(
|
|
363
|
+
LIMIT 1`).get($.specId,$.dedupeKey);return f?P5(f):void 0}updateQueuedEventRunForDebounce($){let f=X0();if((this.db.prepare(`UPDATE cron_runs SET
|
|
356
364
|
trigger_event_id = ?,
|
|
357
365
|
scheduled_for = ?,
|
|
358
366
|
updated_at = ?
|
|
359
367
|
WHERE run_id = ?
|
|
360
368
|
AND trigger_kind = 'event'
|
|
361
|
-
AND status = 'queued'`).run(
|
|
369
|
+
AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,f,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,f){return!!this.db.prepare(`SELECT run_id FROM cron_runs
|
|
362
370
|
WHERE spec_id = ? AND spec_revision = ?
|
|
363
371
|
AND trigger_kind = 'one_off'
|
|
364
|
-
LIMIT 1`).get(f
|
|
372
|
+
LIMIT 1`).get($,f)}enqueueRun($){let f=`crun_${lf()}`,J=X0();this.db.prepare(`INSERT INTO cron_runs (
|
|
365
373
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
366
374
|
scheduled_for, trigger_event_id, attempt_count,
|
|
367
375
|
created_at, updated_at
|
|
368
|
-
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(
|
|
369
|
-
WHERE spec_id = ? AND status = 'queued'`).run(
|
|
376
|
+
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(f,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,J,J),this.updateLastMaterializedRunId($.specId,f);let Q=this.getRun(f);if(!Q)throw Error("failed to insert cron_run row");return Q}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
|
|
377
|
+
WHERE spec_id = ? AND status = 'queued'`).run(X0(),$).changes??0}claimDueRuns($){let f=$.nowIso,J=Math.max(1000,Math.floor($.leaseMs)),Q=new Date(new Date(f).getTime()+J).toISOString(),Z=Math.max(1,Math.floor($.limit??25)),W=[];this.db.exec("BEGIN IMMEDIATE;");try{let j=this.db.prepare(`SELECT * FROM cron_runs
|
|
370
378
|
WHERE (
|
|
371
379
|
status = 'queued'
|
|
372
380
|
OR (
|
|
@@ -378,7 +386,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
|
|
|
378
386
|
)
|
|
379
387
|
AND (scheduled_for IS NULL OR scheduled_for <= ?)
|
|
380
388
|
ORDER BY COALESCE(scheduled_for, created_at) ASC
|
|
381
|
-
LIMIT ?`).all(
|
|
389
|
+
LIMIT ?`).all(f,f,Z);for(let X of j){let H=r(X.run_id);if(!H)continue;let Y=`cclaim_${lf()}`;if((this.db.prepare(`UPDATE cron_runs SET
|
|
382
390
|
status = 'running',
|
|
383
391
|
claim_token = ?,
|
|
384
392
|
claim_started_at = ?,
|
|
@@ -399,8 +407,8 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
|
|
|
399
407
|
AND claim_until_at <= ?
|
|
400
408
|
AND completed_at IS NULL
|
|
401
409
|
)
|
|
402
|
-
)`).run(
|
|
403
|
-
WHERE run_id = ? AND claim_token = ?`).run(J,
|
|
410
|
+
)`).run(Y,f,Q,f,f,H,f).changes??0)!==1)continue;let A=this.getRun(H);if(!A)continue;W.push({run:A,claimToken:Y,claimUntilAt:Q})}this.db.exec("COMMIT;")}catch(j){throw this.db.exec("ROLLBACK;"),j}return W}renewClaim($,f,J){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
|
|
411
|
+
WHERE run_id = ? AND claim_token = ?`).run(J,X0(),$,f).changes??0)===1}completeRun($,f){let J=f.completedAtIso??X0(),Q=f.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
|
|
404
412
|
status = ?,
|
|
405
413
|
session_id = COALESCE(?, session_id),
|
|
406
414
|
report_path = COALESCE(?, report_path),
|
|
@@ -410,7 +418,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
|
|
|
410
418
|
claim_token = NULL,
|
|
411
419
|
claim_until_at = NULL,
|
|
412
420
|
updated_at = ?
|
|
413
|
-
${
|
|
421
|
+
${Q}`).run(f.status,f.sessionId??null,f.reportPath??null,f.error??null,J,J,$,...f.claimToken?[f.claimToken]:[]).changes??0)>0}requeueRun($){let f=X0();return(this.db.prepare(`UPDATE cron_runs SET
|
|
414
422
|
status = 'queued',
|
|
415
423
|
claim_started_at = NULL,
|
|
416
424
|
claim_token = NULL,
|
|
@@ -422,41 +430,41 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
|
|
|
422
430
|
error = ?,
|
|
423
431
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
424
432
|
updated_at = ?
|
|
425
|
-
WHERE run_id = ? AND claim_token = ?`).run(
|
|
426
|
-
`)[0]?.trim())}function
|
|
427
|
-
`,"utf8")}function
|
|
428
|
-
`).trim()}function
|
|
429
|
-
`)[0]??
|
|
430
|
-
`,{encoding:"utf8",mode:384}),await
|
|
431
|
-
`,"utf8");try{return await $()}finally{await f7(J)}}catch(H){if((H instanceof Error&&"code"in H?String(H.code):"")!=="EEXIST")throw H;let Z=await UK(J),j=Z?Date.now()-Date.parse(Z.acquiredAt):eQ+1;if(!Z||!FK(Z.pid)||j>eQ){await f7(J);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${J}`);await KK(YK)}}async function Kf(f){try{let $=await fetch(GK(f));if(!$.ok)return;return await $.json()}catch{return}}function Q0(f,$,J="/hub"){return new URL(`ws://${f}:${$}${J}`).toString()}function GK(f){let $=new URL(f);return $.protocol=$.protocol==="wss:"?"https:":"http:",$.pathname="/health",$.search="",$.toString()}function Wb(f){return jK(f)}import{CLINE_HUB_DEV_PORT as TK,CLINE_HUB_PORT as DK,resolveClineBuildEnv as _K}from"@cline/shared";var MK="CLINE_HUB_HOST",LK="CLINE_HUB_PORT",hK="CLINE_HUB_PATHNAME",OK="127.0.0.1",zK=DK,NK="/hub";function j7(f){return _K(f)==="development"?TK:zK}function qK(f={}){return(f.env??process.env)[MK]?.trim()||OK}function w8(f={}){let J=(f.env??process.env)[LK]?.trim();if(!J)return j7(f);let W=Number.parseInt(J,10);if(!Number.isInteger(W)||W<1||W>65535)return j7(f);return W}function wK(f={}){return(f.env??process.env)[hK]?.trim()||NK}function q0(f={},$={}){return{host:f.host??qK($),port:f.port??w8($),pathname:f.pathname??wK($)}}var bK="shared:cline";function Ab(f){let $=J$(f.trim());return j$(`workspace:${$||f.trim()}`)}function yf(f=bK){return j$(f)}var cK=8000,dK=200,rK=3000,lK=100,pK=[100,250,500,1000,2000],iK="--cline-hub-daemon";function nK(f){return[...f.host?["--host",f.host]:[],...typeof f.port==="number"?["--port",String(f.port)]:[],...f.pathname?["--pathname",f.pathname]:[]]}function aK(){try{let f=xK(A5(),"logs","hub-daemon.log");return SK(mK(f),{recursive:!0}),{fd:kK(f,"a"),logPath:f}}catch{return}}function u1(f){let $=f.buildId?.trim();return!!$&&$===d$()}async function tK(f,$){let J=Date.now()+$;while(Date.now()<J){if(!(await Kf(f).catch(()=>{return}))?.url)return!0;await new Promise((H)=>setTimeout(H,lK))}return!1}async function c1(f,$){if(u1(f))return;if(await P5(f.url,f.authToken).catch(()=>!1),f.pid)try{process.kill(f.pid,"SIGTERM")}catch{}await tK(f.url,rK),await pf($).catch(()=>{return})}function sK(){let f=import.meta.url.endsWith(".ts")?"ts":"js";return gK(new URL(`./entry.${f}`,import.meta.url))}function oK(f,$){let J=sK(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let H=IK(W).toLowerCase().includes("bun"),Q=J.startsWith("/$bunfs/"),Z=H&&J.toLowerCase().endsWith(".ts"),j=Q?[iK]:[...Z?["--conditions=development"]:[],J];return{launcher:W,args:[...j,"--cwd",f,...nK($)],cwd:f,env:{...uK(process.env),CLINE_NO_INTERACTIVE:"1",[vK]:"1"}}}function eK(f){if(!f||typeof f!=="object")return!1;if(("code"in f?f.code:void 0)==="ETXTBSY")return!0;let J="message"in f?f.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function fy(f,$={}){if(X7())return;let J=oK(f,$),W=aK();try{CK(J.launcher,J.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(W)EK(W.fd)}}async function b8(f,$={}){for(let J=0;;J++)try{fy(f,$);return}catch(W){let H=pK[J];if(!eK(W)||H===void 0)throw W;await new Promise((Q)=>setTimeout(Q,H))}}function A7(f,$={}){if(X7())return;let J=yf(),W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),H=q0($),Q=Q0(H.host,H.port,H.pathname);Yf(J.discoveryPath).then(async(Z)=>{if(Z?.url){let P=await Kf(Z.url);if(P?.url&&u1(P)&&await w0(P.url,{authToken:Z.authToken}))return;if(P?.url)await c1({...P,authToken:Z.authToken},J.discoveryPath);else await pf(J.discoveryPath).catch(()=>{return})}let j=await Kf(Q);if(j?.url)await c1(j,J.discoveryPath);let A=!W&&H.port!==0?{...H,port:0}:H;await b8(f,A)}).catch(()=>{})}async function Tb(f,$={}){let J=yf(),W=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),H=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=q0($),Z=Q0(Q.host,Q.port,Q.pathname),j=(V)=>{if(!W)r$(V.url,V.authToken);return V},X=await Yf(J.discoveryPath);if(X?.url){let V=await Kf(X.url);if(V?.url&&u1(V)&&await w0(V.url,{authToken:X.authToken}))return j({url:V.url,authToken:X.authToken});if(V?.url)await c1({...V,authToken:X.authToken},J.discoveryPath);else await pf(J.discoveryPath).catch(()=>{return})}let A=await Kf(Z);if(A?.url)await c1(A,J.discoveryPath);let B=!H&&Q.port!==0?{...Q,port:0}:Q;await b8(f,B);let Y=Date.now()+cK;while(Date.now()<Y){let V=await Yf(J.discoveryPath);if(V?.url){let U=await Kf(V.url);if(U?.url&&u1(U)&&await w0(U.url,{authToken:V.authToken}))return j({url:U.url,authToken:V.authToken})}let R=await Kf(Z);if(R?.url&&!u1(R))await c1(R,J.discoveryPath);await new Promise((U)=>setTimeout(U,dK))}throw Error("Timed out waiting for detached hub startup.")}function Wy(){let f=globalThis.WebSocket;if(!f)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return f}function R7(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString();if(f instanceof ArrayBuffer)return Buffer.from(f).toString();if(Array.isArray(f))return Buffer.concat(f.map(($)=>Buffer.from($))).toString();if(f&&typeof f==="object"&&"data"in f&&typeof f.data<"u")return R7(f.data);return String(f)}function Hy(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString("utf8");if(f instanceof ArrayBuffer)return Buffer.from(f).toString("utf8");return""}function P7(f){let $=f,J=Hy($.reason);return new bf("hub_connection_closed",$.code||J?`Hub connection closed (code=${$.code??0}${J?`, reason=${J}`:""})`:B5,{closeCode:$.code,closeReason:J||void 0})}function Qy(f,$){if(f instanceof bf)return f;if(f instanceof Error)return new bf("hub_connect_failed",f.message);if(f&&typeof f==="object"&&"error"in f&&f.error instanceof Error)return new bf("hub_connect_failed",f.error.message);let J=f&&typeof f==="object"&&"message"in f&&typeof f.message==="string"?f.message.trim():"";if(J)return new bf("hub_connect_failed",J);let W=f&&typeof f==="object"&&"type"in f&&typeof f.type==="string"?f.type.trim():"";return new bf("hub_connect_failed",W?`Failed to connect to hub at ${$.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${$.toString()}.`)}var Zy=8000,jy=200,B7="*",Y7=8000,Xy="cline-hub-auth.",F7=new Map,K7=new Set,Ay=3000,Py=3000,By=100,B5="Hub connection closed",Yy=250,Vy=5000,V7=0.5;class bf extends Error{code;details;constructor(f,$,J){super($);this.code=f;this.details=J;this.name="HubTransportError"}}function Ry(f){return f instanceof bf}class C8 extends Error{command;code;constructor(f,$,J){super(J);this.command=f;this.code=$;this.name="HubCommandError"}}function y7(f,$){return f instanceof C8&&f.code==="hub_command_timeout"&&($===void 0||f.command===$)}function U7(f){let $=f.searchParams.get("authToken")?.trim();if(f.searchParams.delete("authToken"),$)return $;let J=R5(f.toString());return J?F7.get(J):void 0}function Fy(f){try{let J=new URL(f).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function R5(f){if(!Fy(f))return;let $=new URL(l$(f));return $.search="",$.hash="",$.toString()}function Y5(f){let $=R5(f);return!!$&&K7.has($)}function r$(f,$){let J=R5(f);if(J){if(K7.add(J),$?.trim())F7.set(J,$)}return f}class Z0{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new bf("hub_connection_closed",B5);sawSocketClose=!1;registered=!1;constructor(f){this.options=f;this.clientId=f.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=f.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let f=new URL(this.currentUrl),$=this.options.authToken?.trim()||U7(f);f.hash="";let W=new(Wy())(f.toString(),$?[`${Xy}${$}`]:void 0);this.socket=W;let H=!1;this.connectPromise=new Promise((Q,Z)=>{let j=!1,X=setTimeout(()=>{if(j)return;j=!0,H=!0,this.lastCloseError=new bf("hub_connect_timeout",`Timed out connecting to hub after ${Y7}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Z(this.lastCloseError)},Y7);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(X),Q()}),W.addEventListener("error",(A)=>{if(j)return;j=!0,clearTimeout(X),this.lastCloseError=Qy(A,f),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Z(this.lastCloseError)}),W.addEventListener("close",(A)=>{if(j)return;if(j=!0,clearTimeout(X),!H)this.lastCloseError=P7(A),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Z(this.lastCloseError)})}),W.addEventListener("message",(Q)=>{this.handleFrame(JSON.parse(R7(Q)))}),W.addEventListener("close",(Q)=>{if(this.socket!==W)return;if(!H)this.lastCloseError=P7(Q),this.sawSocketClose=!0;this.registered=!1;for(let Z of this.pendingReplies.values())Z.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 Q of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(Q));this.reconnectAttempt=0}subscribe(f,$){let J=$?.sessionId?.trim()||void 0,W={listener:f,sessionId:J};return this.listeners.add(W),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(J,-1)}}async command(f,$,J,W){let H=0,Q=f!=="client.register"&&f!=="client.unregister";while(!0)try{return await this.commandOnce(f,$,J,W)}catch(Z){if(!Q||H>=1||!await this.recoverLocalHubTransport(Z))throw Z;H+=1}}async commandOnce(f,$,J,W){await this.connect();let H=$y("hubreq_"),Q=Jy(f,W?.timeoutMs),Z=new Promise((X,A)=>{let P=Q===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(H))return;A(new C8(f,"hub_command_timeout",`Hub command ${f} timed out after ${Q}ms (hub=${this.currentUrl}, requestId=${H}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},Q);this.pendingReplies.set(H,{resolve:(B)=>{if(P)clearTimeout(P);X(B)},reject:(B)=>{if(P)clearTimeout(P);A(B)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:f,requestId:H,clientId:this.clientId,sessionId:J,timeoutMs:Q,payload:$}})}catch(X){throw this.pendingReplies.delete(H),X}let j=await Z;if(!j.ok)throw new C8(f,j.error?.code,j.error?.message??`Hub command ${f} failed`);return j}async recoverLocalHubTransport(f){if(!Y5(this.currentUrl)||!Ry(f))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let $=await d1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!$)return!1;return this.currentUrl=$,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 f=Math.min(Yy*2**this.reconnectAttempt,Vy),$=Math.round(f*(1-V7)+Math.random()*f*V7);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},$)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!Y5(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let f=await d1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if(f){this.currentUrl=f,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let f=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!f)return;this.lastCloseError=new bf("hub_connection_closed",B5),this.sawSocketClose=!1;for(let $ of this.pendingReplies.values())$.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{f.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(f){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new bf("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify(f))}sendSubscriptionFrame(f,$){this.sendFrame({kind:f,clientId:this.clientId,...$?{sessionId:$}:{}})}adjustSubscriptionCount(f,$){let J=this.subscriptionKeyForSessionId(f),W=(this.subscriptionCounts.get(J)??0)+$;if(W<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if($<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",f);return}if(this.subscriptionCounts.set(J,W),$>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",f)}subscriptionKeyForSessionId(f){return f??B7}subscriptionSessionIdFromKey(f){return f===B7?void 0:f}handleFrame(f){switch(f.kind){case"reply":{let $=f.envelope.requestId;if(!$)return;let J=this.pendingReplies.get($);if(!J)return;this.pendingReplies.delete($),J.resolve(f.envelope);return}case"event":for(let $ of this.listeners){if($.sessionId&&$.sessionId!==f.envelope.sessionId?.trim())continue;$.listener(f.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function l$(f){let $=new URL(f);if($.protocol==="http:")$.protocol="ws:";else if($.protocol==="https:")$.protocol="wss:";return $.toString()}async function w0(f,$){let J=new Z0({url:f,authToken:$?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:$?.workspaceRoot,cwd:$?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function V5(f,$){let J=l$(f),W=await Kf(J);if(!W)return{status:"unreachable",url:J};let H=d$(),Q=W.buildId?.trim();if(!Q||Q!==H)return{status:"build_mismatch",url:J};if($?.verifyConnection===!0&&!await w0(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd,authToken:$.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function Ky(f){let $=Date.now()+Zy;while(Date.now()<$){let J=await Yf(f.discoveryPath);if(J?.url){let W=await V5(J.url,{verifyConnection:!0,authToken:J.authToken});if(W.status==="compatible")return r$(W.url,J.authToken)}await new Promise((W)=>setTimeout(W,jy))}return}async function yy(f){let $=Date.now()+Py;while(Date.now()<$){if(!(await Kf(f).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,By))}return!1}function Uy(f,$){try{return l$(f)===l$($)}catch{return!1}}function Gy(f){return(f&&typeof f==="object"&&Array.isArray(f.sessions)?f.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let W=J;if(W.status==="running"||W.status==="idle")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Ty(f,$,J){let W=new Z0({url:f,authToken:$,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let H=await W.command("session.list",{limit:500},void 0,{timeoutMs:Ay});return!Gy(H.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function F5(f={}){if(f.endpoint?.trim()){let H=await V5(f.endpoint);return H.status==="compatible"?H.url:void 0}let $=yf(),J=await Yf($.discoveryPath);if(!J?.url)return;let W=await V5(J.url);if(W.status==="compatible")return r$(W.url,J.authToken);if(W.status==="build_mismatch")await pf($.discoveryPath).catch(()=>{return});return}async function d1(f={}){let $=await F5(f);if($&&await w0($,{workspaceRoot:f.workspaceRoot,cwd:f.cwd}))return $;if(f.endpoint?.trim())return;let J=yf();return await b8(f.workspaceRoot??process.cwd()),await Ky(J)}async function P5(f,$){let J=new URL(f),W=$?.trim()||U7(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function Dy(){let f=yf(),$=await Yf(f.discoveryPath);if(!$?.url)return!1;try{if(await P5($.url,$.authToken))return!0}catch{}return!1}async function G7(f){if(!Y5(f.url))return;let $=yf(),J=await Yf($.discoveryPath);if(!J?.url||!Uy(J.url,f.url))return;if(!await Ty(J.url,J.authToken,{workspaceRoot:f.workspaceRoot,cwd:f.cwd}))return;if(!await Dy())return;if(!await yy(J.url))return;return await pf($.discoveryPath).catch(()=>{return}),await d1({workspaceRoot:f.workspaceRoot,cwd:f.cwd})}import{createSessionId as T7,HUB_CHECKPOINT_CAPABILITY as hy,HUB_COMPACTION_CAPABILITY as Oy,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as zy,HUB_HOOK_CAPABILITY_PREFIX as Ny,HUB_MISTAKE_LIMIT_CAPABILITY as qy,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as wy,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as by,isHubToolExecutorName as Cy}from"@cline/shared";function _y(f){return f?JSON.parse(JSON.stringify(f)):void 0}function My(f){return f?JSON.parse(JSON.stringify(f)):void 0}function Ly(f){let $=f?.checkpoint&&typeof f.checkpoint==="object"&&!Array.isArray(f.checkpoint)?f.checkpoint:void 0,W=(Array.isArray($?.history)?$.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let j=typeof Z.ref==="string"?Z.ref.trim():"",X=Number(Z.createdAt),A=Number(Z.runCount);if(!j||!Number.isFinite(X)||!Number.isInteger(A))return[];return[{ref:j,createdAt:X,runCount:A,...Z.kind==="stash"||Z.kind==="commit"?{kind:Z.kind}:{}}]}),H=W.at(-1),Q=f?.checkpointEnabled===!0?!0:void 0;if(!Q&&W.length===0)return;return{...Q?{enabled:Q}:{},...H?{latest:H}:{},history:W}}function b0(f){let{session:$}=f,J=_y($.metadata);return{version:1,sessionId:$.sessionId,source:$.source,status:$.status,createdAt:$.startedAt,updatedAt:$.updatedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,interactive:$.interactive,workspace:{cwd:$.cwd,root:$.workspaceRoot},model:{providerId:$.provider,modelId:$.model},capabilities:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams},lineage:{...$.parentSessionId?{parentSessionId:$.parentSessionId}:{},...$.parentAgentId?{parentAgentId:$.parentAgentId}:{},...$.agentId?{agentId:$.agentId}:{},...$.conversationId?{conversationId:$.conversationId}:{},isSubagent:$.isSubagent},...$.teamName?{team:{name:$.teamName}}:{},...$.prompt?{prompt:$.prompt}:{},...J?{metadata:J}:{},...$.messagesPath?{artifacts:{messagesPath:$.messagesPath}}:{},...f.messages?{messages:My(f.messages)}:{},...f.usage?{usage:{...f.usage}}:{},...f.aggregateUsage?{aggregateUsage:{...f.aggregateUsage}}:{},...(()=>{let W=Ly(J);return W?{checkpoint:W}:{}})()}}function K5(f){return{sessionId:f.sessionId,parentSessionId:f.lineage.parentSessionId,agentId:f.lineage.agentId,parentAgentId:f.lineage.parentAgentId,conversationId:f.lineage.conversationId,isSubagent:f.lineage.isSubagent,source:f.source,startedAt:f.createdAt,endedAt:f.endedAt??void 0,exitCode:f.exitCode??void 0,status:f.status,interactive:f.interactive,provider:f.model.providerId,model:f.model.modelId,cwd:f.workspace.cwd,workspaceRoot:f.workspace.root,teamName:f.team?.name,enableTools:f.capabilities.enableTools,enableSpawn:f.capabilities.enableSpawn,enableTeams:f.capabilities.enableTeams,prompt:f.prompt,metadata:f.metadata,updatedAt:f.updatedAt,messagesPath:f.artifacts?.messagesPath}}function p$(f){if(!f)return;return JSON.parse(JSON.stringify(f))}var Ey=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function D7(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return JSON.parse(JSON.stringify(f))}function _7(f){if(!f)return;let{userInstructionService:$,...J}=f;return JSON.parse(JSON.stringify(J))}function M7(f){let $=f&&typeof f==="object"&&!Array.isArray(f)?f:{};return{agentId:typeof $.agentId==="string"?$.agentId:"",conversationId:typeof $.conversationId==="string"?$.conversationId:"",iteration:typeof $.iteration==="number"?$.iteration:0,metadata:$.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?$.metadata:void 0}}function X$(f,$,J){f.manifest.push($),f.handlers.set($.capabilityName,J)}function L7(f,$){let J={manifest:[],handlers:new Map};for(let H of Object.keys($.toolExecutors??{}).filter(Cy)){let Q=$.toolExecutors?.[H];if(typeof Q!=="function")continue;X$(J,{kind:"toolExecutor",executor:H,capabilityName:`${wy}${H}`},async({payload:Z,abortSignal:j})=>{let X=Array.isArray(Z.args)?[...Z.args]:[],A={...M7(Z.context),signal:j};return{result:await Q(...X,A)}})}for(let H of f?.extraTools??[])X$(J,{kind:"tool",name:H.name,description:H.description,inputSchema:p$(H.inputSchema)??{},...H.lifecycle?{lifecycle:p$(H.lifecycle)}:{},capabilityName:`${zy}${H.name}`},async({payload:Q,abortSignal:Z,progress:j})=>{let X={...M7(Q.context),signal:Z};return{result:await H.execute(Q.input,{...X,emitUpdate:(P)=>{j({update:P})}})}});let W=f?.hooks;if(W)for(let H of Ey){let Q=W[H];if(typeof Q!=="function")continue;X$(J,{kind:"hook",name:H,capabilityName:`${Ny}${H}`},async({payload:Z})=>({control:await Q(Z.context)}))}if(f?.compaction?.compact){let H=f.compaction.compact;X$(J,{kind:"compaction",capabilityName:Oy,config:D7(f.compaction)},async({payload:Q})=>({result:await H(Q.context)}))}if(f?.checkpoint?.createCheckpoint){let H=f.checkpoint.createCheckpoint;X$(J,{kind:"checkpoint",capabilityName:hy,config:D7(f.checkpoint)},async({payload:Q})=>({result:await H(Q.context)}))}if(f?.onConsecutiveMistakeLimitReached){let H=f.onConsecutiveMistakeLimitReached;X$(J,{kind:"mistakeLimit",capabilityName:qy},async({payload:Q})=>({result:await H(Q.context)}))}if(f?.userInstructionService){let H=f.userInstructionService;X$(J,{kind:"userInstructionService",capabilityName:by},async()=>{return await H.start().catch(()=>{}),{snapshot:{records:{skill:H.listRecords("skill"),rule:H.listRecords("rule"),workflow:H.listRecords("workflow")},runtimeCommands:H.listRuntimeCommands()}}})}return J}function Sy(f){if(typeof f==="string"&&f.trim())return f.trim();if(f instanceof Error)return f.message;if(f&&typeof f==="object"&&"message"in f){let $=f.message;if(typeof $==="string"&&$.trim())return $.trim()}return"Capability request was cancelled."}function ky(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function Iy(f){return f==="completed"||f==="max_iterations"||f==="aborted"||f==="mistake_limit"||f==="error"}function my(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let $=f,J=typeof $.inputTokens==="number"?$.inputTokens:void 0,W=typeof $.outputTokens==="number"?$.outputTokens:void 0;if(J===void 0||W===void 0)return;return{inputTokens:J,outputTokens:W,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function h7(f){if(!f)return;return{inputTokens:typeof f.inputTokens==="number"?f.inputTokens:0,outputTokens:typeof f.outputTokens==="number"?f.outputTokens:0,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function U5(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function C0(f,$){return U5(f?.[$])??0}function xy(f){let $=f?.delta&&typeof f.delta==="object"?f.delta:void 0,J=f?.totals&&typeof f.totals==="object"?f.totals:void 0,W=f?.agent&&typeof f.agent==="object"?f.agent:void 0,H=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:C0($,"inputTokens"),outputTokens:C0($,"outputTokens"),cacheReadTokens:C0($,"cacheReadTokens"),cacheWriteTokens:C0($,"cacheWriteTokens"),cost:U5($?.totalCost),totalInputTokens:C0(J,"inputTokens"),totalOutputTokens:C0(J,"outputTokens"),totalCacheReadTokens:C0(J,"cacheReadTokens"),totalCacheWriteTokens:C0(J,"cacheWriteTokens"),totalCost:U5(J?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:H}}function gy(f){let $=f?.result&&typeof f.result==="object"&&!Array.isArray(f.result)?f.result:void 0,J=f?.reason??$?.finishReason,W=Iy(J)?J:J==="failed"?"error":"completed",H=my(f?.usage??$?.usage);return{type:"done",reason:W,text:typeof f?.text==="string"?f.text:typeof $?.text==="string"?$.text:"",iterations:typeof f?.iterations==="number"?f.iterations:typeof $?.iterations==="number"?$.iterations:0,usage:H}}function y5(f,$){return f.error?.message??`hub command failed: ${$}`}function r1(f){switch(f){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function N7(f){let $=f.metadata&&typeof f.metadata==="object"?JSON.parse(JSON.stringify(f.metadata)):void 0;return{sessionId:f.sessionId,parentSessionId:typeof $?.parentSessionId==="string"?$.parentSessionId:void 0,agentId:f.runtimeSession?.agentId||(typeof $?.agentId==="string"?$.agentId:void 0),parentAgentId:typeof $?.parentAgentId==="string"?$.parentAgentId:void 0,conversationId:typeof $?.conversationId==="string"?$.conversationId:void 0,isSubagent:typeof $?.isSubagent==="boolean"?$.isSubagent:!1,source:typeof $?.source==="string"?$.source:Rf.CORE,pid:typeof $?.pid==="number"?$.pid:void 0,startedAt:new Date(f.createdAt).toISOString(),endedAt:r1(f.status)==="running"?void 0:new Date(f.updatedAt).toISOString(),exitCode:r1(f.status)==="completed"?0:r1(f.status)==="failed"?1:void 0,status:r1(f.status),interactive:$?.interactive===!0,provider:typeof $?.provider==="string"?$.provider:"hub",model:typeof $?.model==="string"?$.model:"hub",cwd:f.cwd?.trim()||f.workspaceRoot,workspaceRoot:f.workspaceRoot,teamName:typeof $?.teamName==="string"?$.teamName:void 0,enableTools:f.runtimeOptions?.enableTools??$?.enableTools===!0,enableSpawn:f.runtimeOptions?.enableSpawn??$?.enableSpawn===!0,enableTeams:f.runtimeOptions?.enableTeams??$?.enableTeams===!0,prompt:typeof $?.prompt==="string"?$.prompt:void 0,metadata:$,updatedAt:new Date(f.updatedAt).toISOString(),messagesPath:typeof $?.messagesPath==="string"?$.messagesPath:void 0,hookPath:typeof $?.hookPath==="string"?$.hookPath:void 0}}function A$(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let $=f;return $.version===1&&typeof $.sessionId==="string"?JSON.parse(JSON.stringify($)):void 0}function vy(f){let $=A$(f?.snapshot);if($)return K5($);let J=f?.session;return J?N7(J):void 0}function O7(f,$,J){let W=J?.workspaceRoot?.trim()||$.config.workspaceRoot||$.config.cwd;return Df.parse({version:1,session_id:f,source:$.source??Rf.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:r1(J?.status),interactive:$.interactive===!0,provider:$.config.providerId,model:$.config.modelId,cwd:J?.cwd?.trim()||$.config.cwd,workspace_root:W,team_name:$.config.teamName,enable_tools:$.config.enableTools,enable_spawn:$.config.enableSpawnAgent,enable_teams:$.config.enableAgentTeams,prompt:$.prompt?.trim()||void 0,metadata:$.sessionMetadata&&Object.keys($.sessionMetadata).length>0?$.sessionMetadata:void 0})}function z7(f,$){return Df.parse({version:1,session_id:f.sessionId,source:f.source,pid:process.pid,started_at:f.createdAt,status:f.status,interactive:f.interactive,provider:f.model.providerId,model:f.model.modelId,cwd:f.workspace.cwd,workspace_root:f.workspace.root,team_name:f.team?.name,enable_tools:f.capabilities.enableTools,enable_spawn:f.capabilities.enableSpawn,enable_teams:f.capabilities.enableTeams,prompt:(f.prompt??$.prompt?.trim())||void 0,metadata:f.metadata,messages_path:f.artifacts?.messagesPath})}class P${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new v1;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;constructor(f,$){this.clientContext=$,this.clientOptions={authToken:f.authToken,clientType:f.clientType??"core-hub-runtime",displayName:f.displayName??"core hub runtime",workspaceRoot:$?.workspaceRoot,cwd:$?.cwd},this.defaultCapabilities=Ff(f.capabilities)??{},this.runtimeAddress=f.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient(f.url)}createClient(f){return new Z0({...this.clientOptions,url:f})}async replaceClient(f){let $=this.client;this.client=this.createClient(f),this.runtimeAddress=f,await Promise.resolve($.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock(f){if(!y7(f,"session.create"))return!1;let $=await G7({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!$)return!1;return await this.replaceClient($),!0}registerPlannedSession(f,$,J){if(this.sessionCapabilities.set(f,$),J.size>0)this.sessionClientContributionHandlers.set(f,J);this.ensureSessionSubscription(f)}cleanupPlannedSession(f){this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f)}async connect(){await this.client.connect()}async startSession(f){let $=this.resolveCapabilities(f),J=L7(f.localRuntime,$),W=f.config.sessionId?.trim()||T7(),H=()=>this.client.command("session.create",{workspaceRoot:f.config.workspaceRoot?.trim()||f.config.cwd,cwd:f.config.cwd,sessionConfig:p$({...f.config,sessionId:W}),metadata:{...f.sessionMetadata??{},source:f.source??Rf.CORE,provider:f.config.providerId,model:f.config.modelId,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,teamName:f.config.teamName,prompt:f.prompt,interactive:f.interactive===!0},runtimeOptions:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...f.localRuntime?.configExtensions?{configExtensions:f.localRuntime.configExtensions}:{}},toolPolicies:p$(f.toolPolicies),initialMessages:f.initialMessages});this.registerPlannedSession(W,$,J.handlers);let Q;try{Q=await H()}catch(A){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(A)){this.registerPlannedSession(W,$,J.handlers);try{Q=await H()}catch(P){throw this.cleanupPlannedSession(W),P}}else throw A}let Z=A$(Q.payload?.snapshot),j=Q.payload?.session,X=(Z?.sessionId??j?.sessionId)?.trim();if(!X)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(X!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(X,$,J.handlers);return{sessionId:X,manifest:Z?z7(Z,f):O7(X,f,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession(f){let $=f.sessionId.trim();if(!$)throw Error("sessionId is required");let J=f.restore?.messages!==!1;if(J&&!f.start)throw Error("start is required when restore.messages is true");let W=f.start,H=W?this.resolveCapabilities(W):void 0,Q=W?L7(W.localRuntime,H??{}):{manifest:[],handlers:new Map},Z=W?W.config.sessionId?.trim()||T7():void 0;if(Z&&H)this.sessionCapabilities.set(Z,H);if(Z&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(Z,Q.handlers),this.ensureSessionSubscription(Z);let j;try{j=await this.client.command("session.restore",{sessionId:$,checkpointRunCount:f.checkpointRunCount,restore:f.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??f.cwd,sessionConfig:p$({...W.config,sessionId:Z}),metadata:{...W.sessionMetadata??{},source:W.source??Rf.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:p$(W.toolPolicies)}:{}},$)}catch(V){if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw V}if(!j.ok){let V=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw Error(V)}let X=A$(j.payload?.snapshot),A=j.payload?.session,P=(X?.sessionId??A?.sessionId)?.trim();if(J&&!P){if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw Error("Hub checkpoint restore returned no session id")}if(P&&Z&&P!==Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);if(P&&H)this.sessionCapabilities.set(P,H);if(P&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(P,Q.handlers);if(P)this.ensureSessionSubscription(P);let B=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,Y=j.payload?.checkpoint;if(!Y)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:P,startResult:P?{sessionId:P,manifest:X?z7(X,W??{}):O7(P,W??{},A),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:B,checkpoint:Y}}async runTurn(f){return this.ensureSessionSubscription(f.sessionId),(await this.client.command("run.start",{sessionId:f.sessionId,input:f.prompt,attachments:(f.userImages?.length??0)>0||(f.userFiles?.length??0)>0?{...f.userImages?.length?{userImages:f.userImages}:{},...f.userFiles?.length?{userFiles:f.userFiles}:{}}:void 0,delivery:f.delivery,timeoutMs:f.timeoutMs},f.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.pending_prompts",{sessionId:f.sessionId},f.sessionId);return Array.isArray($.payload?.prompts)?$.payload.prompts:[]}async requestPendingPromptUpdate(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.update_pending_prompt",{...f},f.sessionId);return{sessionId:f.sessionId,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[],prompt:$.payload?.prompt,updated:$.payload?.updated===!0}}async requestPendingPromptDelete(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.remove_pending_prompt",{...f},f.sessionId);return{sessionId:f.sessionId,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[],prompt:$.payload?.prompt,removed:$.payload?.removed===!0}}async getAccumulatedUsage(f){let $=await this.client.command("session.get",{includeSnapshot:!0},f),J=A$($.payload?.snapshot);if(J){let Z=J.usage?{...J.usage}:void 0,j=J.aggregateUsage?{...J.aggregateUsage}:void 0;return Z||j?{usage:Z,aggregateUsage:j}:void 0}let W=$.payload?.session,H=h7(W?.usage),Q=h7(W?.aggregateUsage);return H||Q?{usage:H,aggregateUsage:Q}:void 0}async abort(f,$){await this.client.command("run.abort",{sessionId:f,reason:typeof $==="string"?$:void 0},f)}async stopSession(f){this.sessionCapabilities.delete(f),this.disposeSessionSubscription(f),await this.client.command("session.detach",{sessionId:f},f)}async dispose(){for(let[f,$]of this.sessionSubscriptions){$();try{await this.client.command("session.detach",{sessionId:f},f)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let f of this.activeCapabilityAbortControllers.values())f.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession(f){let $=await this.client.command("session.get",void 0,f);return vy($.payload)}async listSessions(f=100){let $=await this.client.command("session.list",{limit:f}),J=Array.isArray($.payload?.snapshots)?$.payload.snapshots.flatMap((H)=>{let Q=A$(H);return Q?[K5(Q)]:[]}):[];if(J.length>0)return J;return($.payload?.sessions??[]).map(N7)}async listSettings(f){let $=await this.client.command("settings.list",_7(f));if(!$.ok)throw Error(y5($,"settings.list"));return $.payload?.snapshot}async toggleSetting(f){let $=await this.client.command("settings.toggle",_7(f));if(!$.ok)throw Error(y5($,"settings.toggle"));return{snapshot:$.payload?.snapshot,changedTypes:Array.isArray($.payload?.changedTypes)?$.payload.changedTypes:[]}}async deleteSession(f){return this.sessionCapabilities.delete(f),this.disposeSessionSubscription(f),(await this.client.command("session.delete",{sessionId:f})).payload?.deleted===!0}async updateSession(f,$){let J={...$.metadata??{}};if(typeof $.prompt==="string")J.prompt=$.prompt;if(typeof $.title==="string")J.title=$.title;return{updated:(await this.client.command("session.update",{sessionId:f,metadata:J})).ok}}async readSessionMessages(f){let $=f.trim();if(!$)return[];let J=await this.client.command("session.messages",{sessionId:$},$);if(!J.ok)throw Error(y5(J,"session.messages"));let W=J.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent(f){await this.client.command("session.hook",{payload:f})}subscribe(f,$){return this.events.subscribe(f,$)}ensureSessionSubscription(f){let $=f.trim();if(!$||this.sessionSubscriptions.has($))return;let J=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:$});this.sessionSubscriptions.set($,typeof J==="function"?J:()=>{})}disposeSessionSubscription(f){let $=f.trim();if(!$)return;this.sessionSubscriptions.get($)?.(),this.sessionSubscriptions.delete($),this.agentDoneEmittedForCurrentRunBySession.delete($)}resolveCapabilities(f){return Ff(this.defaultCapabilities,f.capabilities)??{}}emitToolCallContentStart(f){this.events.emit({type:"agent_event",payload:{sessionId:f.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:f.toolCallId,toolName:f.toolName,input:f.toolInput}}})}emitAgentDoneIfNeeded(f){if(this.agentDoneEmittedForCurrentRunBySession.has(f.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add(f.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:f.sessionId,event:gy(f.payload)}})}handleHubEvent(f){let $=f.sessionId?.trim();if(f.event==="capability.requested"){this.handleCapabilityRequest(f);return}if(f.event==="capability.resolved"){this.handleCapabilityResolved(f);return}if(f.event==="approval.requested"){this.handleApprovalRequested(f);return}if(!$)return;switch(f.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete($);let J=A$(f.payload?.snapshot),W=f.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:$,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"iteration_start",iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"iteration_end",iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0,hadToolCalls:f.payload?.hadToolCalls===!0,toolCallCount:typeof f.payload?.toolCallCount==="number"?f.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof f.payload?.text==="string"?f.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"text",text:typeof f.payload?.text==="string"?f.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof f.payload?.text==="string"?f.payload.text:"",W=f.payload?.redacted===!0;if(!J&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"reasoning",reasoning:typeof f.payload?.reasoning==="string"?f.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:$,payload:f.payload});return}case"usage.updated":{let J=xy(f.payload);this.events.emit({type:"agent_event",payload:{sessionId:$,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:$,toolCallId:J,toolName:typeof f.payload?.toolName==="string"?f.payload.toolName:void 0,toolInput:f.payload?.input});return}case"tool.finished":{let J=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"tool",toolCallId:J,toolName:typeof f.payload?.toolName==="string"?f.payload.toolName:void 0,output:f.payload?.output,error:typeof f.payload?.error==="string"?f.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let J=A$(f.payload?.snapshot),W=f.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:$,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:$,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=f.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:$,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=typeof f.payload?.reason==="string"?f.payload.reason:f.event==="run.aborted"?"aborted":f.event==="run.failed"?"error":"completed";this.emitAgentDoneIfNeeded({sessionId:$,payload:{...f.payload,reason:J}}),this.events.emit({type:"ended",payload:{sessionId:$,reason:J,ts:f.timestamp??Date.now()}});return}default:return}}async handleCapabilityRequest(f){let $=f.sessionId?.trim();if(!$)return;let J=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let W=typeof f.payload?.requestId==="string"?f.payload.requestId:"",H=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName:"";if(!W)return;let Q=this.sessionClientContributionHandlers.get($)?.get(H);if(!Q){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${H} in session ${$}.`},$).catch(()=>{});return}let Z=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let X=(A)=>{this.client.command("capability.progress",{requestId:W,payload:A},$)};try{let A=await Q({payload:Z,abortSignal:j.signal,progress:X});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:A},$)}catch(A){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:A instanceof Error?A.message:String(A)},$)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved(f){if(f.payload?.cancelled!==!0)return;let $=typeof f.payload.requestId==="string"?f.payload.requestId.trim():"";if(!$)return;let J=this.activeCapabilityAbortControllers.get($);if(!J)return;J.abort(Sy(f.payload.error))}async handleApprovalRequested(f){let $=f.sessionId?.trim();if(!$)return;let J=this.sessionCapabilities.get($)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let W=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"",H=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:"",Q=typeof f.payload?.toolName==="string"?f.payload.toolName:"";if(!W||!H||!Q)return;let Z=f.payload?.policy&&typeof f.payload.policy==="object"&&!Array.isArray(f.payload.policy)?f.payload.policy:{autoApprove:!1},j=ky(f.payload?.inputJson);this.pendingApprovalToolCallIds.add(H),this.emitToolCallContentStart({sessionId:$,toolCallId:H,toolName:Q,toolInput:j});let X=await Promise.resolve(J({sessionId:$,agentId:typeof f.payload?.agentId==="string"?f.payload.agentId:"",conversationId:typeof f.payload?.conversationId==="string"?f.payload.conversationId:$,iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0,toolCallId:H,toolName:Q,input:j,policy:Z})).catch((A)=>({approved:!1,reason:A instanceof Error?A.message:`Tool approval request failed: ${String(A)}`}));await this.client.command("approval.respond",{approvalId:W,approved:X.approved,reason:X.reason},$).catch(()=>{})}}class E8 extends P${constructor(f){super({url:l$(f.endpoint),authToken:f.authToken,clientType:f.clientType??"core-remote-runtime",displayName:f.displayName??"core remote runtime",capabilities:f.capabilities},{workspaceRoot:f.workspaceRoot,cwd:f.cwd})}}import{existsSync as uy,mkdirSync as cy}from"node:fs";import{join as dy}from"node:path";import{asBool as l1,asOptionalString as nf,asString as j0,ensureSessionSchema as ry,loadSqliteDb as ly,nowIso as S8,toBoolInt as p1}from"@cline/shared/db";import{resolveDbDataDir as py}from"@cline/shared/storage";class E0{sessionsDirPath;db;constructor(f={}){this.sessionsDirPath=f.sessionsDir??py()}init(){this.getRawDb()}ensureSessionsDir(){if(!uy(this.sessionsDirPath))cy(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return dy(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let f=ly(this.sessionDbPath());return ry(f,{includeLegacyMigrations:!0}),this.db=f,f}close(){this.db?.close?.(),this.db=void 0}run(f,$=[]){return this.getRawDb().prepare(f).run(...$)}queryOne(f,$=[]){return this.getRawDb().prepare(f).get(...$)??void 0}queryAll(f,$=[]){return this.getRawDb().prepare(f).all(...$)}create(f){let $=S8();this.run(`INSERT OR REPLACE INTO sessions (
|
|
433
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,f,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,f){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(f,X0(),$)}attachReportPathToRun($,f){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(f,X0(),$)}}class rf{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new pf({dbPath:$.dbPath});let f=$.specs;this.reconciler=new B5({store:this.store,specs:f}),this.materializer=new vf({store:this.store}),this.eventIngress=new eJ({store:this.store,logger:$.logger}),this.runner=new cf({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:f,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new K5({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(J)=>{let Q=$.logger;if(Q)if(Q.error)Q.error("cron.watcher.failed",{error:J});else Q.log("cron.watcher.failed",{error:J})}})}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($)}}import{readdir as VD,readFile as SW}from"node:fs/promises";import{join as CW}from"node:path";import{formatDisplayUserInput as AD,normalizeUserInput as BD}from"@cline/shared";import{resolveSessionDataDir as hW}from"@cline/shared/storage";import{mkdirSync as fD,writeFileSync as JD}from"node:fs";import{dirname as QD}from"node:path";import{normalizeUserInput as ZD}from"@cline/shared";import{nanoid as WD}from"nanoid";import{nanoid as eF}from"nanoid";function nf($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function p8($,f){let J=nf($),Q=nf(f),Z=`${J}__${Q}`;return Z.length>180?Z.slice(0,180):Z}function D5($,f){let J=nf($),Q=nf(f);return`${J}__teamtask__${Q}__${eF(6)}`}function af($){let J=$.indexOf("__teamtask__");if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+12),W=Z.lastIndexOf("__");if(W<=0)return null;let j=Z.slice(0,W),X=Z.slice(W+2);if(!Q||!j||!X)return null;return{rootSessionId:Q,agentId:j,teamTaskId:X}}function r8($){if(af($))return null;let f="__",J=$.indexOf(f);if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+f.length);if(!Q||!Z)return null;return{rootSessionId:Q,agentId:Z}}function R5($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let f=String($.reason??"").toLowerCase();if(f.includes("cancel")||f.includes("abort")||f.includes("interrupt"))return"cancelled";if(f.includes("fail")||f.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as i}from"zod";var $D=i.enum(v6),O0=i.object({version:i.literal(1),session_id:i.string().min(1),source:i.string().min(1),pid:i.number().int(),started_at:i.string().min(1),ended_at:i.string().min(1).optional(),exit_code:i.number().int().nullable().optional(),status:$D,interactive:i.boolean(),provider:i.string().min(1),model:i.string().min(1),cwd:i.string().min(1),workspace_root:i.string().min(1),team_name:i.string().min(1).optional(),enable_tools:i.boolean(),enable_spawn:i.boolean(),enable_teams:i.boolean(),prompt:i.string().optional(),metadata:i.record(i.string(),i.unknown()).optional(),messages_path:i.string().min(1).optional()});function OW($){if(!$)return!1;return Object.values($).some((f)=>typeof f==="function")}function L5($,f){let J=[...$??[],...f??[]];if(J.length===0)return;let Q=[],Z=new Set;for(let W of J){if(Z.has(W.name))continue;Z.add(W.name),Q.push(W)}return Q}function zW($){return JSON.stringify($,(f,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function W$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function U5($,f){let J={...$};J.id=W$(J.id)??WD();let Q=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,Z={id:W$(Q?.id)??W$(J.modelId)??W$(f?.id),provider:W$(Q?.provider)??W$(J.providerId)??W$(f?.provider),family:W$(Q?.family)??W$(f?.family)};if(delete J.providerId,delete J.modelId,Z.id&&Z.provider)J.modelInfo={id:Z.id,provider:Z.provider,...Z.family?{family:Z.family}:{}};else delete J.modelInfo;return J}function i8($){return $.map((f)=>U5(f))}function n8($,f,J=[]){let Q=$.map((X,H)=>{let Y=J[H],A=Y?.role===X.role&&JSON.stringify(Y.content)===JSON.stringify(X.content)?{...Y,...X}:{...X};return U5(A)}),Z=J.length,W=[];for(let X=Z;X<Q.length;X+=1)if(Q[X]?.role==="assistant")W.push(X);if(W.length===0){let X=[...Q].reverse().findIndex((H)=>H.role==="assistant");if(X===-1)return Q;W.push(Q.length-1-X)}let j=W[W.length-1];for(let X of W){let H=Q[X],Y=H.metrics;if(!Y&&X===j){let V=f.usage;Y={inputTokens:V.inputTokens,outputTokens:V.outputTokens,cacheReadTokens:V.cacheReadTokens??0,cacheWriteTokens:V.cacheWriteTokens??0,cost:V.totalCost}}Q[X]={...U5(H,{id:f.model.id,provider:f.model.provider,family:f.model.info?.family}),...Y?{metrics:Y}:{},ts:H.ts??f.endedAt.getTime()}}return Q}function tf($){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 jD=120;function V1($){let f=$?.trim();return f?f.slice(0,jD):void 0}function O5($){let f=ZD($??"").trim();if(!f)return;return V1(f.split(`
|
|
434
|
+
`)[0]?.trim())}function w$($){if(!$)return;let f={...$},J=V1(typeof f.title==="string"?f.title:void 0);if(J)f.title=J;else delete f.title;return Object.keys(f).length>0?f:void 0}function sf($){let f=w$($.metadata)??{},J=$.title!==void 0?V1($.title):O5($.prompt);if(J)f.title=J;return Object.keys(f).length>0?f:void 0}function z5($){let f=af($);if(f)return{agent:"teammate",sessionId:f.rootSessionId,taskType:"team"};let J=r8($);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function _5($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:i8($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function _W($,f,J){fD(QD($),{recursive:!0}),JD($,`${JSON.stringify(_5({updatedAt:f,context:J,messages:[]}),null,2)}
|
|
435
|
+
`,"utf8")}function yW($,f){return O0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:f?.endedAt??$.endedAt??void 0,exit_code:f?.exitCode??$.exitCode??void 0,status:f?.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:f?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function TW($,f,J){let Q=0;while(!0){let Z=await $();if(Z===void 0)return{updated:!1};let W=await f(Z);if(typeof W==="object"&&W!==null&&"updated"in W&&W.updated===!1){if(Q+=1,Q>=J)return W;continue}return W}}import{existsSync as XD}from"node:fs";import{readFile as HD}from"node:fs/promises";import{formatDisplayUserInput as NW}from"@cline/shared";class of{listeners=new Set;subscribe($,f){let J={listener:$,sessionId:f?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit($){let f=$.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==f)continue;J.listener($)}}get size(){return this.listeners.size}}async function S$($){let f=$?.trim();if(!f||!XD(f))return[];try{let J=(await HD(f,"utf8")).trim();if(!J)return[];let Q=JSON.parse(J);if(Array.isArray(Q))return MW(Q);if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let Z=Q.messages;if(Array.isArray(Z))return MW(Z)}return[]}catch{return[]}}function YD($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:NW($.content)};return{...$,content:$.content.map((f)=>{if(f.type!=="text"||typeof f.text!=="string")return f;return{...f,text:NW(f.text)}})}}function MW($){return $.map(YD)}function y5($){return $?{...$}:void 0}async function qW($,f){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await f.queueSpawnRequest($);let Q=await f.upsertSubagentSessionFromHook($);if(!Q)return;await f.appendSubagentHookAudit(Q,$),await f.applySubagentStatus(Q,$)}function ef($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function h0($){let f=ef($);if(!f)return;return f.toLowerCase()==="unknown"?void 0:f}function a8($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function KD($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function N5($){let f=$??200;return Number.isFinite(f)?Math.max(0,Math.floor(f)):200}function GD($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function PD($){return $.isSubagent!==!0&&!ef($.parentSessionId)}function FD($){let f=$.match(/\d{13,}/g);if(!f||f.length===0)return 0;let J=0;for(let Q of f){let Z=Number.parseInt(Q,10);if(Number.isFinite(Z)&&Z>J)J=Z}return J}function M5($){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 DD($){let f=N5($);if(f===0)return[];let J=hW(),Z=(await VD(J,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:FD(j.name.trim())})).sort((j,X)=>X.recency-j.recency||X.entry.name.localeCompare(j.entry.name));return(await Promise.all(Z.map(async({entry:j})=>{let X=j.name.trim();if(!X)return;let H=CW(J,X,`${X}.json`),Y=await SW(H,"utf8").catch(()=>{return});if(!Y)return;let V;try{V=JSON.parse(Y)}catch{return}let A=O0.safeParse(V);if(!A.success)return;return M5(A.data)}))).filter((j)=>Boolean(j)).sort((j,X)=>X.startedAt.localeCompare(j.startedAt)).slice(0,f)}async function RD($,f,J){let Q=N5(f);if(Q===0)return await $.listSessions(0),[];let Z=J.includeSubagents?Q:GD(Q),W=await $.listSessions(Z);return(J.includeSubagents?W:W.filter(PD)).slice(0,Q)}function UD($){if(typeof $==="string")return $.trim();let f=[];for(let J of $){if(!J||typeof J!=="object")continue;let Q=J;if(Q.type!=="text")continue;let Z=Q.text?.trim();if(Z)f.push(Z)}return f.join(`
|
|
436
|
+
`).trim()}function wW($){return $.replace(/\s+/g," ").trim()}function LD($,f){if($.length<=f)return $;return`${$.slice(0,Math.max(0,f-3)).trimEnd()}...`}function OD($){for(let f of["user","assistant"])for(let J of $){if(J.role!==f)continue;let Q=wW(UD(J.content));if(!Q)continue;let Z=f==="user"?wW(AD(Q)):Q,W=BD(Z.split(`
|
|
437
|
+
`)[0]??Z);return LD(W,50)}return}function zD($){let f=0;for(let J of $)f+=a8(J.metrics?.cost)??0;return f}function _D($){let f,J;for(let Q=$.length-1;Q>=0;Q-=1){let Z=$[Q];if(!f)f=h0(Z.modelInfo?.provider);if(!J)J=h0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function yD($){return h0($?.provider)??h0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function TD($){return h0($?.model)??h0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function T5($,f){let J=KD($.metadata),Q=ef(f?.title)??ef(J?.title),Z=a8(f?.totalCost)??a8(J?.totalCost),W=J||Q!==void 0||Z!==void 0?{...J??{},...Q!==void 0?{title:Q}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:h0(f?.provider)??h0($.provider)??yD(J)??"",model:h0(f?.model)??h0($.model)??TD(J)??"",metadata:W}}async function ND($,f){return await Promise.all(f.map(async(J)=>{let Q=T5(J),Z=Boolean(ef(Q.metadata?.title)),W=Boolean(h0(Q.provider)),j=Boolean(h0(Q.model)),X=a8(Q.metadata?.totalCost),H=X!==void 0&&X>0;if(Z&&W&&j&&H)return Q;let Y=await $.readSessionMessages(J.sessionId);if(Y.length===0)return Q;let V=_D(Y),A=zD(Y);return T5(J,{title:Z?void 0:OD(Y),provider:W?void 0:V.provider,model:j?void 0:V.model,totalCost:H||A<=0?void 0:A})}))}async function q5($,f={}){let J=N5(f.limit),Q=f.includeSubagents===!0,Z=await RD($,J,{includeSubagents:Q}),W=f.includeManifestFallback===!0&&Z.length<J?await DD(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let H of[...Z,...W]){if(j.has(H.sessionId))continue;j.set(H.sessionId,H)}let X=W.length===0?Z:Array.from(j.values()).sort((H,Y)=>Y.startedAt.localeCompare(H.startedAt)).slice(0,J);if(f.hydrate===!1)return X.map((H)=>T5(H));return await ND($,X)}async function MD($){let f=$.trim();if(!f)return;let J=CW(hW(),f,`${f}.json`),Q=await SW(J,"utf8").catch(()=>{return});if(!Q)return;try{let Z=O0.safeParse(JSON.parse(Q));return Z.success?Z.data.messages_path:void 0}catch{return}}async function qD($,f={}){let J=new Map;return await q5({listSessions:async(Z)=>{let W=await $.listSessions(Z);J.clear();for(let j of W)J.set(j.sessionId,j);return W.map(tf)},readSessionMessages:async(Z)=>{let W=J.get(Z)?.messagesPath??await MD(Z);return await S$(W)}},f)}import{captureSdkError as eX}from"@cline/shared";import{createSessionId as TR,resolveHubCommandTimeoutMs as NR}from"@cline/shared";import{spawn as JR}from"node:child_process";import{closeSync as QR,mkdirSync as ZR,openSync as WR}from"node:fs";import{basename as jR,dirname as XR,join as HR}from"node:path";import{fileURLToPath as YR}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as VR,isHubDaemonProcess as pW,withResolvedClineBuildEnv as AR}from"@cline/shared";import{createHash as wD,randomBytes as SD}from"node:crypto";import{existsSync as CD}from"node:fs";import{chmod as hD,mkdir as w5,readFile as gW,rm as S5,writeFile as mW}from"node:fs/promises";import{dirname as vW,join as C5}from"node:path";import{resolveClineDataDir as h5,resolveClineDir as ph}from"@cline/shared/storage";var bW="0.0.40";var kW={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:bW,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"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^1.21.7","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"^3.32.3",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var ED="CLINE_HUB_DISCOVERY_PATH",bD="CLINE_HUB_BUILD_ID",IW=30000,kD=15000,ID=100;function xD($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function gD($){return wD("sha256").update($).digest("hex").slice(0,12)}function mD($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function cW(){return SD(32).toString("hex")}function vD($){return new Promise((f)=>setTimeout(f,$))}function cD($){return`${$}.lock`}async function uD($){try{let f=JSON.parse(await gW(C5($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function xW($){await S5($,{recursive:!0,force:!0}).catch(()=>{return})}function i1(){return process.env[bD]?.trim()||String(kW.version)}function A1($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${gD($)}`,J=process.env[ED]?.trim()||C5(h5(),"locks","hub","owners",`${xD(f)}.json`);return{ownerId:f,discoveryPath:J}}function ih($=`hub-${Date.now().toString(36)}`){return A1($)}async function B0($){try{let f=JSON.parse(await gW($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function uW($,f){await w5(vW($),{recursive:!0}),await S5($,{force:!0}).catch(()=>{return}),await mW($,`${JSON.stringify(f,null,2)}
|
|
438
|
+
`,{encoding:"utf8",mode:384}),await hD($,384)}async function n0($){await S5($,{force:!0}).catch(()=>{return})}async function dW($,f){let J=cD($);await w5(vW(J),{recursive:!0});let Q=Date.now()+kD;while(!0)try{await w5(J,{recursive:!1}),await mW(C5(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
439
|
+
`,"utf8");try{return await f()}finally{await xW(J)}}catch(Z){if((Z instanceof Error&&"code"in Z?String(Z.code):"")!=="EEXIST")throw Z;let j=await uD(J),X=j?Date.now()-Date.parse(j.acquiredAt):IW+1;if(!j||!mD(j.pid)||X>IW){await xW(J);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${J}`);await vD(ID)}}async function F0($){try{let f=await fetch(dD($));if(!f.ok)return;return await f.json()}catch{return}}function j$($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function dD($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function nh($){return CD($)}import{CLINE_HUB_DEV_PORT as lD,CLINE_HUB_PORT as pD,resolveClineBuildEnv as rD}from"@cline/shared";var iD="CLINE_HUB_HOST",nD="CLINE_HUB_PORT",aD="CLINE_HUB_PATHNAME",tD="127.0.0.1",sD=pD,oD="/hub";function lW($){return rD($)==="development"?lD:sD}function eD($={}){return($.env??process.env)[iD]?.trim()||tD}function t8($={}){let J=($.env??process.env)[nD]?.trim();if(!J)return lW($);let Q=Number.parseInt(J,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return lW($);return Q}function $R($={}){return($.env??process.env)[aD]?.trim()||oD}function C$($={},f={}){return{host:$.host??eD(f),port:$.port??t8(f),pathname:$.pathname??$R(f)}}var fR="shared:cline";function $E($){let f=j1($.trim());return A1(`workspace:${f||$.trim()}`)}function D0($=fR){return A1($)}var BR=8000,KR=200,GR=3000,PR=100,FR=[100,250,500,1000,2000],DR="--cline-hub-daemon";function RR($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function UR(){try{let $=HR(h5(),"logs","hub-daemon.log");return ZR(XR($),{recursive:!0}),{fd:WR($,"a"),logPath:$}}catch{return}}function $2($){let f=$.buildId?.trim();return!!f&&f===i1()}async function LR($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await F0($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,PR))}return!1}async function f2($,f){if($2($))return;if(await E5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await LR($.url,GR),await n0(f).catch(()=>{return})}function OR(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return YR(new URL(`./entry.${$}`,import.meta.url))}function zR($,f){let J=OR(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let Z=jR(Q).toLowerCase().includes("bun"),W=J.startsWith("/$bunfs/"),j=Z&&J.toLowerCase().endsWith(".ts"),X=W?[DR]:[...j?["--conditions=development"]:[],J];return{launcher:Q,args:[...X,"--cwd",$,...RR(f)],cwd:$,env:{...AR(process.env),CLINE_NO_INTERACTIVE:"1",[VR]:"1"}}}function _R($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function yR($,f={}){if(pW())return;let J=zR($,f),Q=UR();try{JR(J.launcher,J.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(Q)QR(Q.fd)}}async function s8($,f={}){for(let J=0;;J++)try{yR($,f);return}catch(Q){let Z=FR[J];if(!_R(Q)||Z===void 0)throw Q;await new Promise((W)=>setTimeout(W,Z))}}function rW($,f={}){if(pW())return;let J=D0(),Q=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=C$(f),W=j$(Z.host,Z.port,Z.pathname);B0(J.discoveryPath).then(async(j)=>{if(j?.url){let V=await F0(j.url);if(V?.url&&$2(V)&&await h$(V.url,{authToken:j.authToken}))return;if(V?.url)await f2({...V,authToken:j.authToken},J.discoveryPath);else await n0(J.discoveryPath).catch(()=>{return})}let X=await F0(W);if(X?.url)await f2(X,J.discoveryPath);let Y=!Q&&Z.port!==0?{...Z,port:0}:Z;await s8($,Y)}).catch(()=>{})}async function AE($,f={}){let J=D0(),Q=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=C$(f),j=j$(W.host,W.port,W.pathname),X=(K)=>{if(!Q)n1(K.url,K.authToken);return K},H=await B0(J.discoveryPath);if(H?.url){let K=await F0(H.url);if(K?.url&&$2(K)&&await h$(K.url,{authToken:H.authToken}))return X({url:K.url,authToken:H.authToken});if(K?.url)await f2({...K,authToken:H.authToken},J.discoveryPath);else await n0(J.discoveryPath).catch(()=>{return})}let Y=await F0(j);if(Y?.url)await f2(Y,J.discoveryPath);let A=!Z&&W.port!==0?{...W,port:0}:W;await s8($,A);let B=Date.now()+BR;while(Date.now()<B){let K=await B0(J.discoveryPath);if(K?.url){let R=await F0(K.url);if(R?.url&&$2(R)&&await h$(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await F0(j);if(G?.url&&!$2(G))await f2(G,J.discoveryPath);await new Promise((R)=>setTimeout(R,KR))}throw Error("Timed out waiting for detached hub startup.")}function MR(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function sW($){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((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return sW($.data);return String($)}function qR($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function iW($){let f=$,J=qR(f.reason);return new E0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:b5,{closeCode:f.code,closeReason:J||void 0})}function wR($,f){if($ instanceof E0)return $;if($ instanceof Error)return new E0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new E0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new E0("hub_connect_failed",J);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new E0("hub_connect_failed",Q?`Failed to connect to hub at ${f.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var SR=8000,CR=200,nW="*",aW=8000,hR="cline-hub-auth.",oW=new Map,eW=new Set,ER=3000,bR=3000,kR=100,b5="Hub connection closed",IR=250,xR=5000,tW=0.5;class E0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function gR($){return $ instanceof E0}class o8 extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function $j($,f){return $ instanceof o8&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function fj($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=x5($.toString());return J?oW.get(J):void 0}function mR($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function x5($){if(!mR($))return;let f=new URL(a1($));return f.search="",f.hash="",f.toString()}function k5($){let f=x5($);return!!f&&eW.has(f)}function n1($,f){let J=x5($);if(J){if(eW.add(J),f?.trim())oW.set(J,f)}return $}class X${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new E0("hub_connection_closed",b5);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),f=this.options.authToken?.trim()||fj($);$.hash="";let Q=new(MR())($.toString(),f?[`${hR}${f}`]:void 0);this.socket=Q;let Z=!1;this.connectPromise=new Promise((W,j)=>{let X=!1,H=setTimeout(()=>{if(X)return;X=!0,Z=!0,this.lastCloseError=new E0("hub_connect_timeout",`Timed out connecting to hub after ${aW}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}j(this.lastCloseError)},aW);Q.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(H),W()}),Q.addEventListener("error",(Y)=>{if(X)return;X=!0,clearTimeout(H),this.lastCloseError=wR(Y,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),Q.addEventListener("close",(Y)=>{if(X)return;if(X=!0,clearTimeout(H),!Z)this.lastCloseError=iW(Y),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),Q.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(sW(W)))}),Q.addEventListener("close",(W)=>{if(this.socket!==Q)return;if(!Z)this.lastCloseError=iW(W),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 W of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(W));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,Q={listener:$,sessionId:J};return this.listeners.add(Q),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,Q){let Z=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,Q)}catch(j){if(!W||Z>=1||!await this.recoverLocalHubTransport(j))throw j;Z+=1}}async commandOnce($,f,J,Q){await this.connect();let Z=TR("hubreq_"),W=NR($,Q?.timeoutMs),j=new Promise((H,Y)=>{let V=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Z))return;Y(new o8($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${Z}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(Z,{resolve:(A)=>{if(V)clearTimeout(V);H(A)},reject:(A)=>{if(V)clearTimeout(V);Y(A)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Z,clientId:this.clientId,sessionId:J,timeoutMs:W,payload:f}})}catch(H){throw this.pendingReplies.delete(Z),H}let X=await j;if(!X.ok)throw new o8($,X.error?.code,X.error?.message??`Hub command ${$} failed`);return X}async recoverLocalHubTransport($){if(!k5(this.currentUrl)||!gR($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await J2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,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(IR*2**this.reconnectAttempt,xR),f=Math.round($*(1-tW)+Math.random()*$*tW);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!k5(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await J2({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 E0("hub_connection_closed",b5),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.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 E0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(J)??0)+f;if(Q<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,Q),f>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??nW}subscriptionSessionIdFromKey($){return $===nW?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function a1($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function h$($,f){let J=new X$({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function I5($,f){let J=a1($),Q=await F0(J);if(!Q)return{status:"unreachable",url:J};let Z=i1(),W=Q.buildId?.trim();if(!W||W!==Z)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await h$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function vR($){let f=Date.now()+SR;while(Date.now()<f){let J=await B0($.discoveryPath);if(J?.url){let Q=await I5(J.url,{verifyConnection:!0,authToken:J.authToken});if(Q.status==="compatible")return n1(Q.url,J.authToken)}await new Promise((Q)=>setTimeout(Q,CR))}return}async function cR($){let f=Date.now()+bR;while(Date.now()<f){if(!(await F0($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,kR))}return!1}function uR($,f){try{return a1($)===a1(f)}catch{return!1}}function dR($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let Q=J;if(Q.status==="running"||Q.status==="idle")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function lR($,f,J){let Q=new X$({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Z=await Q.command("session.list",{limit:500},void 0,{timeoutMs:ER});return!dR(Z.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function g5($={}){if($.endpoint?.trim()){let Z=await I5($.endpoint);return Z.status==="compatible"?Z.url:void 0}let f=D0(),J=await B0(f.discoveryPath);if(!J?.url)return;let Q=await I5(J.url);if(Q.status==="compatible")return n1(Q.url,J.authToken);if(Q.status==="build_mismatch")await n0(f.discoveryPath).catch(()=>{return});return}async function J2($={}){let f=await g5($);if(f&&await h$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=D0();return await s8($.workspaceRoot??process.cwd()),await vR(J)}async function E5($,f){let J=new URL($),Q=f?.trim()||fj(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function pR(){let $=D0(),f=await B0($.discoveryPath);if(!f?.url)return!1;try{if(await E5(f.url,f.authToken))return!0}catch{}return!1}async function Jj($){if(!k5($.url))return;let f=D0(),J=await B0(f.discoveryPath);if(!J?.url||!uR(J.url,$.url))return;if(!await lR(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await pR())return;if(!await cR(J.url))return;return await n0(f.discoveryPath).catch(()=>{return}),await J2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{captureSdkError as aR,createSessionId as Qj,HUB_CHECKPOINT_CAPABILITY as tR,HUB_COMPACTION_CAPABILITY as sR,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as oR,HUB_HOOK_CAPABILITY_PREFIX as eR,HUB_MISTAKE_LIMIT_CAPABILITY as $U,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as fU,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as JU,isHubToolExecutorName as QU}from"@cline/shared";function rR($){return $?JSON.parse(JSON.stringify($)):void 0}function iR($){return $?JSON.parse(JSON.stringify($)):void 0}function nR($){let f=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(f?.history)?f.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let X=typeof j.ref==="string"?j.ref.trim():"",H=Number(j.createdAt),Y=Number(j.runCount);if(!X||!Number.isFinite(H)||!Number.isInteger(Y))return[];return[{ref:X,createdAt:H,runCount:Y,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),Z=Q.at(-1),W=$?.checkpointEnabled===!0?!0:void 0;if(!W&&Q.length===0)return;return{...W?{enabled:W}:{},...Z?{latest:Z}:{},history:Q}}function E$($){let{session:f}=$,J=rR(f.metadata);return{version:1,sessionId:f.sessionId,source:f.source,status:f.status,createdAt:f.startedAt,updatedAt:f.updatedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,interactive:f.interactive,workspace:{cwd:f.cwd,root:f.workspaceRoot},model:{providerId:f.provider,modelId:f.model},capabilities:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams},lineage:{...f.parentSessionId?{parentSessionId:f.parentSessionId}:{},...f.parentAgentId?{parentAgentId:f.parentAgentId}:{},...f.agentId?{agentId:f.agentId}:{},...f.conversationId?{conversationId:f.conversationId}:{},isSubagent:f.isSubagent},...f.teamName?{team:{name:f.teamName}}:{},...f.prompt?{prompt:f.prompt}:{},...J?{metadata:J}:{},...f.messagesPath?{artifacts:{messagesPath:f.messagesPath}}:{},...$.messages?{messages:iR($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=nR(J);return Q?{checkpoint:Q}:{}})()}}function m5($){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 t1($){if(!$)return;return JSON.parse(JSON.stringify($))}var ZU=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function Zj($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function Wj($){if(!$)return;let{userInstructionService:f,...J}=$;return JSON.parse(JSON.stringify(J))}function jj($){let f=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof f.agentId==="string"?f.agentId:"",conversationId:typeof f.conversationId==="string"?f.conversationId:"",iteration:typeof f.iteration==="number"?f.iteration:0,metadata:f.metadata&&typeof f.metadata==="object"&&!Array.isArray(f.metadata)?f.metadata:void 0}}function B1($,f,J){$.manifest.push(f),$.handlers.set(f.capabilityName,J)}function Xj($,f){let J={manifest:[],handlers:new Map};for(let Z of Object.keys(f.toolExecutors??{}).filter(QU)){let W=f.toolExecutors?.[Z];if(typeof W!=="function")continue;B1(J,{kind:"toolExecutor",executor:Z,capabilityName:`${fU}${Z}`},async({payload:j,abortSignal:X})=>{let H=Array.isArray(j.args)?[...j.args]:[],Y={...jj(j.context),signal:X};return{result:await W(...H,Y)}})}for(let Z of $?.extraTools??[])B1(J,{kind:"tool",name:Z.name,description:Z.description,inputSchema:t1(Z.inputSchema)??{},...Z.lifecycle?{lifecycle:t1(Z.lifecycle)}:{},capabilityName:`${oR}${Z.name}`},async({payload:W,abortSignal:j,progress:X})=>{let H={...jj(W.context),signal:j};return{result:await Z.execute(W.input,{...H,emitUpdate:(V)=>{X({update:V})}})}});let Q=$?.hooks;if(Q)for(let Z of ZU){let W=Q[Z];if(typeof W!=="function")continue;B1(J,{kind:"hook",name:Z,capabilityName:`${eR}${Z}`},async({payload:j})=>({control:await W(j.context)}))}if($?.compaction?.compact){let Z=$.compaction.compact;B1(J,{kind:"compaction",capabilityName:sR,config:Zj($.compaction)},async({payload:W})=>({result:await Z(W.context)}))}if($?.checkpoint?.createCheckpoint){let Z=$.checkpoint.createCheckpoint;B1(J,{kind:"checkpoint",capabilityName:tR,config:Zj($.checkpoint)},async({payload:W})=>({result:await Z(W.context)}))}if($?.onConsecutiveMistakeLimitReached){let Z=$.onConsecutiveMistakeLimitReached;B1(J,{kind:"mistakeLimit",capabilityName:$U},async({payload:W})=>({result:await Z(W.context)}))}if($?.userInstructionService){let Z=$.userInstructionService;B1(J,{kind:"userInstructionService",capabilityName:JU},async()=>{return await Z.start().catch(()=>{}),{snapshot:{records:{skill:Z.listRecords("skill"),rule:Z.listRecords("rule"),workflow:Z.listRecords("workflow")},runtimeCommands:Z.listRuntimeCommands()}}})}return J}function WU($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message;if($&&typeof $==="object"&&"message"in $){let f=$.message;if(typeof f==="string"&&f.trim())return f.trim()}return"Capability request was cancelled."}function jU($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function XU($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function HU($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=typeof f.inputTokens==="number"?f.inputTokens:void 0,Q=typeof f.outputTokens==="number"?f.outputTokens:void 0;if(J===void 0||Q===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function Hj($){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 v5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function b$($,f){return v5($?.[f])??0}function YU($){let f=$?.delta&&typeof $.delta==="object"?$.delta:void 0,J=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,Z=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:b$(f,"inputTokens"),outputTokens:b$(f,"outputTokens"),cacheReadTokens:b$(f,"cacheReadTokens"),cacheWriteTokens:b$(f,"cacheWriteTokens"),cost:v5(f?.totalCost),totalInputTokens:b$(J,"inputTokens"),totalOutputTokens:b$(J,"outputTokens"),totalCacheReadTokens:b$(J,"cacheReadTokens"),totalCacheWriteTokens:b$(J,"cacheWriteTokens"),totalCost:v5(J?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:Z}}function VU($){let f=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,J=$?.reason??f?.finishReason,Q=XU(J)?J:J==="failed"?"error":"completed",Z=HU($?.usage??f?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof f?.text==="string"?f.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof f?.iterations==="number"?f.iterations:0,usage:Z}}function e8($,f){return $.error?.message??`hub command failed: ${f}`}function Q2($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function Aj($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof f?.parentSessionId==="string"?f.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof f?.agentId==="string"?f.agentId:void 0),parentAgentId:typeof f?.parentAgentId==="string"?f.parentAgentId:void 0,conversationId:typeof f?.conversationId==="string"?f.conversationId:void 0,isSubagent:typeof f?.isSubagent==="boolean"?f.isSubagent:!1,source:typeof f?.source==="string"?f.source:G0.CORE,pid:typeof f?.pid==="number"?f.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:Q2($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:Q2($.status)==="completed"?0:Q2($.status)==="failed"?1:void 0,status:Q2($.status),interactive:f?.interactive===!0,provider:typeof f?.provider==="string"?f.provider:"hub",model:typeof f?.model==="string"?f.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof f?.teamName==="string"?f.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??f?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??f?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??f?.enableTeams===!0,prompt:typeof f?.prompt==="string"?f.prompt:void 0,metadata:f,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof f?.messagesPath==="string"?f.messagesPath:void 0,hookPath:typeof f?.hookPath==="string"?f.hookPath:void 0}}function K1($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$;return f.version===1&&typeof f.sessionId==="string"?JSON.parse(JSON.stringify(f)):void 0}function AU($){let f=K1($?.snapshot);if(f)return m5(f);let J=$?.session;return J?Aj(J):void 0}function Yj($,f,J){let Q=J?.workspaceRoot?.trim()||f.config.workspaceRoot||f.config.cwd;return O0.parse({version:1,session_id:$,source:f.source??G0.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:Q2(J?.status),interactive:f.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:J?.cwd?.trim()||f.config.cwd,workspace_root:Q,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,metadata:f.sessionMetadata&&Object.keys(f.sessionMetadata).length>0?f.sessionMetadata:void 0})}function Vj($,f){return O0.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??f.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class G1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new of;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,f){this.clientContext=f,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd},this.defaultCapabilities=P0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient($.url)}createClient($){return new X$({...this.clientOptions,url:$})}async replaceClient($){let f=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(f.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!$j($,"session.create"))return!1;let f=await Jj({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!f)return!1;return await this.replaceClient(f),!0}registerPlannedSession($,f,J){if(this.sessionCapabilities.set($,f),J.size>0)this.sessionClientContributionHandlers.set($,J);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let f=this.resolveCapabilities($),J=Xj($.localRuntime,f),Q=$.config.sessionId?.trim()||Qj(),Z=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:t1({...$.config,sessionId:Q}),metadata:{...$.sessionMetadata??{},source:$.source??G0.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:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:t1($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Q,f,J.handlers);let W;try{W=await Z()}catch(Y){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(Y)){this.registerPlannedSession(Q,f,J.handlers);try{W=await Z()}catch(V){throw this.cleanupPlannedSession(Q),V}}else throw Y}let j=K1(W.payload?.snapshot),X=W.payload?.session,H=(j?.sessionId??X?.sessionId)?.trim();if(!H)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(H!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(H,f,J.handlers);return{sessionId:H,manifest:j?Vj(j,$):Yj(H,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,Z=Q?this.resolveCapabilities(Q):void 0,W=Q?Xj(Q.localRuntime,Z??{}):{manifest:[],handlers:new Map},j=Q?Q.config.sessionId?.trim()||Qj():void 0;if(j&&Z)this.sessionCapabilities.set(j,Z);if(j&&W.handlers.size>0)this.sessionClientContributionHandlers.set(j,W.handlers),this.ensureSessionSubscription(j);let X;try{X=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:t1({...Q.config,sessionId:j}),metadata:{...Q.sessionMetadata??{},source:Q.source??G0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...W.manifest.length>0?{clientContributions:W.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:t1(Q.toolPolicies)}:{}},f)}catch(K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(K)}let H=K1(X.payload?.snapshot),Y=X.payload?.session,V=(H?.sessionId??Y?.sessionId)?.trim();if(J&&!V){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(V&&j&&V!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(V&&Z)this.sessionCapabilities.set(V,Z);if(V&&W.handlers.size>0)this.sessionClientContributionHandlers.set(V,W.handlers);if(V)this.ensureSessionSubscription(V);let A=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,B=X.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:V,startResult:V?{sessionId:V,manifest:H?Vj(H,Q??{}):Yj(V,Q??{},Y),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:A,checkpoint:B}}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 f=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,updated:f.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,removed:f.payload?.removed===!0}}async getAccumulatedUsage($){let f=await this.client.command("session.get",{includeSnapshot:!0},$),J=K1(f.payload?.snapshot);if(J){let j=J.usage?{...J.usage}:void 0,X=J.aggregateUsage?{...J.aggregateUsage}:void 0;return j||X?{usage:j,aggregateUsage:X}:void 0}let Q=f.payload?.session,Z=Hj(Q?.usage),W=Hj(Q?.aggregateUsage);return Z||W?{usage:Z,aggregateUsage:W}:void 0}async abort($,f){await this.client.command("run.abort",{sessionId:$,reason:typeof f==="string"?f:void 0},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,f]of this.sessionSubscriptions){f();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 f=await this.client.command("session.get",void 0,$);return AU(f.payload)}async listSessions($=100){let f=await this.client.command("session.list",{limit:$}),J=Array.isArray(f.payload?.snapshots)?f.payload.snapshots.flatMap((Z)=>{let W=K1(Z);return W?[m5(W)]:[]}):[];if(J.length>0)return J;return(f.payload?.sessions??[]).map(Aj)}async listSettings($){let f=await this.client.command("settings.list",Wj($));if(!f.ok)throw Error(e8(f,"settings.list"));return f.payload?.snapshot}async toggleSetting($){let f=await this.client.command("settings.toggle",Wj($));if(!f.ok)throw Error(e8(f,"settings.toggle"));return{snapshot:f.payload?.snapshot,changedTypes:Array.isArray(f.payload?.changedTypes)?f.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,f){let J={...f.metadata??{}};if(typeof f.prompt==="string")J.prompt=f.prompt;if(typeof f.title==="string")J.title=f.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:J})).ok}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw aR(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(e8(J,"session.messages")),severity:J.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:f,errorCode:J.error?.code,runtimeAddress:this.runtimeAddress}}),Error(e8(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,f){return this.events.subscribe($,f)}ensureSessionSubscription($){let f=$.trim();if(!f||this.sessionSubscriptions.has(f))return;let J=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:f});this.sessionSubscriptions.set(f,typeof J==="function"?J:()=>{})}disposeSessionSubscription($){let f=$.trim();if(!f)return;this.sessionSubscriptions.get(f)?.(),this.sessionSubscriptions.delete(f),this.agentDoneEmittedForCurrentRunBySession.delete(f)}resolveCapabilities($){return P0(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:VU($.payload)}})}handleHubEvent($){let f=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($);return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($);return}if(!f)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(f);let J=K1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!J&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:f,payload:$.payload});return}case"usage.updated":{let J=YU($.payload);this.events.emit({type:"agent_event",payload:{sessionId:f,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:f,toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"tool",toolCallId:J,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 J=K1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:f,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=$.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:f,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";this.emitAgentDoneIfNeeded({sessionId:f,payload:{...$.payload,reason:J}}),this.events.emit({type:"ended",payload:{sessionId:f,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}async handleCapabilityRequest($){let f=$.sessionId?.trim();if(!f)return;let J=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",Z=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let W=this.sessionClientContributionHandlers.get(f)?.get(Z);if(!W){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${Z} in session ${f}.`},f).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Q,X);let H=(Y)=>{this.client.command("capability.progress",{requestId:Q,payload:Y},f)};try{let Y=await W({payload:j,abortSignal:X.signal,progress:H});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:Y},f)}catch(Y){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:Y instanceof Error?Y.message:String(Y)},f)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let f=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!f)return;let J=this.activeCapabilityAbortControllers.get(f);if(!J)return;J.abort(WU($.payload.error))}async handleApprovalRequested($){let f=$.sessionId?.trim();if(!f)return;let J=this.sessionCapabilities.get(f)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",W=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!Z||!W)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=jU($.payload?.inputJson);this.pendingApprovalToolCallIds.add(Z),this.emitToolCallContentStart({sessionId:f,toolCallId:Z,toolName:W,toolInput:X});let H=await Promise.resolve(J({sessionId:f,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:f,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:Z,toolName:W,input:X,policy:j})).catch((Y)=>({approved:!1,reason:Y instanceof Error?Y.message:`Tool approval request failed: ${String(Y)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:H.approved,reason:H.reason},f).catch(()=>{})}}class $4 extends G1{constructor($){super({url:a1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as BU,mkdirSync as KU}from"node:fs";import{join as GU}from"node:path";import{asBool as Z2,asOptionalString as a0,asString as H$,ensureSessionSchema as PU,loadSqliteDb as FU,nowIso as f4,toBoolInt as W2}from"@cline/shared/db";import{resolveDbDataDir as DU}from"@cline/shared/storage";class k${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??DU()}init(){this.getRawDb()}ensureSessionsDir(){if(!BU(this.sessionsDirPath))KU(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return GU(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=FU(this.sessionDbPath());return PU($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}create($){let f=f4();this.run(`INSERT OR REPLACE INTO sessions (
|
|
432
440
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
433
441
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
434
442
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
435
443
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
436
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[
|
|
444
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,W2($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,W2($.enableTools),W2($.enableSpawn),W2($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,W2($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,f])}update($){let f=[],J=[];if($.endedAt!==void 0)f.push("ended_at = ?"),J.push($.endedAt);if($.exitCode!==void 0)f.push("exit_code = ?"),J.push($.exitCode);if($.status!==void 0)f.push("status = ?"),J.push($.status);if($.prompt!==void 0)f.push("prompt = ?"),J.push($.prompt);if($.metadata!==void 0)f.push("metadata_json = ?"),J.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)f.push("parent_session_id = ?"),J.push($.parentSessionId);if($.parentAgentId!==void 0)f.push("parent_agent_id = ?"),J.push($.parentAgentId);if($.agentId!==void 0)f.push("agent_id = ?"),J.push($.agentId);if($.conversationId!==void 0)f.push("conversation_id = ?"),J.push($.conversationId);if(f.length===0)return;f.push("updated_at = ?"),J.push(f4()),J.push($.sessionId),this.run(`UPDATE sessions SET ${f.join(", ")} WHERE session_id = ?`,J)}updateStatus($,f,J){this.update({sessionId:$,status:f,endedAt:f==="running"?null:f4(),exitCode:f==="running"?null:J??(f==="failed"?1:0)})}get($){let f=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
437
445
|
provider, model, cwd, workspace_root, team_name,
|
|
438
446
|
enable_tools, enable_spawn, enable_teams,
|
|
439
447
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
440
448
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
441
|
-
FROM sessions WHERE session_id = ?`,[
|
|
442
|
-
`).filter(Boolean);await Promise.allSettled(
|
|
443
|
-
`,"utf8")}readSessionManifest(
|
|
444
|
-
`;if(
|
|
445
|
-
`,"utf8")}}import{appendFileSync as
|
|
446
|
-
`,"utf8")}}import{formatUserInputBlock as
|
|
449
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!f)return;return{sessionId:H$(f.session_id),source:H$(f.source),pid:Number(f.pid??0),startedAt:H$(f.started_at),endedAt:f.ended_at??null,exitCode:f.exit_code??null,status:H$(f.status),interactive:Z2(f.interactive),provider:H$(f.provider),model:H$(f.model),cwd:H$(f.cwd),workspaceRoot:H$(f.workspace_root),teamName:a0(f.team_name),enableTools:Z2(f.enable_tools),enableSpawn:Z2(f.enable_spawn),enableTeams:Z2(f.enable_teams),parentSessionId:a0(f.parent_session_id),parentAgentId:a0(f.parent_agent_id),agentId:a0(f.agent_id),conversationId:a0(f.conversation_id),isSubagent:Z2(f.is_subagent),prompt:a0(f.prompt),metadata:(()=>{let J=a0(f.metadata_json);if(!J)return;try{let Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return})(),hookPath:a0(f.hook_path),messagesPath:a0(f.messages_path),updatedAt:a0(f.updated_at)??f4()}}list($=200){let f=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),J=[];for(let Q of f){let Z=this.get(H$(Q.session_id));if(Z)J.push(Z)}return J}delete($,f=!1){let J=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(f)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return J>0}}J4();import{existsSync as f9,mkdirSync as WL,readFileSync as _j,renameSync as jL,writeFileSync as XL}from"node:fs";import{join as yj}from"node:path";import{resolveSessionDataDir as HL}from"@cline/shared/storage";import{dirname as QL}from"node:path";import{nanoid as ZL}from"nanoid";import{execFile as SU}from"node:child_process";import{promisify as CU}from"node:util";var hU=CU(SU);function c5($,f){$?.log(f,{severity:"warn"})}function EU($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!J.latest||!Array.isArray(J.history))return;let Q=J.latest,Z=J.history.filter((W)=>!!W&&typeof W==="object"&&typeof W.ref==="string"&&typeof W.createdAt==="number"&&typeof W.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:Z}}async function F1($,f){let J=await hU("git",["-C",$,...f],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function u5($,f){if(!$)return;let J=`refs/cline/checkpoints/${f}/`;try{let{stdout:Q}=await F1($,["for-each-ref","--format=%(refname)",J]),Z=Q.trim().split(`
|
|
450
|
+
`).filter(Boolean);await Promise.allSettled(Z.map((W)=>F1($,["update-ref","-d",W])))}catch{}}async function Bj($,f,J){if(!$||J.length===0)return;await Promise.allSettled(J.map((Q)=>F1($,["update-ref",`refs/cline/checkpoints/${f}/${Q.runCount}`,Q.ref])))}function bU($,f){let J=$.findIndex((Q)=>Q.runCount===f.runCount);if(J<0)return[...$,f];return $.map((Q,Z)=>Z===J?f:Q)}function Kj($){let f=$.initialRunCount??0,J,Q=async()=>{if(J!==void 0)return J;try{J=(await F1($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{J=!1}return J},Z=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:f});if(!await Q())return;let W=async(Y)=>{try{let A=(await F1($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!A)return;return{ref:A,createdAt:Date.now(),runCount:f,kind:"commit"}}catch(V){c5($.logger,`${Y}: ${V instanceof Error?V.message:String(V)}`);return}},j=`cline checkpoint session=${$.sessionId} run=${f}`,X="";try{X=(await F1($.cwd,["stash","create",j])).stdout.trim()}catch(Y){return c5($.logger,`Checkpoint snapshot failed: ${Y instanceof Error?Y.message:String(Y)}`),W("Checkpoint HEAD fallback failed")}if(!X)return W("Checkpoint HEAD fallback failed");let H=`refs/cline/checkpoints/${$.sessionId}/${f}`;try{await F1($.cwd,["update-ref",H,X])}catch(Y){c5($.logger,`Checkpoint store failed: ${Y instanceof Error?Y.message:String(Y)}`);return}return{ref:X,createdAt:Date.now(),runCount:f,kind:"stash"}};return{beforeRun:async({snapshot:W})=>{if(W.parentAgentId!=null)return;f+=1;return},beforeModel:async({snapshot:W})=>{if(W.parentAgentId!=null||W.iteration!==1||f<1)return;let j=await Z();if(!j)return;let X=await $.readSessionMetadata(),H=EU(X);if(H?.latest.ref===j.ref)return;let Y=bU(H?.history??[],j);await $.writeSessionMetadata({...X??{},checkpoint:{latest:j,history:Y}});return}}}import{existsSync as Z4,mkdirSync as kU,readdirSync as IU,rmdirSync as xU,rmSync as gU,unlinkSync as mU}from"node:fs";import{dirname as Gj,join as Q4}from"node:path";function n(){return new Date().toISOString()}function j2($){if(!$||!Z4($))return;try{mU($)}catch{}}function vU($){let f=af($);if(f)return{rootSessionId:f.rootSessionId,fileStem:`${f.agentId}__${f.teamTaskId}`};let J=r8($);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:$,fileStem:$}}class d5{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return Q4(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let f=this.sessionArtifactsDir($);if(!Z4(f))kU(f,{recursive:!0});return f}sessionMessagesPath($){return Q4(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,f=!1){let J=f?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return Q4(J,`${$}.json`)}removeSessionDirIfEmpty($){let f=this.sessionArtifactsDir($),J=this.ensureSessionsDir();while(f.startsWith(J)&&f!==J){if(!Z4(f)){f=Gj(f);continue}try{if(IU(f).length>0)break;xU(f)}catch{break}f=Gj(f)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!Z4($))return;try{gU($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,f,J){let{rootSessionId:Q,fileStem:Z}=vU($),W=this.sessionArtifactsDir(Q);return{messagesPath:Q4(W,`${Z}.messages.json`)}}}import{appendFileSync as cU,existsSync as uU,mkdirSync as Pj,readFileSync as dU,writeFileSync as Fj}from"node:fs";import{dirname as Dj,join as lU}from"node:path";import{ensureHookLogDir as pU}from"@cline/shared/storage";class l5{adapter;messagesArtifactUploader;logger;artifacts;constructor($,f,J){this.adapter=$;this.messagesArtifactUploader=f;this.logger=J;this.artifacts=new d5(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,f,J){_W(f,J,z5($))}writeSessionManifest($,f){Pj(Dj($),{recursive:!0}),Fj($,`${JSON.stringify(O0.parse(f),null,2)}
|
|
451
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let f=this.artifacts.sessionManifestPath($,!1);if(!uU(f))return{path:f};try{return{path:f,manifest:O0.parse(JSON.parse(dU(f,"utf8")))}}catch{return{path:f}}}async resolveArtifactPath($,f,J){let Z=(await this.adapter.getSession($))?.[f];return typeof Z==="string"&&Z.trim().length>0?Z:J($)}async persistSessionMessages($,f,J){let Q=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),Z=_5({updatedAt:n(),context:z5($),messages:f,systemPrompt:J}),W=`${JSON.stringify(Z,null,2)}
|
|
452
|
+
`;if(Pj(Dj(Q),{recursive:!0}),Fj(Q,W,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Q,contents:W,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}appendStaleSessionHookLog($,f,J,Q,Z){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??lU(pU(),"hooks.jsonl");cU(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:f,pid:J,source:Z})}
|
|
453
|
+
`,"utf8")}}import{appendFileSync as rU}from"node:fs";import{join as iU}from"node:path";import{resolveRootSessionId as Rj}from"@cline/shared";import{ensureHookLogDir as nU}from"@cline/shared/storage";import{z as p5}from"zod";var aU="subagent",tU=p5.looseObject({task:p5.string().optional(),systemPrompt:p5.string().optional()});class W4{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,f,J,Q){this.adapter=$;this.manifestStore=f;this.toPersistedMessages=J;this.heartbeatLogIntervalMs=Q}teamTaskQueueKey($,f){return`${$}::${f}`}activeTeamTaskSessionId($,f){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,f))?.at(-1)}buildSubsessionRow($,f){return{sessionId:f.sessionId,source:aU,pid:process.ppid,startedAt:f.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:f.parentSessionId,parentAgentId:f.parentAgentId,agentId:f.agentId,conversationId:f.conversationId??null,isSubagent:!0,prompt:f.prompt,metadata:sf({prompt:f.prompt}),hookPath:"",messagesPath:f.messagesPath,updatedAt:f.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let f=Rj($.sessionContext);if(!f)return;let J=tU.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:f,parentAgentId:$.agent_id,task:J.success?J.data.task:void 0,systemPrompt:J.success?J.data.systemPrompt:void 0})}async upsertSubagentSession($){let f=$.rootSessionId;if(!f)return;let J=await this.adapter.getSession(f);if(!J)return;let Q=p8(f,$.agentId),Z=await this.adapter.getSession(Q),W=n(),j=this.manifestStore.artifacts.subagentArtifactPaths(Q,$.agentId,this.activeTeamTaskSessionId(f,$.parentAgentId)),X=$.prompt??Z?.prompt??void 0;if(!X)X=await this.adapter.claimSpawnRequest(f,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!Z)return await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:Q,parentSessionId:f,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:X,startedAt:W,...j})),this.manifestStore.initializeMessagesFile(Q,j.messagesPath,W),Q;return await this.adapter.updateSession({sessionId:Q,setRunning:!0,parentSessionId:f,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Z.prompt??X??null,metadata:sf({metadata:Z.metadata??void 0,prompt:Z.prompt??X??null}),expectedStatusLock:Z.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let f=Rj($.sessionContext);if(!f)return;if($.hookName==="session_shutdown"){let J=p8(f,$.agent_id);return await this.adapter.getSession(J)?J:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:f})}async applySubagentStatus($,f){await this.applySubagentStatusBySessionId($,R5(f))}async applySubagentStatusBySessionId($,f){let J=await this.adapter.getSession($);if(!J)return;let Q=f==="running"?null:n(),Z=f==="running"?null:f==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:f,endedAt:Q,exitCode:Z,expectedStatusLock:J.statusLock})}async applyStatusToRunningChildSessions($,f){if(!$)return;let J=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Q of J)await this.applySubagentStatusBySessionId(Q.sessionId,f)}async onTeamTaskStart($,f,J){let Q=await this.adapter.getSession($);if(!Q)return;let Z=D5($,f),W=n(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(Z,f);await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:Z,parentSessionId:$,parentAgentId:"lead",agentId:f,prompt:J||`Team task for ${f}`,startedAt:W,messagesPath:j})),this.manifestStore.initializeMessagesFile(Z,j,W);let X=this.teamTaskQueueKey($,f),H=this.teamTaskSessionsByAgent.get(X)??[];H.push(Z),this.teamTaskSessionsByAgent.set(X,H)}async onTeamTaskEnd($,f,J,Q,Z,W){let j=this.teamTaskQueueKey($,f),X=this.teamTaskSessionsByAgent.get(j);if(!X||X.length===0)return;let H=X.shift();if(X.length===0)this.teamTaskSessionsByAgent.delete(j);if(!H)return;let Y=Z?.messages??W,V=this.toPersistedMessages(Y,Z,W);if(V)await this.manifestStore.persistSessionMessages(H,V);await this.applySubagentStatusBySessionId(H,J),this.teamTaskLastHeartbeatBySession.delete(H),this.teamTaskLastProgressLineBySession.delete(H)}async onTeamTaskProgress($,f,J,Q){let Z=this.teamTaskQueueKey($,f),W=this.teamTaskSessionsByAgent.get(Z)?.[0];if(!W)return;let j=J.trim();if(!j)return;let X=Q?.kind??"progress";if(X==="heartbeat"){let Y=Date.now(),V=this.teamTaskLastHeartbeatBySession.get(W)??0;if(Y-V<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(W,Y)}let H=X==="heartbeat"?"[progress] heartbeat":X==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(W)===H)return;this.teamTaskLastProgressLineBySession.set(W,H)}async handleSubAgentStart($,f){let J=await this.upsertSubagentSession({agentId:f.subAgentId,parentAgentId:f.parentAgentId,conversationId:f.conversationId,prompt:f.input.task,rootSessionId:$});if(!J)return;await this.applySubagentStatusBySessionId(J,"running")}async handleSubAgentEnd($,f){let J=await this.upsertSubagentSession({agentId:f.subAgentId,parentAgentId:f.parentAgentId,conversationId:f.conversationId,prompt:f.input.task,rootSessionId:$});if(!J)return;if(f.error){await this.applySubagentStatusBySessionId(J,"failed");return}let Q=this.toPersistedMessages(f.agentResult?.messages,f.agentResult);if(Q)await this.manifestStore.persistSessionMessages(J,Q);let Z=f.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(J,Z==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let J=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??iU(nU(),"hooks.jsonl");rU(J,`${JSON.stringify({ts:n(),...$})}
|
|
454
|
+
`,"utf8")}}import{formatUserInputBlock as JL}from"@cline/shared";function t0(){return new Date().toISOString()}function Uj($,f){if(f<=0)return 0;return Math.round($/f*100)}function sU($,f){let J=new Set;for(let Z of f)if(Z.status==="reviewed")J.add(`${Z.outcomeId}:${Z.section}`);let Q=new Set;for(let Z of $){if(Z.status==="finalized")continue;for(let W of Z.requiredSections)if(!J.has(`${Z.id}:${W}`))Q.add(`${Z.id}:${W}`)}return[...Q].sort((Z,W)=>Z.localeCompare(W))}function j4($,f){let J={idle:0,running:0,stopped:0},Q={pending:0,in_progress:0,blocked:0,completed:0},Z={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},W={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},X=0,H=0;for(let F of f.members)if(J[F.status]+=1,F.role==="lead")X+=1;else H+=1;let Y=[],V=[],A=f.tasks.filter((F)=>F.status==="completed").length,B=new Map(f.tasks.map((F)=>[F.id,F]));for(let F of f.tasks){if(Q[F.status]+=1,F.status==="blocked"){Y.push(F.id);continue}if(F.status!=="pending")continue;if(F.dependsOn.every((D)=>{return B.get(D)?.status==="completed"}))V.push(F.id)}let K=[],G,R=0;for(let F of f.runs){if(Z[F.status]+=1,F.status==="queued"||F.status==="running")K.push(F.id);let P=F.startedAt.getTime();if(P>=R)R=P,G=F.id}for(let F of f.outcomes)W[F.status]+=1;for(let F of f.outcomeFragments)j[F.status]+=1;return{teamName:$,updatedAt:t0(),members:{total:f.members.length,byStatus:J,leadCount:X,teammateCount:H},tasks:{total:f.tasks.length,byStatus:Q,blockedTaskIds:Y,readyTaskIds:V,completionPct:Uj(A,f.tasks.length)},runs:{total:f.runs.length,byStatus:Z,activeRunIds:K,latestRunId:G},outcomes:{total:f.outcomes.length,byStatus:W,finalizedPct:Uj(W.finalized,f.outcomes.length),missingRequiredSections:sU(f.outcomes,f.outcomeFragments)},fragments:{total:f.outcomeFragments.length,byStatus:j}}}function X4($){let{event:f}=$;switch(f.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:t0(),taskId:f.task.id,agentId:f.task.assignee??f.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:f.type,ts:t0(),runId:f.run.id,taskId:f.run.taskId,agentId:f.run.agentId,message:f.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:t0(),runId:f.run.id,taskId:f.run.taskId,agentId:f.run.agentId,message:f.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:t0(),outcomeId:f.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:t0(),outcomeId:f.fragment.outcomeId,fragmentId:f.fragment.id,agentId:f.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:t0(),taskId:f.message.taskId,agentId:f.message.fromAgentId,message:f.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:t0(),taskId:f.entry.taskId,agentId:f.entry.agentId,message:f.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:t0(),agentId:f.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:t0()}}import{sanitizeFileName as oU,TeamMessageType as S}from"@cline/shared";import{nanoid as eU}from"nanoid";import{TeamMessageType as Pb}from"@cline/shared";function r5($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function Lj($,f){return $?.status==="stopped"&&r5(f)}var $L=600000,Oj="recovered_queued";function fL($){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.
|
|
447
455
|
|
|
448
|
-
${
|
|
449
|
-
${
|
|
456
|
+
${$.message}`}class i5{agents=new Map;configs=new Map;onTeamEvent;constructor($,f){if(this.onTeamEvent=f,$)for(let[J,Q]of Object.entries($))this.addAgent(J,Q)}addAgent($,f){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let J={...f,onEvent:(Z)=>{f.onEvent?.(Z),this.emitEvent({type:S.AgentEvent,agentId:$,event:Z})}},Q=new T$(J);if(J.onEvent)Q.subscribeEvents(J.onEvent);this.agents.set($,Q),this.configs.set($,f)}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($,f){let J=this.agents.get($);if(!J)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:S.TaskStart,agentId:$,message:f});try{let Q=await J.run(f);return this.emitEvent({type:S.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let Z=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:S.TaskEnd,agentId:$,error:Z,messages:J.getMessages()}),Q}}async continueTo($,f){let J=this.agents.get($);if(!J)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:S.TaskStart,agentId:$,message:f});try{let Q=await J.continue(f);return this.emitEvent({type:S.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let Z=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:S.TaskEnd,agentId:$,error:Z,messages:J.getMessages()}),Q}}async runParallel($){let f=$.map(async(J)=>{let Q=this.agents.get(J.agentId);if(!Q)return{agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata};this.emitEvent({type:S.TaskStart,agentId:J.agentId,message:J.message});try{let Z=await Q.run(J.message);return this.emitEvent({type:S.TaskEnd,agentId:J.agentId,result:Z}),{agentId:J.agentId,result:Z,metadata:J.metadata}}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));return this.emitEvent({type:S.TaskEnd,agentId:J.agentId,error:W,messages:Q.getMessages()}),{agentId:J.agentId,result:void 0,error:W,metadata:J.metadata}}});return Promise.all(f)}async runSequential($){let f=[];for(let J of $){let Q=this.agents.get(J.agentId);if(!Q){f.push({agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata});continue}this.emitEvent({type:S.TaskStart,agentId:J.agentId,message:J.message});try{let Z=await Q.run(J.message);this.emitEvent({type:S.TaskEnd,agentId:J.agentId,result:Z}),f.push({agentId:J.agentId,result:Z,metadata:J.metadata})}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));this.emitEvent({type:S.TaskEnd,agentId:J.agentId,error:W,messages:Q.getMessages()}),f.push({agentId:J.agentId,result:void 0,error:W,metadata:J.metadata})}}return f}async runPipeline($,f,J){let Q=[],Z=f;for(let W of $){let j=this.agents.get(W);if(!j){Q.push({agentId:W,result:void 0,error:Error(`Agent "${W}" not found in team`)});break}this.emitEvent({type:S.TaskStart,agentId:W,message:Z});try{let X=await j.run(Z);this.emitEvent({type:S.TaskEnd,agentId:W,result:X}),Q.push({agentId:W,result:X});let H=$.indexOf(W)+1;if(H<$.length){let Y=$[H];Z=J?J(X,Y):`Previous agent output:
|
|
457
|
+
${X.text}
|
|
450
458
|
|
|
451
|
-
Please continue from here.`}}catch(
|
|
459
|
+
Please continue from here.`}}catch(X){let H=X instanceof Error?X:Error(String(X));this.emitEvent({type:S.TaskEnd,agentId:W,error:H,messages:j.getMessages()}),Q.push({agentId:W,result:void 0,error:H});break}}return Q}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}class X2{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_${oU(eU(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 f=$.leadAgentId??"lead";this.members.set(f,{agentId:f,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((f)=>{let J=this.getUnresolvedDependencies(f);return{...f,blockedBy:J,isReady:f.status==="pending"&&!f.assignee&&J.length===0}}).filter((f)=>{if($?.status&&f.status!==$.status)return!1;if($?.assignee&&f.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,f){let J=f?.unreadOnly??!0,Q=f?.markRead??!0,Z=f?.limit,W=this.mailbox.filter((X)=>X.toAgentId===$&&(!J||!X.readAt)),j=typeof Z==="number"&&Z>0?W.slice(Math.max(0,W.length-Z)):W;if(Q){let X=new Date;for(let H of j)if(!H.readAt)H.readAt=X}return j.map((X)=>({...X}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let J of this.tasks.values())$[J.status]++;let f={draft:0,in_review:0,finalized:0};for(let J of this.outcomes.values())f[J.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((J)=>({agentId:J.agentId,role:J.role,description:J.description,status:J.status})),taskCounts:$,unreadMessages:this.mailbox.filter((J)=>!J.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((J)=>J.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((J)=>J.status==="queued").length,outcomeCounts:f}}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 J of $.tasks)this.tasks.set(J.id,{...J});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((J)=>({...J}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((J)=>({...J}))),this.runs.clear();for(let J of $.runs??[])this.runs.set(J.id,{...J});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((J)=>J.status==="queued").map((J)=>J.id)),this.outcomes.clear();for(let J of $.outcomes??[])this.outcomes.set(J.id,{...J});this.outcomeFragments.clear();for(let J of $.outcomeFragments??[])this.outcomeFragments.set(J.id,{...J});let f=Array.from(this.members.values()).filter((J)=>J.role==="lead");this.members.clear();for(let J of f)this.members.set(J.agentId,{...J,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let J of $.members){if(J.role!=="teammate")continue;this.members.set(J.agentId,{agentId:J.agentId,role:"teammate",description:J.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,s1($.tasks.map((J)=>J.id),"task_")),this.messageCounter=Math.max(this.messageCounter,s1($.mailbox.map((J)=>J.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,s1($.missionLog.map((J)=>J.id),"log_")),this.runCounter=Math.max(this.runCounter,s1(($.runs??[]).map((J)=>J.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,s1(($.outcomes??[]).map((J)=>J.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,s1(($.outcomeFragments??[]).map((J)=>J.id),"frag_"))}isTeammateActive($){let f=this.members.get($);return!!f&&f.role==="teammate"&&!!f.agent}spawnTeammate({agentId:$,config:f}){let J=this.members.get($);if(J&&J.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(J&&J.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Q={...f,apiTimeoutMs:$L,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let X=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,X},onEvent:(j)=>{f.onEvent?.(j),this.emitEvent({type:S.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},Z=new T$(Q);if(Q.onEvent)Z.subscribeEvents(Q.onEvent);let W={agentId:$,role:"teammate",description:f.role,status:"idle",agent:Z,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,W),this.emitEvent({type:S.TeammateSpawned,agentId:$,role:f.role,teammate:{rolePrompt:f.systemPrompt,modelId:f.modelId,maxIterations:f.maxIterations,runtimeAgentId:Z.getAgentId(),conversationId:Z.getConversationId(),parentAgentId:null}}),{agentId:W.agentId,role:W.role,description:W.description,status:W.status}}shutdownTeammate($,f){let J=this.members.get($);if(!J||J.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{J.agent?.abort()}catch(Q){if(!r5(Q))throw Q}J.status="stopped",this.emitEvent({type:S.TeammateShutdown,agentId:$,reason:f})}updateTeammateConnections($){for(let f of this.members.values()){if(f.role!=="teammate"||!f.agent)continue;f.agent.updateConnection($)}}createTask($){let f=`task_${String(++this.taskCounter).padStart(4,"0")}`,J=new Date,Q={id:f,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:J,updatedAt:J,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(f,Q),this.emitEvent({type:S.TeamTaskUpdated,task:{...Q}}),{...Q}}claimTask($,f){let J=this.requireTask($);return this.assertDependenciesResolved(J),J.status="in_progress",J.assignee=f,J.updatedAt=new Date,this.emitEvent({type:S.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:f,taskId:$,kind:"progress",summary:`Claimed task "${J.title}"`}),{...J}}blockTask($,f,J){let Q=this.requireTask($);return Q.status="blocked",Q.updatedAt=new Date,Q.summary=J,this.emitEvent({type:S.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:f,taskId:$,kind:"blocked",summary:J}),{...Q}}completeTask($,f,J){let Q=this.requireTask($);if(Q.status="completed",Q.updatedAt=new Date,Q.summary=J,!Q.assignee)Q.assignee=f;return this.emitEvent({type:S.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:f,taskId:$,kind:"done",summary:J}),{...Q}}async routeToTeammate($,f,J){let Q=this.members.get($);if(!Q||Q.role!=="teammate"||!Q.agent)throw Error(`Teammate "${$}" was not found`);if(!Q.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Q.runningCount++,Q.status="running",this.emitEvent({type:S.TaskStart,agentId:$,message:f});try{let Z=this.listMailbox($,{unreadOnly:!0,markRead:!0}),W=Z.length>0?`${this.buildMailboxNotification(Z)}
|
|
452
460
|
|
|
453
|
-
${$}`:$,Z=J?.continueConversation?await W.agent.continue(Q):await W.agent.run(Q);return this.emitEvent({type:q.TaskEnd,agentId:f,result:Z}),this.recordProgressStep(f,`Completed a delegated run (${Z.iterations} iterations)`,J?.taskId,!0),Z}catch(H){let Q=H instanceof Error?H:Error(String(H));if(this.emitEvent({type:q.TaskEnd,agentId:f,error:Q,messages:W.agent.getMessages()}),!m7(W,Q))this.appendMissionLog({agentId:f,taskId:J?.taskId,kind:"error",summary:Q.message});throw Q}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get(f)?.status!=="stopped")W.status="idle"}}startTeammateRun(f,$,J){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,H={id:W,agentId:f,taskId:J?.taskId,status:"queued",message:$,priority:J?.priority??0,retryCount:0,maxRetries:Math.max(0,J?.maxRetries??0),continueConversation:J?.continueConversation,startedAt:new Date(0),leaseOwner:J?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,H),this.runQueue.push(W),this.emitEvent({type:q.RunQueued,run:{...H}}),this.dispatchQueuedRuns(),{...H}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let f;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let $=this.selectNextDispatchableQueuedRun();f=$.nextDelayedAttemptAt;let J=$.index;if(J<0){this.scheduleQueuedRunDispatch(f);return}let[W]=this.runQueue.splice(J,1),H=W?this.runs.get(W):void 0;if(!H||H.status!=="queued")continue;this.executeQueuedRun(H)}this.scheduleQueuedRunDispatch(f)}selectNextDispatchableQueuedRun(){let f=-1,$=Number.NEGATIVE_INFINITY,J,W=Date.now();for(let H=0;H<this.runQueue.length;H++){let Q=this.runs.get(this.runQueue[H]);if(!Q||Q.status!=="queued")continue;if(Q.nextAttemptAt&&Q.nextAttemptAt.getTime()>W){if(!J||Q.nextAttemptAt<J)J=Q.nextAttemptAt;continue}if(Q.priority>$)$=Q.priority,f=H}return{index:f,nextDelayedAttemptAt:J}}scheduleQueuedRunDispatch(f){if(!f)return;let $=Math.max(0,f.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},$)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let f=0;for(let $ of this.runs.values())if($.status==="running")f++;return f}async executeQueuedRun(f){let $=f.currentActivity===x7;f.nextAttemptAt=void 0,f.status="running",f.startedAt=new Date,f.heartbeatAt=new Date,f.currentActivity="run_started",this.emitEvent({type:q.RunStarted,run:{...f}});let J=setInterval(()=>{if(f.status!=="running")return;this.recordRunProgress(f,"heartbeat")},2000);try{let W=$?wU(f):f.message,H=await this.routeToTeammate(f.agentId,W,{taskId:f.taskId,continueConversation:f.continueConversation});f.status="completed",f.result=H,f.endedAt=new Date,f.currentActivity="completed",this.emitEvent({type:q.RunCompleted,run:{...f}})}catch(W){let H=W instanceof Error?W.message:String(W??"Unknown error");f.error=H,f.endedAt=new Date;let Q=this.members.get(f.agentId);if(m7(Q,W))f.status="cancelled",f.currentActivity="cancelled",this.emitEvent({type:q.RunCancelled,run:{...f},reason:H});else if(f.retryCount<f.maxRetries)f.retryCount++,f.status="queued",f.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**f.retryCount)),this.runQueue.push(f.id),this.recordRunProgress(f,`retry_scheduled_${f.retryCount}`);else f.status="failed",f.currentActivity="failed",this.emitEvent({type:q.RunFailed,run:{...f}})}finally{clearInterval(J),this.dispatchQueuedRuns()}}listRuns(f){let $=f?.includeCompleted??!0;return Array.from(this.runs.values()).filter((J)=>{if(!$&&!["running","queued"].includes(J.status))return!1;if(f?.status&&J.status!==f.status)return!1;if(f?.agentId&&J.agentId!==f.agentId)return!1;return!0}).map((J)=>({...J}))}getRun(f){let $=this.runs.get(f);return $?{...$}:void 0}async awaitRun(f,$=250){let J=this.runs.get(f);if(!J)throw Error(`Run "${f}" was not found`);while(J.status==="queued"||J.status==="running")await g7($);return{...J}}async awaitAllRuns(f=250){while(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))await g7(f);return this.listRuns()}cancelRun(f,$){let J=this.runs.get(f);if(!J)throw Error(`Run "${f}" was not found`);if(J.status==="completed"||J.status==="failed")return{...J};J.status="cancelled",J.error=$,J.endedAt=new Date,J.currentActivity="cancelled";let W=this.runQueue.indexOf(f);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:q.RunCancelled,run:{...J},reason:$}),{...J}}recoverActiveRuns(f="runtime_recovered"){let $=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;let W=this.members.get(J.agentId);if(!W||W.role!=="teammate"||!W.agent){J.status="interrupted",J.error="teammate_unavailable_after_recovery",J.endedAt=new Date,J.currentActivity="interrupted",this.emitEvent({type:q.RunInterrupted,run:{...J},reason:J.error});continue}let H=new Date;if(J.status="queued",J.error=void 0,J.endedAt=void 0,J.heartbeatAt=H,J.lastProgressAt=H,J.lastProgressMessage=f,J.currentActivity=x7,!this.runQueue.includes(J.id))this.runQueue.push(J.id);$.push({...J}),this.emitEvent({type:q.RunQueued,run:{...J}})}return this.dispatchQueuedRuns(),$}markStaleRunsInterrupted(f="runtime_recovered"){let $=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;J.status="interrupted",J.error=f,J.endedAt=new Date,J.currentActivity="interrupted",$.push({...J}),this.emitEvent({type:q.RunInterrupted,run:{...J},reason:f})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),$}sendMessage(f,$,J,W,H){if(!this.members.has(f))throw Error(`Unknown sender "${f}"`);let Q=this.members.get($);if(!Q)throw Error(`Unknown recipient "${$}"`);let Z={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:f,toAgentId:$,subject:J,body:W,taskId:H,sentAt:new Date};if(this.mailbox.push(Z),this.emitEvent({type:q.TeamMessage,message:{...Z}}),Q.role==="teammate"&&Q.runningCount>0&&Q.agent)Q.pendingSteerMessage=`[MAILBOX] You got a message from ${f}. Subject: "${J}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Z}}broadcast(f,$,J,W){let H=[];for(let Q of this.members.values()){if(Q.agentId===f)continue;if(Q.role==="lead")continue;H.push(this.sendMessage(f,Q.agentId,$,J,W?.taskId))}return H}appendMissionLog(f){if(!this.members.has(f.agentId))throw Error(`Unknown team member "${f.agentId}"`);let $={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:f.agentId,taskId:f.taskId,kind:f.kind,summary:f.summary,evidence:f.evidence,nextAction:f.nextAction};this.missionLog.push($);let J=this.members.get(f.agentId);if(J)J.lastMissionAt=Date.now(),J.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:q.TeamMissionLog,entry:{...$}}),{...$}}createOutcome(f){let $={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:f.title,status:"draft",requiredSections:[...new Set(f.requiredSections)],createdBy:f.createdBy,createdAt:new Date};return this.outcomes.set($.id,$),this.emitEvent({type:q.OutcomeCreated,outcome:{...$}}),{...$}}listOutcomes(){return Array.from(this.outcomes.values()).map((f)=>({...f}))}attachOutcomeFragment(f){let $=this.outcomes.get(f.outcomeId);if(!$)throw Error(`Outcome "${f.outcomeId}" was not found`);if(!$.requiredSections.includes(f.section))throw Error(`Section "${f.section}" is not part of outcome "${f.outcomeId}"`);let J={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:f.outcomeId,section:f.section,sourceAgentId:f.sourceAgentId,sourceRunId:f.sourceRunId,content:f.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(J.id,J),$.status==="draft")$.status="in_review";return this.emitEvent({type:q.OutcomeFragmentAttached,fragment:{...J}}),{...J}}reviewOutcomeFragment(f){let $=this.outcomeFragments.get(f.fragmentId);if(!$)throw Error(`Fragment "${f.fragmentId}" was not found`);return $.status=f.approved?"reviewed":"rejected",$.reviewedBy=f.reviewedBy,$.reviewedAt=new Date,this.emitEvent({type:q.OutcomeFragmentReviewed,fragment:{...$}}),{...$}}listOutcomeFragments(f){return Array.from(this.outcomeFragments.values()).filter(($)=>$.outcomeId===f).map(($)=>({...$}))}finalizeOutcome(f){let $=this.outcomes.get(f);if(!$)throw Error(`Outcome "${f}" was not found`);let J=this.listOutcomeFragments(f);for(let W of $.requiredSections)if(!J.some((Q)=>Q.section===W&&Q.status==="reviewed"))throw Error(`Outcome "${f}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return $.status="finalized",$.finalizedAt=new Date,this.emitEvent({type:q.OutcomeFinalized,outcome:{...$}}),{...$}}cleanup(){for(let f of this.members.values())if(f.role==="teammate"&&f.runningCount>0)throw Error(`Cannot cleanup team while teammate "${f.agentId}" is still running`);if(Array.from(this.runs.values()).some((f)=>["queued","running"].includes(f.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let f of this.members.values())if(f.role==="teammate")try{f.agent?.abort()}catch($){if(!L5($))throw $}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[f,$]of this.members.entries())if($.role==="teammate")this.members.delete(f)}requireTask(f){let $=this.tasks.get(f);if(!$)throw Error(`Task "${f}" was not found`);return $}assertDependenciesResolved(f){let $=this.getUnresolvedDependencies(f);if($.length>0)throw Error(`Task "${f.id}" is blocked by "${$[0]}"`)}getUnresolvedDependencies(f){return f.dependsOn.filter(($)=>{let J=this.tasks.get($);return!J||J.status!=="completed"})}trackMeaningfulEvent(f,$){if(this.recordRunActivityFromAgentEvent(f,$),$.type==="iteration_end"&&$.hadToolCalls){this.recordProgressStep(f,`Completed iteration ${$.iteration} with ${$.toolCallCount} tool call(s)`);return}if($.type==="content_end"&&$.contentType==="tool"&&!$.error){this.recordProgressStep(f,`Finished tool "${$.toolName??"unknown"}"`);return}if($.type==="done"){this.appendMissionLog({agentId:f,kind:"done",summary:`Completed a delegated run (${$.iterations} iterations)`});return}if($.type==="error")this.appendMissionLog({agentId:f,kind:"error",summary:$.error.message})}recordRunActivityFromAgentEvent(f,$){let J;switch($.type){case"iteration_start":J=`iteration_${$.iteration}_started`;break;case"content_start":if($.contentType==="tool")J=`running_tool_${$.toolName??"unknown"}`;break;case"content_end":if($.contentType==="tool")J=$.error?this.formatProgressErrorActivity(`tool_${$.toolName??"unknown"}_error`,$.error):`finished_tool_${$.toolName??"unknown"}`;break;case"done":J="finalizing_response";break;case"error":J=this.formatProgressErrorActivity("run_error",$.error.message);break;default:break}if(!J)return;for(let W of this.runs.values()){if(W.agentId!==f||W.status!=="running")continue;this.recordRunProgress(W,J)}}recordRunProgress(f,$){let J=new Date;f.heartbeatAt=J,f.lastProgressAt=J,f.lastProgressMessage=$,f.currentActivity=$,this.emitEvent({type:q.RunProgress,run:{...f},message:$})}formatProgressErrorActivity(f,$){let J=$.replace(/\s+/g," ").trim();if(J.length===0)return f;let W=J.length>240?`${J.slice(0,237).trimEnd()}...`:J;return`${f}: ${W}`}recordProgressStep(f,$,J,W=!1){this.missionStepCounter++;let H=this.members.get(f);if(!H)return;let Q=this.missionStepCounter-H.lastMissionStep,Z=Date.now()-H.lastMissionAt;if(!W&&Q<this.missionLogIntervalSteps&&Z<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:f,taskId:J,kind:"progress",summary:$})}buildMailboxNotification(f){if(f.length===0)return"";let $=[`[MAILBOX] You have ${f.length} unread message(s):`];for(let J of f)$.push(`--- Message from ${J.fromAgentId} | subject: ${J.subject} ---`),$.push(J.body);return $.push("---"),$.join(`
|
|
454
|
-
`)}emitEvent(
|
|
461
|
+
${f}`:f,j=J?.continueConversation?await Q.agent.continue(W):await Q.agent.run(W);return this.emitEvent({type:S.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,J?.taskId,!0),j}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));if(this.emitEvent({type:S.TaskEnd,agentId:$,error:W,messages:Q.agent.getMessages()}),!Lj(Q,W))this.appendMissionLog({agentId:$,taskId:J?.taskId,kind:"error",summary:W.message});throw W}finally{if(Q.runningCount--,Q.runningCount<=0&&this.members.get($)?.status!=="stopped")Q.status="idle"}}startTeammateRun($,f,J){let Q=`run_${String(++this.runCounter).padStart(5,"0")}`,Z={id:Q,agentId:$,taskId:J?.taskId,status:"queued",message:f,priority:J?.priority??0,retryCount:0,maxRetries:Math.max(0,J?.maxRetries??0),continueConversation:J?.continueConversation,startedAt:new Date(0),leaseOwner:J?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Q,Z),this.runQueue.push(Q),this.emitEvent({type:S.RunQueued,run:{...Z}}),this.dispatchQueuedRuns(),{...Z}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let f=this.selectNextDispatchableQueuedRun();$=f.nextDelayedAttemptAt;let J=f.index;if(J<0){this.scheduleQueuedRunDispatch($);return}let[Q]=this.runQueue.splice(J,1),Z=Q?this.runs.get(Q):void 0;if(!Z||Z.status!=="queued")continue;this.executeQueuedRun(Z)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,f=Number.NEGATIVE_INFINITY,J,Q=Date.now();for(let Z=0;Z<this.runQueue.length;Z++){let W=this.runs.get(this.runQueue[Z]);if(!W||W.status!=="queued")continue;if(W.nextAttemptAt&&W.nextAttemptAt.getTime()>Q){if(!J||W.nextAttemptAt<J)J=W.nextAttemptAt;continue}if(W.priority>f)f=W.priority,$=Z}return{index:$,nextDelayedAttemptAt:J}}scheduleQueuedRunDispatch($){if(!$)return;let f=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},f)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let f of this.runs.values())if(f.status==="running")$++;return $}async executeQueuedRun($){let f=$.currentActivity===Oj;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:S.RunStarted,run:{...$}});let J=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=f?fL($):$.message,Z=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=Z,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:S.RunCompleted,run:{...$}})}catch(Q){let Z=Q instanceof Error?Q.message:String(Q??"Unknown error");$.error=Z,$.endedAt=new Date;let W=this.members.get($.agentId);if(Lj(W,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:S.RunCancelled,run:{...$},reason:Z});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:S.RunFailed,run:{...$}})}finally{clearInterval(J),this.dispatchQueuedRuns()}}listRuns($){let f=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((J)=>{if(!f&&!["running","queued"].includes(J.status))return!1;if($?.status&&J.status!==$.status)return!1;if($?.agentId&&J.agentId!==$.agentId)return!1;return!0}).map((J)=>({...J}))}getRun($){let f=this.runs.get($);return f?{...f}:void 0}async awaitRun($,f=250){let J=this.runs.get($);if(!J)throw Error(`Run "${$}" was not found`);while(J.status==="queued"||J.status==="running")await zj(f);return{...J}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((f)=>["queued","running"].includes(f.status)))await zj($);return this.listRuns()}cancelRun($,f){let J=this.runs.get($);if(!J)throw Error(`Run "${$}" was not found`);if(J.status==="completed"||J.status==="failed")return{...J};J.status="cancelled",J.error=f,J.endedAt=new Date,J.currentActivity="cancelled";let Q=this.runQueue.indexOf($);if(Q>=0)this.runQueue.splice(Q,1);return this.emitEvent({type:S.RunCancelled,run:{...J},reason:f}),{...J}}recoverActiveRuns($="runtime_recovered"){let f=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;let Q=this.members.get(J.agentId);if(!Q||Q.role!=="teammate"||!Q.agent){J.status="interrupted",J.error="teammate_unavailable_after_recovery",J.endedAt=new Date,J.currentActivity="interrupted",this.emitEvent({type:S.RunInterrupted,run:{...J},reason:J.error});continue}let Z=new Date;if(J.status="queued",J.error=void 0,J.endedAt=void 0,J.heartbeatAt=Z,J.lastProgressAt=Z,J.lastProgressMessage=$,J.currentActivity=Oj,!this.runQueue.includes(J.id))this.runQueue.push(J.id);f.push({...J}),this.emitEvent({type:S.RunQueued,run:{...J}})}return this.dispatchQueuedRuns(),f}markStaleRunsInterrupted($="runtime_recovered"){let f=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;J.status="interrupted",J.error=$,J.endedAt=new Date,J.currentActivity="interrupted",f.push({...J}),this.emitEvent({type:S.RunInterrupted,run:{...J},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),f}sendMessage($,f,J,Q,Z){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let W=this.members.get(f);if(!W)throw Error(`Unknown recipient "${f}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:f,subject:J,body:Q,taskId:Z,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:S.TeamMessage,message:{...j}}),W.role==="teammate"&&W.runningCount>0&&W.agent)W.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${J}". Use the team_read_mailbox tool to read it at your convenience.`;return{...j}}broadcast($,f,J,Q){let Z=[];for(let W of this.members.values()){if(W.agentId===$)continue;if(W.role==="lead")continue;Z.push(this.sendMessage($,W.agentId,f,J,Q?.taskId))}return Z}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let f={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(f);let J=this.members.get($.agentId);if(J)J.lastMissionAt=Date.now(),J.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:S.TeamMissionLog,entry:{...f}}),{...f}}createOutcome($){let f={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(f.id,f),this.emitEvent({type:S.OutcomeCreated,outcome:{...f}}),{...f}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let f=this.outcomes.get($.outcomeId);if(!f)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!f.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let J={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(J.id,J),f.status==="draft")f.status="in_review";return this.emitEvent({type:S.OutcomeFragmentAttached,fragment:{...J}}),{...J}}reviewOutcomeFragment($){let f=this.outcomeFragments.get($.fragmentId);if(!f)throw Error(`Fragment "${$.fragmentId}" was not found`);return f.status=$.approved?"reviewed":"rejected",f.reviewedBy=$.reviewedBy,f.reviewedAt=new Date,this.emitEvent({type:S.OutcomeFragmentReviewed,fragment:{...f}}),{...f}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((f)=>f.outcomeId===$).map((f)=>({...f}))}finalizeOutcome($){let f=this.outcomes.get($);if(!f)throw Error(`Outcome "${$}" was not found`);let J=this.listOutcomeFragments($);for(let Q of f.requiredSections)if(!J.some((W)=>W.section===Q&&W.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Q}" is missing a reviewed fragment.`);return f.status="finalized",f.finalizedAt=new Date,this.emitEvent({type:S.OutcomeFinalized,outcome:{...f}}),{...f}}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(f){if(!r5(f))throw f}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[$,f]of this.members.entries())if(f.role==="teammate")this.members.delete($)}requireTask($){let f=this.tasks.get($);if(!f)throw Error(`Task "${$}" was not found`);return f}assertDependenciesResolved($){let f=this.getUnresolvedDependencies($);if(f.length>0)throw Error(`Task "${$.id}" is blocked by "${f[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((f)=>{let J=this.tasks.get(f);return!J||J.status!=="completed"})}trackMeaningfulEvent($,f){if(this.recordRunActivityFromAgentEvent($,f),f.type==="iteration_end"&&f.hadToolCalls){this.recordProgressStep($,`Completed iteration ${f.iteration} with ${f.toolCallCount} tool call(s)`);return}if(f.type==="content_end"&&f.contentType==="tool"&&!f.error){this.recordProgressStep($,`Finished tool "${f.toolName??"unknown"}"`);return}if(f.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${f.iterations} iterations)`});return}if(f.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:f.error.message})}recordRunActivityFromAgentEvent($,f){let J;switch(f.type){case"iteration_start":J=`iteration_${f.iteration}_started`;break;case"content_start":if(f.contentType==="tool")J=`running_tool_${f.toolName??"unknown"}`;break;case"content_end":if(f.contentType==="tool")J=f.error?this.formatProgressErrorActivity(`tool_${f.toolName??"unknown"}_error`,f.error):`finished_tool_${f.toolName??"unknown"}`;break;case"done":J="finalizing_response";break;case"error":J=this.formatProgressErrorActivity("run_error",f.error.message);break;default:break}if(!J)return;for(let Q of this.runs.values()){if(Q.agentId!==$||Q.status!=="running")continue;this.recordRunProgress(Q,J)}}recordRunProgress($,f){let J=new Date;$.heartbeatAt=J,$.lastProgressAt=J,$.lastProgressMessage=f,$.currentActivity=f,this.emitEvent({type:S.RunProgress,run:{...$},message:f})}formatProgressErrorActivity($,f){let J=f.replace(/\s+/g," ").trim();if(J.length===0)return $;let Q=J.length>240?`${J.slice(0,237).trimEnd()}...`:J;return`${$}: ${Q}`}recordProgressStep($,f,J,Q=!1){this.missionStepCounter++;let Z=this.members.get($);if(!Z)return;let W=this.missionStepCounter-Z.lastMissionStep,j=Date.now()-Z.lastMissionAt;if(!Q&&W<this.missionLogIntervalSteps&&j<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:J,kind:"progress",summary:f})}buildMailboxNotification($){if($.length===0)return"";let f=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let J of $)f.push(`--- Message from ${J.fromAgentId} | subject: ${J.subject} ---`),f.push(J.body);return f.push("---"),f.join(`
|
|
462
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function zj($){return new Promise((f)=>setTimeout(f,$))}function s1($,f){let J=0;for(let Q of $){if(!Q.startsWith(f))continue;let Z=Number.parseInt(Q.slice(f.length),10);if(Number.isFinite(Z))J=Math.max(J,Z)}return J}function n5($,f){switch(f.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(f.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let J;if(f.type==="run_failed")J=f.run.error;else if(f.type==="run_cancelled"||f.type==="run_interrupted")J=f.run.error??f.reason;$.activeTeamRunIds.delete(f.run.id),$.pendingTeamRunUpdates.push({runId:f.run.id,agentId:f.run.agentId,taskId:f.run.taskId,status:f.type.replace("run_",""),error:J,iterations:f.run.result?.iterations}),H4($);break}default:break}}async function a5($,f,J){switch(f.type){case"run_progress":await J("onTeamTaskProgress",$,f.run.agentId,f.message,{kind:f.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(f.event.type==="content_start"&&f.event.contentType==="text"&&typeof f.event.text==="string"){let Q=f.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Q)await J("onTeamTaskProgress",$,f.agentId,Q,{kind:"text"})}break;case"task_start":await J("onTeamTaskStart",$,f.agentId,f.message);break;case"task_end":{if(f.error)await J("onTeamTaskEnd",$,f.agentId,"failed",`[error] ${f.error.message}`,void 0,f.messages);else if(f.result?.finishReason==="aborted")await J("onTeamTaskEnd",$,f.agentId,"cancelled","[done] aborted",f.result,f.result.messages);else await J("onTeamTaskEnd",$,f.agentId,"completed",`[done] ${f.result?.finishReason??"completed"}`,f.result,f.result?.messages);break}default:break}}function t5($,f,J,Q){if(!$.runtime.teamRuntime)return;let Z=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:f,teamName:Z,lifecycle:X4({teamName:Z,sessionId:f,event:J}),summary:j4(Z,$.runtime.teamRuntime.exportState())}})}function H2($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function s5($,f){if($.aborting)return!1;if(!(f==="completed"||f==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&H2($)}function H4($){let f=$.teamRunWaiters.splice(0);for(let J of f)J()}async function o5($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let f=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,f}if($.activeTeamRunIds.size===0)return[];await new Promise((f)=>{$.teamRunWaiters.push(f)})}}function e5($,f){let J=f.map((W)=>{let j=[`- ${W.runId} (${W.agentId}) -> ${W.status}`];if(W.taskId)j.push(` task=${W.taskId}`);if(typeof W.iterations==="number")j.push(` iterations=${W.iterations}`);if(W.error)j.push(` error=${W.error}`);return j.join("")}),Q=$.activeTeamRunIds.size,Z=Q>0?`There are still ${Q} 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 Y2(`System-delivered teammate async run updates:
|
|
455
463
|
${J.join(`
|
|
456
464
|
`)}
|
|
457
465
|
|
|
458
|
-
${
|
|
459
|
-
`,"utf8"),
|
|
466
|
+
${Z}`,$.config.mode)}function Y2($,f){return JL($,f==="plan"?"plan":f==="yolo"?"yolo":"act")}var $9=4;class Y${adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,f={}){this.adapter=$;this.manifestStore=new l5($,f.messagesArtifactUploader,f.logger),this.teamChildren=new W4($,this.manifestStore,(J,Q,Z)=>this.toPersistedMessages(J,Q,Z),Y$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,f,J){if(!$)return;return f?n8(f.messages,f,J):i8($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,f){this.manifestStore.writeSessionManifest($,f)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let f=$.startedAt??n(),J=$.sessionId.trim(),Q=J.length>0?J:`${Date.now()}_${ZL(5)}`,Z=this.manifestStore.artifacts.sessionMessagesPath(Q),W=this.manifestStore.artifacts.sessionManifestPath(Q),j=sf({metadata:$.metadata,prompt:$.prompt}),X={version:1,session_id:Q,source:$.source,pid:$.pid,started_at:f,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:j,messages_path:Z};return await this.adapter.upsertSession({sessionId:Q,source:$.source,pid:$.pid,startedAt:f,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:X.prompt??null,metadata:w$(X.metadata),hookPath:"",messagesPath:Z,updatedAt:n()}),this.manifestStore.initializeMessagesFile(Q,Z,f),this.manifestStore.writeSessionManifest(W,X),{manifestPath:W,messagesPath:Z,manifest:X}}async updateSessionStatus($,f,J){let Q;if((await TW(()=>this.adapter.getSession($),async(W)=>{return Q=f==="running"?void 0:n(),this.adapter.updateSession({sessionId:$,status:f,endedAt:Q??null,exitCode:f==="running"?null:typeof J==="number"?J:null,expectedStatusLock:W.statusLock})},$9)).updated){if(f==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let f=0;f<$9;f++){let J=await this.adapter.getSession($.sessionId);if(!J)return{updated:!1};let Q=J.metadata??void 0,Z=$.metadata!==void 0?w$($.metadata)??{}:w$(Q)??{},W=V1(typeof Q?.title==="string"?Q.title:void 0),j=$.title!==void 0?V1($.title):W??O5($.prompt);if(j)Z.title=j;else delete Z.title;let X=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:X?Object.keys(Z).length>0?Z:null:void 0,title:j,expectedStatusLock:J.statusLock})).updated)continue;let{path:Y,manifest:V}=this.manifestStore.readManifestFile($.sessionId);if(V){if($.prompt!==void 0)V.prompt=$.prompt??void 0;let A=$.metadata!==void 0?w$($.metadata)??{}:w$(V.metadata)??{};if(j)A.title=j;V.metadata=Object.keys(A).length>0?A:void 0,this.manifestStore.writeSessionManifest(Y,V)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,f){return this.teamChildren.appendSubagentHookAudit(f),Promise.resolve()}persistSessionMessages($,f,J){let Q=i8(f);return this.manifestStore.persistSessionMessages($,Q,J)}applySubagentStatus($,f){return this.teamChildren.applySubagentStatus($,f)}applySubagentStatusBySessionId($,f){return this.teamChildren.applySubagentStatusBySessionId($,f)}applyStatusToRunningChildSessions($,f){return this.teamChildren.applyStatusToRunningChildSessions($,f)}onTeamTaskStart($,f,J){return this.teamChildren.onTeamTaskStart($,f,J)}onTeamTaskEnd($,f,J,Q,Z,W){return this.teamChildren.onTeamTaskEnd($,f,J,Q,Z,W)}onTeamTaskProgress($,f,J,Q){return this.teamChildren.onTeamTaskProgress($,f,J,Q)}handleSubAgentStart($,f){return this.teamChildren.handleSubAgentStart($,f)}handleSubAgentEnd($,f){return this.teamChildren.handleSubAgentEnd($,f)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(f){return typeof f==="object"&&f!==null&&"code"in f&&f.code==="EPERM"}}async reconcileDeadRunningSession($){if($.status!=="running"||this.isPidAlive($.pid))return $;let f=n(),J=Y$.STALE_REASON;for(let Q=0;Q<$9;Q++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return;if(Z.status!=="running")return Z;let W={...Z.metadata??{},terminal_marker:J,terminal_marker_at:f,terminal_marker_pid:Z.pid,terminal_marker_source:Y$.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:Z.sessionId,status:"failed",endedAt:f,exitCode:1,metadata:W,expectedStatusLock:Z.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(Z.sessionId,"failed");let X=yW(Z,{status:"failed",endedAt:f,exitCode:1,metadata:W}),{path:H}=this.manifestStore.readManifestFile(Z.sessionId);return this.manifestStore.writeSessionManifest(H,X),this.manifestStore.appendStaleSessionHookLog(f,Z.sessionId,Z.pid,J,Y$.STALE_SOURCE),{...Z,status:"failed",endedAt:f,exitCode:1,metadata:W,statusLock:j.statusLock,updatedAt:f}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let f=Math.max(1,Math.floor($)),J=Math.min(f*5,2000);return await this.reconcileDeadSessions(J),(await this.adapter.listSessions({limit:J})).slice(0,f).map((Z)=>{let W=w$(Z.metadata??void 0),j=this.manifestStore.readSessionManifest(Z.sessionId),X=V1(typeof j?.metadata?.title==="string"?j.metadata.title:void 0),H=X?{...W??{},title:X}:W;return{...Z,metadata:H}})}async reconcileDeadSessions($=2000){let f=await this.adapter.listSessions({limit:Math.max(1,Math.floor($)),status:"running"}),J=0;for(let Q of f){let Z=await this.reconcileDeadRunningSession(Q);if(Z&&Z.status!==Q.status)J++}return J}async deleteSession($){let f=$.trim();if(!f)throw Error("session id is required");let J=await this.adapter.getSession(f);if(!J)return{deleted:!1};if(await this.adapter.deleteSession(f,!1),!J.isSubagent){let Q=await this.adapter.listSessions({limit:2000,parentSessionId:f});await this.adapter.deleteSession(f,!0),await Promise.allSettled(Q.map(async(Z)=>{await u5(Z.cwd,Z.sessionId),j2(Z.messagesPath),j2(this.manifestStore.artifacts.sessionManifestPath(Z.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(Z.sessionId)}))}if(await u5(J.cwd,f),j2(J.messagesPath),j2(this.manifestStore.artifacts.sessionManifestPath(f,!1)),J.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(f);else{let Q=new Set([this.manifestStore.artifacts.sessionArtifactsDir(f)]);for(let Z of[J.messagesPath])if(typeof Z==="string"&&Z.trim().length>0)Q.add(QL(Z));for(let Z of Q)this.manifestStore.artifacts.removeDir(Z)}return{deleted:!0}}}function J9(){return new Date().toISOString()}function Tj($,f){let J=`${$}.tmp`;XL(J,`${JSON.stringify(f,null,2)}
|
|
467
|
+
`,"utf8"),jL(J,$)}class Nj{sessionsDirPath;constructor($=HL()){this.sessionsDirPath=$}ensureSessionsDir(){if(!f9(this.sessionsDirPath))WL(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return yj(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return yj(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!f9($))return{version:1,sessions:{}};try{let f=JSON.parse(_j($,"utf8"));if(f?.version===1&&f.sessions)return f}catch{}return{version:1,sessions:{}}}writeIndex($){Tj(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!f9($))return{version:1,nextId:1,requests:[]};try{let f=JSON.parse(_j($,"utf8"));if(f?.version===1&&typeof f.nextId==="number"&&Array.isArray(f.requests))return f}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){Tj(this.spawnQueuePath(),$)}async upsertSession($){let f=this.readIndex();f.sessions[$.sessionId]=$,this.writeIndex(f)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((f)=>$.parentSessionId!==void 0?f.parentSessionId===$.parentSessionId:!0).filter((f)=>$.status!==void 0?f.status===$.status:!0).sort((f,J)=>J.startedAt.localeCompare(f.startedAt)).slice(0,$.limit)}async updateSession($){let f=this.readIndex(),J=f.sessions[$.sessionId];if(!J)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&J.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:J.statusLock};let Q=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:J.statusLock,Z={...J,status:$.status??J.status,endedAt:$.endedAt!==void 0?$.endedAt:J.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:J.exitCode??null,prompt:$.prompt!==void 0?$.prompt:J.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:J.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:J.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:J.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:J.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:J.conversationId??null,statusLock:Q,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:J.isSubagent,updatedAt:J9()};if($.setRunning)Z.status="running",Z.endedAt=null,Z.exitCode=null;return f.sessions[$.sessionId]=Z,this.writeIndex(f),{updated:!0,statusLock:Z.statusLock}}async deleteSession($,f){let J=this.readIndex();if(!J.sessions[$])return!1;if(delete J.sessions[$],f){for(let Z of Object.values(J.sessions))if(Z.parentSessionId===$)delete J.sessions[Z.sessionId]}return this.writeIndex(J),!0}async enqueueSpawnRequest($){let f=this.readQueue();f.requests.push({id:f.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:J9()}),f.nextId+=1,this.writeQueue(f)}async claimSpawnRequest($,f){let J=this.readQueue(),Q=J.requests.find((Z)=>Z.rootSessionId===$&&Z.parentAgentId===f&&!Z.consumedAt);if(!Q)return;return Q.consumedAt=J9(),this.writeQueue(J),Q.task}}class Q9 extends Y${constructor($,f={}){super(new Nj($),f)}ensureSessionsDir(){return super.ensureSessionsDir()}}import{existsSync as YL,mkdirSync as VL}from"node:fs";import{resolveSessionDataDir as AL}from"@cline/shared/storage";var Z9=`
|
|
460
468
|
session_id AS sessionId,
|
|
461
469
|
source,
|
|
462
470
|
pid,
|
|
@@ -483,43 +491,43 @@ ${H}`,f.config.mode)}function t1(f,$){return bU(f,$==="plan"?"plan":$==="yolo"?"
|
|
|
483
491
|
metadata_json AS metadata,
|
|
484
492
|
hook_path AS hookPath,
|
|
485
493
|
messages_path AS messagesPath,
|
|
486
|
-
updated_at AS updatedAt`;function
|
|
494
|
+
updated_at AS updatedAt`;function W9($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let f=$.metadata;if(typeof f==="string"&&f.trim())try{let J=JSON.parse(f);$.metadata=J&&typeof J==="object"&&!Array.isArray(J)?J:null}catch{$.metadata=null}else $.metadata=null;return $}function j9($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function Mj($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class qj{store;sessionsDirPath;constructor($,f=AL()){this.store=$;this.sessionsDirPath=f}ensureSessionsDir(){if(!YL(this.sessionsDirPath))VL(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
487
495
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
488
496
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
489
497
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
490
498
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
491
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[
|
|
499
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,j9($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let f=this.store.queryOne(`SELECT ${Z9} FROM sessions WHERE session_id = ?`,[$]);return f?W9(f):void 0}async listSessions($){let f=[],J=[];if($.parentSessionId)f.push("parent_session_id = ?"),J.push($.parentSessionId);if($.status)f.push("status = ?"),J.push($.status);let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${Z9}
|
|
492
500
|
FROM sessions
|
|
493
|
-
${
|
|
501
|
+
${Q}
|
|
494
502
|
ORDER BY started_at DESC
|
|
495
|
-
LIMIT ?`,[...J
|
|
503
|
+
LIMIT ?`,[...J,$.limit]).map(W9)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
|
|
496
504
|
SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
|
|
497
505
|
parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
|
|
498
506
|
prompt = COALESCE(prompt, ?)
|
|
499
|
-
WHERE session_id = ? AND status_lock = ?`,[n()
|
|
500
|
-
VALUES (?, ?, ?, ?, ?, NULL)`,[
|
|
507
|
+
WHERE session_id = ? AND status_lock = ?`,[n(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let f=[],J=[];if($.status!==void 0)f.push("status = ?"),J.push($.status);if($.endedAt!==void 0)f.push("ended_at = ?"),J.push($.endedAt);if($.exitCode!==void 0)f.push("exit_code = ?"),J.push($.exitCode);if($.prompt!==void 0)f.push("prompt = ?"),J.push($.prompt??null);if($.metadata!==void 0)f.push("metadata_json = ?"),J.push(j9($.metadata));if($.parentSessionId!==void 0)f.push("parent_session_id = ?"),J.push($.parentSessionId??null);if($.parentAgentId!==void 0)f.push("parent_agent_id = ?"),J.push($.parentAgentId??null);if($.agentId!==void 0)f.push("agent_id = ?"),J.push($.agentId??null);if($.conversationId!==void 0)f.push("conversation_id = ?"),J.push($.conversationId??null);if(f.length===0){let j=await this.getSession($.sessionId);return{updated:!!j,statusLock:j?.statusLock??0}}let Q=0;if($.expectedStatusLock!==void 0)Q=$.expectedStatusLock+1,f.push("status_lock = ?"),J.push(Q);f.push("updated_at = ?"),J.push(n());let Z=`UPDATE sessions SET ${f.join(", ")} WHERE session_id = ?`;if(J.push($.sessionId),$.expectedStatusLock!==void 0)Z+=" AND status_lock = ?",J.push($.expectedStatusLock);if((this.store.run(Z,J).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Q=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Q}}async deleteSession($,f){let J=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(f)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return J>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
|
|
508
|
+
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,n()])}async claimSpawnRequest($,f){let J=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
|
|
501
509
|
WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
|
|
502
|
-
ORDER BY id ASC LIMIT 1`,[f
|
|
510
|
+
ORDER BY id ASC LIMIT 1`,[$,f]);if(!J||typeof J.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[n(),J.id]),J.task??void 0}}class I$ extends Y${store;constructor($,f={}){super(new qj($,f.sessionArtifactsDir),f);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
503
511
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
504
512
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
505
513
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
506
514
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
507
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[
|
|
508
|
-
...[truncated ${f
|
|
509
|
-
${
|
|
510
|
-
</file>`;case"image":return`[image:${
|
|
511
|
-
`)}function
|
|
512
|
-
`)}function
|
|
513
|
-
|
|
514
|
-
`).trim()}function
|
|
515
|
-
`):"- none",J
|
|
515
|
+
) 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,n()])}}import{readdirSync as az}from"node:fs";import{homedir as tz}from"node:os";import{isAbsolute as sz,join as l9,resolve as p9}from"node:path";import{captureSdkError as L1,createSessionId as oz,isLikelyAuthError as ez,normalizeUserInput as $_}from"@cline/shared";import{setHomeDirIfUnset as f_}from"@cline/shared/storage";import{createHandlerAsync as FL}from"@cline/llms";import{estimateTokens as X9}from"@cline/shared";var Cj=200000,H9=0.9,hj=16384,Y9=20000,wj=1024,Sj=2000,Ej=2000,bj=8;function x$($,f){if($.length<=f)return $;return`${$.slice(0,f)}
|
|
516
|
+
...[truncated ${$.length-f} chars]`}function BL($){let f=V9($);if(typeof f==="string")return f;return f.map((J)=>{switch(J.type){case"text":return J.text;case"file":return`<file path="${J.path}">
|
|
517
|
+
${J.content}
|
|
518
|
+
</file>`;case"image":return`[image:${J.mediaType}]`;default:return""}}).join(`
|
|
519
|
+
`)}function V9($){if(typeof $==="string")return x$($,Sj);return $.map((f)=>{switch(f.type){case"text":return{...f,text:x$(f.text,Sj)};case"file":return{...f,content:x$(f.content,Ej)};case"image":return f;default:return f}})}function KL($){return Object.entries($).map(([f,J])=>`${f}=${JSON.stringify(J)}`).join(", ")}function kj($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let f=[];for(let J of $.content)switch(J.type){case"text":f.push(`[${$.role==="user"?"User":"Bot"}]: ${J.text}`);break;case"thinking":f.push(`[Bot thinking]: ${x$(J.thinking,2000)}`);break;case"redacted_thinking":f.push("[Bot thinking]: [redacted]");break;case"tool_use":f.push(`[Bot tool calls]: ${J.name}(${KL(J.input)})`);break;case"tool_result":f.push(`[Tool result]: ${BL(J.content)}`);break;case"file":f.push(`[${$.role==="user"?"User":"Bot"} file ${J.path}]: ${x$(J.content,Ej)}`);break;case"image":f.push(`[${$.role==="user"?"User":"Bot"} image]: ${J.mediaType}`);break}return f.join(`
|
|
520
|
+
`)}function Ij($){return $.map(kj).join(`
|
|
521
|
+
|
|
522
|
+
`).trim()}function xj(){let $=new WeakMap;return(f)=>{let J=f,Q=$.get(J);if(typeof Q==="number")return Q;let Z;try{Z=JSON.stringify(f)}catch{Z=kj(f)}let W=X9(Z.length);return $.set(J,W),W}}function B2($){return $.metadata?.kind==="compaction_summary"}function A9($){if(!B2($))return;let f=$.metadata;if(!f)return;let J=f.details;return{kind:"compaction_summary",summary:String(f.summary??""),details:{readFiles:Array.isArray(J?.readFiles)?J.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(J?.modifiedFiles)?J.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(f.tokensBefore??0),generatedAt:Number(f.generatedAt??0)}}function GL($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((f)=>f.type==="tool_result")}function K2($){return $.role==="user"&&!GL($)&&!B2($)}function gj($){for(let f=0;f<$.length;f+=1)if(K2($[f]))return f;return-1}function Y4($){for(let f=$.length-1;f>=0;f-=1)if(K2($[f]))return f;return 0}function mj($){for(let f=$.length-1;f>=0;f-=1)if($[f].role==="assistant")return f;return-1}function vj($){for(let f=$.length-1;f>=0;f-=1)if(B2($[f]))return f;return-1}function cj($,f,J){let Q=Y4($);if(Q<=0)return 0;let Z=0,W=$.length;for(let X=$.length-1;X>=0;X-=1)if(Z+=J($[X]),W=X,Z>=f)break;if(W<=0)return 0;let j=Math.min(W,Q);while(j>0&&!K2($[j]))j-=1;return j}function A2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((f)=>A2(f));if($&&typeof $==="object"){let f=$,J=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])J.push(...A2(f[Q]));if(Array.isArray(f.files)){for(let Q of f.files)if(Q&&typeof Q==="object")J.push(...A2(Q.path))}if(Array.isArray(f.file_paths))J.push(...A2(f.file_paths));return J}return[]}function V2($,f){let J=new Set($);for(let Q of f){let Z=Q.trim();if(!Z)continue;J.add(Z)}return[...J].sort((Q,Z)=>Q.localeCompare(Z))}function uj($){let f=[],J=[];for(let Q of $){let Z=A9(Q);if(Z){f=V2(f,Z.details.readFiles),J=V2(J,Z.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let W of Q.content){if(W.type==="file"){f=V2(f,[W.path]);continue}if(W.type!=="tool_use")continue;let j=A2(W.input);if(W.name==="read_files"){f=V2(f,j);continue}if(W.name==="editor"||W.name==="apply_patch")J=V2(J,j)}}return{readFiles:f,modifiedFiles:J}}function PL($){let f=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
|
|
523
|
+
`):"- none",J=$.modifiedFiles.length>0?$.modifiedFiles.map((Q)=>`- ${Q}`).join(`
|
|
516
524
|
`):"- none";return`## Files
|
|
517
525
|
Read:
|
|
518
|
-
${
|
|
526
|
+
${f}
|
|
519
527
|
Modified:
|
|
520
|
-
${J}`}function
|
|
528
|
+
${J}`}function dj($,f){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
521
529
|
|
|
522
|
-
${
|
|
530
|
+
${PL(f)}`.trim()}function lj($){let f=[`Summarize this session for continuation. Be concise and factual.
|
|
523
531
|
|
|
524
532
|
## Goal
|
|
525
533
|
One sentence: what is being built or fixed.
|
|
@@ -536,34 +544,28 @@ Key technical choices or notable findings (omit if none).
|
|
|
536
544
|
Immediate next steps.
|
|
537
545
|
|
|
538
546
|
## Files
|
|
539
|
-
Read: ${
|
|
540
|
-
Edited: ${
|
|
541
|
-
${
|
|
542
|
-
${
|
|
543
|
-
|
|
544
|
-
`)}function
|
|
545
|
-
|
|
546
|
-
${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fileOps,tokensBefore:f.tokensBefore,generatedAt:Date.now()}}}async function iU(f){let $=pU(f.providerConfig),J="";for await(let W of $.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:f.request}])){if(W.type==="text"){J+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return f.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:f.providerConfig.modelId,providerId:f.providerConfig.providerId}),J.trim()}async function XZ(f){let $=f.context.messages;if($.length<2)return;let J=JZ($,f.preserveRecentTokens,f.estimateMessageTokens);if(J<=0||J>=$.length)return;let W=$.slice(0,J),H=$Z(W),Q=H>=0?v5(W[H])?.summary:void 0,Z=H>=0?W.slice(H+1):W;if(Z.length===0)return;let j=WZ(W),X=t7(Z),A=await iU({providerConfig:ZZ({activeProviderConfig:f.providerConfig,summarizer:f.summarizer}),request:QZ({previousSummary:Q,conversationText:X,fileOps:j}),logger:f.logger});if(!A.trim())return;let P=HZ(A,j),B=$.reduce((R,U)=>R+f.estimateMessageTokens(U),0),Y=[jZ({summary:P,fileOps:j,tokensBefore:B}),...$.slice(J)],V=Y.reduce((R,U)=>R+f.estimateMessageTokens(U),0);return f.logger?.debug("Performed agentic compaction",{messagesBefore:$.length,messagesAfter:Y.length,messagesSummarized:J,messagesPreserved:$.length-J,tokensBefore:B,tokensAfter:V,contextWindowTokens:f.context.contextWindowTokens}),{messages:Y}}function BZ(f){if(e1(f))return;if(typeof f.content==="string"){let J=f.content.trim();return J?{...f,content:J}:void 0}let $=f.content.filter((J)=>J.type!=="text"||J.text.trim());if($.length===0)return;return{...f,content:$.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J)}}function f2(f,$){return f.reduce((J,W)=>J+$(W),0)}function AZ(f,$){let J=Math.max(1,$),W=Math.max(16,J*4);if(typeof f.content==="string"){let Z=V$(f.content,W).trim();return{...f,content:Z||"..."}}let H=W,Q=f.content.map((Z)=>{if(Z.type!=="text"||H<=0)return Z;let j=V$(Z.text,H).trim();return H-=j.length,{...Z,text:j||"..."}});return{...f,content:Q}}function nU(f,$){let J=e7(f),W=u5(f),H=fZ(f),Q=[];for(let Z=0;Z<f.length;Z+=1){let j=BZ(f[Z]);if(!j)continue;Q.push({index:Z,message:j,estimatedTokens:$(j),isFirstUser:Z===J,isLastUser:Z===W,isLastAssistant:Z===H})}return Q}function PZ(f,$,J,W){let H=f[$];H.message=J,H.estimatedTokens=W(J)}function c8(f,$,J,W){let H=f2(f.map((Q)=>Q.message),W);for(let Q=0;Q<f.length&&H>J;){if(!$(f[Q])){Q+=1;continue}H-=f[Q].estimatedTokens,f.splice(Q,1)}}function aU(f,$,J){let W=f2(f.map((Q)=>Q.message),J);if(W<=$)return;for(let Q=f.length-1;Q>=0&&W>$;Q-=1){let Z=f[Q];if(Z.isFirstUser)continue;let j=Math.max(n7,Z.estimatedTokens-(W-$));if(j>=Z.estimatedTokens)continue;PZ(f,Q,AZ(Z.message,j),J),W=f2(f.map((X)=>X.message),J)}if(W<=$)return;let H=f.findIndex((Q)=>Q.isFirstUser);if(H>=0){let Q=Math.max(1,f[H].estimatedTokens-(W-$));PZ(f,H,AZ(f[H].message,Q),J)}}function tU(f,$){return JSON.stringify(f)!==JSON.stringify($)}function YZ(f){let $=Math.max(1,Math.min(f.context.triggerTokens,f.context.contextWindowTokens)),J=nU(f.context.messages,f.estimateMessageTokens);if(J.length===0)return;c8(J,(Z)=>Z.message.role==="assistant"&&!Z.isLastAssistant,$,f.estimateMessageTokens),c8(J,(Z)=>Z.message.role==="user"&&!Z.isFirstUser&&!Z.isLastUser,$,f.estimateMessageTokens),c8(J,(Z)=>Z.message.role==="assistant"&&Z.isLastAssistant,$,f.estimateMessageTokens),c8(J,(Z)=>Z.message.role==="user"&&Z.isLastUser&&!Z.isFirstUser,$,f.estimateMessageTokens),aU(J,$,f.estimateMessageTokens);let W=J.map((Z)=>Z.message);if(!tU(f.context.messages,W))return;let H=f2(f.context.messages.map((Z)=>BZ(Z)??Z),f.estimateMessageTokens),Q=f2(W,f.estimateMessageTokens);return f.logger?.debug("Performed basic compaction",{messagesBefore:f.context.messages.length,messagesAfter:W.length,messagesRemoved:f.context.messages.length-W.length,tokensBefore:H,tokensAfter:Q,targetTokens:$,contextWindowTokens:f.context.contextWindowTokens}),{messages:W}}var sU={basic:({context:f,estimateMessageTokens:$,logger:J})=>YZ({context:f,estimateMessageTokens:$,logger:J}),agentic:({context:f,providerConfig:$,compaction:J,mode:W,estimateMessageTokens:H,logger:Q})=>XZ({context:f,providerConfig:$,summarizer:J?.summarizer,preserveRecentTokens:W==="manual"?Math.min(J?.preserveRecentTokens??g5,f.triggerTokens):J?.preserveRecentTokens??g5,estimateMessageTokens:H,logger:Q})};function oU(f){if(typeof f.config.reserveTokens==="number"){let W=Math.max(0,f.config.reserveTokens),H=Math.max(0,f.contextWindowTokens-W);return{shouldCompact:f.inputTokens>H,triggerTokens:H,thresholdRatio:f.contextWindowTokens>0?H/f.contextWindowTokens:0}}let $=f.config.thresholdRatio??i7,J=f.contextWindowTokens*$;return{shouldCompact:f.inputTokens>J,triggerTokens:J,thresholdRatio:$}}function eU(f){let $=typeof f.manualTargetRatio==="number"&&Number.isFinite(f.manualTargetRatio)?f.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,$)),W=Math.max(1,Math.floor(Math.min(f.autoTriggerTokens,f.inputTokens*J)));return{triggerTokens:W,thresholdRatio:f.contextWindowTokens>0?W/f.contextWindowTokens:0}}function c5(f,$={}){let J=f.compaction;if(J?.enabled!==!0)return;let W=f.providerConfig??{providerId:f.providerId,modelId:f.modelId},H=s7(),Q=J?.strategy??"basic",Z=sU[Q],j=$.mode??"auto";return async(X)=>{let A=X.apiMessages.reduce((F,y)=>F+H(y),0),P=J?.contextWindowTokens??X.model.info?.contextWindow??p7;if(typeof P!=="number"||!Number.isFinite(P)||P<=0)return;let B=oU({inputTokens:A,contextWindowTokens:P,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if(j==="auto"&&!B.shouldCompact)return;let Y=j==="manual"?eU({inputTokens:A,contextWindowTokens:P,autoTriggerTokens:B.triggerTokens,manualTargetRatio:$.manualTargetRatio}):B,V={agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,iteration:X.iteration,messages:X.messages,model:X.model,contextWindowTokens:P,triggerTokens:Y.triggerTokens,thresholdRatio:Y.thresholdRatio,utilizationRatio:P>0?A/P:0},R=j==="manual"?"manual_compaction":"auto_compaction";X.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:R,reason:R,iteration:X.iteration,triggerTokens:Y.triggerTokens,contextWindowTokens:P});let U=X.messages.length,K=J?.compact?await J.compact(V):await Z({context:V,providerConfig:{...W,abortSignal:X.abortSignal},compaction:J,mode:j,estimateMessageTokens:H,logger:f.logger});if(K?.messages){let F=K.messages.reduce((y,D)=>y+H(D),0);f.logger?.log("Context compaction completed",{severity:"info",strategy:Q,contextWindowTokens:P,inputTokens:A,afterTokens:F,tokensSaved:A-F,utilizationBefore:`${(A/P*100).toFixed(1)}%`,utilizationAfter:`${(F/P*100).toFixed(1)}%`,thresholdTrigger:`${(Y.thresholdRatio*100).toFixed(1)}%`,messagesBefore:U,messagesAfter:K.messages.length,messagesRemoved:U-K.messages.length})}return K}}Uf();function Vf(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function Xf(f,$){return{inputTokens:f.inputTokens+Math.max(0,$.inputTokens??0),outputTokens:f.outputTokens+Math.max(0,$.outputTokens??0),cacheReadTokens:f.cacheReadTokens+Math.max(0,$.cacheReadTokens??0),cacheWriteTokens:f.cacheWriteTokens+Math.max(0,$.cacheWriteTokens??0),totalCost:f.totalCost+Math.max(0,$.totalCost??0)}}function d8(f){let $=Vf();for(let J of f)$=Xf($,J);return $}function n$(f){return typeof f==="number"&&Number.isFinite(f)?f:0}function r8(f){let $=Vf();for(let J of f){let W=J.metrics;if(!W)continue;$=Xf($,{inputTokens:n$(W.inputTokens),outputTokens:n$(W.outputTokens),cacheReadTokens:n$(W.cacheReadTokens),cacheWriteTokens:n$(W.cacheWriteTokens),totalCost:n$(W.cost)})}return $}function fG(f){for(let $=f.length-1;$>=0;$-=1){let J=f[$];if(J?.role!=="assistant")continue;let W=n$(J.metrics?.inputTokens);return W>0?W:void 0}return}function $G(f){if(!f||typeof f!=="object")return;let $=f,J=$.skill??$.skill_name??$.skillName;if(typeof J!=="string")return;let W=J.trim();return W.length>0?W:void 0}function d5(f){if(!f||typeof f!=="object")return{};let $=f;return{agentId:typeof $.agentId==="string"?$.agentId:void 0,conversationId:typeof $.conversationId==="string"?$.conversationId:void 0,parentAgentId:typeof $.parentAgentId==="string"?$.parentAgentId:void 0}}function A0(f){let $=f.agentId?.trim();if(!$)return;let J=f.parentAgentId?.trim()||void 0,W=f.teamRole,H="root";if(W==="teammate")H="team_teammate";else if(W==="lead")H="team_lead";else if(J)H="subagent";return{agentId:$,agentKind:H,conversationId:f.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:f.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:f.teamId?.trim()||void 0,teamName:f.teamName?.trim()||void 0,teamRole:W,teamAgentId:f.teamAgentId?.trim()||void 0}}function JG(f){return{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheWriteTokens:f.cacheWriteTokens,cacheReadTokens:f.cacheReadTokens,totalCost:f.cost}}function WG(f){let $=f.isPrimaryAgentEvent?[f.overrides?.agentId,f.eventMetadata.agentId,f.overrides?.teamAgentId]:[f.overrides?.teamAgentId,f.overrides?.agentId,f.eventMetadata.agentId,f.eventMetadata.conversationId];for(let J of $){let W=J?.trim();if(W)return W}return f.isPrimaryAgentEvent?"root":"unknown"}function r5(f,$,J){let{sessionId:W,config:H,liveSession:Q,emit:Z}=f,j=H.telemetry,X=Q?.runtime.teamRuntime,A=J?.isPrimaryAgentEvent??!0,P=d5($),B=A0({agentId:J?.agentId??P.agentId,conversationId:J?.conversationId??P.conversationId,parentAgentId:J?.parentAgentId??P.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??X?.getTeamId(),teamName:J?.teamName??X?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if($.type==="content_start"&&$.contentType==="tool"&&$.toolName==="skills"){let Y=$G($.input);if(Y)c4(j,{ulid:W,skillName:Y,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:H.providerId,modelId:H.modelId,...B})}if($.type==="content_end"&&$.contentType==="tool"){let Y=$.toolName??"unknown",V=!$.error;if(u4(j,{ulid:W,tool:Y,autoApproved:void 0,success:V,modelId:H.modelId,provider:H.providerId,...B}),!V&&(Y==="editor"||Y==="apply_patch"))d4(j,{ulid:W,modelId:H.modelId,provider:H.providerId,errorType:$.error,...B})}if($.type==="notice"&&$.reason==="api_error")y2(j,{ulid:W,model:H.modelId,provider:H.providerId,errorMessage:$.message,...B});if($.type==="error")y2(j,{ulid:W,model:H.modelId,provider:H.providerId,errorMessage:$.error?.message??"unknown error",...B});if($.type==="usage"&&Q?.turnUsageBaseline){let Y=JG($);if(A){Q.turnPrimaryUsage=Xf(Q.turnPrimaryUsage??Vf(),Y);let R=Xf(Q.turnUsageBaseline,Q.turnPrimaryUsage);f.usageBySession.set(W,R),Q1(j,{ulid:W,provider:H.providerId,model:H.modelId,source:"assistant",mode:H.mode,...B}),g4(j,{ulid:W,tokensIn:$.inputTokens,tokensOut:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost,model:H.modelId,...B})}else{let R=WG({isPrimaryAgentEvent:A,overrides:J,eventMetadata:P}),U=Q.turnUsageByAgent??new Map;Q.turnUsageByAgent=U,U.set(R,Xf(U.get(R)??Vf(),Y))}let V=Xf(Q.turnPrimaryUsage??Vf(),d8(Q.turnUsageByAgent?.values()??[]));f.aggregateUsageBySession.set(W,Xf(Q.turnAggregateUsageBaseline??Q.turnUsageBaseline,V))}if($.type==="iteration_end"&&A)f.persistMessages(W,Q?.agent.getMessages()??[],Q?.config.systemPrompt);Z({type:"agent_event",payload:{sessionId:W,event:$,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(A?"lead":void 0):void 0}}),Z({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:gQ($),ts:Date.now()}})}function k0(f){return f.workspaceRoot??f.cwd}import{hasRuntimeConfigExtension as bG}from"@cline/shared";import{spawn as YG}from"node:child_process";import{appendFileSync as VG,readFileSync as RG}from"node:fs";import{join as FG}from"node:path";import{augmentNodeCommandForDebug as KZ,withResolvedClineBuildEnv as t5}from"@cline/shared";import{ensureHookLogDir as RZ}from"@cline/shared/storage";function l8(f,$){if(!$)return;return{name:f,manifest:{capabilities:["hooks"]},hooks:$}}import{existsSync as HG,readdirSync as QG}from"node:fs";import{basename as ZG,extname as jG,join as XG}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as VZ,resolveHooksConfigSearchPaths as AG}from"@cline/shared/storage";function l5(f){return AG(f)}var p8;((P)=>{P.TaskStart="TaskStart";P.TaskResume="TaskResume";P.TaskCancel="TaskCancel";P.TaskComplete="TaskComplete";P.TaskError="TaskError";P.PreToolUse="PreToolUse";P.PostToolUse="PostToolUse";P.UserPromptSubmit="UserPromptSubmit";P.PreCompact="PreCompact";P.SessionShutdown="SessionShutdown"})(p8||={});var p5={["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"},PG=new Map(Object.values(p8).map((f)=>[f.toLowerCase(),f])),BG=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function i5(f){let $=jG(f).toLowerCase();if(!BG.has($))return;let J=ZG(f,$).trim().toLowerCase();return PG.get(J)}function a$(f){let $=[],J=new Set,W=l5(f).filter((H)=>HG(H));for(let H of W)try{for(let Q of QG(H,{withFileTypes:!0})){if(!Q.isFile())continue;let Z=i5(Q.name);if(!Z)continue;let j=XG(H,Q.name);if(J.has(j))continue;J.add(j),$.push({fileName:Z,hookEventName:p5[Z],path:j})}}catch{}return $.sort((H,Q)=>H.path.localeCompare(Q.path))}function n8(f){if(!f||typeof f!=="object")return{};let $={};for(let[J,W]of Object.entries(f))$[J]=typeof W==="string"?W:JSON.stringify(W);return $}function i8(f,$,J){let W=J instanceof Error?`: ${J.message}`:"",H=`${$}${W}`;if(f){try{f.log(H,{severity:"warn",...J!==void 0?{error:J}:{}})}catch{}return}console.warn(H)}function KG(f,$){if(!$)return f;if(!f)return{...$};let J=[f.context,$.context].filter((H)=>typeof H==="string"&&H.length>0).join(`
|
|
547
|
-
`),
|
|
548
|
-
`).map((
|
|
549
|
-
`,Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??FG(RZ(),"hooks.jsonl");RZ(Z),VG(Z,H,"utf8")};return{beforeRun:async(W)=>{let H=a5(W,"");J({...Af(H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let H=GZ(W);J({...Af(H,$),hookName:"tool_call",iteration:H.iteration,tool_call:{id:H.call.id,name:H.call.name,input:H.call.input},preToolUse:{toolName:H.call.name,parameters:n8(H.call.input)}});return},afterTool:async(W)=>{let H=TZ(W);J({...Af(H,$),hookName:"tool_result",iteration:H.iteration,tool_result:H.record,postToolUse:{toolName:H.record.name,parameters:n8(H.record.input),result:typeof H.record.output==="string"?H.record.output:JSON.stringify(H.record.output),success:!H.record.error,executionTimeMs:H.record.durationMs}});return},afterRun:async({snapshot:W,result:H})=>{let Q=I0(W);if(H.status==="completed"){J({...Af(Q,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}});return}if(H.status==="aborted"||n5(H.error?.message)){J({...Af(Q,$),hookName:"agent_abort",reason:H.error?.message,taskCancel:{taskMetadata:{}}});return}if(H.error)J({...Af(Q,$),hookName:"agent_error",iteration:H.iterations,error:{name:H.error.name,message:H.error.message,stack:H.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let H=a5({snapshot:W.snapshot},DZ(W.message.content));J({...Af(H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:H.userMessage,attachments:[]}})}}}function s5(f){let $=LG(f.workspacePath);if(!Object.values($).some((B)=>B.length>0))return;let W=async(B,Y)=>{let V=$[Y]??[];if(V.length===0)return;R$({commands:V,cwd:f.cwd,logger:f.logger,payload:Y==="agent_resume"?{...Af(B,f),hookName:Y,taskResume:{taskMetadata:{},previousState:{}}}:{...Af(B,f),hookName:Y,taskStart:{taskMetadata:{}}}})},H=async(B)=>{let Y=$.prompt_submit??[];if(Y.length>0)R$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Af(B,f),hookName:"prompt_submit",userPromptSubmit:{prompt:B.userMessage,attachments:[]}}})},Q=async(B)=>{let Y=$.tool_call??[];if(Y.length===0)return;return hG({commands:Y,cwd:f.cwd,logger:f.logger,timeoutMs:f.toolCallTimeoutMs??120000,payload:{...Af(B,f),hookName:"tool_call",iteration:B.iteration,tool_call:{id:B.call.id,name:B.call.name,input:B.call.input},preToolUse:{toolName:B.call.name,parameters:n8(B.call.input)}}})},Z=async(B)=>{let Y=$.tool_result??[];if(Y.length===0)return;R$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Af(B,f),hookName:"tool_result",iteration:B.iteration,tool_result:B.record,postToolUse:{toolName:B.record.name,parameters:n8(B.record.input),result:typeof B.record.output==="string"?B.record.output:JSON.stringify(B.record.output),success:!B.record.error,executionTimeMs:B.record.durationMs}}})},j=async(B)=>{let Y=$.agent_end??[];if(Y.length===0)return;R$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Af(B,f),hookName:"agent_end",iteration:B.iteration,turn:B.turn,taskComplete:{taskMetadata:{}}}})},X=async(B)=>{let Y=$.agent_error??[];if(Y.length===0)return;R$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Af(B,f),hookName:"agent_error",iteration:B.iteration,error:{name:B.error.name,message:B.error.message,stack:B.error.stack}}})},A=async(B)=>{if(n5(B.reason)){let V=$.agent_abort??[];if(V.length>0)R$({commands:V,cwd:f.cwd,logger:f.logger,payload:{...Af(B,f),hookName:"agent_abort",reason:B.reason,taskCancel:{taskMetadata:{}}}})}let Y=$.session_shutdown??[];if(Y.length===0)return;R$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Af(B,f),hookName:"session_shutdown",reason:B.reason}})},P={};if(($.agent_start?.length??0)>0||($.agent_resume?.length??0)>0||($.prompt_submit?.length??0)>0){if(($.agent_start?.length??0)>0||($.agent_resume?.length??0)>0)P.beforeRun=async(B)=>{let Y=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(I0(B.snapshot),Y);return};if(($.prompt_submit?.length??0)>0)P.onEvent=async(B)=>{if(B.type!=="message-added"||B.message.role!=="user")return;await H(a5({snapshot:B.snapshot},DZ(B.message.content)))}}if(($.tool_call?.length??0)>0)P.beforeTool=async(B)=>{let Y=await Q(GZ(B));return OG(Y)};if(($.tool_result?.length??0)>0)P.afterTool=async(B)=>{await Z(TZ(B));return};if(($.agent_end?.length??0)>0)P.afterRun=async({snapshot:B,result:Y})=>{if(Y.status!=="completed")return;await j({...I0(B),iteration:Y.iterations,turn:{outputText:Y.outputText,status:Y.status}})};if(($.agent_error?.length??0)>0||($.agent_abort?.length??0)>0||($.session_shutdown?.length??0)>0){let B=P.afterRun;P.afterRun=async(Y)=>{await B?.(Y);let{snapshot:V,result:R}=Y;if(R.status==="aborted"||n5(R.error?.message)){await A({...I0(V),reason:R.error?.message});return}if(R.error)await X({...I0(V),iteration:R.iterations,error:R.error})}}return P}function t8(f){return l8("core.hook_config_files",s5(f))}function F$(f,$){let J=f.map((W)=>W[$]).filter((W)=>typeof W==="function");if(J.length===0)return;return async(W)=>{let H;for(let Q of J){let Z=await Q(W);if(!Z||typeof Z!=="object")continue;let j=Z;H={...H??{},...j,stop:H?.stop===!0||j.stop===!0?!0:j.stop,options:H?.options||j.options?{...H?.options??{},...j.options??{}}:void 0}}return H}}function $2(f){let $=f.filter((J)=>J!==void 0);if($.length===0)return;return{beforeRun:F$($,"beforeRun"),afterRun:F$($,"afterRun"),beforeModel:F$($,"beforeModel"),afterModel:F$($,"afterModel"),beforeTool:F$($,"beforeTool"),afterTool:F$($,"afterTool"),onEvent:F$($,"onEvent")}}import{z as m0}from"zod";var s8=q$;var _Z=m0.object({settings:q$,updatedAt:m0.string().datetime(),tokenSource:m0.enum(["manual","oauth","migration"]).default("manual")}),o8=m0.object({version:m0.literal(1),lastUsedProvider:m0.string().min(1).optional(),providers:m0.record(m0.string(),_Z)});function t$(){return{version:1,providers:{}}}W0();import{upsertWorkspaceInfo as zG,WorkspaceManifestSchema as o5}from"@cline/shared";class e8{manifest;listeners=new Set;constructor(f){this.manifest=o5.parse(f??{workspaces:{}})}async addWorkspacePath(f){let $=await _8(f);return this.manifest=zG(this.manifest,$),this.emit({type:"workspace_added",workspace:$}),$}async switchWorkspace(f){let $=J$(f),J=this.manifest.workspaces[$];if(J)return this.manifest=o5.parse({...this.manifest,currentWorkspacePath:$}),this.emit({type:"workspace_switched",workspace:J}),J;let W=await this.addWorkspacePath($);return this.manifest=o5.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}getCurrentWorkspace(){let f=this.manifest.currentWorkspacePath;if(!f)return;return this.manifest.workspaces[f]}getWorkspace(f){let $=J$(f);return this.manifest.workspaces[$]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit(f){for(let $ of this.listeners)$(f)}}Uf();import{createHash as NG}from"node:crypto";var MZ=new Set,LZ=new Set;function qG(f){return NG("sha256").update(f).digest("hex")}function wG(f){if(f.vcsTypes&&f.vcsTypes.length>0)return f.vcsTypes;return[f.vcsType==="git"?"git":"none"]}function hZ(f){if(!f.telemetry)return;let $=qG(f.rootPath),J=f.rootCount??1;if(!MZ.has($))MZ.add($),k4(f.telemetry,{root_count:J,vcs_types:wG(f),init_duration_ms:f.durationMs,feature_flag_enabled:f.featureFlagEnabled??!0,is_remote_workspace:f.isRemoteWorkspace});if(f.initError&&!LZ.has($)){LZ.add($);let W=Error(f.initError.message);W.name=f.initError.errorType||"Error",I4(f.telemetry,W,{fallback_to_single_root:!0,workspace_count:J})}}function CG(f){return`${f.pluginName??f.pluginPath}: ${f.message}`}function EG(f,$,J){if($.length>0)for(let Q of $)J?.log(Q.message,{severity:"warn"});if(f.length===0)return;let W=f.slice(0,3).map(CG).join("; "),H=f.length>3?`; and ${f.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${W}${H}. Use --verbose for more details.`,{severity:"warn"});for(let Q of f)J?.log(`Plugin initialization failed (${Q.phase}) for ${Q.pluginPath}`,{severity:"warn",stack:Q.stack,pluginPath:Q.pluginPath,pluginName:Q.pluginName})}function SG(f,$){let J=typeof f.thinking==="boolean",W=typeof f.reasoningEffort==="string";if(!J&&!W)return $;return{...$??{},...J?{enabled:f.thinking}:{},...W?{effort:f.reasoningEffort}:{}}}function kG(f,$){return bG(f,$)}function IG(f){let $=0;for(let J of f??[]){if(J.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0)?.kind==="recovery_notice")continue;$+=1}return $}function mG(f){let $={...f.storedHeaders??{},...f.configHeaders??{}},J=f.accountId?.trim()||xG(f.accessToken);if($.originator="cline",$.session_id=f.sessionId,$["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)$["ChatGPT-Account-Id"]=J;return $}function xG(f){let $=f?.trim();if(!$)return;let J=Zf($),W=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let H=J?.organizations?.[0]?.id;if(typeof H==="string"&&H.length>0)return H;let Q=J?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;return}function gG(f,$,J,W,H){let Q=J.getProviderSettings(f.providerId),Z=W||Q?.modelCatalog?{...W??{},...Q?.modelCatalog??{}}:void 0,j={...Q??{},provider:f.providerId,model:f.modelId,apiKey:f.apiKey??Q?.apiKey,baseUrl:f.baseUrl??Q?.baseUrl,headers:f.providerId==="openai-codex"?mG({sessionId:$,configHeaders:f.headers,storedHeaders:Q?.headers,accountId:Q?.auth?.accountId,accessToken:f.apiKey??Q?.auth?.accessToken??Q?.apiKey}):f.headers??Q?.headers,reasoning:SG(f,Q?.reasoning),modelCatalog:Z},X=f0(j);if(f.knownModels)X.knownModels=f.knownModels;if(f.extensionContext)X.extensionContext=f.extensionContext;let P=f.fetch??X.fetch??H;if(P)X.fetch=P;return X}async function OZ(f){let{input:$,sessionId:J,providerSettingsManager:W,defaultTelemetry:H,defaultCapabilities:Q,defaultToolPolicies:Z,defaultFetch:j,onPluginEvent:X,onTeamEvent:A,createSpawnTool:P,localRuntime:B,readSessionMetadata:Y,writeSessionMetadata:V}=f,R=k0($.config),{modelCatalogDefaults:U,userInstructionService:K,configExtensions:F,onTeamRestored:y,...D}=B??{},M=Object.keys(D).length>0?D:void 0,{workspaceInfo:T,workspaceMetadata:_,durationMs:L,vcsType:O,initError:e}=await DQ(R),ff=M?.extensionContext,a={...ff??{},workspace:{...T,...ff?.workspace??{}},session:{...ff?.session??{},sessionId:J},logger:ff?.logger??M?.logger,telemetry:ff?.telemetry??M?.telemetry??H};hZ({telemetry:a.telemetry,rootPath:T.rootPath,workspaceInfo:T,rootCount:1,vcsType:O,durationMs:L,initError:e,featureFlagEnabled:!0});let g=t8({cwd:$.config.cwd,workspacePath:R,rootSessionId:J,logger:M?.logger,workspaceInfo:T}),Pf=xQ(M?.hooks)?void 0:a8({rootSessionId:J,workspacePath:R,workspaceInfo:T}),B0=$2([M?.hooks,Pf]),r;if(kG(F,"plugins"))try{r=await U8({pluginPaths:M?.pluginPaths,workspacePath:R,cwd:$.config.cwd,onEvent:X,providerId:$.config.providerId,modelId:$.config.modelId,workspaceInfo:T,session:a.session,client:a.client,user:a.user,logger:a.logger,telemetry:a.telemetry,automation:a.automation}),EG(r.failures,r.warnings,M?.logger)}catch(H1){let u=H1 instanceof Error?H1.message:String(H1);M?.logger?.log?.(`plugin loading failed; continuing without plugins (${u})`)}let b=sJ(g?[g]:void 0,sJ(M?.extensions,PJ(r?.extensions))),l={...$.config,...M??{},sessionId:J,hooks:B0,extensions:b,extensionContext:a,telemetry:a.telemetry},sf=gG(l,J,W,U,j),of=$2([l.hooks,l.checkpoint?.enabled===!0?w7({cwd:l.cwd,sessionId:J,logger:l.logger,createCheckpoint:l.checkpoint?.createCheckpoint,initialRunCount:IG($.initialMessages),readSessionMetadata:Y,writeSessionMetadata:V}):void 0]),u0={...l,providerConfig:sf,workspaceMetadata:_,hooks:of},_$=$.toolPolicies??l.toolPolicies??Z,W1=Ff(Q,$.capabilities),R2=W1?.requestToolApproval,w4=W1?.toolExecutors,M$=new e8({currentWorkspacePath:T.rootPath,workspaces:{[T.rootPath]:T}});return{effectiveInput:$,config:u0,providerConfig:sf,workspaceMetadata:_,workspaceInfo:T,extensions:b,hooks:of,toolPolicies:_$,requestToolApproval:R2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:u0,hooks:of,extensions:b,onTeamEvent:A,createSpawnTool:P,onTeamRestored:y,userInstructionService:K,configExtensions:F,toolExecutors:w4,workspaceManager:M$,logger:u0.logger,telemetry:u0.telemetry}}}import{resolveDocumentsExtensionPath as vG}from"@cline/shared/storage";Uf();function zZ(f,$,J,W,H){if(J)x4(f.telemetry,{ulid:$,apiProvider:f.providerId,...H});else m4(f.telemetry,{ulid:$,apiProvider:f.providerId,...H});uG(f.telemetry,{workspacePath:W})}function uG(f,$){let J=vG("Hooks"),W=a$($.workspacePath),H=new Map;for(let Q of W){let Z=Q.hookEventName??"unknown",j=H.get(Z)??{global:0,workspace:0};if(Q.path===J||Q.path.startsWith(`${J}/`))j.global+=1;else j.workspace+=1;H.set(Z,j)}for(let[Q,Z]of H.entries())n4(f,Q,Z.global,Z.workspace)}function NZ(f,$){for(let J of $.mentions)p4(f,J,$.matchedFiles.includes(J)?1:0,"file",!$.matchedFiles.includes(J));for(let J of $.matchedFiles)r4(f,"file",J.length);for(let J of $.ignoredMentions)l4(f,"file","not_found",J)}import{chmodSync as rZ,existsSync as HW,mkdirSync as LT,readFileSync as hT,writeFileSync as OT}from"node:fs";import{basename as lZ,dirname as QW}from"node:path";import{resolveProviderSettingsPath as zT}from"@cline/shared/storage";import{existsSync as cG,mkdirSync as dG,readFileSync as rG,writeFileSync as lG}from"node:fs";import{mkdir as pG,readFile as iG,writeFile as nG}from"node:fs/promises";import{dirname as e5,join as aG}from"node:path";import*as _f from"@cline/llms";import{ModelCapabilitySchema as tG,ProviderCapabilitySchema as sG,ProviderClientSchema as oG,ProviderProtocolSchema as eG}from"@cline/shared";import{z as d}from"zod";var fT=d.object({id:d.string().optional(),name:d.string().optional(),capabilities:d.array(tG).optional(),supportsVision:d.boolean().optional(),supportsAttachments:d.boolean().optional(),supportsReasoning:d.boolean().optional()}).passthrough(),$T=d.object({name:d.string(),baseUrl:d.string(),defaultModelId:d.string().optional(),protocol:eG.optional(),client:oG.optional(),capabilities:d.array(sG).optional(),modelsSourceUrl:d.string().optional()}).passthrough(),qZ=d.object({provider:$T.optional(),models:d.record(d.string(),fT).optional()}).passthrough(),wZ=d.object({version:d.literal(1),providers:d.record(d.string(),qZ)}),JT=d.object({version:d.literal(1),providers:d.record(d.string(),d.unknown())}),f4=new Set;function bZ(f){return f.split(/[-_]/).filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}function K$(f){return aG(e5(f.getFilePath()),"models.json")}function $4(){return{version:1,providers:{}}}function CZ(f){let $=JT.safeParse(f);if(!$.success)return $4();let J={};for(let[W,H]of Object.entries($.data.providers)){let Q=qZ.safeParse(H);if(Q.success)J[W]=Q.data}return{version:1,providers:J}}function fW(f){if(!cG(f))return $4();try{let $=rG(f,"utf8");return CZ(JSON.parse($))}catch{}return $4()}async function s$(f){try{let $=await iG(f,"utf8");return CZ(JSON.parse($))}catch{}return $4()}function EZ(f,$){dG(e5(f),{recursive:!0});let J=wZ.parse($);lG(f,`${JSON.stringify(J,null,2)}
|
|
550
|
-
`,"utf8")}async function
|
|
551
|
-
`,"utf8")}function SZ(f,$){return{id:f,name:$.name??f,supportsAttachments:$.capabilities?.includes("files"),supportsVision:$.capabilities?.includes("images"),supportsReasoning:$.capabilities?.includes("reasoning")||$.thinkingConfig!=null}}function kZ(f){if(!f||f.length===0)return;let $=new Set;if(f.includes("reasoning"))$.add("reasoning");if(f.includes("prompt-cache"))$.add("prompt-cache");if(f.includes("tools"))$.add("tools");return $.size>0?[...$]:void 0}function IZ(f){let $=new Set;if(!f||f.length===0)return[...$];if(f.includes("streaming"))$.add("streaming");if(f.includes("tools"))$.add("tools");if(f.includes("reasoning"))$.add("reasoning");if(f.includes("prompt-cache"))$.add("prompt-cache");if(f.includes("vision"))$.add("images"),$.add("files");return[...$]}function WT(f){return f!=null&&typeof f.name==="string"&&typeof f.baseUrl==="string"}function mZ(f,$){return f??$??"openai-chat"}function xZ(f,$,J){return f??J??($==="openai-responses"?"openai":"openai-compatible")}function HT(f,$){let J=new Set($?.capabilities??[]);if($?.supportsVision)J.add("images");if($?.supportsAttachments)J.add("files");if($?.supportsReasoning)J.add("reasoning");return{id:f,name:$?.name??f,capabilities:J.size>0?[...J]:void 0}}function QT(f,$){for(let[J,W]of Object.entries($??{})){let H=W.id?.trim()||J.trim();if(!H)continue;_f.registerModel(f,H,HT(H,W))}}function ZT(f,$,J){return{...$??{},id:f,name:$?.name??f,capabilities:$?.capabilities??J}}function jT(f){return Object.assign({},..._f.resolveProviderModelCatalogKeys(f).map((J)=>_f.getGeneratedModelsForProvider(J)))}function XT(f){let $=f.provider.trim();if(!$||_f.isBuiltInProviderId($))return;let J=f.baseUrl?.trim();if(!J)return;let W=_f.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],H=jT($),Q=IZ(f.capabilities),Z=Q.length>0?Q:void 0,j=f.model?.trim(),X={...H,...W?.models??{}};if(j)X[j]=ZT(j,X[j],Z);let A=Object.keys(X).filter(Boolean),P=j||A[0];if(!P)return;let B=mZ(f.protocol,W?.provider.protocol),Y=xZ(f.client,B,W?.provider.client);_f.registerProvider({provider:{id:$,name:W?.provider.name??bZ($),description:W?.provider.description,protocol:B,client:Y,baseUrl:J,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:P,capabilities:kZ(f.capabilities)??W?.provider.capabilities,source:"file"},models:X})}function W4(f){for(let $ of Object.values(f.providers))XT($.settings)}function J2(f,$){let J=$.models??{};if(!WT($.provider)){QT(f,J);return}let W=IZ($.provider.capabilities),H=Object.entries(J).map(([A,P])=>({id:P.id?.trim()||A.trim(),model:P})).filter(({id:A})=>A.length>0),Q=$.provider.defaultModelId?.trim()||H[0]?.id||"default",Z=mZ($.provider.protocol,void 0),j=xZ($.provider.client,Z,void 0),X=Object.fromEntries(H.map(({id:A,model:P})=>[A,{id:A,name:P.name??A,capabilities:W.length>0?W:void 0,status:"active"}]));_f.registerProvider({provider:{id:f,name:$.provider.name.trim()||bZ(f),protocol:Z,client:j,baseUrl:$.provider.baseUrl,modelsSourceUrl:$.provider.modelsSourceUrl,defaultModelId:Q,capabilities:kZ($.provider.capabilities),source:"file"},models:X})}function gZ(f){let $=K$(f);if(f4.has($))return;let J=fW($);for(let[W,H]of Object.entries(J.providers))J2(W,H);f4.add($)}async function vZ(f){let $=K$(f);if(f4.has($))return;let J=await s$($);for(let[W,H]of Object.entries(J.providers))J2(W,H);f4.add($)}import{existsSync as AT,readFileSync as PT}from"node:fs";import{dirname as BT,join as $W}from"node:path";import*as cZ from"@cline/llms";import{resolveClineDataDir as YT}from"@cline/shared/storage";var dZ="openai";function VT(f){let $=f?.trim();if(!$)return;try{let J=JSON.parse($);if(!J)return;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:J.expiresAt,accountId:J.userInfo?.id}}catch{return}}function w(f){let $=f?.trim();return $?$:void 0}function uZ(f){if(!AT(f))return;try{let $=PT(f,"utf8"),J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function RT(f){let $=f.dataDir??YT(),J=f.globalStatePath??$W($,"globalState.json"),W=f.secretsPath??$W($,"secrets.json"),H=uZ(J),Q=uZ(W);if(!H&&!Q)return;return{globalState:H??{},secrets:Q??{}}}function FT(f){try{let J=new URL(f).hostname.toLowerCase();return J==="api.openai.com"||J.endsWith(".openai.azure.com")||J.endsWith(".services.ai.azure.com")}catch{return!1}}function KT(f){let $=w(f.openAiBaseUrl);if(!$)return!1;if(f.azureApiVersion||f.azureIdentity)return!1;return!FT($)}function JW(f,$){if(f==="openai"&&KT($))return dZ;return f}function yT(f,$,J,W){let H=J==="plan"?"planMode":"actMode",Q=$===W?w(J==="plan"?f.planModeApiModelId:f.actModeApiModelId):void 0,j={openrouter:`${H}OpenRouterModelId`,cline:`${H}ClineModelId`,openai:`${H}OpenAiModelId`,ollama:`${H}OllamaModelId`,lmstudio:`${H}LmStudioModelId`,litellm:`${H}LiteLlmModelId`,requesty:`${H}RequestyModelId`,together:`${H}TogetherModelId`,fireworks:`${H}FireworksModelId`,sapaicore:`${H}SapAiCoreModelId`,groq:`${H}GroqModelId`,baseten:`${H}BasetenModelId`,huggingface:`${H}HuggingFaceModelId`,"huawei-cloud-maas":`${H}HuaweiCloudMaasModelId`,oca:`${H}OcaModelId`,aihubmix:`${H}AihubmixModelId`,hicap:`${H}HicapModelId`,nousResearch:`${H}NousResearchModelId`,"vercel-ai-gateway":`${H}VercelAiGatewayModelId`}[$];return(j?w(typeof f[j]==="string"?f[j]:void 0):void 0)??Q}function UT(f,$,J){let W=J==="plan"?f.planModeReasoningEffort:f.actModeReasoningEffort,H=J==="plan"?f.geminiPlanModeThinkingLevel:f.geminiActModeThinkingLevel,Q=J==="plan"?f.planModeThinkingBudgetTokens:f.actModeThinkingBudgetTokens,Z=($==="gemini"?H:void 0)??W,j=Z==="none"||Z==="low"||Z==="medium"||Z==="high"?Z:void 0,X=typeof Q==="number"&&Number.isInteger(Q)&&Q>0?Q:void 0;if(!j&&X===void 0)return;return{...j?{effort:j}:{},...X!==void 0?{budgetTokens:X}:{}}}function GT(f){let $=f["openai-codex-oauth-credentials"];if(!$)return;try{let J=JSON.parse($),W=w(J.access_token),H=w(J.refresh_token),Q=w(J.accountId);if(!W&&!H&&!Q)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...H?{refreshToken:H}:{},...Q?{accountId:Q}:{}}}}catch{return}}function TT(f){let $=cZ.getGeneratedModelsForProvider(f);return Object.keys($)[0]??void 0}function DT(f,$,J,W){let H=JW(f,$),Q=w(W==="plan"?$.planModeApiProvider:$.actModeApiProvider),Z=yT($,f,W,Q)??TT(H),j=UT($,H,W),X=typeof $.requestTimeoutMs==="number"&&Number.isInteger($.requestTimeoutMs)&&$.requestTimeoutMs>0?$.requestTimeoutMs:void 0,A={anthropic:J.apiKey,cline:J.clineApiKey,openai:J.openAiApiKey,"openai-native":J.openAiNativeApiKey,openrouter:J.openRouterApiKey,bedrock:J.awsBedrockApiKey,gemini:J.geminiApiKey,ollama:J.ollamaApiKey,deepseek:J.deepSeekApiKey,requesty:J.requestyApiKey,together:J.togetherApiKey,fireworks:J.fireworksApiKey,qwen:J.qwenApiKey,doubao:J.doubaoApiKey,mistral:J.mistralApiKey,litellm:J.liteLlmApiKey,asksage:J.asksageApiKey,xai:J.xaiApiKey,moonshot:J.moonshotApiKey,zai:J.zaiApiKey,huggingface:J.huggingFaceApiKey,nebius:J.nebiusApiKey,sambanova:J.sambanovaApiKey,cerebras:J.cerebrasApiKey,groq:J.groqApiKey,"huawei-cloud-maas":J.huaweiCloudMaasApiKey,baseten:J.basetenApiKey,"vercel-ai-gateway":J.vercelAiGatewayApiKey,dify:J.difyApiKey,minimax:J.minimaxApiKey,hicap:J.hicapApiKey,aihubmix:J.aihubmixApiKey,nousResearch:J.nousResearchApiKey,oca:J.ocaApiKey,sapaicore:J.sapAiCoreClientId},P={};if(f==="openai-codex")Object.assign(P,GT(J));if(f==="cline")try{let F=w(J["cline:clineAccountId"]);if(F)P.auth={...P.auth??{},...VT(F)}}catch{}if(f==="openai"&&$.openAiHeaders)P.headers=$.openAiHeaders;if(f==="bedrock")P.aws={accessKey:w(J.awsAccessKey),secretKey:w(J.awsSecretKey),sessionToken:w(J.awsSessionToken),region:w($.awsRegion),authentication:$.awsAuthentication,profile:$.awsUseProfile?w($.awsProfile):void 0,usePromptCache:$.awsBedrockUsePromptCache,useCrossRegionInference:$.awsUseCrossRegionInference,useGlobalInference:$.awsUseGlobalInference,endpoint:w($.awsBedrockEndpoint),customModelBaseId:w(W==="plan"?$.planModeAwsBedrockCustomModelBaseId:$.actModeAwsBedrockCustomModelBaseId)};if(f==="vertex")P.gcp={projectId:w($.vertexProjectId),region:w($.vertexRegion)};if(f==="openai"&&($.azureApiVersion||$.azureIdentity!==void 0))P.azure={apiVersion:w($.azureApiVersion),useIdentity:$.azureIdentity};if(f==="sapaicore")P.sap={clientId:w(J.sapAiCoreClientId),clientSecret:w(J.sapAiCoreClientSecret),tokenUrl:w($.sapAiCoreTokenUrl),resourceGroup:w($.sapAiResourceGroup),deploymentId:w(W==="plan"?$.planModeSapAiCoreDeploymentId:$.actModeSapAiCoreDeploymentId),useOrchestrationMode:$.sapAiCoreUseOrchestrationMode};if(f==="oca"){P.oca={mode:$.ocaMode};let F=w(J.ocaRefreshToken);if(F)P.auth={...P.auth??{},refreshToken:F}}if(f==="qwen")P.apiLine=$.qwenApiLine;if(f==="moonshot")P.apiLine=$.moonshotApiLine;if(f==="zai")P.apiLine=$.zaiApiLine;if(f==="minimax")P.apiLine=$.minimaxApiLine;let B={anthropic:$.anthropicBaseUrl,openai:$.openAiBaseUrl,ollama:$.ollamaBaseUrl,lmstudio:$.lmStudioBaseUrl,litellm:$.liteLlmBaseUrl,gemini:$.geminiBaseUrl,requesty:$.requestyBaseUrl,asksage:$.asksageApiUrl,dify:$.difyBaseUrl,oca:$.ocaBaseUrl,aihubmix:$.aihubmixBaseUrl,sapaicore:$.sapAiCoreBaseUrl},Y=w(A[f]),V=w(B[f]),R={provider:H,...Y?{apiKey:Y}:{},...Z?{model:Z}:{},...V?{baseUrl:V}:{},...j?{reasoning:j}:{},...X?{timeout:X}:{},...P},U=s8.safeParse(R);if(!U.success)return;return Object.keys(R).filter((F)=>F!=="provider").length>0?U.data:void 0}function _T(f,$){if(f!==dZ)return;if(!$.baseUrl||!$.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:$.baseUrl,defaultModelId:$.model},models:{[$.model]:{id:$.model,name:$.model}}}}function MT(f,$){let J=new Set;for(let W of[f.actModeApiProvider,f.planModeApiProvider]){let H=w(W);if(H)J.add(H)}if(w($.apiKey))J.add("anthropic");if(w($.openRouterApiKey))J.add("openrouter");if(w($.openAiApiKey))J.add("openai");if(w($.openAiNativeApiKey))J.add("openai-native");if(w($["openai-codex-oauth-credentials"]))J.add("openai-codex");if(w($.geminiApiKey))J.add("gemini");if(w($.ollamaApiKey))J.add("ollama");if(w($.awsAccessKey)||w($.awsBedrockApiKey))J.add("bedrock");if(w(f.vertexProjectId)||w(f.vertexRegion))J.add("vertex");if(w($.clineApiKey))J.add("cline");if(w($.ocaApiKey))J.add("oca");return J}function WW(f){let $=f.providerSettingsManager.read(),J=RT(f);if(!J)return{migrated:!1,providerCount:Object.keys($.providers).length,lastUsedProvider:$.lastUsedProvider};let{globalState:W,secrets:H}=J,Q=W.mode==="plan"?"plan":"act",Z=MT(W,H),j=t$();j.providers={...$.providers},j.lastUsedProvider=$.lastUsedProvider;let X=new Date().toISOString(),A=0,P=$W(BT(f.providerSettingsManager.getFilePath()),"models.json"),B=fW(P),Y=0;for(let U of Z){let K=JW(U,W);if(j.providers[K])continue;let F=DT(U,W,H,Q);if(!F)continue;j.providers[K]={settings:F,updatedAt:X,tokenSource:"migration"},A+=1;let y=_T(K,F);if(y&&!B.providers[K])B.providers[K]=y,Y+=1}if(A===0&&Y===0)return{migrated:!1,providerCount:Object.keys($.providers).length,lastUsedProvider:$.lastUsedProvider};let V=w(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),R=V?JW(V,W):void 0;if(j.lastUsedProvider=$.lastUsedProvider??(R&&j.providers[R]?R:Object.keys(j.providers)[0]),f.providerSettingsManager.write(j),Y>0)EZ(P,B);return{migrated:A>0||Y>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}function NT(){return new Date().toISOString()}function qT(f){if(lZ(f)!=="providers.json")return;let $=QW(f);if(lZ($)!=="settings")return;return QW($)}class x0{filePath;dataDir;constructor(f={}){if(this.filePath=f.filePath??zT(),this.dataDir=f.dataDir??qT(this.filePath),this.dataDir||!f.filePath)WW({providerSettingsManager:this,dataDir:this.dataDir});if(gZ(this),W4(this.read()),HW(this.filePath))try{rZ(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!HW(this.filePath))return t$();try{let f=hT(this.filePath,"utf8"),$=JSON.parse(f),J=o8.safeParse($);if(J.success)return W4(J.data),J.data}catch{}return t$()}write(f){let $=o8.parse(f),J=QW(this.filePath);if(!HW(J))LT(J,{recursive:!0,mode:448});OT(this.filePath,`${JSON.stringify($,null,2)}
|
|
552
|
-
`,"utf8");try{
|
|
553
|
-
|
|
554
|
-
`,"utf8");
|
|
555
|
-
`,"utf8")}
|
|
556
|
-
\r
|
|
557
|
-
`);if(J<0)break;let H=this.buffer.slice(0,J).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!H)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let Q=Number.parseInt(H[1],10),Z=J+4,j=Z+Q;if(this.buffer.length<j)break;$.push(this.buffer.slice(Z,j)),this.buffer=this.buffer.slice(j)}return $}}class XW{buffer="";decoder=new fj("utf8");push(f){this.buffer+=this.decoder.write(f);let $=[];while(!0){let J=this.buffer.indexOf(`
|
|
558
|
-
`);if(J<0)break;let W=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),W.length>0)$.push(W)}return $}}class $j{registration;process;nextRequestId=1;pending=new Map;framedParser=new jW;newlineParser=new XW;stderrBuffer="";connected=!1;protocolMode="newline";constructor(f){this.registration=f}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 f=["newline","framed"],$;for(let J of f){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:IT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},xT),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(W){$=W instanceof Error?W:Error(String(W))}}throw $??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let f=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!f)return;f.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter(($)=>typeof $?.name==="string"&&typeof $.inputSchema==="object"&&$.inputSchema!==null).map(($)=>({name:$.name,description:$.description,inputSchema:$.inputSchema}))}async callTool(f){return this.request("tools/call",{name:f.name,arguments:f.arguments??{}})}spawnProcess(f){let $=this.registration.transport;if($.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${$.type}`);this.framedParser=new jW,this.newlineParser=new XW,this.stderrBuffer="",this.protocolMode=f;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=kT($.command,$.args??[],{cwd:$.cwd,env:{...process.env,...$.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=W,W.stdout.on("data",(H)=>this.handleStdout(H)),W.stderr.on("data",(H)=>{if(this.process!==W)return;if(this.stderrBuffer+=H.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(H)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${sZ(H)}`))}),W.once("exit",(H,Q)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Z=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${H??"null"}, signal=${Q??"null"}).${Z}`))})}handleStdout(f){try{let $=this.protocolMode==="framed"?this.framedParser.push(f):this.newlineParser.push(f);for(let J of $){let W=JSON.parse(J);if(typeof W.id!=="number")continue;let H=this.pending.get(W.id);if(!H)continue;if(this.pending.delete(W.id),clearTimeout(H.timeout),W.error){let Q=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;H.reject(Error(Q));continue}H.resolve(W.result)}}catch($){this.handleProtocolFailure($)}}handleProtocolFailure(f){let $=this.process;if(!$)return;this.connected=!1,this.process=void 0;let J=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${sZ(f)}.${J}`)),$.kill()}async request(f,$,J=mT){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let H=this.nextRequestId++,Q={jsonrpc:"2.0",id:H,method:f,...$?{params:$}:{}},Z=new Promise((j,X)=>{let A=setTimeout(()=>{this.pending.delete(H),X(Error(`MCP request timed out for "${this.registration.name}" (${f}).`))},J);this.pending.set(H,{resolve:j,reject:X,timeout:A})});try{W.stdin.write(this.protocolMode==="framed"?oZ(Q):eZ(Q))}catch(j){let X=this.pending.get(H);if(X)clearTimeout(X.timeout),this.pending.delete(H);throw j}return Z}notify(f,$){let J=this.process;if(!J?.stdin.writable)return;let W={jsonrpc:"2.0",method:f,...$?{params:$}:{}};J.stdin.write(this.protocolMode==="framed"?oZ(W):eZ(W))}failAllPending(f){for(let[$,J]of this.pending)clearTimeout(J.timeout),this.pending.delete($),J.reject(f)}}function H4(){return(f)=>new $j(f)}import{existsSync as gT,readFileSync as vT}from"node:fs";import{resolveMcpSettingsPath as uT}from"@cline/shared/storage";import{z as E}from"zod";var W2=E.record(E.string(),E.string()),Jj=E.record(E.string(),E.unknown()),cT=E.object({type:E.literal("stdio"),command:E.string().min(1),args:E.array(E.string()).optional(),cwd:E.string().min(1).optional(),env:W2.optional()}),dT=E.object({type:E.literal("sse"),url:E.string().url(),headers:W2.optional()}),rT=E.object({type:E.literal("streamableHttp"),url:E.string().url(),headers:W2.optional()}),lT=E.discriminatedUnion("type",[cT,dT,rT]),pT=E.object({transport:lT,disabled:E.boolean().optional(),metadata:Jj.optional()}),iT=E.enum(["stdio","sse","http","streamableHttp"]).optional(),Wj=E.object({type:E.enum(["stdio","sse","streamableHttp"]).optional(),transportType:iT,disabled:E.boolean().optional(),metadata:Jj.optional()});function AW(f){if(!f)return;if(f==="http")return"streamableHttp";return f}var nT=Wj.extend({command:E.string().min(1),args:E.array(E.string()).optional(),cwd:E.string().min(1).optional(),env:W2.optional()}).superRefine((f,$)=>{let J=f.type??AW(f.transportType);if(J&&J!=="stdio")$.addIssue({code:E.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform((f)=>({transport:{type:"stdio",command:f.command,args:f.args,cwd:f.cwd,env:f.env},disabled:f.disabled,metadata:f.metadata})),aT=Wj.extend({url:E.string().url(),headers:W2.optional()}).superRefine((f,$)=>{let J=f.type??AW(f.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")$.addIssue({code:E.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform((f)=>{if((f.type??AW(f.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:f.url,headers:f.headers},disabled:f.disabled,metadata:f.metadata};return{transport:{type:"sse",url:f.url,headers:f.headers},disabled:f.disabled,metadata:f.metadata}}),tT=E.union([pT,nT,aT]),sT=E.object({mcpServers:E.record(E.string(),tT)}).strict();function f1(){return uT()}function PW(f={}){let $=f.filePath??f1(),J=vT($,"utf8"),W;try{W=JSON.parse(J)}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Z}`)}let H=sT.safeParse(W);if(!H.success){let Q=H.error.issues.map((Z)=>{let j=Z.path.join(".");return j?`${j}: ${Z.message}`:Z.message}).join("; ");throw Error(`Invalid MCP settings at "${$}": ${Q}`)}return H.data}function Q4(f={}){let $=f.filePath??f1();return gT($)}function BW(f={}){let $=PW(f);return Object.entries($.mcpServers).map(([J,W])=>({name:J,transport:W.transport,disabled:W.disabled,metadata:W.metadata}))}async function Z4(f,$={}){let J=BW($);for(let W of J)await f.registerServer(W);return J}function Cf(){return Date.now()}function oT(f){return f.map(($)=>({name:$.name,description:$.description,inputSchema:$.inputSchema}))}class H2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor(f){this.clientFactory=f.clientFactory,this.toolsCacheTtlMs=f.toolsCacheTtlMs??5000}async registerServer(f){await this.runExclusive(f.name,async()=>{let $=this.servers.get(f.name);if(!$){this.servers.set(f.name,{registration:{...f},status:"disconnected",updatedAt:Cf()});return}let J=JSON.stringify($.registration.transport)!==JSON.stringify(f.transport);if($.registration={...f},$.updatedAt=Cf(),J)await this.disconnectState($),$.client=void 0,$.toolCache=void 0,$.toolCacheUpdatedAt=void 0})}async unregisterServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.disconnectState($),this.servers.delete(f)})}async connectServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.connectState($)})}async disconnectServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.disconnectState($)})}async setServerDisabled(f,$){await this.runExclusive(f,async()=>{let J=this.requireServer(f);if(J.registration={...J.registration,disabled:$},J.updatedAt=Cf(),$)await this.disconnectState(J)})}listServers(){return[...this.servers.values()].map((f)=>({name:f.registration.name,status:f.status,disabled:f.registration.disabled===!0,lastError:f.lastError,toolCount:f.toolCache?.length??0,updatedAt:f.updatedAt,metadata:f.registration.metadata})).sort((f,$)=>f.name.localeCompare($.name))}async listTools(f){let $=this.requireServer(f),J=$.toolCacheUpdatedAt??0;if($.toolCache&&Cf()-J<=this.toolsCacheTtlMs)return $.toolCache;return this.refreshTools(f)}async refreshTools(f){return this.runExclusive(f,async()=>{let $=this.requireServer(f),W=await(await this.ensureConnectedClient($)).listTools(),H=oT(W);return $.toolCache=H,$.toolCacheUpdatedAt=Cf(),$.updatedAt=Cf(),H})}async callTool(f){return this.runExclusive(f.serverName,async()=>{let $=this.requireServer(f.serverName),J=await this.ensureConnectedClient($);return $.updatedAt=Cf(),J.callTool({name:f.toolName,arguments:f.arguments,context:f.context})})}async dispose(){let f=[...this.servers.keys()];for(let $ of f)await this.unregisterServer($)}async ensureConnectedClient(f){if(await this.connectState(f),!f.client)throw Error(`MCP server "${f.registration.name}" does not have an initialized client.`);return f.client}async connectState(f){if(f.registration.disabled)throw Error(`MCP server "${f.registration.name}" is disabled and cannot be connected.`);if(f.status==="connected"&&f.client)return;f.status="connecting",f.updatedAt=Cf();try{let $=f.client??await this.clientFactory(f.registration);await $.connect(),f.client=$,f.status="connected",f.lastError=void 0,f.updatedAt=Cf()}catch($){throw f.status="disconnected",f.lastError=$ instanceof Error?$.message:String($),f.updatedAt=Cf(),$}}async disconnectState(f){if(!f.client){f.status="disconnected",f.updatedAt=Cf();return}try{await f.client.disconnect()}finally{f.status="disconnected",f.updatedAt=Cf()}}requireServer(f){let $=this.servers.get(f);if(!$)throw Error(`Unknown MCP server: ${f}`);return $}async runExclusive(f,$){let J=this.operationLocks.get(f)??Promise.resolve(),W,H=new Promise((Z)=>{W=Z}),Q=J.catch(()=>{return}).then(()=>H);this.operationLocks.set(f,Q),await J.catch(()=>{return});try{return await $()}finally{if(W?.(),this.operationLocks.get(f)===Q)this.operationLocks.delete(f)}}}import{createHash as eT}from"node:crypto";var Hj=128,fD=/[^a-zA-Z0-9_-]+/g,Qj=8,$D=1,JD="mcp_tool";function WD(f){return eT("sha1").update(f).digest("hex").slice(0,Qj)}function HD(f){return f.replace(fD,"_")}var j4=({serverName:f,toolName:$})=>{let J=`${f}__${$}`,W=HD(J);if(W===J&&J.length<=Hj)return J;let H=WD(J),Q=Hj-$D-Qj;return`${W.slice(0,Q)||JD}_${H}`};function YW(f){return{[(f.nameTransform??j4)({serverName:f.serverName,toolName:f.toolName})]:{enabled:!1}}}function Zj(f){let $={};for(let J of f.toolNames)Object.assign($,YW({serverName:f.serverName,toolName:J,nameTransform:f.nameTransform}));return $}import{createTool as QD}from"@cline/shared";function ZD(f,$){let J=$.description?.trim();if(J)return J;return`Execute MCP tool "${$.name}" from server "${f}".`}async function X4(f){let $=await f.provider.listTools(f.serverName),J=f.nameTransform??j4;return $.map((W)=>{let H=J({serverName:f.serverName,toolName:W.name});return QD({name:H,description:ZD(f.serverName,W),inputSchema:W.inputSchema,timeoutMs:f.timeoutMs,retryable:f.retryable,maxRetries:f.maxRetries,execute:async(Q,Z)=>f.provider.callTool({serverName:f.serverName,toolName:W.name,arguments:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:void 0,context:Z})})})}W0();import{appendFileSync as jD,existsSync as $1,mkdirSync as jj,readdirSync as XD,readFileSync as Xj,renameSync as AD,writeFileSync as PD}from"node:fs";import{join as VW}from"node:path";import{resolveTeamDataDir as BD}from"@cline/shared/storage";function Aj(){return new Date().toISOString()}function RW(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Pj(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}class A4{teamDirPath;constructor(f={}){this.teamDirPath=f.teamDir??BD()}init(){this.ensureTeamDir()}listTeamNames(){if(!$1(this.teamDirPath))return[];return XD(this.teamDirPath,{withFileTypes:!0}).filter((f)=>f.isDirectory()).filter((f)=>$1(this.statePath(f.name))).map((f)=>f.name).sort()}readState(f){let $=this.readEnvelope(f);return $?.teamState?Pj($.teamState):void 0}readHistory(f,$=200){let J=this.historyPath(f);if(!$1(J))return[];return Xj(J,"utf8").split(`
|
|
559
|
-
`).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,$)}loadRuntime(f){let $=this.readEnvelope(f);return{state:$?.teamState?Pj($.teamState):void 0,teammates:$?.teammates??[],interruptedRunIds:[]}}handleTeamEvent(f,$){this.ensureTeamSubdir(f),jD(this.historyPath(f),`${JSON.stringify({ts:Aj(),eventType:$.type,payload:$})}
|
|
560
|
-
`,"utf8")}persistRuntime(f,$,J){this.ensureTeamSubdir(f);let W={version:1,updatedAt:Aj(),teamState:$,teammates:J},H=this.statePath(f),Q=`${H}.tmp`;PD(Q,`${JSON.stringify(W,null,2)}
|
|
561
|
-
`,"utf8"),AD(Q,H)}markInProgressRunsInterrupted(f,$){let J=this.readEnvelope(f);if(!J?.teamState?.runs?.length)return[];let W=J.teamState.runs.filter((Q)=>Q.status==="queued"||Q.status==="running").map((Q)=>Q.id);if(W.length===0)return[];let H=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((Q)=>Q.status==="queued"||Q.status==="running"?{...Q,status:"interrupted",error:$,endedAt:H}:Q)},this.persistRuntime(f,J.teamState,J.teammates),W}ensureTeamDir(){if(!$1(this.teamDirPath))jj(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir(f){let $=VW(this.ensureTeamDir(),RW(f));if(!$1($))jj($,{recursive:!0});return $}statePath(f){return VW(this.ensureTeamDir(),RW(f),"state.json")}historyPath(f){return VW(this.ensureTeamDir(),RW(f),"task-history.jsonl")}readEnvelope(f){let $=this.statePath(f);if(!$1($))return;try{let J=JSON.parse(Xj($,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as YD,mkdirSync as VD}from"node:fs";import{join as RD}from"node:path";import{safeJsonParse as Bj}from"@cline/shared";import{loadSqliteDb as FD,nowIso as FW}from"@cline/shared/db";import{resolveDbDataDir as KD}from"@cline/shared/storage";function yD(){return KD()}function J1(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function UD(f){let $=Bj(f);if(!Array.isArray($))return[];let J=[];for(let W of $){if(!W||typeof W!=="object")continue;let H=W,Q=H.agentId,Z=H.rolePrompt;if(typeof Q!=="string"||!Q.trim())continue;if(typeof Z!=="string"||!Z.trim())continue;let j={agentId:Q.trim(),rolePrompt:Z};if(typeof H.modelId==="string"&&H.modelId.trim())j.modelId=H.modelId.trim();if(typeof H.maxIterations==="number"&&Number.isFinite(H.maxIterations))j.maxIterations=Math.max(1,Math.floor(H.maxIterations));J.push(j)}return J}function GD(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}class Q2{teamDirPath;db;constructor(f={}){this.teamDirPath=f.teamDir??yD()}init(){this.getRawDb()}ensureTeamDir(){if(!YD(this.teamDirPath))VD(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return RD(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let f=FD(this.dbPath());return this.ensureSchema(f),this.db=f,f}ensureSchema(f){if(f.exec("PRAGMA journal_mode = WAL;"),f.exec("PRAGMA busy_timeout = 5000;"),f.exec(`
|
|
547
|
+
Read: ${$.fileOps.readFiles.join(", ")||"none"}
|
|
548
|
+
Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.trim())f.push(`Previous summary:
|
|
549
|
+
${$.previousSummary.trim()}`);return f.push(`Conversation:
|
|
550
|
+
${$.conversationText||"(empty)"}`),f.join(`
|
|
551
|
+
|
|
552
|
+
`)}function pj($){let f=$.summarizer,J=(Z)=>{if(Z.providerId==="openai-codex"){let{maxOutputTokens:W,...j}=Z;return{...j,thinking:!1}}return{...Z,maxOutputTokens:Z.maxOutputTokens??wj,thinking:!1}};if(!f)return J($.activeProviderConfig);let Q=f.providerConfig?.providerId===f.providerId?f.providerConfig:void 0;return J({...Q??{},providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey??Q?.apiKey,baseUrl:f.baseUrl??Q?.baseUrl,headers:f.headers??Q?.headers,knownModels:f.knownModels??Q?.knownModels,maxOutputTokens:f.maxOutputTokens??wj})}function rj($){return{role:"user",content:`Context summary:
|
|
553
|
+
|
|
554
|
+
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function DL($){let f=await FL($.providerConfig),J="";for await(let Q of f.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){J+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),J.trim()}function RL($){try{return JSON.stringify($).length}catch{return String($).length}}async function ij($){let f=$.context.messages;if(f.length<2)return;let J=cj(f,$.preserveRecentTokens,$.estimateMessageTokens);if(J<=0||J>=f.length)return;let Q=f.slice(0,J),Z=vj(Q),W=Z>=0?A9(Q[Z])?.summary:void 0,j=Z>=0?Q.slice(Z+1):Q;if(j.length===0)return;let X=uj(Q),H=Ij(j),Y=lj({previousSummary:W,conversationText:H,fileOps:X});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:j.length,preservedMessages:f.length-J,previousSummaryChars:W?.length??0,conversationTextChars:H.length,summaryRequestChars:Y.length,summaryRequestEstimatedTokens:X9(Y.length),newMessagesJsonChars:RL(j),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let V=await DL({providerConfig:pj({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:Y,logger:$.logger});if(!V.trim())return;let A=dj(V,X),B=f.reduce((R,F)=>R+$.estimateMessageTokens(F),0),K=[rj({summary:A,fileOps:X,tokensBefore:B}),...f.slice(J)],G=K.reduce((R,F)=>R+$.estimateMessageTokens(F),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:f.length,messagesAfter:K.length,messagesSummarized:J,messagesPreserved:f.length-J,tokensBefore:B,tokensAfter:G,maxInputTokens:$.context.maxInputTokens}),{messages:K}}function tj($){if(B2($))return;if(typeof $.content==="string"){let J=$.content.trim();return J?{...$,content:J}:void 0}let f=$.content.filter((J)=>J.type!=="text"||J.text.trim());if(f.length===0)return;return{...$,content:f.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J.type==="tool_result"?{...J,content:V9(J.content)}:J)}}function G2($,f){return $.reduce((J,Q)=>J+f(Q),0)}function nj($,f){let J=Math.max(1,f),Q=Math.max(16,J*4);if(typeof $.content==="string"){let j=x$($.content,Q).trim();return{...$,content:j||"..."}}let Z=Q,W=$.content.map((j)=>{if(j.type!=="text"||Z<=0)return j;let X=x$(j.text,Z).trim();return Z-=X.length,{...j,text:X||"..."}});return{...$,content:W}}function UL($,f){let J=gj($),Q=Y4($),Z=mj($),W=[];for(let j=0;j<$.length;j+=1){let X=tj($[j]);if(!X)continue;W.push({index:j,message:X,estimatedTokens:f(X),isFirstUser:j===J,isLastUser:j===Q,isLastAssistant:j===Z})}return W}function aj($,f,J,Q){let Z=$[f];Z.message=J,Z.estimatedTokens=Q(J)}function LL($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_use")f.add(J.id);return f}function OL($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_result")f.add(J.tool_use_id);return f}function sj($){return new Set([...LL($.message),...OL($.message)])}function zL($){let f=new Map;for(let J=0;J<$.length;J+=1)for(let Q of sj($[J])){let Z=f.get(Q);if(Z)Z.add(J);else f.set(Q,new Set([J]))}return f}function _L($,f){let J=zL($),Q=new Set,Z=[f];while(Z.length>0){let W=Z.shift();if(W===void 0||Q.has(W))continue;Q.add(W);for(let j of sj($[W]))for(let X of J.get(j)??[])if(!Q.has(X))Z.push(X)}return Q}function V4($,f,J,Q){let Z=G2($.map((W)=>W.message),Q);for(let W=0;W<$.length&&Z>J;){if(!f($[W])){W+=1;continue}let j=_L($,W);Z-=Array.from(j).reduce((X,H)=>X+$[H].estimatedTokens,0);for(let X of Array.from(j).sort((H,Y)=>Y-H))$.splice(X,1)}}function yL($,f,J){let Q=G2($.map((W)=>W.message),J);if(Q<=f)return;for(let W=$.length-1;W>=0&&Q>f;W-=1){let j=$[W];if(j.isFirstUser)continue;let X=Math.max(bj,j.estimatedTokens-(Q-f));if(X>=j.estimatedTokens)continue;aj($,W,nj(j.message,X),J),Q=G2($.map((H)=>H.message),J)}if(Q<=f)return;let Z=$.findIndex((W)=>W.isFirstUser);if(Z>=0){let W=Math.max(1,$[Z].estimatedTokens-(Q-f));aj($,Z,nj($[Z].message,W),J)}}function TL($,f){return JSON.stringify($)!==JSON.stringify(f)}function NL($){let f=Y4($);if(f<0||f===0&&!K2($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,f),protectedTail:$.slice(f)}}function oj($){let f=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:J,protectedTail:Q}=NL($.context.messages);if(J.length===0)return;let Z=UL(J,$.estimateMessageTokens);if(Z.length===0)return;V4(Z,(H)=>H.message.role==="assistant"&&!H.isLastAssistant,f,$.estimateMessageTokens),V4(Z,(H)=>H.message.role==="user"&&!H.isFirstUser&&!H.isLastUser,f,$.estimateMessageTokens),V4(Z,(H)=>H.message.role==="assistant"&&H.isLastAssistant,f,$.estimateMessageTokens),V4(Z,(H)=>H.message.role==="user"&&H.isLastUser&&!H.isFirstUser,f,$.estimateMessageTokens),yL(Z,f,$.estimateMessageTokens);let W=[...Z.map((H)=>H.message),...Q];if(!TL($.context.messages,W))return;let j=G2([...J.map((H)=>tj(H)??H),...Q],$.estimateMessageTokens),X=G2(W,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:W.length,messagesRemoved:$.context.messages.length-W.length,tokensBefore:j,tokensAfter:X,targetTokens:f,maxInputTokens:$.context.maxInputTokens}),{messages:W}}function ej($){try{return JSON.stringify($).length}catch{return String($).length}}function ML($){let f=0,J=0,Q=0;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type!=="tool_result")continue;let j=ej(W.content);f+=1,J+=j,Q=Math.max(Q,j)}}return{toolResultCount:f,toolResultSerializedChars:J,maxToolResultSerializedChars:Q}}var qL={basic:({context:$,estimateMessageTokens:f,logger:J})=>oj({context:$,estimateMessageTokens:f,logger:J}),agentic:({context:$,providerConfig:f,compaction:J,mode:Q,estimateMessageTokens:Z,logger:W})=>ij({context:$,providerConfig:f,summarizer:J?.summarizer,preserveRecentTokens:Q==="manual"?Math.min(J?.preserveRecentTokens??Y9,$.triggerTokens):J?.preserveRecentTokens??Y9,estimateMessageTokens:Z,logger:W})};function wL($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),Z=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Q=Math.max(0,Math.min($.maxInputTokens-hj,$.maxInputTokens*H9));return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}let f=$.config.thresholdRatio??H9,J=$.maxInputTokens*f;return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:f}}function SL($){let f=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,f)),Q=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*J)));return{triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}function B9($,f={}){let J=$.compaction;if(J?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},Z=xj(),W=J?.strategy??"basic",j=qL[W],X=f.mode??"auto";return async(H)=>{let Y=H.apiMessages.reduce((P,D)=>P+Z(D),0),V=J?.maxInputTokens??H.model.info?.maxInputTokens??H.model.info?.contextWindow??Cj;if(typeof V!=="number"||!Number.isFinite(V)||V<=0)return;let A=wL({inputTokens:Y,maxInputTokens:V,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:X,strategy:W,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:Y,maxInputTokens:V,triggerTokens:A.triggerTokens,thresholdRatio:A.thresholdRatio,shouldCompact:A.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:ej(H.apiMessages),...ML(H.apiMessages)}),X==="auto"&&!A.shouldCompact)return;let B=X==="manual"?SL({inputTokens:Y,maxInputTokens:V,autoTriggerTokens:A.triggerTokens,manualTargetRatio:f.manualTargetRatio}):A,K={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:V,triggerTokens:B.triggerTokens,thresholdRatio:B.thresholdRatio,utilizationRatio:V>0?Y/V:0},G=X==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(X==="manual"?"compacting":"auto-compacting",{kind:G,reason:G,iteration:H.iteration,triggerTokens:B.triggerTokens,maxInputTokens:V});let R=H.messages.length,F=J?.compact?await J.compact(K):await j({context:K,providerConfig:{...Q,abortSignal:H.abortSignal},compaction:J,mode:X,estimateMessageTokens:Z,logger:$.logger});if(F?.messages){let P=F.messages.reduce((D,O)=>D+Z(O),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:W,maxInputTokens:V,inputTokens:Y,afterTokens:P,tokensSaved:Y-P,utilizationBefore:`${(Y/V*100).toFixed(1)}%`,utilizationAfter:`${(P/V*100).toFixed(1)}%`,thresholdTrigger:`${(B.thresholdRatio*100).toFixed(1)}%`,messagesBefore:R,messagesAfter:F.messages.length,messagesRemoved:R-F.messages.length})}return F}}R0();function K0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function H0($,f){return{inputTokens:$.inputTokens+Math.max(0,f.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,f.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,f.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,f.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,f.totalCost??0)}}function A4($){let f=K0();for(let J of $)f=H0(f,J);return f}function o1($){return typeof $==="number"&&Number.isFinite($)?$:0}function B4($){let f=K0();for(let J of $){let Q=J.metrics;if(!Q)continue;f=H0(f,{inputTokens:o1(Q.inputTokens),outputTokens:o1(Q.outputTokens),cacheReadTokens:o1(Q.cacheReadTokens),cacheWriteTokens:o1(Q.cacheWriteTokens),totalCost:o1(Q.cost)})}return f}function CL($){for(let f=$.length-1;f>=0;f-=1){let J=$[f];if(J?.role!=="assistant")continue;let Q=o1(J.metrics?.inputTokens);return Q>0?Q:void 0}return}function hL($){if(!$||typeof $!=="object")return;let f=$,J=f.skill??f.skill_name??f.skillName;if(typeof J!=="string")return;let Q=J.trim();return Q.length>0?Q:void 0}function K9($){if(!$||typeof $!=="object")return{};let f=$;return{agentId:typeof f.agentId==="string"?f.agentId:void 0,conversationId:typeof f.conversationId==="string"?f.conversationId:void 0,parentAgentId:typeof f.parentAgentId==="string"?f.parentAgentId:void 0}}function V$($){let f=$.agentId?.trim();if(!f)return;let J=$.parentAgentId?.trim()||void 0,Q=$.teamRole,Z="root";if(Q==="teammate")Z="team_teammate";else if(Q==="lead")Z="team_lead";else if(J)Z="subagent";return{agentId:f,agentKind:Z,conversationId:$.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:$.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function EL($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function bL($){let f=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let J of f){let Q=J?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function G9($,f,J){let{sessionId:Q,config:Z,liveSession:W,emit:j}=$,X=Z.telemetry,H=W?.runtime.teamRuntime,Y=J?.isPrimaryAgentEvent??!0,V=K9(f),A=V$({agentId:J?.agentId??V.agentId,conversationId:J?.conversationId??V.conversationId,parentAgentId:J?.parentAgentId??V.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??H?.getTeamId(),teamName:J?.teamName??H?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if(f.type==="content_start"&&f.contentType==="tool"&&f.toolName==="skills"){let B=hL(f.input);if(B)X6(X,{ulid:Q,skillName:B,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:Z.providerId,modelId:Z.modelId,...A})}if(f.type==="content_end"&&f.contentType==="tool"){let B=f.toolName??"unknown",K=!f.error;if(j6(X,{ulid:Q,tool:B,autoApproved:void 0,success:K,modelId:Z.modelId,provider:Z.providerId,...A}),!K&&(B==="editor"||B==="apply_patch"))H6(X,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,errorType:f.error,...A})}if(f.type==="notice"&&f.reason==="api_error")w2(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.message,...A});if(f.type==="error")w2(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.error?.message??"unknown error",...A});if(f.type==="usage"&&W?.turnUsageBaseline){let B=EL(f);if(Y){W.turnPrimaryUsage=H0(W.turnPrimaryUsage??K0(),B);let G=H0(W.turnUsageBaseline,W.turnPrimaryUsage);$.usageBySession.set(Q,G),Hf(X,{ulid:Q,provider:Z.providerId,model:Z.modelId,source:"assistant",mode:Z.mode,...A}),Z6(X,{ulid:Q,tokensIn:f.inputTokens,tokensOut:f.outputTokens,cacheWriteTokens:f.cacheWriteTokens,cacheReadTokens:f.cacheReadTokens,totalCost:f.cost,model:Z.modelId,...A})}else{let G=bL({isPrimaryAgentEvent:Y,overrides:J,eventMetadata:V}),R=W.turnUsageByAgent??new Map;W.turnUsageByAgent=R,R.set(G,H0(R.get(G)??K0(),B))}let K=H0(W.turnPrimaryUsage??K0(),A4(W.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,H0(W.turnAggregateUsageBaseline??W.turnUsageBaseline,K))}if(f.type==="iteration_end"&&Y)$.persistMessages(Q,W?.agent.getMessages()??[],W?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:Q,event:f,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(Y?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:zW(f),ts:Date.now()}})}function g$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as HO}from"@cline/shared";import{spawn as dL}from"node:child_process";import{appendFileSync as lL,readFileSync as pL}from"node:fs";import{join as rL}from"node:path";import{augmentNodeCommandForDebug as QX,withResolvedClineBuildEnv as L9}from"@cline/shared";import{ensureHookLogDir as fX}from"@cline/shared/storage";function K4($,f){if(!f)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:f}}import{existsSync as kL,readdirSync as IL}from"node:fs";import{basename as xL,extname as gL,join as mL}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as $X,resolveHooksConfigSearchPaths as vL}from"@cline/shared/storage";function P9($){return vL($)}var G4;((V)=>{V.TaskStart="TaskStart";V.TaskResume="TaskResume";V.TaskCancel="TaskCancel";V.TaskComplete="TaskComplete";V.TaskError="TaskError";V.PreToolUse="PreToolUse";V.PostToolUse="PostToolUse";V.UserPromptSubmit="UserPromptSubmit";V.PreCompact="PreCompact";V.SessionShutdown="SessionShutdown"})(G4||={});var F9={["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"},cL=new Map(Object.values(G4).map(($)=>[$.toLowerCase(),$])),uL=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function D9($){let f=gL($).toLowerCase();if(!uL.has(f))return;let J=xL($,f).trim().toLowerCase();return cL.get(J)}function e1($){let f=[],J=new Set,Q=P9($).filter((Z)=>kL(Z));for(let Z of Q)try{for(let W of IL(Z,{withFileTypes:!0})){if(!W.isFile())continue;let j=D9(W.name);if(!j)continue;let X=mL(Z,W.name);if(J.has(X))continue;J.add(X),f.push({fileName:j,hookEventName:F9[j],path:X})}}catch{}return f.sort((Z,W)=>Z.path.localeCompare(W.path))}function F4($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))f[J]=typeof Q==="string"?Q:JSON.stringify(Q);return f}function P4($,f,J){let Q=J instanceof Error?`: ${J.message}`:"",Z=`${f}${Q}`;if($){try{$.log(Z,{severity:"warn",...J!==void 0?{error:J}:{}})}catch{}return}console.warn(Z)}function iL($,f){if(!f)return $;if(!$)return{...f};let J=[$.context,f.context].filter((Z)=>typeof Z==="string"&&Z.length>0).join(`
|
|
555
|
+
`),Q=[...$.appendMessages??[],...f.appendMessages??[]];return{cancel:$.cancel===!0||f.cancel===!0?!0:void 0,review:$.review===!0||f.review===!0?!0:void 0,context:J||void 0,overrideInput:f.overrideInput!==void 0?f.overrideInput:$.overrideInput,systemPrompt:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function nL($){if(!$||typeof $!=="object")return;let f=$,J=typeof f.context==="string"?f.context:typeof f.contextModification==="string"?f.contextModification:typeof f.errorMessage==="string"?f.errorMessage:void 0;return{cancel:typeof f.cancel==="boolean"?f.cancel:void 0,review:typeof f.review==="boolean"?f.review:void 0,context:J,overrideInput:Object.hasOwn(f,"overrideInput")?f.overrideInput:void 0}}function R9($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function Y0($,f){let J=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:f.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:f.workspacePath?[f.workspacePath]:[],workspaceInfo:f.workspaceInfo,userId:J,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function aL($){let f=$.trim();if(!f)return{};let Q=f.split(`
|
|
556
|
+
`).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse hook stdout JSON"}}}async function tL($,f){let J=$.stdin;if(!J)throw Error("hook command failed to create stdin");await new Promise((Q,Z)=>{let W=!1,j=()=>{J.off("error",H),J.off("finish",Y),$.off("close",V)},X=(A)=>{if(W)return;if(W=!0,j(),A){let B=A.code;if(B==="EPIPE"||B==="ERR_STREAM_DESTROYED"){Q();return}Z(A);return}Q()},H=(A)=>X(A),Y=()=>X(),V=()=>X();J.on("error",H),J.once("finish",Y),$.once("close",V);try{J.end(f)}catch(A){X(A)}})}async function ZX($,f){if(f.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await JX($,f)}catch(J){let Q=eL(f.command,process.platform,J);if(!Q)throw J;return await JX($,{...f,command:Q})}}async function JX($,f){let J=QX(f.command,{env:f.env,debugRole:"hook"}),Q=dL(J[0],J.slice(1),{cwd:f.cwd,env:L9(f.env),stdio:f.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:f.detached}),Z=new Promise((B)=>{Q.once("spawn",()=>B())}),W=new Promise((B,K)=>{Q.once("error",(G)=>K(G))}),j=JSON.stringify($);if(await Promise.race([Z,W]),await tL(Q,j),f.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let X="",H="",Y=!1,V;Q.stdout.on("data",(B)=>{X+=B.toString()}),Q.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Q.kill("SIGKILL")},f.timeoutMs);Q.once("close",(K)=>{if(V)clearTimeout(V);let{parsedJson:G,parseError:R}=aL(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([A,W])}function sL($){try{let J=pL($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!J?.startsWith("#!"))return;let Q=J.slice(2).trim();if(!Q)return;let Z=Q.split(/\s+/).filter(Boolean);return Z.length>0?Z:void 0}catch{return}}function oL($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function eL($,f=process.platform,J){if(f!=="win32"||!oL(J))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function WX($){if($.length===0)return;let[f,...J]=$,Q=f.replace(/\\/g,"/").toLowerCase(),Z=Q.split("/").at(-1)??Q;if(Z==="env")return WX(J);if(Z==="bash"||Z==="sh"||Z==="zsh")return[Z,...J];if(Z==="python3"||Z==="python")return process.platform==="win32"?["py","-3",...J]:[Z,...J];return $}function $O($){let f=sL($);if(f&&f.length>0)return[...WX(f)??f,$];let J=$.toLowerCase();if(J.endsWith(".sh")||J.endsWith(".bash")||J.endsWith(".zsh"))return["bash",$];if(J.endsWith(".js")||J.endsWith(".mjs")||J.endsWith(".cjs"))return QX(["node",$],{debugRole:"hook"});if(J.endsWith(".ts")||J.endsWith(".mts")||J.endsWith(".cts"))return["bun","run",$];if(J.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(J.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function fO($){let f={};for(let J of e1($)){if(!J.hookEventName)continue;let Q=J.hookEventName,Z=f[Q]??[];Z.push($O(J.path)),f[Q]=Z}return f}async function JO($){let f;for(let J of $.commands){let Q=J.join(" ");try{let Z=await ZX($.payload,{command:J,cwd:$.cwd,env:L9(process.env),detached:!1,timeoutMs:$.timeoutMs});if(Z?.timedOut){P4($.logger,`hook command timed out: ${Q}`);continue}if(Z?.parseError){P4($.logger,`hook command returned invalid JSON control output: ${Q} (${Z.parseError})`);continue}f=iL(f,nL(Z?.parsedJson))}catch(Z){P4($.logger,`hook command failed: ${Q}`,Z)}}return f}function D1($){for(let f of $.commands){let J=f.join(" ");ZX($.payload,{command:f,cwd:$.cwd,env:L9(process.env),detached:!0}).catch((Q)=>{P4($.logger,`hook command failed: ${J}`,Q)})}}function m$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function U9($,f){return{...m$($.snapshot),userMessage:f}}function jX($){return{...m$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function XX($){return{...m$($.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 HX($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function QO($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}function D4($){let f={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},J=(Q)=>{let Z=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
|
|
557
|
+
`,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??rL(fX(),"hooks.jsonl");fX(j),lL(j,Z,"utf8")};return{beforeRun:async(Q)=>{let Z=U9(Q,"");J({...Y0(Z,f),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let Z=jX(Q);J({...Y0(Z,f),hookName:"tool_call",iteration:Z.iteration,tool_call:{id:Z.call.id,name:Z.call.name,input:Z.call.input},preToolUse:{toolName:Z.call.name,parameters:F4(Z.call.input)}});return},afterTool:async(Q)=>{let Z=XX(Q);J({...Y0(Z,f),hookName:"tool_result",iteration:Z.iteration,tool_result:Z.record,postToolUse:{toolName:Z.record.name,parameters:F4(Z.record.input),result:typeof Z.record.output==="string"?Z.record.output:JSON.stringify(Z.record.output),success:!Z.record.error,executionTimeMs:Z.record.durationMs}});return},afterRun:async({snapshot:Q,result:Z})=>{let W=m$(Q);if(Z.status==="completed"){J({...Y0(W,f),hookName:"agent_end",iteration:Z.iterations,turn:{outputText:Z.outputText,status:Z.status},taskComplete:{taskMetadata:{}}});return}if(Z.status==="aborted"||R9(Z.error?.message)){J({...Y0(W,f),hookName:"agent_abort",reason:Z.error?.message,taskCancel:{taskMetadata:{}}});return}if(Z.error)J({...Y0(W,f),hookName:"agent_error",iteration:Z.iterations,error:{name:Z.error.name,message:Z.error.message,stack:Z.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let Z=U9({snapshot:Q.snapshot},HX(Q.message.content));J({...Y0(Z,f),hookName:"prompt_submit",userPromptSubmit:{prompt:Z.userMessage,attachments:[]}})}}}function O9($){let f=fO($.workspacePath);if(!Object.values(f).some((A)=>A.length>0))return;let Q=async(A,B)=>{let K=f[B]??[];if(K.length===0)return;D1({commands:K,cwd:$.cwd,logger:$.logger,payload:B==="agent_resume"?{...Y0(A,$),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...Y0(A,$),hookName:B,taskStart:{taskMetadata:{}}}})},Z=async(A)=>{let B=f.prompt_submit??[];if(B.length>0)D1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...Y0(A,$),hookName:"prompt_submit",userPromptSubmit:{prompt:A.userMessage,attachments:[]}}})},W=async(A)=>{let B=f.tool_call??[];if(B.length===0)return;return JO({commands:B,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...Y0(A,$),hookName:"tool_call",iteration:A.iteration,tool_call:{id:A.call.id,name:A.call.name,input:A.call.input},preToolUse:{toolName:A.call.name,parameters:F4(A.call.input)}}})},j=async(A)=>{let B=f.tool_result??[];if(B.length===0)return;D1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...Y0(A,$),hookName:"tool_result",iteration:A.iteration,tool_result:A.record,postToolUse:{toolName:A.record.name,parameters:F4(A.record.input),result:typeof A.record.output==="string"?A.record.output:JSON.stringify(A.record.output),success:!A.record.error,executionTimeMs:A.record.durationMs}}})},X=async(A)=>{let B=f.agent_end??[];if(B.length===0)return;D1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...Y0(A,$),hookName:"agent_end",iteration:A.iteration,turn:A.turn,taskComplete:{taskMetadata:{}}}})},H=async(A)=>{let B=f.agent_error??[];if(B.length===0)return;D1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...Y0(A,$),hookName:"agent_error",iteration:A.iteration,error:{name:A.error.name,message:A.error.message,stack:A.error.stack}}})},Y=async(A)=>{if(R9(A.reason)){let K=f.agent_abort??[];if(K.length>0)D1({commands:K,cwd:$.cwd,logger:$.logger,payload:{...Y0(A,$),hookName:"agent_abort",reason:A.reason,taskCancel:{taskMetadata:{}}}})}let B=f.session_shutdown??[];if(B.length===0)return;D1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...Y0(A,$),hookName:"session_shutdown",reason:A.reason}})},V={};if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0||(f.prompt_submit?.length??0)>0){if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0)V.beforeRun=async(A)=>{let B=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(m$(A.snapshot),B);return};if((f.prompt_submit?.length??0)>0)V.onEvent=async(A)=>{if(A.type!=="message-added"||A.message.role!=="user")return;await Z(U9({snapshot:A.snapshot},HX(A.message.content)))}}if((f.tool_call?.length??0)>0)V.beforeTool=async(A)=>{let B=await W(jX(A));return QO(B)};if((f.tool_result?.length??0)>0)V.afterTool=async(A)=>{await j(XX(A));return};if((f.agent_end?.length??0)>0)V.afterRun=async({snapshot:A,result:B})=>{if(B.status!=="completed")return;await X({...m$(A),iteration:B.iterations,turn:{outputText:B.outputText,status:B.status}})};if((f.agent_error?.length??0)>0||(f.agent_abort?.length??0)>0||(f.session_shutdown?.length??0)>0){let A=V.afterRun;V.afterRun=async(B)=>{await A?.(B);let{snapshot:K,result:G}=B;if(G.status==="aborted"||R9(G.error?.message)){await Y({...m$(K),reason:G.error?.message});return}if(G.error)await H({...m$(K),iteration:G.iterations,error:G.error})}}return V}function R4($){return K4("core.hook_config_files",O9($))}function R1($,f){let J=$.map((Q)=>Q[f]).filter((Q)=>typeof Q==="function");if(J.length===0)return;return async(Q)=>{let Z;for(let W of J){let j=await W(Q);if(!j||typeof j!=="object")continue;let X=j;Z={...Z??{},...X,stop:Z?.stop===!0||X.stop===!0?!0:X.stop,options:Z?.options||X.options?{...Z?.options??{},...X.options??{}}:void 0}}return Z}}function P2($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return;return{beforeRun:R1(f,"beforeRun"),afterRun:R1(f,"afterRun"),beforeModel:R1(f,"beforeModel"),afterModel:R1(f,"afterModel"),beforeTool:R1(f,"beforeTool"),afterTool:R1(f,"afterTool"),onEvent:R1(f,"onEvent")}}import{z as v$}from"zod";var U4=h1;var YX=v$.object({settings:h1,updatedAt:v$.string().datetime(),tokenSource:v$.enum(["manual","oauth","migration"]).default("manual")}),L4=v$.object({version:v$.literal(1),lastUsedProvider:v$.string().min(1).optional(),providers:v$.record(v$.string(),YX)});function $f(){return{version:1,providers:{}}}Z$();import{upsertWorkspaceInfo as ZO,WorkspaceManifestSchema as z9}from"@cline/shared";class O4{manifest;listeners=new Set;constructor($){this.manifest=z9.parse($??{workspaces:{}})}async addWorkspacePath($){let f=await d8($);return this.manifest=ZO(this.manifest,f),this.emit({type:"workspace_added",workspace:f}),f}async switchWorkspace($){let f=j1($),J=this.manifest.workspaces[f];if(J)return this.manifest=z9.parse({...this.manifest,currentWorkspacePath:f}),this.emit({type:"workspace_switched",workspace:J}),J;let Q=await this.addWorkspacePath(f);return this.manifest=z9.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let f=j1($);return this.manifest.workspaces[f]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let f of this.listeners)f($)}}R0();import{createHash as WO}from"node:crypto";var VX=new Set,AX=new Set;function jO($){return WO("sha256").update($).digest("hex")}function XO($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function BX($){if(!$.telemetry)return;let f=jO($.rootPath),J=$.rootCount??1;if(!VX.has(f))VX.add(f),$6($.telemetry,{root_count:J,vcs_types:XO($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!AX.has(f)){AX.add(f);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",f6($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:J})}}function YO($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function VO($,f,J){if(f.length>0)for(let W of f)J?.log(W.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(YO).join("; "),Z=$.length>3?`; and ${$.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${Q}${Z}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)J?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function AO($,f){let J=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!J&&!Q)return f;return{...f??{},...J?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function BO($,f){return HO($,f)}function KO($){let f=0;for(let J of $??[]){if(J.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0)?.kind==="recovery_notice")continue;f+=1}return f}function GO($){let f={...$.storedHeaders??{},...$.configHeaders??{}},J=$.accountId?.trim()||PO($.accessToken);if(f.originator="cline",f.session_id=$.sessionId,f["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)f["ChatGPT-Account-Id"]=J;return f}function PO($){let f=$?.trim();if(!f)return;let J=j0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}function FO($,f,J,Q,Z){let W=J.getProviderSettings($.providerId),j=Q||W?.modelCatalog?{...Q??{},...W?.modelCatalog??{}}:void 0,X={...W??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.providerId==="openai-codex"?GO({sessionId:f,configHeaders:$.headers,storedHeaders:W?.headers,accountId:W?.auth?.accountId,accessToken:$.apiKey??W?.auth?.accessToken??W?.apiKey}):$.headers??W?.headers,reasoning:AO($,W?.reasoning),modelCatalog:j},H=f$(X);if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let V=$.fetch??H.fetch??Z;if(V)H.fetch=V;return H}async function KX($){let{input:f,sessionId:J,providerSettingsManager:Q,defaultTelemetry:Z,defaultCapabilities:W,defaultToolPolicies:j,defaultFetch:X,onPluginEvent:H,onTeamEvent:Y,createSpawnTool:V,localRuntime:A,readSessionMetadata:B,writeSessionMetadata:K}=$,G=g$(f.config),{modelCatalogDefaults:R,userInstructionService:F,configExtensions:P,onTeamRestored:D,...O}=A??{},_=Object.keys(O).length>0?O:void 0,{workspaceInfo:L,workspaceMetadata:z,durationMs:y,vcsType:N,initError:e}=await ZW(G),$0=_?.extensionContext,a={...$0??{},workspace:{...L,...$0?.workspace??{}},session:{...$0?.session??{},sessionId:J},logger:$0?.logger??_?.logger,telemetry:$0?.telemetry??_?.telemetry??Z};BX({telemetry:a.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:N,durationMs:y,initError:e,featureFlagEnabled:!0});let m=R4({cwd:f.config.cwd,workspacePath:G,rootSessionId:J,logger:_?.logger,workspaceInfo:L}),V0=OW(_?.hooks)?void 0:D4({rootSessionId:J,workspacePath:G,workspaceInfo:L}),B$=P2([_?.hooks,V0]),v;if(BO(P,"plugins"))try{v=await g8({pluginPaths:_?.pluginPaths,workspacePath:G,cwd:f.config.cwd,onEvent:H,providerId:f.config.providerId,modelId:f.config.modelId,workspaceInfo:L,session:a.session,client:a.client,user:a.user,logger:a.logger,telemetry:a.telemetry,automation:a.automation}),VO(v.failures,v.warnings,_?.logger)}catch(Xf){let u=Xf instanceof Error?Xf.message:String(Xf);_?.logger?.log?.(`plugin loading failed; continuing without plugins (${u})`)}let h=L5(m?[m]:void 0,L5(_?.extensions,IJ(v?.extensions))),p={...f.config,..._??{},sessionId:J,hooks:B$,extensions:h,extensionContext:a,telemetry:a.telemetry},o0=FO(p,J,Q,R,X),u0=P2([p.hooks,p.checkpoint?.enabled===!0?Kj({cwd:p.cwd,sessionId:J,logger:p.logger,createCheckpoint:p.checkpoint?.createCheckpoint,initialRunCount:KO(f.initialMessages),readSessionMetadata:B,writeSessionMetadata:K}):void 0]),l$={...p,providerConfig:o0,workspaceMetadata:z,hooks:u0},N1=f.toolPolicies??p.toolPolicies??j,jf=P0(W,f.capabilities),N2=jf?.requestToolApproval,n4=jf?.toolExecutors,M1=new O4({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:f,config:l$,providerConfig:o0,workspaceMetadata:z,workspaceInfo:L,extensions:h,hooks:u0,toolPolicies:N1,requestToolApproval:N2,pluginSandboxShutdown:v?.shutdown,runtimeBuilderInput:{config:l$,hooks:u0,extensions:h,onTeamEvent:Y,createSpawnTool:V,onTeamRestored:D,userInstructionService:F,configExtensions:P,toolExecutors:n4,workspaceManager:M1,logger:l$.logger,telemetry:l$.telemetry}}}import{resolveDocumentsExtensionPath as DO}from"@cline/shared/storage";R0();function GX($,f,J,Q,Z){if(J)Q6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});else J6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});RO($.telemetry,{workspacePath:Q})}function RO($,f){let J=DO("Hooks"),Q=e1(f.workspacePath),Z=new Map;for(let W of Q){let j=W.hookEventName??"unknown",X=Z.get(j)??{global:0,workspace:0};if(W.path===J||W.path.startsWith(`${J}/`))X.global+=1;else X.workspace+=1;Z.set(j,X)}for(let[W,j]of Z.entries())K6($,W,j.global,j.workspace)}function PX($,f){for(let J of f.mentions)A6($,J,f.matchedFiles.includes(J)?1:0,"file",!f.matchedFiles.includes(J));for(let J of f.matchedFiles)Y6($,"file",J.length);for(let J of f.ignoredMentions)V6($,"file","not_found",J)}import{chmodSync as CX,existsSync as q9,mkdirSync as fz,readFileSync as Jz,writeFileSync as Qz}from"node:fs";import{basename as hX,dirname as w9}from"node:path";import{resolveProviderSettingsPath as Zz}from"@cline/shared/storage";import{existsSync as UO,mkdirSync as LO,readFileSync as OO,writeFileSync as zO}from"node:fs";import{mkdir as _O,readFile as yO,writeFile as TO}from"node:fs/promises";import{dirname as _9,join as NO}from"node:path";import*as z0 from"@cline/llms";import{ModelCapabilitySchema as MO,ProviderCapabilitySchema as qO,ProviderClientSchema as wO,ProviderProtocolSchema as SO}from"@cline/shared";import{z as l}from"zod";var CO=l.object({id:l.string().optional(),name:l.string().optional(),capabilities:l.array(MO).optional(),supportsVision:l.boolean().optional(),supportsAttachments:l.boolean().optional(),supportsReasoning:l.boolean().optional()}).passthrough(),hO=l.object({name:l.string(),baseUrl:l.string(),defaultModelId:l.string().optional(),protocol:SO.optional(),client:wO.optional(),capabilities:l.array(qO).optional(),modelsSourceUrl:l.string().optional()}).passthrough(),FX=l.object({provider:hO.optional(),models:l.record(l.string(),CO).optional()}).passthrough(),DX=l.object({version:l.literal(1),providers:l.record(l.string(),FX)}),EO=l.object({version:l.literal(1),providers:l.record(l.string(),l.unknown())}),z4=new Set;function RX($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function U1($){return NO(_9($.getFilePath()),"models.json")}function _4(){return{version:1,providers:{}}}function UX($){let f=EO.safeParse($);if(!f.success)return _4();let J={};for(let[Q,Z]of Object.entries(f.data.providers)){let W=FX.safeParse(Z);if(W.success)J[Q]=W.data}return{version:1,providers:J}}function y9($){if(!UO($))return _4();try{let f=OO($,"utf8");return UX(JSON.parse(f))}catch{}return _4()}async function ff($){try{let f=await yO($,"utf8");return UX(JSON.parse(f))}catch{}return _4()}function LX($,f){LO(_9($),{recursive:!0});let J=DX.parse(f);zO($,`${JSON.stringify(J,null,2)}
|
|
558
|
+
`,"utf8")}async function y4($,f){await _O(_9($),{recursive:!0});let J=DX.parse(f);await TO($,`${JSON.stringify(J,null,2)}
|
|
559
|
+
`,"utf8")}function OX($,f){return{id:$,name:f.name??$,supportsAttachments:f.capabilities?.includes("files"),supportsVision:f.capabilities?.includes("images"),supportsReasoning:f.capabilities?.includes("reasoning")||f.thinkingConfig!=null}}function zX($){if(!$||$.length===0)return;let f=new Set;if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("tools"))f.add("tools");return f.size>0?[...f]:void 0}function _X($){let f=new Set;if(!$||$.length===0)return[...f];if($.includes("streaming"))f.add("streaming");if($.includes("tools"))f.add("tools");if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("vision"))f.add("images"),f.add("files");return[...f]}function bO($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function yX($,f){return $??f??"openai-chat"}function TX($,f,J){return $??J??(f==="openai-responses"?"openai":"openai-compatible")}function kO($,f){let J=new Set(f?.capabilities??[]);if(f?.supportsVision)J.add("images");if(f?.supportsAttachments)J.add("files");if(f?.supportsReasoning)J.add("reasoning");return{id:$,name:f?.name??$,capabilities:J.size>0?[...J]:void 0}}function IO($,f){for(let[J,Q]of Object.entries(f??{})){let Z=Q.id?.trim()||J.trim();if(!Z)continue;z0.registerModel($,Z,kO(Z,Q))}}function xO($,f,J){return{...f??{},id:$,name:f?.name??$,capabilities:f?.capabilities??J}}function gO($){return Object.assign({},...z0.resolveProviderModelCatalogKeys($).map((J)=>z0.getGeneratedModelsForProvider(J)))}function mO($){let f=$.provider.trim();if(!f||z0.isBuiltInProviderId(f))return;let J=$.baseUrl?.trim();if(!J)return;let Q=z0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],Z=gO(f),W=_X($.capabilities),j=W.length>0?W:void 0,X=$.model?.trim(),H={...Z,...Q?.models??{}};if(X)H[X]=xO(X,H[X],j);let Y=Object.keys(H).filter(Boolean),V=X||Y[0];if(!V)return;let A=yX($.protocol,Q?.provider.protocol),B=TX($.client,A,Q?.provider.client);z0.registerProvider({provider:{id:f,name:Q?.provider.name??RX(f),description:Q?.provider.description,protocol:A,client:B,baseUrl:J,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:V,capabilities:zX($.capabilities)??Q?.provider.capabilities,source:"file"},models:H})}function T4($){for(let f of Object.values($.providers))mO(f.settings)}function F2($,f){let J=f.models??{};if(!bO(f.provider)){IO($,J);return}let Q=_X(f.provider.capabilities),Z=Object.entries(J).map(([Y,V])=>({id:V.id?.trim()||Y.trim(),model:V})).filter(({id:Y})=>Y.length>0),W=f.provider.defaultModelId?.trim()||Z[0]?.id||"default",j=yX(f.provider.protocol,void 0),X=TX(f.provider.client,j,void 0),H=Object.fromEntries(Z.map(({id:Y,model:V})=>[Y,{id:Y,name:V.name??Y,capabilities:Q.length>0?Q:void 0,status:"active"}]));z0.registerProvider({provider:{id:$,name:f.provider.name.trim()||RX($),protocol:j,client:X,baseUrl:f.provider.baseUrl,modelsSourceUrl:f.provider.modelsSourceUrl,defaultModelId:W,capabilities:zX(f.provider.capabilities),source:"file"},models:H})}function NX($){let f=U1($);if(z4.has(f))return;let J=y9(f);for(let[Q,Z]of Object.entries(J.providers))F2(Q,Z);z4.add(f)}async function MX($){let f=U1($);if(z4.has(f))return;let J=await ff(f);for(let[Q,Z]of Object.entries(J.providers))F2(Q,Z);z4.add(f)}import{existsSync as vO,readFileSync as cO}from"node:fs";import{dirname as uO,join as T9}from"node:path";import*as wX from"@cline/llms";import{resolveClineDataDir as dO}from"@cline/shared/storage";var SX="openai";function lO($){let f=$?.trim();if(!f)return;try{let J=JSON.parse(f);if(!J)return;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:J.expiresAt,accountId:J.userInfo?.id}}catch{return}}function C($){let f=$?.trim();return f?f:void 0}function qX($){if(!vO($))return;try{let f=cO($,"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function pO($){let f=$.dataDir??dO(),J=$.globalStatePath??T9(f,"globalState.json"),Q=$.secretsPath??T9(f,"secrets.json"),Z=qX(J),W=qX(Q);if(!Z&&!W)return;return{globalState:Z??{},secrets:W??{}}}function rO($){try{let J=new URL($).hostname.toLowerCase();return J==="api.openai.com"||J.endsWith(".openai.azure.com")||J.endsWith(".services.ai.azure.com")}catch{return!1}}function iO($){let f=C($.openAiBaseUrl);if(!f)return!1;if($.azureApiVersion||$.azureIdentity)return!1;return!rO(f)}function N9($,f){if($==="openai"&&iO(f))return SX;return $}function nO($,f,J,Q){let Z=J==="plan"?"planMode":"actMode",W=f===Q?C(J==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,X={openrouter:`${Z}OpenRouterModelId`,cline:`${Z}ClineModelId`,openai:`${Z}OpenAiModelId`,ollama:`${Z}OllamaModelId`,lmstudio:`${Z}LmStudioModelId`,litellm:`${Z}LiteLlmModelId`,requesty:`${Z}RequestyModelId`,together:`${Z}TogetherModelId`,fireworks:`${Z}FireworksModelId`,sapaicore:`${Z}SapAiCoreModelId`,groq:`${Z}GroqModelId`,baseten:`${Z}BasetenModelId`,huggingface:`${Z}HuggingFaceModelId`,"huawei-cloud-maas":`${Z}HuaweiCloudMaasModelId`,oca:`${Z}OcaModelId`,aihubmix:`${Z}AihubmixModelId`,hicap:`${Z}HicapModelId`,nousResearch:`${Z}NousResearchModelId`,"vercel-ai-gateway":`${Z}VercelAiGatewayModelId`}[f];return(X?C(typeof $[X]==="string"?$[X]:void 0):void 0)??W}function aO($,f,J){let Q=J==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,Z=J==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,W=J==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,j=(f==="gemini"?Z:void 0)??Q,X=j==="none"||j==="low"||j==="medium"||j==="high"?j:void 0,H=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&H===void 0)return;return{...X?{effort:X}:{},...H!==void 0?{budgetTokens:H}:{}}}function tO($){let f=$["openai-codex-oauth-credentials"];if(!f)return;try{let J=JSON.parse(f),Q=C(J.access_token),Z=C(J.refresh_token),W=C(J.accountId);if(!Q&&!Z&&!W)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...Z?{refreshToken:Z}:{},...W?{accountId:W}:{}}}}catch{return}}function sO($){let f=wX.getGeneratedModelsForProvider($);return Object.keys(f)[0]??void 0}function oO($,f,J,Q){let Z=N9($,f),W=C(Q==="plan"?f.planModeApiProvider:f.actModeApiProvider),j=nO(f,$,Q,W)??sO(Z),X=aO(f,Z,Q),H=typeof f.requestTimeoutMs==="number"&&Number.isInteger(f.requestTimeoutMs)&&f.requestTimeoutMs>0?f.requestTimeoutMs:void 0,Y={anthropic:J.apiKey,cline:J.clineApiKey,openai:J.openAiApiKey,"openai-native":J.openAiNativeApiKey,openrouter:J.openRouterApiKey,bedrock:J.awsBedrockApiKey,gemini:J.geminiApiKey,ollama:J.ollamaApiKey,deepseek:J.deepSeekApiKey,requesty:J.requestyApiKey,together:J.togetherApiKey,fireworks:J.fireworksApiKey,qwen:J.qwenApiKey,doubao:J.doubaoApiKey,mistral:J.mistralApiKey,litellm:J.liteLlmApiKey,asksage:J.asksageApiKey,xai:J.xaiApiKey,moonshot:J.moonshotApiKey,zai:J.zaiApiKey,huggingface:J.huggingFaceApiKey,nebius:J.nebiusApiKey,sambanova:J.sambanovaApiKey,cerebras:J.cerebrasApiKey,groq:J.groqApiKey,"huawei-cloud-maas":J.huaweiCloudMaasApiKey,baseten:J.basetenApiKey,"vercel-ai-gateway":J.vercelAiGatewayApiKey,dify:J.difyApiKey,minimax:J.minimaxApiKey,hicap:J.hicapApiKey,aihubmix:J.aihubmixApiKey,nousResearch:J.nousResearchApiKey,oca:J.ocaApiKey,sapaicore:J.sapAiCoreClientId},V={};if($==="openai-codex")Object.assign(V,tO(J));if($==="cline")try{let P=C(J["cline:clineAccountId"]);if(P)V.auth={...V.auth??{},...lO(P)}}catch{}if($==="openai"&&f.openAiHeaders)V.headers=f.openAiHeaders;if($==="bedrock")V.aws={accessKey:C(J.awsAccessKey),secretKey:C(J.awsSecretKey),sessionToken:C(J.awsSessionToken),region:C(f.awsRegion),authentication:f.awsAuthentication,profile:f.awsUseProfile?C(f.awsProfile):void 0,usePromptCache:f.awsBedrockUsePromptCache,useCrossRegionInference:f.awsUseCrossRegionInference,useGlobalInference:f.awsUseGlobalInference,endpoint:C(f.awsBedrockEndpoint),customModelBaseId:C(Q==="plan"?f.planModeAwsBedrockCustomModelBaseId:f.actModeAwsBedrockCustomModelBaseId)};if($==="vertex")V.gcp={projectId:C(f.vertexProjectId),region:C(f.vertexRegion)};if($==="openai"&&(f.azureApiVersion||f.azureIdentity!==void 0))V.azure={apiVersion:C(f.azureApiVersion),useIdentity:f.azureIdentity};if($==="sapaicore")V.sap={clientId:C(J.sapAiCoreClientId),clientSecret:C(J.sapAiCoreClientSecret),tokenUrl:C(f.sapAiCoreTokenUrl),resourceGroup:C(f.sapAiResourceGroup),deploymentId:C(Q==="plan"?f.planModeSapAiCoreDeploymentId:f.actModeSapAiCoreDeploymentId),useOrchestrationMode:f.sapAiCoreUseOrchestrationMode};if($==="oca"){V.oca={mode:f.ocaMode};let P=C(J.ocaRefreshToken);if(P)V.auth={...V.auth??{},refreshToken:P}}if($==="qwen")V.apiLine=f.qwenApiLine;if($==="moonshot")V.apiLine=f.moonshotApiLine;if($==="zai")V.apiLine=f.zaiApiLine;if($==="minimax")V.apiLine=f.minimaxApiLine;let A={anthropic:f.anthropicBaseUrl,openai:f.openAiBaseUrl,ollama:f.ollamaBaseUrl,lmstudio:f.lmStudioBaseUrl,litellm:f.liteLlmBaseUrl,gemini:f.geminiBaseUrl,requesty:f.requestyBaseUrl,asksage:f.asksageApiUrl,dify:f.difyBaseUrl,oca:f.ocaBaseUrl,aihubmix:f.aihubmixBaseUrl,sapaicore:f.sapAiCoreBaseUrl},B=C(Y[$]),K=C(A[$]),G={provider:Z,...B?{apiKey:B}:{},...j?{model:j}:{},...K?{baseUrl:K}:{},...X?{reasoning:X}:{},...H?{timeout:H}:{},...V},R=U4.safeParse(G);if(!R.success)return;return Object.keys(G).filter((P)=>P!=="provider").length>0?R.data:void 0}function eO($,f){if($!==SX)return;if(!f.baseUrl||!f.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:f.baseUrl,defaultModelId:f.model},models:{[f.model]:{id:f.model,name:f.model}}}}function $z($,f){let J=new Set;for(let Q of[$.actModeApiProvider,$.planModeApiProvider]){let Z=C(Q);if(Z)J.add(Z)}if(C(f.apiKey))J.add("anthropic");if(C(f.openRouterApiKey))J.add("openrouter");if(C(f.openAiApiKey))J.add("openai");if(C(f.openAiNativeApiKey))J.add("openai-native");if(C(f["openai-codex-oauth-credentials"]))J.add("openai-codex");if(C(f.geminiApiKey))J.add("gemini");if(C(f.ollamaApiKey))J.add("ollama");if(C(f.awsAccessKey)||C(f.awsBedrockApiKey))J.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))J.add("vertex");if(C(f.clineApiKey))J.add("cline");if(C(f.ocaApiKey))J.add("oca");return J}function M9($){let f=$.providerSettingsManager.read(),J=pO($);if(!J)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let{globalState:Q,secrets:Z}=J,W=Q.mode==="plan"?"plan":"act",j=$z(Q,Z),X=$f();X.providers={...f.providers},X.lastUsedProvider=f.lastUsedProvider;let H=new Date().toISOString(),Y=0,V=T9(uO($.providerSettingsManager.getFilePath()),"models.json"),A=y9(V),B=0;for(let R of j){let F=N9(R,Q);if(X.providers[F])continue;let P=oO(R,Q,Z,W);if(!P)continue;X.providers[F]={settings:P,updatedAt:H,tokenSource:"migration"},Y+=1;let D=eO(F,P);if(D&&!A.providers[F])A.providers[F]=D,B+=1}if(Y===0&&B===0)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let K=C(W==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),G=K?N9(K,Q):void 0;if(X.lastUsedProvider=f.lastUsedProvider??(G&&X.providers[G]?G:Object.keys(X.providers)[0]),$.providerSettingsManager.write(X),B>0)LX(V,A);return{migrated:Y>0||B>0,providerCount:Object.keys(X.providers).length,lastUsedProvider:X.lastUsedProvider}}function Wz(){return new Date().toISOString()}function jz($){if(hX($)!=="providers.json")return;let f=w9($);if(hX(f)!=="settings")return;return w9(f)}class c${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Zz(),this.dataDir=$.dataDir??jz(this.filePath),this.dataDir||!$.filePath)M9({providerSettingsManager:this,dataDir:this.dataDir});if(NX(this),T4(this.read()),q9(this.filePath))try{CX(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!q9(this.filePath))return $f();try{let $=Jz(this.filePath,"utf8"),f=JSON.parse($),J=L4.safeParse(f);if(J.success)return T4(J.data),J.data}catch{}return $f()}write($){let f=L4.parse($),J=w9(this.filePath);if(!q9(J))fz(J,{recursive:!0,mode:448});Qz(this.filePath,`${JSON.stringify(f,null,2)}
|
|
560
|
+
`,"utf8");try{CX(this.filePath,384)}catch{}T4(f)}saveProviderSettings($,f={}){let J=U4.parse($),Q=this.read(),Z=J.provider,W=f.setLastUsed!==!1,j=Q.providers[Z],X=f.tokenSource??j?.tokenSource??"manual",H={...Q,providers:{...Q.providers,[Z]:{settings:J,updatedAt:Wz(),tokenSource:X}},lastUsedProvider:W?Z:Q.lastUsedProvider};return this.write(H),H}getProviderSettings($){return this.read().providers[$]?.settings}getLastUsedProviderSettings(){let $=this.read(),f=$.lastUsedProvider;if(!f)return;return $.providers[f]?.settings}getProviderConfig($,f){let J=this.getProviderSettings($);if(!J)return;return f$(J,f)}getLastUsedProviderConfig($){let f=this.getLastUsedProviderSettings();if(!f)return;return f$(f,$)}async refreshCatalog(){try{await d2({})}catch{}}}R0();J4();import{execFile as Xz}from"node:child_process";import{promisify as Hz}from"node:util";var Jf=Hz(Xz);function S9($){let f=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(f?.history)?f.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let Z=String(Q.ref??"").trim(),W=Number(Q.createdAt??0),j=Number(Q.runCount??0);if(Z.length===0||!Number.isFinite(W)||!Number.isInteger(j)||j<1)return[];let X=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:Z,createdAt:W,runCount:j,...X?{kind:X}:{}}]})}function EX($,f){let J=S9($).filter((Z)=>Z.runCount<=f),Q=J.at(-1);return Q?{latest:Q,history:J}:void 0}function Yz($,f){return $.reduce((J,Q)=>{if(Q.runCount>f)return J;if(!J||Q.runCount>J.runCount)return Q;return J},void 0)}function bX($,f){let J=0;for(let Q=0;Q<$.length;Q+=1){let Z=$[Q];if(Z?.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"?Z.metadata:void 0)?.kind==="recovery_notice")continue;if(J+=1,J===f)return Q}throw Error(`Could not find user message for checkpoint run ${f}`)}function Vz($,f){let J=bX($,f);return $.slice(0,J+1)}function kX($,f){let J=bX($,f);return $.slice(0,J)}function IX($){let f=$.checkpointRunCount;if(!Number.isInteger(f)||f<1)throw Error("checkpointRunCount must be a positive integer");let J=Yz(S9($.session),f);if(!J)throw Error(`No checkpoint found at or before run ${f} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:J,cwd:Q,...$.restoreMessages!==!1?{messages:Vz($.messages??[],f)}:{}}}async function xX($,f){if((await Jf("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await Jf("git",["-C",$,"cat-file","-e",`${f.ref}^{commit}`],{windowsHide:!0}),await Jf("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await Jf("git",["-C",$,"clean","-fd"],{windowsHide:!0}),f.kind==="commit"){await Jf("git",["-C",$,"reset","--hard",f.ref],{windowsHide:!0});return}await Jf("git",["-C",$,"stash","apply",f.ref],{windowsHide:!0})}class v0 extends Error{code;constructor($,f){super(f);this.code=$;this.name="SessionVersioningError"}}function Az($){let f=$.sessionId.trim();if(!f)throw new v0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new v0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new v0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new v0("invalid_restore","checkpointRunCount must be a positive integer");return f}class Qf{async restoreCheckpoint($){let f=$.restore?.messages!==!1,J=$.restore?.workspace!==!1,Q=Az({sessionId:$.sessionId,restoreMessages:f,restoreWorkspace:J,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),Z=await $.getSession(Q);if(!Z)throw new v0("session_not_found",`Session ${Q} not found`);let W=f?await $.readMessages(Q):void 0;if(f&&W?.length===0)throw new v0("session_messages_not_found",`No messages found for session ${Q}`);let j=IX({session:Z,messages:W,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:f});if(J)await($.applyWorkspaceCheckpoint??xX)(j.cwd,j.checkpoint);let X=E$({session:Z,messages:W});if(!f)return{checkpoint:j.checkpoint,sourceSnapshot:X};let H=EX(Z,$.checkpointRunCount),Y=$.restore?.omitCheckpointMessageFromSession?kX(W??[],$.checkpointRunCount):j.messages??[],V={sourceSession:Z,sourceMessages:W,sourceSnapshot:X,plan:j,restoredCheckpointMetadata:H,initialMessages:Y,restoreMessages:f,restoreWorkspace:J,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new v0("invalid_restore","start is required when restore.messages is true");let A=$.buildStartInput?await $.buildStartInput(V,$.start):$.start,B=await $.startSession(A),K=$.getStartedSessionId?.(B);if(K)await($.retainCheckpointRefs??Bj)(j.cwd,K,H?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:B,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:X,...G?{restoredSnapshot:E$({session:G,messages:Y})}:{}}}}import{hasRuntimeConfigExtension as Tz}from"@cline/shared";import{nanoid as Nz}from"nanoid";Z$();import{appendFileSync as Bz,existsSync as Zf,mkdirSync as gX,readdirSync as Kz,readFileSync as mX,renameSync as Gz,writeFileSync as Pz}from"node:fs";import{join as C9}from"node:path";import{resolveTeamDataDir as Fz}from"@cline/shared/storage";function vX(){return new Date().toISOString()}function h9($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function cX($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class N4{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Fz()}init(){this.ensureTeamDir()}listTeamNames(){if(!Zf(this.teamDirPath))return[];return Kz(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>Zf(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let f=this.readEnvelope($);return f?.teamState?cX(f.teamState):void 0}readHistory($,f=200){let J=this.historyPath($);if(!Zf(J))return[];return mX(J,"utf8").split(`
|
|
561
|
+
`).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,f)}loadRuntime($){let f=this.readEnvelope($);return{state:f?.teamState?cX(f.teamState):void 0,teammates:f?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,f){this.ensureTeamSubdir($),Bz(this.historyPath($),`${JSON.stringify({ts:vX(),eventType:f.type,payload:f})}
|
|
562
|
+
`,"utf8")}persistRuntime($,f,J){this.ensureTeamSubdir($);let Q={version:1,updatedAt:vX(),teamState:f,teammates:J},Z=this.statePath($),W=`${Z}.tmp`;Pz(W,`${JSON.stringify(Q,null,2)}
|
|
563
|
+
`,"utf8"),Gz(W,Z)}markInProgressRunsInterrupted($,f){let J=this.readEnvelope($);if(!J?.teamState?.runs?.length)return[];let Q=J.teamState.runs.filter((W)=>W.status==="queued"||W.status==="running").map((W)=>W.id);if(Q.length===0)return[];let Z=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((W)=>W.status==="queued"||W.status==="running"?{...W,status:"interrupted",error:f,endedAt:Z}:W)},this.persistRuntime($,J.teamState,J.teammates),Q}ensureTeamDir(){if(!Zf(this.teamDirPath))gX(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let f=C9(this.ensureTeamDir(),h9($));if(!Zf(f))gX(f,{recursive:!0});return f}statePath($){return C9(this.ensureTeamDir(),h9($),"state.json")}historyPath($){return C9(this.ensureTeamDir(),h9($),"task-history.jsonl")}readEnvelope($){let f=this.statePath($);if(!Zf(f))return;try{let J=JSON.parse(mX(f,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as Dz,mkdirSync as Rz}from"node:fs";import{join as Uz}from"node:path";import{safeJsonParse as uX}from"@cline/shared";import{loadSqliteDb as Lz,nowIso as E9}from"@cline/shared/db";import{resolveDbDataDir as Oz}from"@cline/shared/storage";function zz(){return Oz()}function Wf($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function _z($){let f=uX($);if(!Array.isArray(f))return[];let J=[];for(let Q of f){if(!Q||typeof Q!=="object")continue;let Z=Q,W=Z.agentId,j=Z.rolePrompt;if(typeof W!=="string"||!W.trim())continue;if(typeof j!=="string"||!j.trim())continue;let X={agentId:W.trim(),rolePrompt:j};if(typeof Z.modelId==="string"&&Z.modelId.trim())X.modelId=Z.modelId.trim();if(typeof Z.maxIterations==="number"&&Number.isFinite(Z.maxIterations))X.maxIterations=Math.max(1,Math.floor(Z.maxIterations));J.push(X)}return J}function yz($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class D2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??zz()}init(){this.getRawDb()}ensureTeamDir(){if(!Dz(this.teamDirPath))Rz(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Uz(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Lz(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
562
564
|
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
563
565
|
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
564
566
|
version INTEGER NOT NULL
|
|
565
567
|
);
|
|
566
|
-
`)
|
|
568
|
+
`),!$.prepare("SELECT version FROM team_store_schema_version WHERE lock = 1").get())$.prepare("INSERT INTO team_store_schema_version (lock, version) VALUES (1, 1)").run();$.exec(`
|
|
567
569
|
CREATE TABLE IF NOT EXISTS team_events (
|
|
568
570
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
569
571
|
team_name TEXT NOT NULL,
|
|
@@ -573,17 +575,17 @@ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fi
|
|
|
573
575
|
causation_id TEXT,
|
|
574
576
|
correlation_id TEXT
|
|
575
577
|
);
|
|
576
|
-
`)
|
|
578
|
+
`),$.exec(`
|
|
577
579
|
CREATE INDEX IF NOT EXISTS idx_team_events_name_ts
|
|
578
580
|
ON team_events(team_name, ts DESC);
|
|
579
|
-
`)
|
|
581
|
+
`),$.exec(`
|
|
580
582
|
CREATE TABLE IF NOT EXISTS team_runtime_snapshot (
|
|
581
583
|
team_name TEXT PRIMARY KEY,
|
|
582
584
|
state_json TEXT NOT NULL,
|
|
583
585
|
teammates_json TEXT NOT NULL,
|
|
584
586
|
updated_at TEXT NOT NULL
|
|
585
587
|
);
|
|
586
|
-
`)
|
|
588
|
+
`),$.exec(`
|
|
587
589
|
CREATE TABLE IF NOT EXISTS team_tasks (
|
|
588
590
|
team_name TEXT NOT NULL,
|
|
589
591
|
task_id TEXT NOT NULL,
|
|
@@ -597,7 +599,7 @@ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fi
|
|
|
597
599
|
updated_at TEXT NOT NULL,
|
|
598
600
|
PRIMARY KEY(team_name, task_id)
|
|
599
601
|
);
|
|
600
|
-
`)
|
|
602
|
+
`),$.exec(`
|
|
601
603
|
CREATE TABLE IF NOT EXISTS team_runs (
|
|
602
604
|
team_name TEXT NOT NULL,
|
|
603
605
|
run_id TEXT NOT NULL,
|
|
@@ -613,10 +615,10 @@ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fi
|
|
|
613
615
|
version INTEGER NOT NULL DEFAULT 1,
|
|
614
616
|
PRIMARY KEY(team_name, run_id)
|
|
615
617
|
);
|
|
616
|
-
`)
|
|
618
|
+
`),$.exec(`
|
|
617
619
|
CREATE INDEX IF NOT EXISTS idx_team_runs_status
|
|
618
620
|
ON team_runs(team_name, status);
|
|
619
|
-
`)
|
|
621
|
+
`),$.exec(`
|
|
620
622
|
CREATE TABLE IF NOT EXISTS team_outcomes (
|
|
621
623
|
team_name TEXT NOT NULL,
|
|
622
624
|
outcome_id TEXT NOT NULL,
|
|
@@ -627,7 +629,7 @@ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fi
|
|
|
627
629
|
version INTEGER NOT NULL DEFAULT 1,
|
|
628
630
|
PRIMARY KEY(team_name, outcome_id)
|
|
629
631
|
);
|
|
630
|
-
`)
|
|
632
|
+
`),$.exec(`
|
|
631
633
|
CREATE TABLE IF NOT EXISTS team_outcome_fragments (
|
|
632
634
|
team_name TEXT NOT NULL,
|
|
633
635
|
outcome_id TEXT NOT NULL,
|
|
@@ -642,13 +644,13 @@ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fi
|
|
|
642
644
|
version INTEGER NOT NULL DEFAULT 1,
|
|
643
645
|
PRIMARY KEY(team_name, fragment_id)
|
|
644
646
|
);
|
|
645
|
-
`)}run(f
|
|
646
|
-
VALUES (?, ?, ?, ?, NULL, ?)`,[
|
|
647
|
+
`)}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}withTransaction($){let f=this.getRawDb();f.exec("BEGIN IMMEDIATE;");try{$(),f.exec("COMMIT;")}catch(J){try{f.exec("ROLLBACK;")}catch{}throw J}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let f=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Wf($)]);if(!f)return;let J=uX(f.state_json);if(!J)return;try{return yz(J)}catch{return}}readHistory($,f=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[Wf($),f]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime($){let f=Wf($),J=this.readState(f),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[f]),Z=Q?_z(Q.teammates_json):[];return{state:J,teammates:Z,interruptedRunIds:[]}}appendTeamEvent($,f,J,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
|
|
648
|
+
VALUES (?, ?, ?, ?, NULL, ?)`,[Wf($),E9(),f,JSON.stringify(J),Q??null])}persistRuntime($,f,J){let Q=Wf($),Z=E9();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
647
649
|
VALUES (?, ?, ?, ?)
|
|
648
650
|
ON CONFLICT(team_name) DO UPDATE SET
|
|
649
651
|
state_json = excluded.state_json,
|
|
650
652
|
teammates_json = excluded.teammates_json,
|
|
651
|
-
updated_at = excluded.updated_at`,[
|
|
653
|
+
updated_at = excluded.updated_at`,[Q,JSON.stringify(f),JSON.stringify(J),Z]);for(let W of f.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
|
|
652
654
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
|
|
653
655
|
ON CONFLICT(team_name, task_id) DO UPDATE SET
|
|
654
656
|
title = excluded.title,
|
|
@@ -658,7 +660,7 @@ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fi
|
|
|
658
660
|
depends_on_json = excluded.depends_on_json,
|
|
659
661
|
summary = excluded.summary,
|
|
660
662
|
version = team_tasks.version + 1,
|
|
661
|
-
updated_at = excluded.updated_at`,[W
|
|
663
|
+
updated_at = excluded.updated_at`,[Q,W.id,W.title,W.description,W.status,W.assignee??null,JSON.stringify(W.dependsOn??[]),W.summary??null,W.updatedAt.toISOString()]);for(let W of f.runs??[])this.run(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
|
|
662
664
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
|
|
663
665
|
ON CONFLICT(team_name, run_id) DO UPDATE SET
|
|
664
666
|
agent_id = excluded.agent_id,
|
|
@@ -670,14 +672,14 @@ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fi
|
|
|
670
672
|
error = excluded.error,
|
|
671
673
|
lease_owner = excluded.lease_owner,
|
|
672
674
|
heartbeat_at = excluded.heartbeat_at,
|
|
673
|
-
version = team_runs.version + 1`,[W
|
|
675
|
+
version = team_runs.version + 1`,[Q,W.id,W.agentId,W.taskId??null,W.status,W.message,W.startedAt?W.startedAt.toISOString():null,W.endedAt?W.endedAt.toISOString():null,W.error??null,W.leaseOwner??null,W.heartbeatAt?W.heartbeatAt.toISOString():null]);for(let W of f.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
|
|
674
676
|
VALUES (?, ?, ?, ?, ?, ?, 1)
|
|
675
677
|
ON CONFLICT(team_name, outcome_id) DO UPDATE SET
|
|
676
678
|
title = excluded.title,
|
|
677
679
|
status = excluded.status,
|
|
678
680
|
schema_json = excluded.schema_json,
|
|
679
681
|
finalized_at = excluded.finalized_at,
|
|
680
|
-
version = team_outcomes.version + 1`,[W
|
|
682
|
+
version = team_outcomes.version + 1`,[Q,W.id,W.title,W.status,JSON.stringify({requiredSections:W.requiredSections}),W.finalizedAt?W.finalizedAt.toISOString():null]);for(let W of f.outcomeFragments??[])this.run(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
|
|
681
683
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
|
|
682
684
|
ON CONFLICT(team_name, fragment_id) DO UPDATE SET
|
|
683
685
|
outcome_id = excluded.outcome_id,
|
|
@@ -688,28 +690,28 @@ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fi
|
|
|
688
690
|
status = excluded.status,
|
|
689
691
|
reviewed_by = excluded.reviewed_by,
|
|
690
692
|
reviewed_at = excluded.reviewed_at,
|
|
691
|
-
version = team_outcome_fragments.version + 1`,[W
|
|
692
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[$,H,J]),W.map((Q)=>Q.run_id)}handleTeamEvent(f,$){this.appendTeamEvent(f,$.type,$)}}function Yj(f={}){try{let $=new Q2(f);return $.init(),$}catch{let $=new A4({teamDir:f.teamDir});return $.init(),$}}function KW(f,$){return TD(f,$)}function _D(f,$){let J=$?.["*"]??{},W=$?.[f]??{};return{...J,...W}.enabled!==!1}function MD(f,$){return f.filter((J)=>_D(J.name,$))}function Vj(f,$){return g$(MD(f,$))}function Rj(){return`team-${DD(5)}`}function yW(f,$,J,W,H,Q,Z,j){let X=df[M0({mode:J})],A=F1($,W,J,H??R1);return Vj(D1({cwd:f,...X,enableSkills:!!Z,...A,executors:{...Z?{skills:Z}:{},...j??{}}}),Q)}function LD(f){return yW(f.cwd,f.providerId,f.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,hD,f.toolExecutors).some(($)=>$.name==="skills")}var hD=async()=>"";async function OD(f){let $=f1();if(!Q4({filePath:$}))return{tools:[]};let J=new H2({clientFactory:H4()}),W;try{W=await Z4(J,{filePath:$})}catch(j){await J.dispose().catch(()=>{});let X=j instanceof Error?j.message:String(j);return f?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${X}`),{tools:[]}}let H=W.filter((j)=>j.disabled!==!0),Q=await Promise.allSettled(H.map((j)=>X4({serverName:j.name,provider:J}))),Z=[];for(let[j,X]of Q.entries())if(X.status==="fulfilled")Z.push(...X.value);else{let A=X.reason instanceof Error?X.reason.message:String(X.reason);f?.log(`[mcp] Failed to load tools from MCP server "${H[j].name}", skipping: ${A}`)}return{tools:Z,shutdown:async()=>{await J.dispose()}}}function zD(f,$){if(!f)return;for(let J of f.getTeammateIds())try{f.shutdownTeammate(J,$)}catch{}}function ND(f){if(f===void 0)return!0;switch(f){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 qD(f){let $=df[M0({mode:f.mode})];return{sessionId:f.sessionId||"",mode:f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act",enableTools:f.enableTools!==!1,enableSpawnAgent:f.enableSpawnAgent??$.enableSpawnAgent??!0,enableAgentTeams:f.enableAgentTeams??$.enableAgentTeams??!0,disableMcpSettingsTools:f.disableMcpSettingsTools===!0,yolo:f.yolo===!0,missionLogIntervalSteps:typeof f.missionLogIntervalSteps==="number"&&Number.isFinite(f.missionLogIntervalSteps)?f.missionLogIntervalSteps:3,missionLogIntervalMs:typeof f.missionLogIntervalMs==="number"&&Number.isFinite(f.missionLogIntervalMs)?f.missionLogIntervalMs:120000}}class P4{teamRuntimeEntries=new Map;async build(f){let{config:$,hooks:J,extensions:W,logger:H,telemetry:Q,createSpawnTool:Z,onTeamRestored:j,userInstructionService:X,configExtensions:A,toolExecutors:P}=f,B=f.onTeamEvent??(()=>{}),Y=qD($),V=rf(),R=[],U=$.teamName?.trim()||Rj(),K=$.sessionId?.trim()||U,F=KW(A,"rules"),y=KW(A,"skills"),D=KW(A,"workflows"),M=F||y||D,T=!1,_=Boolean(X),L=X,O;if(!L&&M)L=m$({skills:{workspacePath:$.cwd},rules:{workspacePath:$.cwd},workflows:{workspacePath:$.cwd}});if(L)await L.start().catch(()=>{});let e=Y.enableTools&&y&&Boolean(L)&&(_||L?.hasConfiguredSkills($.skills)===!0)&&LD({cwd:$.cwd,providerId:$.providerId,mode:Y.mode,modelId:$.modelId,toolRoutingRules:$.toolRoutingRules,toolPolicies:$.toolPolicies,toolExecutors:P}),ff=L&&M?L.createExtension({includeRules:F,includeSkills:y,includeWorkflows:D,registerSkillsTool:e,allowedSkillNames:$.skills}):void 0,a=ff?[...W??$.extensions??[],ff]:W??$.extensions;if(Y.enableTools){if(R.push(...yW($.cwd,$.providerId,Y.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,void 0,P)),!Y.disableMcpSettingsTools){let u=await OD($.logger);R.push(...u.tools),O=u.shutdown}}let g,Pf=Y.enableAgentTeams?Yj():void 0,B0=Pf?.loadRuntime(K),r=B0?.state,tf=B0?.teammates??[],b=new Map(tf.map((u)=>[u.agentId,u])),l=$.sessionId||U,sf,of=[],u0=!1,_$=Z8({providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,apiKey:$.apiKey??"",baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking,maxIterations:$.maxIterations,hooks:J,extensions:a,logger:H??$.logger,telemetry:f.telemetry??$.telemetry,workspaceMetadata:$.workspaceMetadata});if(!this.teamRuntimeEntries.has(l))this.teamRuntimeEntries.set(l,{delegatedAgentConfigProvider:_$});let W1=()=>{if(!Y.enableAgentTeams)return;let u=this.teamRuntimeEntries.get(l)??{delegatedAgentConfigProvider:_$};if(this.teamRuntimeEntries.set(l,u),g=u.runtime,!g){if(g=new n1({teamName:U,leadAgentId:$.sessionId||"lead",missionLogIntervalSteps:Y.missionLogIntervalSteps,missionLogIntervalMs:Y.missionLogIntervalMs,onTeamEvent:(o)=>{if(B(o),g&&Pf){if(o.type==="teammate_spawned"&&o.teammate?.rolePrompt){let ef={agentId:o.agentId,rolePrompt:o.teammate.rolePrompt,modelId:o.teammate.modelId,maxIterations:o.teammate.maxIterations};b.set(ef.agentId,ef)}if(o.type==="teammate_shutdown"&&!ND(o.reason))b.delete(o.agentId);Pf.handleTeamEvent(K,o),Pf.persistRuntime(K,g.exportState(),Array.from(b.values()))}}}),r)g.hydrateState(r),u0=!0;u.runtime=g}if(!T){if(!g)return;T=!0;let o=P8({runtime:g,leadAgentId:$.sessionId||"lead",restoredFromPersistence:Boolean(r),restoredTeammates:tf,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(ef)=>{of=ef,sf?.addTools(ef)},createBaseTools:Y.enableTools?()=>yW($.cwd,$.providerId,Y.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,void 0,P):void 0,teammateConfigProvider:_$});if(u0)g.recoverActiveRuns("runtime_recovered");if(o.restoredFromPersistence)j?.();R.push(...o.tools)}return g};if(Y.enableSpawnAgent&&Z){let u=Z();R.push({...u,execute:async(o,ef)=>{return W1(),u.execute(o,ef)}})}if(Y.enableAgentTeams)W1();let R2=Vj(R,$.toolPolicies),w4=R2.some((u)=>u.name===Hf.SUBMIT_AND_EXIT&&u.lifecycle?.completesRun===!0),M$=Y.enableAgentTeams?()=>{let u=this.teamRuntimeEntries.get(l)?.runtime;if(!u)return;let o=u.listTasks(),ef=o.some((Y0)=>Y0.status==="in_progress"||Y0.status==="pending"),fH=u.listRuns({}),nX=fH.some((Y0)=>Y0.status==="running"||Y0.status==="queued");if(ef||nX){let Y0=o.filter((Lf)=>Lf.status==="in_progress"||Lf.status==="pending").map((Lf)=>`${Lf.id} (${Lf.status}): ${Lf.title}`).join(", "),$H=fH.filter((Lf)=>Lf.status==="running"||Lf.status==="queued").map((Lf)=>`${Lf.id} (${Lf.status})`).join(", "),b4=[];if(Y0)b4.push(`Unfinished tasks: ${Y0}`);if($H)b4.push(`Active runs: ${$H}`);return`[SYSTEM] You still have team obligations. ${b4.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,H1=w4?{requireCompletionTool:!0,...M$?{completionGuard:M$}:{}}:M$?{completionGuard:M$}:void 0;return{tools:R2,logger:H??$.logger,telemetry:Q??$.telemetry,teamRuntime:g,teamRestoredFromPersistence:Boolean(r),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(l)?.delegatedAgentConfigProvider??_$,extensions:a,completionPolicy:H1,registerLeadAgent:(u)=>{if(sf=u,of.length>0)u.addTools(g$(of,[...V]))},shutdown:async(u)=>{if(zD(g,u),this.teamRuntimeEntries.delete(l),await O?.(),!_)L?.stop()}}}}import{getClineEnvironmentConfig as wD,isOAuthProviderId as bD}from"@cline/shared";var UW="workos:";function CD(f,$){if(f==="cline")return`${UW}${$}`;return $}function ED(f,$){if(f==="cline"&&$.toLowerCase().startsWith(UW))return $.slice(UW.length);return $}function SD(f){let J=Zf(f)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function kD(f,$){let J=f.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let W=SD($);if(W)return W;return Date.now()-1}function ID(f,$){let J=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!J||!W)return null;let H=ED(f,J);if(!H)return null;return{access:H,refresh:W,expires:kD($,H),accountId:$.auth?.accountId}}function mD(f,$){let J=f?.expiresAt,W=$?.expiresAt;return f?.accessToken===$?.accessToken&&f?.refreshToken===$?.refreshToken&&f?.accountId===$?.accountId&&J===W}class B4 extends Error{providerId;constructor(f){super(`OAuth credentials for provider "${f}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=f}}class GW{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor(f){this.providerSettingsManager=f?.providerSettingsManager??new x0,this.telemetry=f?.telemetry}async resolveProviderApiKey(f){if(!bD(f.providerId))return null;return this.resolveWithSingleFlight(f.providerId,f.forceRefresh)}async resolveWithSingleFlight(f,$=!1){let J=this.refreshInFlight.get(f);if(J)return J;let W=this.resolveProviderApiKeyInternal(f,$).catch((H)=>{throw H}).finally(()=>{this.refreshInFlight.delete(f)});return this.refreshInFlight.set(f,W),W}async resolveProviderApiKeyInternal(f,$){let J=this.providerSettingsManager.getProviderSettings(f);if(!J)return null;let W=ID(f,J);if(!W)return null;let H=await this.resolveCredentials(f,J,W,$);if(!H)throw new B4(f);let Q=CD(f,H.access),Z={...J.auth??{},accessToken:Q,refreshToken:H.refresh,accountId:H.accountId};Z.expiresAt=H.expires;let j={...J,auth:Z},X=!mD(J.auth,j.auth);if(X)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:f,apiKey:Q,accountId:H.accountId,refreshed:X}}async resolveCredentials(f,$,J,W){if(f==="cline")return $6(J,{apiBaseUrl:$.baseUrl?.trim()||wD().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:W});if(f==="oca")return A6(J,{forceRefresh:W,telemetry:this.telemetry},{mode:$.oca?.mode,telemetry:this.telemetry});return W6(J,{forceRefresh:W,telemetry:this.telemetry})}}import{normalizeUserInput as xD}from"@cline/shared";import{nanoid as gD}from"nanoid";class Fj{list(f){return f?Ef(f):[]}update(f,$){if(!f)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=$.promptId.trim(),W=f.pendingPrompts.findIndex((X)=>X.id===J);if(W<0)return{sessionId:$.sessionId,prompts:Ef(f),updated:!1};let H=f.pendingPrompts[W];if(!H)return{sessionId:$.sessionId,prompts:Ef(f),updated:!1};let Q=$.prompt===void 0?H.prompt:xD($.prompt).trim();if(!Q)throw Error("prompt cannot be empty");let Z=$.delivery??H.delivery,j={...H,prompt:Q,delivery:Z};return f.pendingPrompts.splice(W,1),vD(f,j,W,H.delivery),{sessionId:$.sessionId,prompts:Ef(f),prompt:Y4(j),updated:!0}}delete(f,$){if(!f)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=$.promptId.trim(),W=f.pendingPrompts.findIndex((Q)=>Q.id===J);if(W<0)return{sessionId:$.sessionId,prompts:Ef(f),removed:!1};let[H]=f.pendingPrompts.splice(W,1);return{sessionId:$.sessionId,prompts:Ef(f),prompt:H?Y4(H):void 0,removed:!0}}enqueue(f,$){let{prompt:J,delivery:W,userImages:H,userFiles:Q}=$,Z=f.pendingPrompts.findIndex((j)=>j.prompt===J);if(Z>=0){let[j]=f.pendingPrompts.splice(Z,1),X={...j,prompt:J,userImages:H??j.userImages,userFiles:Q??j.userFiles};if(W==="steer"||j.delivery==="steer")f.pendingPrompts.unshift({...X,delivery:"steer"});else f.pendingPrompts.push(X)}else{let j={id:`pending_${Date.now()}_${gD(5)}`,prompt:J,delivery:W,userImages:H,userFiles:Q};if(W==="steer")f.pendingPrompts.unshift(j);else f.pendingPrompts.push(j)}return Ef(f)}consumeSteer(f){let $=f.pendingPrompts.findIndex((W)=>W.delivery==="steer");if($<0)return{prompts:Ef(f)};let[J]=f.pendingPrompts.splice($,1);return{entry:J,prompts:Ef(f)}}shiftNext(f){return{entry:f.pendingPrompts.shift(),prompts:Ef(f)}}requeueFront(f,$){return f.pendingPrompts.unshift($),Ef(f)}clear(f){return f.pendingPrompts.length=0,[]}}class TW{deps;service=new Fj;constructor(f){this.deps=f}list(f){return this.service.list(this.deps.getSession(f))}update(f){let $=this.deps.getSession(f.sessionId);if(!$||$.aborting)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=this.service.update($,f);return this.emitPrompts($),this.scheduleDrain(f.sessionId,$),J}delete(f){let $=this.deps.getSession(f.sessionId);if(!$||$.aborting)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=this.service.delete($,f);return this.emitPrompts($),this.scheduleDrain(f.sessionId,$),J}enqueue(f,$){let J=this.deps.getSession(f);if(!J||J.aborting)return;this.service.enqueue(J,$),this.emitPrompts(J),this.scheduleDrain(f,J)}consumeSteer(f){let $=this.deps.getSession(f);if(!$)return;let{entry:J}=this.service.consumeSteer($);if(!J)return;return this.emitPrompts($),this.emitSubmitted($,J),J.prompt}clearAborted(f){if(f.pendingPrompts.length===0)return;this.service.clear(f),this.emitPrompts(f)}emitPrompts(f){this.deps.emit({type:"pending_prompts",payload:{sessionId:f.sessionId,prompts:Ef(f)}})}scheduleDrain(f,$){if($.pendingPrompts.length===0||$.aborting||$.drainingPendingPrompts||!$.agent.canStartRun())return;queueMicrotask(()=>{this.drain(f)})}async drain(f){let $=this.deps.getSession(f);if(!$||$.aborting||$.drainingPendingPrompts)return;if(!$.agent.canStartRun())return;let{entry:J}=this.service.shiftNext($);if(!J)return;this.emitPrompts($),this.emitSubmitted($,J),$.drainingPendingPrompts=!0;try{await this.deps.send({sessionId:f,prompt:J.prompt,userImages:J.userImages,userFiles:J.userFiles})}catch(W){if((W instanceof Error?W.message:String(W)).includes("already in progress"))this.service.requeueFront($,J),this.emitPrompts($);else throw W}finally{if($.drainingPendingPrompts=!1,$.pendingPrompts.length>0&&$.status!=="failed"&&$.status!=="cancelled")queueMicrotask(()=>{this.drain(f)})}}emitSubmitted(f,$){let J=Y4($);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:f.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function Y4(f){return{id:f.id,prompt:f.prompt,delivery:f.delivery,attachmentCount:(f.userImages?.length??0)+(f.userFiles?.length??0)}}function Ef(f){return f.pendingPrompts.map(Y4)}function vD(f,$,J,W){if($.delivery==="steer")f.pendingPrompts.unshift($);else if(W==="steer")f.pendingPrompts.push($);else f.pendingPrompts.splice(J,0,$)}Uf();class _W{deps;constructor(f){this.deps=f}dispatchAgentEvent(f,$,J){let W=this.deps.getSession(f),H={sessionId:f,config:$,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},Q=d5(J),Z=!!W&&(!Q.agentId||Q.agentId===DW(W.agent));r5(H,J,Z?{isPrimaryAgentEvent:!0,agentId:DW(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent(f,$){let J=this.deps.getSession(f);if(J){if(O5(J,$),$.type==="agent_event"){let W={sessionId:f,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};r5(W,$.event,{agentId:$.agentId,teamRole:"teammate",teamAgentId:$.agentId,isPrimaryAgentEvent:!1})}if($.type==="teammate_spawned"){let W=A0({agentId:$.teammate.runtimeAgentId??$.agentId,conversationId:$.teammate.conversationId,parentAgentId:$.teammate.parentAgentId,createdByAgentId:DW(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:$.agentId});if(W)d0(J.config.telemetry,{ulid:f,modelId:$.teammate.modelId??J.config.modelId,provider:J.config.providerId,...W})}}if(await z5(f,$,this.deps.invokeBackendOptional),J)N5(J,f,$,this.deps.emit)}async handlePluginEvent(f,$,J){if($.name==="plugin_log"){this.handlePluginLog(f,$.payload);return}if($.name==="automation_event"){let X=this.deps.getSession(f)?.config.extensionContext?.automation??J;if(!X)return;let A=$.payload&&typeof $.payload==="object"?$.payload:void 0;if(!A)return;await X.ingestEvent(A);return}if($.name!=="steer_message"&&$.name!=="queue_message"&&$.name!=="pending_prompt")return;let W=$.payload&&typeof $.payload==="object"?$.payload:void 0,H=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():f,Q=typeof W?.prompt==="string"?W.prompt.trim():"";if(!Q)return;let Z=$.name==="steer_message"?"steer":$.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(H,{prompt:Q,delivery:Z})}handlePluginLog(f,$,J){let W=this.deps.getSession(f),H=J??W?.config.extensionContext?.logger??W?.config.logger;if(!H||!$||typeof $!=="object")return;let Q=$,Z=typeof Q.message==="string"?Q.message:"";if(!Z)return;let j=Q.metadata&&typeof Q.metadata==="object"?{...Q.metadata}:{};if(j.sessionId??=f,typeof Q.pluginName==="string"&&Q.pluginName)j.pluginName=Q.pluginName;if(Q.level==="debug"){H.debug(Z,j);return}if(Q.level==="error"){if(H.error)H.error(Z,j);else H.log(Z,{...j,severity:"error"});return}H.log(Z,j)}}function DW(f){return f.getAgentId()}function MW(f){return{sessionId:f.sessionId,source:f.source,pid:process.pid,startedAt:f.startedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,status:f.status,interactive:f.interactive,provider:f.config.providerId,model:f.config.modelId,cwd:f.config.cwd,workspaceRoot:k0(f.config),teamName:f.config.teamName?.trim()||void 0,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,parentSessionId:typeof f.sessionMetadata?.parentSessionId==="string"?f.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof f.sessionMetadata?.parentAgentId==="string"?f.sessionMetadata.parentAgentId:void 0,agentId:typeof f.sessionMetadata?.agentId==="string"?f.sessionMetadata.agentId:void 0,conversationId:typeof f.sessionMetadata?.conversationId==="string"?f.sessionMetadata.conversationId:void 0,isSubagent:typeof f.sessionMetadata?.isSubagent==="boolean"?f.sessionMetadata.isSubagent:!1,prompt:f.pendingPrompt,metadata:f.sessionMetadata,messagesPath:f.artifacts?.messagesPath,updatedAt:f.updatedAt??f.endedAt??f.startedAt}}function LW(f,$){let J=f[$];return typeof J==="function"?J:null}async function Kj(f,$,...J){let W=LW(f,$);if(!W)throw Error(`session service method not available: ${$}`);return Promise.resolve(W.apply(f,J))}async function yj(f,$,...J){let W=LW(f,$);if(!W)return;await Promise.resolve(W.apply(f,J))}async function Uj(f,$,...J){let W=LW(f,$);if(!W)return;return await Promise.resolve(W.apply(f,J))}W0();Uf();function hW(f,$,J,W){return I$({configProvider:{getRuntimeConfig:()=>f.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking,maxIterations:$.maxIterations,hooks:$.hooks,extensions:$.extensions,logger:$.logger,telemetry:$.telemetry},getConnectionConfig:()=>f.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Q=$.enableTools?D1({cwd:$.cwd,...df[M0({mode:$.mode})],executors:W}):[];if($.enableSpawnAgent)Q.push(hW(f,$,J,W));return g$(Q)},onSubAgentEvent:(Q)=>f.onAgentEvent(J,$,Q),onSubAgentStart:(Q)=>{let Z=f.getSession(J)?.runtime.teamRuntime;f.subAgentStarts.set(Q.subAgentId,{startedAt:Date.now(),rootSessionId:J});let j=A0({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:Z?.getTeamId(),teamName:Z?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)d0($.telemetry,{ulid:J,modelId:$.modelId,provider:$.providerId,...j});U2($.telemetry,{event:"started",ulid:J,durationMs:0,parentId:Q.parentAgentId,agentId:Q.subAgentId,...j}),f.invokeBackendOptional("handleSubAgentStart",J,Q)},onSubAgentEnd:(Q)=>{let Z=f.getSession(J)?.runtime.teamRuntime,j=f.subAgentStarts.get(Q.subAgentId),X=j?Date.now()-j.startedAt:0,A=Q.result?.text?Q.result.text.split(`
|
|
693
|
-
`).length:0;U2($.telemetry,{event:"ended",ulid:J,durationMs:X,outputLines:A,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...A0({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:Z?.getTeamId(),teamName:Z?.getTeamName(),createdByAgentId:Q.parentAgentId})}),f.subAgentStarts.delete(Q.subAgentId),f.invokeBackendOptional("handleSubAgentEnd",J,Q)}})}import{readFile as uD,stat as cD}from"node:fs/promises";var dD=20480000;async function Gj(f){let $=await cD(f);if(!$.isFile())throw Error("Path is not a file");if($.size>dD)throw Error("File is too large to read into context.");let J=await uD(f,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var Tj=5000;function Z2(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function sD(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let $=f,J=Z2($.inputTokens),W=Z2($.outputTokens),H=Z2($.cacheReadTokens),Q=Z2($.cacheWriteTokens),Z=Z2($.totalCost);if(J===void 0||W===void 0||H===void 0||Q===void 0||Z===void 0)return;return{inputTokens:J,outputTokens:W,cacheReadTokens:H,cacheWriteTokens:Q,totalCost:Z}}function oD(f,$){return{inputTokens:Math.max(f.inputTokens,$.inputTokens),outputTokens:Math.max(f.outputTokens,$.outputTokens),cacheReadTokens:Math.max(f.cacheReadTokens,$.cacheReadTokens),cacheWriteTokens:Math.max(f.cacheWriteTokens,$.cacheWriteTokens),totalCost:Math.max(f.totalCost,$.totalCost)}}class g0{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new v1;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new e$;constructor(f){let $=lD();if($)tD($);let J=B$(f.distinctId);this.sessionService=f.sessionService,this.runtimeBuilder=f.runtimeBuilder??new P4,this.createAgentInstance=f.createAgent??((W)=>new L0(W)),this.defaultCapabilities=Ff(f.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=f.toolPolicies,this.providerSettingsManager=f.providerSettingsManager??new x0,this.oauthTokenManager=f.oauthTokenManager??new GW({providerSettingsManager:this.providerSettingsManager,telemetry:f.telemetry}),this.defaultTelemetry=f.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=f.fetch,this.pendingPromptsController=new TW({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new _W({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,H,Q)=>{this.invoke("persistSessionMessages",W,H,Q)},enqueuePendingPrompt:(W,H)=>this.pendingPromptsController.enqueue(W,H),invokeBackendOptional:(W,...H)=>this.invokeOptional(W,...H)})}async startSession(f){let $=f.source??Rf.CLI,J=n(),W=f.config.sessionId?.trim()??"",H=W||iD(),Q=f,Z=Q.initialMessages??[],j=Z.length>0?r8(Z):Vf(),X=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!X)throw Error("session service method not available: ensureSessionsDir");let A=OW(X,H),P=OW(A,`${H}.messages.json`),B=OW(A,`${H}.json`),Y=k0(f.config),V=Df.parse({version:1,session_id:H,source:$,pid:process.pid,started_at:J,status:"running",interactive:f.interactive===!0,provider:Q.config.providerId,model:Q.config.modelId,cwd:Q.config.cwd,workspace_root:Y,team_name:Q.config.teamName,enable_tools:Q.config.enableTools,enable_spawn:Q.config.enableSpawnAgent,enable_teams:Q.config.enableAgentTeams,prompt:Q.prompt?.trim()||void 0,messages_path:P}),R;if(W.length>0&&Z.length>0&&!Q.prompt?.trim()){let b=await this.invokeOptionalValue("readSessionManifest",H);if(b)V=b,R={manifestPath:B,messagesPath:b.messages_path||P,manifest:b}}let K=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:A,rootMessagesPath:R?.messagesPath??P,manifest:V});this.usageBySession.set(H,j),this.aggregateUsageBySession.set(H,K);let F=Ff(this.defaultCapabilities,f.capabilities),y=F?.toolExecutors??this.toolExecutors,D=f.localRuntime,M=D?.extensionContext?.logger??D?.logger,T=D?.extensionContext?.automation,_;_=await OZ({input:Q,localRuntime:f.localRuntime,sessionId:H,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:F,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(b)=>{if(b.name==="plugin_log"){this.eventBridge.handlePluginLog(H,b.payload,M);return}this.eventBridge.handlePluginEvent(H,b,T)},onTeamEvent:(b)=>{this.eventBridge.handleTeamEvent(H,b),_.config.onTeamEvent?.(b)},createSpawnTool:()=>hW({getSession:(b)=>this.sessions.get(b),subAgentStarts:this.subAgentStarts,onAgentEvent:(b,l,sf)=>this.eventBridge.dispatchAgentEvent(b,l,sf),invokeBackendOptional:(b,...l)=>this.invokeOptional(b,...l)},_.config,H,y),readSessionMetadata:async()=>(await this.getSession(H))?.metadata,writeSessionMetadata:async(b)=>{await this.persistSessionMetadata(H,()=>b)}});let L=await this.runtimeBuilder.build(_.runtimeBuilderInput),O=_.config,e=_.providerConfig;if(L.teamRuntime&&!O.teamName?.trim())O.teamName=L.teamRuntime.getTeamName();let ff=[...L.tools,...O.extraTools??[]],a=L.extensions??_.extensions,g={sessionId:H,providerId:e.providerId,modelId:e.modelId,apiKey:e.apiKey,baseUrl:e.baseUrl,headers:e.headers,knownModels:e.knownModels,providerConfig:e,thinking:O.thinking,reasoningEffort:O.reasoningEffort??e.reasoningEffort,systemPrompt:O.systemPrompt,maxIterations:O.maxIterations,execution:O.execution,prepareTurn:c5(O),tools:ff,hooks:_.hooks,extensions:a,hookErrorMode:O.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:Gj,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval,onConsecutiveMistakeLimitReached:O.onConsecutiveMistakeLimitReached,completionPolicy:L.completionPolicy,consumePendingUserMessage:()=>{let b=this.pendingPromptsController.consumeSteer(H);return b?t1(b,O.mode):b},logger:L.logger??O.logger,extensionContext:O.extensionContext,onEvent:(b)=>this.eventBridge.dispatchAgentEvent(H,O,b)};g.hooks={...g.hooks,onEvent:async(b)=>{if(await _.hooks?.onEvent?.(b),b.type!=="assistant-message")return;let l=this.sessions.get(H);if(!l)return;let sf=l.agent.getMessages();try{await this.invoke("persistSessionMessages",H,sf,O.systemPrompt)}catch(of){O.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:H,error:of})}}};let Pf=this.createAgentInstance(g);if(g.onEvent)Pf.subscribeEvents(g.onEvent);L.registerLeadAgent?.(Pf);let B0=A0({agentId:Pf.getAgentId(),conversationId:Pf.getConversationId(),teamId:L.teamRuntime?.getTeamId(),teamName:L.teamRuntime?.getTeamName(),teamRole:L.teamRuntime?"lead":void 0});if(zZ(O,H,W.length>0,Y,B0),B0)d0(O.telemetry,{ulid:H,modelId:O.modelId,provider:O.providerId,...B0});if(L.teamRuntime)i4(O.telemetry,{ulid:H,teamId:L.teamRuntime.getTeamId(),teamName:L.teamRuntime.getTeamName(),leadAgentId:Pf.getAgentId(),restoredFromPersistence:L.teamRestoredFromPersistence===!0});let r={sessionId:H,config:O,sessionMetadata:Q.sessionMetadata,...R?{artifacts:R}:{},source:$,startedAt:R?.manifest.started_at??J,updatedAt:R?.manifest.ended_at??R?.manifest.started_at??J,pendingPrompt:V.prompt,runtime:L,agent:Pf,started:!1,status:R?.manifest.status??"running",aborting:!1,interactive:f.interactive===!0,persistedMessages:Z,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1};if(this.sessions.set(H,r),this.emitStatus(H,"running"),Z.length>0&&!R){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Z,r.config.systemPrompt),!Q.prompt?.trim())await this.updateStatus(r,"completed",0)}let tf;try{if(Q.prompt?.trim())if(tf=await this.executeTurn(r,{prompt:Q.prompt,userImages:Q.userImages,userFiles:Q.userFiles}),!r.interactive)await this.finalizeSingleRun(r,tf.finishReason);else await this.completeInteractiveTurn(r,tf.finishReason)}catch(b){if(r.interactive&&r.aborting)tf=await this.completeAbortedInteractiveTurn(r);else throw await this.failSession(r),b}return{sessionId:H,manifest:V,manifestPath:B,messagesPath:P,result:tf}}async restoreSession(f){return this.sessionVersioning.restoreCheckpoint({...f,getSession:($)=>this.getSession($),readMessages:($)=>this.readSessionMessages($),buildStartInput:($,J)=>{let W=$.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:$.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...W?{sessionMetadata:W}:{},initialMessages:$.initialMessages}},startSession:($)=>this.startSession($),getStartedSessionId:($)=>$.sessionId,readRestoredSession:($)=>this.getSession($)})}async runTurn(f){let $=this.getSessionOrThrow(f.sessionId),J=$.agent.canStartRun(),W=f.delivery??($.interactive&&!J?"queue":void 0);if($.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:f.sessionId,promptLength:f.prompt.length,userImageCount:f.userImages?.length??0,userFileCount:f.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue(f.sessionId,{prompt:f.prompt,delivery:W,userImages:f.userImages,userFiles:f.userFiles});return}try{let H=await this.executeTurn($,{prompt:f.prompt,userImages:f.userImages,userFiles:f.userFiles});if(!$.interactive)await this.finalizeSingleRun($,H.finishReason);else await this.completeInteractiveTurn($,H.finishReason);if(H.finishReason==="error"||H.finishReason==="aborted")return H;return queueMicrotask(()=>{this.pendingPromptsController.drain(f.sessionId)}),H}catch(H){if($.interactive&&$.aborting)return await this.completeAbortedInteractiveTurn($);throw await this.failSession($),H}}async getAccumulatedUsage(f){let $=$5(this.usageBySession.get(f)),J=$5(this.aggregateUsageBySession.get(f));return $||J?{usage:$,aggregateUsage:J}:void 0}async abort(f,$){let J=this.sessions.get(f);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:f}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort($)}async stopSession(f){let $=this.sessions.get(f);if(!$)return;if($.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:f}}),$.interactive&&$.status!=="running"){await this.releaseSessionRuntime($,"session_stop");return}$.aborting=!0,$.agent.abort(Error("session_stop")),await this.shutdownSession($,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose(f="session_manager_dispose"){let $=[...this.sessions.values()];if($.length===0)return;await Promise.allSettled($.map((J)=>J.interactive&&J.status!=="running"?this.releaseSessionRuntime(J,f):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:f,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession(f){let $=this.sessions.get(f);if($)return MW($);let J=f.trim();if(!J)return;let W=await this.getRow(J);if(W)return x1(W);let H=await this.readManifest(J);return H?H5(H):void 0}async listSessions(f=200){let J=(await this.listRows(f)).map(x1),W=new Set(J.map((H)=>H.sessionId));for(let H of this.sessions.values()){if(W.has(H.sessionId))continue;J.unshift(MW(H))}return J.slice(0,f)}async deleteSession(f){if(this.sessions.has(f))await this.stopSession(f);let $=await this.invoke("deleteSession",f);if($.deleted)this.usageBySession.delete(f),this.aggregateUsageBySession.delete(f);return $.deleted}async updateSession(f,$){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:f,prompt:$.prompt,metadata:$.metadata,title:$.title}))?.updated===!0}}async readSessionMessages(f){let $=f.trim();if(!$)return[];let J=await this.getRow($);if(J?.messagesPath)return N0(J.messagesPath);let W=await this.readManifest($);return N0(W?.messages_path)}async dispatchHookEvent(f){await lQ(f,{queueSpawnRequest:($)=>this.invokeOptional("queueSpawnRequest",$),upsertSubagentSessionFromHook:($)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",$),appendSubagentHookAudit:($,J)=>this.invokeOptional("appendSubagentHookAudit",$,J),applySubagentStatus:($,J)=>this.invokeOptional("applySubagentStatus",$,J)})}subscribe(f,$){return this.events.subscribe(f,$)}async updateSessionModel(f,$){let J=this.getSessionOrThrow(f);J.config.modelId=$,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:$}),J.agent.updateConnection({modelId:$})}handlePluginEvent(f,$,J){return this.eventBridge.handlePluginEvent(f,$,J)}async executeTurn(f,$){let J=await this.prepareTurnInput(f,$),W=J.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!f.artifacts&&!f.pendingPrompt)f.pendingPrompt=W;await this.ensureSessionPersisted(f),await this.syncOAuthCredentials(f),await this.markTurnRunning(f);let H=await this.executeAgentTurn(f,W,J.userImages,J.userFiles);while(q5(f,H.finishReason)){let Q=await w5(f);if(Q.length===0)break;let Z=b5(f,Q);H=await this.executeAgentTurn(f,Z)}return H}async completeInteractiveTurn(f,$){if(a1(f))return;let J=$==="aborted"||f.aborting,W=$==="error";await this.updateStatus(f,J?"cancelled":W?"failed":"completed",W?1:0),this.emit({type:"ended",payload:{sessionId:f.sessionId,reason:$,ts:Date.now()}}),f.aborting=!1}async completeAbortedInteractiveTurn(f){let $=new Date,J=f.agent.getMessages();return f.persistedMessages=J,f.started=f.started||J.length>0,await this.completeInteractiveTurn(f,"aborted"),{text:"",usage:Vf(),messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:f.config.modelId,provider:f.config.providerId},startedAt:$,endedAt:$,durationMs:0}}async executeAgentTurn(f,$,J,W){let H=f.started||f.agent.getMessages().length>0,Q=f.persistedMessages??f.agent.getMessages(),Z=this.usageBySession.get(f.sessionId)??Vf(),j=this.aggregateUsageBySession.get(f.sessionId)??Z;f.turnUsageBaseline=Z,f.turnAggregateUsageBaseline=j,f.turnPrimaryUsage=Vf(),f.turnUsageByAgent=new Map,v4(f.config.telemetry,f.sessionId,f.config.mode),Q1(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,model:f.config.modelId,source:"user",mode:f.config.mode,...this.getSessionAgentTelemetryIdentity(f)});try{let X=H?()=>f.agent.continue($,J,W):()=>f.agent.run($,J,W),A=await this.runWithAuthRetry(f,X,Q);f.started=!0;let P=z8(A.messages,A,Q);f.persistedMessages=P;let B=d8(f.turnUsageByAgent?.values()??[]),Y=Xf(Z,A.usage),V=Xf(Xf(Vf(),A.usage),B),R=Xf(j,V);return this.usageBySession.set(f.sessionId,Y),this.aggregateUsageBySession.set(f.sessionId,R),await this.persistSessionMetadata(f.sessionId,(U)=>({...U??{},totalCost:Y.totalCost,aggregatedAgentsCost:R.totalCost,usage:Y,aggregateUsage:R})),await this.invoke("persistSessionMessages",f.sessionId,P,f.config.systemPrompt),this.observeTaskCompletionTool(f,A),A}catch(X){throw await this.invoke("persistSessionMessages",f.sessionId,f.agent.getMessages(),f.config.systemPrompt),X}finally{f.turnUsageBaseline=void 0,f.turnAggregateUsageBaseline=void 0,f.turnPrimaryUsage=void 0,f.turnUsageByAgent=void 0}}observeTaskCompletionTool(f,$){if(f.submitAndExitObserved)return;if(!$.toolCalls.some((W)=>W.name===Hf.SUBMIT_AND_EXIT&&W.error===void 0))return;f.submitAndExitObserved=!0,K2(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,modelId:f.config.modelId,mode:f.config.mode,durationMs:Date.now()-Date.parse(f.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity(f)})}async prepareTurnInput(f,$){let J=k0(f.config),W=aD($.prompt).trim();if(!W)return{prompt:"",userImages:$.userImages,userFiles:this.resolveAbsoluteFilePaths(f.config.cwd,$.userFiles)};let H=await f8(W,J);NZ(f.config.telemetry,H);let Q=t1(H.prompt,f.config.mode),Z=this.resolveAbsoluteFilePaths(f.config.cwd,$.userFiles),j=this.resolveAbsoluteFilePaths(J,H.matchedFiles),X=Array.from(new Set([...Z,...j]));return{prompt:Q,userImages:$.userImages,userFiles:X.length>0?X:void 0}}async ensureSessionPersisted(f){if(f.artifacts)return;let $=k0(f.config);f.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:f.sessionId,source:f.source,pid:process.pid,interactive:f.interactive,provider:f.config.providerId,model:f.config.modelId,cwd:f.config.cwd,workspaceRoot:$,teamName:f.config.teamName,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,prompt:f.pendingPrompt,metadata:f.sessionMetadata,startedAt:f.startedAt})}async markTurnRunning(f){if(f.status==="running")return;await this.updateStatus(f,"running",null)}async persistSessionMetadata(f,$){let J=this.sessions.get(f),W=await this.invokeOptionalValue("readSessionManifest",f)??J?.artifacts?.manifest,H=$(W?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:f,metadata:H}))?.updated===!1)return;J.sessionMetadata=H,J.artifacts.manifest.metadata=H}async finalizeSingleRun(f,$){if(a1(f))return;let J=$==="aborted"||f.aborting,W=$==="error";await this.shutdownSession(f,{status:J?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:$})}async failSession(f){await this.shutdownSession(f,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession(f,$){if($.status==="completed"&&!f.submitAndExitObserved)K2(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,modelId:f.config.modelId,mode:f.config.mode,durationMs:Date.now()-Date.parse(f.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity(f)});u8(f);let J=[],W=(H,Q)=>{J.push(Q),f.config.logger?.log("Session shutdown cleanup failed",{sessionId:f.sessionId,stage:H,error:Q,severity:"warn"})};if(f.artifacts){try{await this.updateStatus(f,$.status,$.exitCode)}catch(H){W("update_status",H)}try{await f.agent.shutdown($.shutdownReason)}catch(H){W("agent_shutdown",H)}}try{await Promise.resolve(f.runtime.shutdown($.shutdownReason))}catch(H){W("runtime_shutdown",H)}try{await f.pluginSandboxShutdown?.()}catch(H){W("plugin_sandbox_shutdown",H)}if(this.sessions.delete(f.sessionId),this.emit({type:"ended",payload:{sessionId:f.sessionId,reason:$.endReason,ts:Date.now()}}),J.length>0&&$.status==="failed")throw J[0]}async releaseSessionRuntime(f,$){let J=[],W=(H,Q)=>{J.push(Q),f.config.logger?.log("Session runtime cleanup failed",{sessionId:f.sessionId,stage:H,error:Q,severity:"warn"})};try{await f.agent.shutdown($)}catch(H){W("agent_shutdown",H)}try{await Promise.resolve(f.runtime.shutdown($))}catch(H){W("runtime_shutdown",H)}try{await f.pluginSandboxShutdown?.()}catch(H){W("plugin_sandbox_shutdown",H)}if(this.sessions.delete(f.sessionId),J.length>0)throw J[0]}async updateStatus(f,$,J){if(!f.artifacts)return;let W=await this.invoke("updateSessionStatus",f.sessionId,$,J);if(!W.updated)return;let H=await this.invokeOptionalValue("readSessionManifest",f.sessionId)??f.artifacts.manifest;if(H.status=$,$==="running")delete H.ended_at,H.exit_code=null;else H.ended_at=W.endedAt??n(),H.exit_code=typeof J==="number"?J:null;f.artifacts.manifest=H,f.status=$,f.updatedAt=W.endedAt??n(),f.endedAt=$==="running"?null:H.ended_at,f.exitCode=H.exit_code,await this.invoke("writeSessionManifest",f.artifacts.manifestPath,H),this.emitStatus(f.sessionId,$)}async runWithAuthRetry(f,$,J){try{return await $()}catch(W){if(!nD(W,f.config.providerId))throw W;return await this.syncOAuthCredentials(f,{forceRefresh:!0}),f.agent.restore(J),$()}}async syncOAuthCredentials(f,$){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:f.config.providerId,forceRefresh:$?.forceRefresh})}catch(W){if(W instanceof B4)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!J?.apiKey||f.config.apiKey===J.apiKey)return;f.config.apiKey=J.apiKey,f.agent.updateConnection({apiKey:J.apiKey}),f.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),f.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow(f){let $=this.sessions.get(f);if(!$)throw Error(`session not found: ${f}`);return $}resolveAbsoluteFilePaths(f,$){if(!$||$.length===0)return[];let J=$.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>pD(W)?W:zW(f,W));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity(f){return A0({agentId:f.agent.getAgentId(),conversationId:f.agent.getConversationId(),teamId:f.runtime.teamRuntime?.getTeamId(),teamName:f.runtime.teamRuntime?.getTeamName(),teamRole:f.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts(f){let $=await this.summarizePersistedTeammateUsage(f.sessionDir,f.rootMessagesPath,f.manifest.session_id),J=Xf(f.initialUsage,$);return this.withPersistedAggregateUsageFloor(J,f.manifest)}async summarizePersistedTeammateUsage(f,$,J){let W=zW($),H=`${J}.messages.json`,Q;try{Q=rD(f)}catch{return Vf()}let Z=Vf();for(let j of Q){if(!j.endsWith(".messages.json"))continue;if(j===H)continue;let X=zW(f,j);if(X===W)continue;let A=await N0(X);if(A.length===0)continue;Z=Xf(Z,r8(A))}return Z}withPersistedAggregateUsageFloor(f,$){let J=sD($.metadata?.aggregateUsage);if(J)return oD(f,J);let W=$.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=f.totalCost)return f;return{...f,totalCost:W}}emitStatus(f,$){this.emitSessionSnapshot(f),this.emit({type:"status",payload:{sessionId:f,status:$}})}async emitSessionSnapshot(f){let $=await this.getSession(f);if(!$)return;this.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:b0({session:$,messages:await this.readSessionMessages(f),usage:this.usageBySession.get(f),aggregateUsage:this.aggregateUsageBySession.get(f)})}})}emit(f){this.events.emit(f)}async listRows(f){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor(f)),Tj))}async getRow(f){let $=f.trim();if(!$)return;return(await this.listRows(Tj)).find((W)=>W.sessionId===$)}async readManifest(f){let $=f.trim();if(!$)return;return await this.invokeOptionalValue("readSessionManifest",$)}invoke(f,...$){return Kj(this.sessionService,f,...$)}invokeOptional(f,...$){return yj(this.sessionService,f,...$)}invokeOptionalValue(f,...$){return Uj(this.sessionService,f,...$)}}function eD(f){if(f.backendMode)return f.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let $=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if($==="local"||$==="hub"||$==="remote")return $;return"auto"}var j2,X2;function f_(f,$){if(f!=="auto"&&f!=="hub")return;if($.hub?.endpoint?.trim())return;A7($.hub?.workspaceRoot?.trim()||$.hub?.cwd?.trim()||process.cwd())}async function $_(f){await f.reconcileDeadSessions?.().catch(()=>{})}function _j(f){try{let $=new E0;return $.init(),new S0($,{messagesArtifactUploader:f.messagesArtifactUploader})}catch{return f.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new k5(void 0,{messagesArtifactUploader:f.messagesArtifactUploader})}}function Dj(f,$,J){return new g0({sessionService:J??f.sessionService??_j(f),capabilities:f.capabilities,telemetry:f.telemetry,toolPolicies:f.toolPolicies,distinctId:$,fetch:f.fetch})}async function J_(f){if(j2)return j2;if(X2)return await X2;return X2=(async()=>{return j2=_j(f),await $_(j2),j2})().finally(()=>{X2=void 0}),await X2}async function V4(f){let $=B$(f.distinctId);f.telemetry?.setDistinctId($);let J=eD(f);if(f_(J,f),J==="remote"){let W=f.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return f.logger?.log("Using remote runtime host",{endpoint:W}),new E8({endpoint:W,authToken:f.remote?.authToken,clientType:f.remote?.clientType,displayName:f.remote?.displayName,workspaceRoot:f.remote?.workspaceRoot,cwd:f.remote?.cwd,capabilities:f.capabilities})}if(J==="hub"){let W=f.hub?.endpoint?.trim(),H=W||await d1({strategy:f.hub?.strategy??"require-hub",workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});if(!H)throw Error("No compatible hub runtime is available.");return f.logger?.log("Using hub runtime host",{url:H,explicitEndpoint:W||void 0}),new P$({url:H,authToken:f.hub?.authToken,clientType:f.hub?.clientType,displayName:f.hub?.displayName,capabilities:f.capabilities},{workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd})}if(J==="auto"){let W=await F5({endpoint:f.hub?.endpoint,strategy:f.hub?.strategy??"prefer-hub",workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});if(W){f.logger?.log("Using discovered local hub runtime host",{url:W});let H=new P$({url:W,authToken:f.hub?.authToken,clientType:f.hub?.clientType,displayName:f.hub?.displayName,capabilities:f.capabilities},{workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});try{return await H.connect(),H}catch(Q){f.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:Q})}}return f.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),Dj(f,$)}return Dj(f,$)}class NW{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor(f,$,J,W,H,Q,Z,j,X){this.clientName=$,this.runtimeAddress=J,this.host=f,this.prepare=W,this.capabilities=H,this.logger=Q,this.telemetry=Z,this.distinctId=j,this.settings=VQ(f),this.pendingPrompts=RQ(f),this.automation=new _6(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=X?new k1({workspaceRoot:X.workspaceRoot??process.cwd(),specs:{cronSpecsDir:X.cronSpecsDir??X.cronDir,scope:nH(X.cronScope),workspaceRoot:X.workspaceRoot},runtimeHandlers:aH({host:f,getExtensionContext:()=>E2({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:X.dbPath,logger:X.logger,pollIntervalMs:X.pollIntervalMs,claimLeaseSeconds:X.claimLeaseSeconds,globalMaxConcurrency:X.globalMaxConcurrency,watcherDebounceMs:X.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((A)=>{if(A.type!=="ended")return;this.disposeSessionBootstrap(A.payload.sessionId)})}static async create(f={}){let $=Ff(f.capabilities),J=await V4({...f,capabilities:$}),W=iH(f.automation),H=new NW(J,f.clientName,J.runtimeAddress,f.prepare,$,f.logger,f.telemetry,f.distinctId,W?{...W,logger:f.logger}:void 0);if(W&&W.autoStart!==!1)await H.automation.start();return H}async disposeSessionBootstrap(f){let $=this.activeSessionBootstraps.get(f);if(!$)return;this.activeSessionBootstraps.delete(f),await Promise.resolve($.dispose?.())}async start(f){let $=FQ(f),J=await this.prepare?.($);try{let W=J?await J.applyToStartSessionInput($):$,H=await this.host.startSession(zJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>E2({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(H.sessionId))this.activeSessionBootstraps.set(H.sessionId,J);else await Promise.resolve(J.dispose?.());return KQ({input:W,sessionId:H.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),H}catch(W){throw await Promise.resolve(J?.dispose?.()),W}}send=(...f)=>this.host.runTurn(...f);getAccumulatedUsage=(...f)=>{return this.host.getAccumulatedUsage?.(...f)??Promise.resolve(void 0)};abort=(...f)=>this.host.abort(...f);stop=async(f)=>{await this.host.stopSession(f),await this.disposeSessionBootstrap(f)};dispose=async(...f)=>{try{await this.automationService?.dispose(),await this.host.dispose(...f)}finally{this.unsubscribeBootstrapCleanup();let $=[...this.activeSessionBootstraps.keys()];await Promise.allSettled($.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...f)=>this.host.getSession(...f);listHistory=async(f={})=>await Q5(this.host,f);list=async(f=200,$={})=>await this.listHistory({...$,limit:f});delete=async(f)=>{let $=await this.host.deleteSession(f);if($)await this.disposeSessionBootstrap(f);return $};update=(...f)=>this.host.updateSession(...f);readMessages=(...f)=>this.host.readSessionMessages(...f);async restore(f){let $=f.start?zJ(f.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>E2({automationService:this.automationService,automation:this.automation,context:J,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:f.sessionId,checkpointRunCount:f.checkpointRunCount,cwd:f.cwd,restore:f.restore,start:$})}ingestHookEvent=(...f)=>this.host.dispatchHookEvent(...f);subscribe(f,$){return this.host.subscribe(f,$)}updateSessionModel=(...f)=>{return this.host.updateSessionModel?.(...f)??Promise.resolve()}}import{HookEventNameSchema as Lj,HookEventPayloadSchema as hj,parseHookEventPayload as F4,resolveHookSessionContext as A_}from"@cline/shared";import{z as y$}from"zod";import{spawn as W_}from"node:child_process";import{augmentNodeCommandForDebug as H_,withResolvedClineBuildEnv as Q_}from"@cline/shared";function Z_(f){let $=f.trim();if(!$)return{};let W=$.split(`
|
|
694
|
-
`).map((Q)=>Q.trim()).filter(Boolean).filter((Q)=>Q.startsWith("HOOK_CONTROL\t")).map((Q)=>Q.slice(13)),H=W.length>0?W[W.length-1]:$;try{return{parsedJson:JSON.parse(H)}}catch(Q){return{parseError:Q instanceof Error?Q.message:"Failed to parse subprocess stdout JSON"}}}function j_(f,$){let J=f instanceof Error?f:Error(String(f)),W=J,H=$.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${H}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${H}": ${J.message}`)}async function X_(f,$){let J=f.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,H)=>{let Q=(Z)=>{J.off("error",Q);let j=Z.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}H(Z)};J.once("error",Q),J.end($,(Z)=>{if(J.off("error",Q),Z){let j=Z.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}H(Z);return}W()})})}async function R4(f,$){let J=H_($.command,{env:$.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!$.detached,H=W_(J[0],J.slice(1),{cwd:$.cwd,env:Q_($.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W}),Q=new Promise((Y)=>{H.once("spawn",()=>{try{$.onSpawn?.({command:J,pid:H.pid??void 0,detached:W})}catch{}Y()})}),Z=new Promise((Y,V)=>{H.once("error",(R)=>{V(j_(R,J))})});if(await X_(H,JSON.stringify(f)),W){await Promise.race([Q,Z]),H.unref();return}if(!H.stdout||!H.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",X="",A=!1,P;H.stdout.on("data",(Y)=>{j+=Y.toString()}),H.stderr.on("data",(Y)=>{X+=Y.toString()});let B=new Promise((Y)=>{if(($.timeoutMs??0)>0)P=setTimeout(()=>{A=!0,H.kill("SIGKILL")},$.timeoutMs);H.once("close",(V)=>{if(P)clearTimeout(P);let{parsedJson:R,parseError:U}=Z_(j);Y({exitCode:V,stdout:j,stderr:X,parsedJson:R,parseError:U,timedOut:A})})});return await Promise.race([B,Z])}var P_=y$.object({contextModification:y$.string().optional(),cancel:y$.boolean().optional(),review:y$.boolean().optional(),errorMessage:y$.string().optional(),context:y$.string().optional(),overrideInput:y$.unknown().optional()}).passthrough();var B_=["agent","hook"];async function K4(f,$={}){let J=$.command??B_;return await R4(f,{command:J,cwd:$.cwd,env:$.env,detached:$.detached,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn})}function Oj(f){return f instanceof Error?f:Error(String(f))}function Y_(f){if(!f||typeof f!=="object")return;let $=P_.safeParse(f);if(!$.success)return;let J=$.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let H=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"&&J.errorMessage.length>0?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:H,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function Mj(f){if(!f||typeof f!=="object")return{};let $={};for(let[J,W]of Object.entries(f))if(typeof W==="string")$[J]=W;else $[J]=JSON.stringify(W);return $}function P0(f,$,J){let W=J.env??process.env,H=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",Q=J.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:f,timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:A_(J.sessionContext,{hookName:f,conversationId:$.conversationId,agentId:$.agentId,parentAgentId:$.parentAgentId}),workspaceRoots:Q?[Q]:[],workspaceInfo:J.workspaceInfo,userId:H,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function V_(f){return{name:f.name,message:f.message,stack:f.stack}}function R_(f){let $=String(f??"").toLowerCase();return $.includes("cancel")||$.includes("abort")||$.includes("interrupt")}function F_(f){return{agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null}}function K_(f){return f.filter(($)=>$.type==="text"&&typeof $.text==="string").map(($)=>$.text).join("")}function y_(f){return{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input,output:f.result.output,error:f.result.isError?String(f.result.output):void 0,durationMs:f.durationMs,startedAt:f.startedAt,endedAt:f.endedAt}}function U_(f){if(!f)return;let $={};if(f.cancel===!0)$.stop=!0;if(f.overrideInput!==void 0)$.input=f.overrideInput;return Object.keys($).length>0?$:void 0}async function U$(f,$){try{let J=await K4(f,{command:$.command,cwd:$.cwd,env:$.env,detached:!0,onSpawn:$.onSpawn});$.onDispatch?.({payload:f,result:J,detached:!0})}catch(J){$.onDispatchError?.(Oj(J),f)}}function zj(f={}){return{hooks:{beforeRun:async(j)=>{let X=F_(j);if((f.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let P={...P0("agent_resume",X,f),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await U$(P,f)}else{let P={...P0("agent_start",X,f),hookName:"agent_start",taskStart:{taskMetadata:{}}};await U$(P,f)}return},beforeTool:async(j)=>{let X={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},A={...P0("tool_call",X,f),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:Mj(j.input)}};try{let P=await K4(A,{command:f.command,cwd:f.cwd,env:f.env,detached:!1,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn});if(f.onDispatch?.({payload:A,result:P,detached:!1}),P?.timedOut)throw Error("tool_call hook command timed out");if(P?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${P.parseError}`);return U_(Y_(P?.parsedJson))}catch(P){f.onDispatchError?.(Oj(P),A);return}},afterTool:async(j)=>{let X=y_(j),A={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},P={...P0("tool_result",A,f),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:X,postToolUse:{toolName:X.name,parameters:Mj(X.input),result:typeof X.output==="string"?X.output:JSON.stringify(X.output),success:!X.error,executionTimeMs:X.durationMs}};await U$(P,f);return},afterRun:async({snapshot:j,result:X})=>{let A={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(X.status==="completed"){let Y={...P0("agent_end",A,f),hookName:"agent_end",iteration:X.iterations,turn:{outputText:X.outputText,status:X.status},taskComplete:{taskMetadata:{}}};await U$(Y,f);return}let P=X.status==="aborted"||R_(X.error?.message)?"agent_abort":"agent_error",B=P==="agent_error"?{...P0(P,A,f),hookName:P,iteration:X.iterations,error:V_(X.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...P0(P,A,f),hookName:P,reason:X.error?.message,taskCancel:{taskMetadata:{}}};await U$(B,f)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let X={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},A={...P0("prompt_submit",X,f),hookName:"prompt_submit",userPromptSubmit:{prompt:K_(j.message.content),attachments:[]}};await U$(A,f)}},shutdown:async({agentId:j,conversationId:X,parentAgentId:A,reason:P})=>{let B={...P0("session_shutdown",{agentId:j,conversationId:X,parentAgentId:A},f),hookName:"session_shutdown",reason:P};await U$(B,f)}}}import{createSessionId as G_}from"@cline/shared";function Sf(f,$){return{version:f.version,requestId:f.requestId,ok:!0,payload:$}}function Nj(f,$,J){return{version:f.version,requestId:f.requestId??G_("hubreq_"),ok:!1,error:{code:$,message:J}}}class y4{schedules;constructor(f){this.schedules=f}async handleCommand(f){try{switch(f.command){case"schedule.create":return Sf(f,{schedule:this.schedules.createSchedule(this.toCreateInput(f.payload??{}))});case"schedule.list":return Sf(f,{schedules:this.schedules.listSchedules({enabled:typeof f.payload?.enabled==="boolean"?f.payload.enabled:void 0,limit:typeof f.payload?.limit==="number"?f.payload.limit:void 0,tags:Array.isArray(f.payload?.tags)?f.payload?.tags:void 0})});case"schedule.get":return Sf(f,{schedule:this.schedules.getSchedule(String(f.payload?.scheduleId??""))});case"schedule.update":return Sf(f,{schedule:this.schedules.updateSchedule(String(f.payload?.scheduleId??""),this.toUpdateInput(f.payload??{}))});case"schedule.delete":return Sf(f,{deleted:this.schedules.deleteSchedule(String(f.payload?.scheduleId??""))});case"schedule.enable":return Sf(f,{schedule:this.schedules.resumeSchedule(String(f.payload?.scheduleId??""))});case"schedule.disable":return Sf(f,{schedule:this.schedules.pauseSchedule(String(f.payload?.scheduleId??""))});case"schedule.trigger":return Sf(f,{execution:await this.schedules.triggerScheduleNow(String(f.payload?.scheduleId??""))});case"schedule.list_executions":return Sf(f,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof f.payload?.scheduleId==="string"?f.payload.scheduleId:void 0,status:typeof f.payload?.status==="string"?f.payload.status:void 0,limit:typeof f.payload?.limit==="number"?f.payload.limit:void 0})});case"schedule.stats":return Sf(f,{stats:this.schedules.getScheduleStats(String(f.payload?.scheduleId??""))});case"schedule.active":return Sf(f,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return Sf(f,{runs:this.schedules.getUpcomingRuns(typeof f.payload?.limit==="number"?f.payload.limit:void 0)});default:return Nj(f,"unsupported_command",`Unsupported hub schedule command: ${f.command}`)}}catch($){return Nj(f,"schedule_command_failed",$ instanceof Error?$.message:String($))}}toCreateInput(f){let $=f.modelSelection&&typeof f.modelSelection==="object"&&!Array.isArray(f.modelSelection)?f.modelSelection:f.provider&&f.model?{providerId:String(f.provider),modelId:String(f.model)}:void 0;return{...f,modelSelection:$}}toUpdateInput(f){let $=f.modelSelection&&typeof f.modelSelection==="object"&&!Array.isArray(f.modelSelection)?f.modelSelection:f.provider||f.model?{providerId:typeof f.provider==="string"?f.provider:"",modelId:typeof f.model==="string"?f.model:""}:void 0;return{...f,modelSelection:$}}}function G4(f){return f?new Date(f).getTime():void 0}function T_(f){let $=f.metadata?{...f.metadata}:void 0;if($)delete $.__hubScheduleCreatedBy,delete $.__hubScheduleCwd,delete $.__hubRuntimeOptions;return $}function U4(f){let $=f.metadata;return{scheduleId:f.externalId,name:f.title,cronPattern:f.scheduleExpr??"",prompt:f.prompt??"",workspaceRoot:f.workspaceRoot??"",cwd:typeof $?.__hubScheduleCwd==="string"?$.__hubScheduleCwd:void 0,modelSelection:f.providerId||f.modelId?{providerId:f.providerId??"",modelId:f.modelId??""}:void 0,enabled:f.enabled&&!f.removed&&f.parseStatus==="valid",mode:f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act",systemPrompt:f.systemPrompt,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,maxParallel:f.maxParallel??1,createdAt:new Date(f.createdAt).getTime(),updatedAt:new Date(f.updatedAt).getTime(),nextRunAt:G4(f.nextRunAt),lastRunAt:G4(f.lastRunAt),createdBy:typeof $?.__hubScheduleCreatedBy==="string"?$.__hubScheduleCreatedBy:void 0,tags:f.tags,runtimeOptions:$?.__hubRuntimeOptions&&typeof $.__hubRuntimeOptions==="object"&&!Array.isArray($.__hubRuntimeOptions)?$.__hubRuntimeOptions:void 0,metadata:T_(f)}}function D_(f){switch(f){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function qj(f,$){return{executionId:f.runId,scheduleId:$,sessionId:f.sessionId,triggeredAt:new Date(f.scheduledFor??f.createdAt).getTime(),startedAt:G4(f.startedAt),endedAt:G4(f.completedAt),status:D_(f.status),errorMessage:f.error}}class T4{store;materializer;runner;started=!1;disposed=!1;constructor(f){this.store=new S1({dbPath:f.dbPath}),this.materializer=new q1({store:this.store}),this.runner=new w1({store:this.store,materializer:this.materializer,runtimeHandlers:f.runtimeHandlers,workspaceRoot:"",logger:f.logger,pollIntervalMs:f.pollIntervalMs,claimLeaseSeconds:f.claimLeaseSeconds,globalMaxConcurrency:f.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(f){if(xJ(f.cronPattern),!f.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return U4(this.store.createHubSchedule(f))}getSchedule(f){let $=this.store.getHubSchedule(f);return $?U4($):void 0}listSchedules(f={}){return this.store.listHubSchedules(f).map(($)=>U4($))}updateSchedule(f,$){if($.cronPattern!==void 0)xJ($.cronPattern);let J=this.store.getHubSchedule(f);if(!J)return;let W=$.workspaceRoot!==void 0?$.workspaceRoot.trim():J.workspaceRoot;if(($.enabled??J.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let Q=this.store.updateHubSchedule(f,{...$,scheduleId:f});return Q?U4(Q):void 0}deleteSchedule(f){return this.store.deleteHubSchedule(f)}pauseSchedule(f){return this.updateSchedule(f,{scheduleId:f,enabled:!1})}resumeSchedule(f){return this.updateSchedule(f,{scheduleId:f,enabled:!0})}async triggerScheduleNow(f){let $=this.store.enqueueHubScheduleRun(f,"manual");if(!$)return;await this.runner.tick();let J=this.store.getRun($.runId)??$;return qj(J,f)}listScheduleExecutions(f){let $=f.scheduleId?this.store.getHubSchedule(f.scheduleId):void 0,J={specId:$?.specId,limit:f.limit};return this.store.listRuns(J).map((H)=>{let Q=$??this.store.getSpec(H.specId);if(!Q||Q.source!=="hub-schedule")return;return qj(H,Q.externalId)}).filter((H)=>{if(!H)return!1;return!f.status||H.status===f.status})}getScheduleStats(f){let $=this.listScheduleExecutions({scheduleId:f,limit:1e4});if($.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,W=0,H=0,Q;for(let Z of $){if(Z.status==="success"||Z.status==="completed")J+=1;if(!Q&&Z.status!=="success"&&Z.status!=="completed")Q=Z;if(Z.startedAt&&Z.endedAt)H+=Z.endedAt-Z.startedAt,W+=1}return{totalRuns:$.length,successRate:J/$.length,avgDurationSeconds:W>0?H/W/1000:0,lastFailure:Q}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap((f)=>{let $=this.store.getSpec(f.specId);if(!$||$.source!=="hub-schedule"||!f.sessionId)return[];return[{executionId:f.runId,scheduleId:$.externalId,sessionId:f.sessionId,startedAt:f.startedAt??new Date().toISOString(),timeoutAt:$.timeoutSeconds&&f.startedAt?new Date(new Date(f.startedAt).getTime()+$.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns(f=20){let $={triggerKind:"schedule",enabled:!0,limit:f};return this.store.listSpecs($).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,W)=>String(J.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,f).map(({spec:J,nextRunAt:W})=>({scheduleId:J.externalId,name:J.title,nextRunAt:W}))}}L4();function r_(f,$){if(f instanceof Error)return f;if(f&&typeof f==="object"&&"message"in f&&typeof f.message==="string"&&f.message.trim())return Error(f.message.trim());let J=f&&typeof f==="object"&&"type"in f&&typeof f.type==="string"?f.type.trim():"";return Error(J?`Failed to connect to hub at ${$} (${J} event before socket open).`:`Failed to connect to hub at ${$}.`)}var l_="cline-hub-auth.";function p_(f){return f.host!==void 0||f.port!==void 0||f.pathname!==void 0}function i_(f,$){let J=new URL(f),W=new URL($);return J.search="",J.hash="",W.search="",W.hash="",J.toString()===W.toString()}async function n_(f){let $=f.searchParams.get("authToken")?.trim();if(f.searchParams.delete("authToken"),$)return $;let J=yf(),W=await Yf(J.discoveryPath);if(W?.url&&i_(f.toString(),W.url))return W.authToken;return}async function a_(f={}){let $=q0(f);if(!p_(f)){let J=yf(),W=await Yf(J.discoveryPath);if(W?.url)return W.url}return Q0($.host,$.port,$.pathname)}async function Cj(f){return await new Promise(($,J)=>{(async()=>{let W=new URL(f),H=await n_(W);W.hash="";let Q=new WebSocket(W.toString(),H?[`${l_}${H}`]:void 0),Z=new Map,j=0;Q.addEventListener("open",()=>{$({send(X){let A=X.requestId??`hub-client-${++j}`;return new Promise((P,B)=>{Z.set(A,{resolve:P,reject:B});let Y={kind:"command",envelope:{...X,requestId:A}};Q.send(JSON.stringify(Y))})},close(){Q.close()}})}),Q.addEventListener("message",(X)=>{let A=JSON.parse(String(X.data));if(A.kind==="reply"&&A.envelope.requestId){let P=Z.get(A.envelope.requestId);if(P)Z.delete(A.envelope.requestId),P.resolve(A.envelope)}}),Q.addEventListener("close",()=>{for(let X of Z.values())X.reject(Error("Hub connection closed"));Z.clear()}),Q.addEventListener("error",(X)=>{J(r_(X,f))})})().catch(J)})}async function pm(f){try{return(await Cj(f)).close(),!0}catch{return!1}}async function im(f,$){let J=await a_(f),W=await Cj(J);try{return await W.send({version:$.version??"v1",clientId:$.clientId??"hub-client",...$})}finally{W.close()}}function vf(f){return f?JSON.parse(JSON.stringify(f)):{}}function h4(f){let $=f?.session&&typeof f.session==="object"?f.session:void 0;if(!$)return;let J=$.metadata&&typeof $.metadata==="object"?vf($.metadata):void 0;return{sessionId:typeof $.sessionId==="string"?$.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function Ej(f,$){return f.error?.message??`hub command failed: ${$}`}function t_(f){let $=vf(f);if(typeof $.error==="string"&&$.error.trim())return{...$,error:$.error.trim()};let J=$.result&&typeof $.result==="object"?$.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...$,error:J.text.trim()};let W=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...$,error:W.message.trim()};return $}function s_(f){let $=f?.checkpoint;if(!$||typeof $!=="object"||Array.isArray($))throw Error("hub checkpoint restore returned no checkpoint");let J=$;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function o_(f){let $=f.sessionId?.trim();if(!$)return;switch(f.event){case"iteration.started":return{sessionId:$,eventType:"runtime.chat.iteration_start",payload:vf(f.payload)};case"iteration.finished":return{sessionId:$,eventType:"runtime.chat.iteration_end",payload:vf(f.payload)};case"assistant.delta":return{sessionId:$,eventType:"runtime.chat.text_delta",payload:vf(f.payload)};case"usage.updated":return{sessionId:$,eventType:"runtime.chat.usage",payload:vf(f.payload)};case"tool.started":return{sessionId:$,eventType:"runtime.chat.tool_call_start",payload:vf(f.payload)};case"tool.finished":return{sessionId:$,eventType:"runtime.chat.tool_call_end",payload:vf(f.payload)};case"approval.requested":return{sessionId:$,eventType:"approval.requested",payload:vf(f.payload)};case"run.aborted":return{sessionId:$,eventType:"runtime.chat.aborted",payload:vf(f.payload)};case"run.failed":return{sessionId:$,eventType:"runtime.chat.failed",payload:t_(f.payload)};case"run.completed":return{sessionId:$,eventType:"runtime.chat.completed",payload:vf(f.payload)};default:return}}class e_{options;client;metadataApplied=!1;constructor(f){this.options=f;this.client=new Z0({url:f.address,authToken:f.authToken,clientId:f.clientId,clientType:f.clientType??"hub-session-client",displayName:f.displayName??"hub session client",workspaceRoot:f.workspaceRoot,cwd:f.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(f){await this.ensureMetadataApplied();let $=await this.client.command("session.create",{workspaceRoot:f.workspaceRoot,cwd:f.cwd,sessionConfig:{providerId:f.provider,modelId:f.model,apiKey:f.apiKey,cwd:f.cwd??f.workspaceRoot,workspaceRoot:f.workspaceRoot,systemPrompt:f.systemPrompt??"",mode:f.mode??"act",rules:f.rules,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,enableTools:f.enableTools,enableSpawnAgent:f.enableSpawn!==!1,enableAgentTeams:f.enableTeams!==!1,disableMcpSettingsTools:f.disableMcpSettingsTools,missionLogIntervalSteps:f.missionStepInterval,missionLogIntervalMs:f.missionTimeIntervalMs},metadata:{source:f.source??"cli",provider:f.provider,model:f.model,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,prompt:void 0,interactive:f.interactive!==!1},runtimeOptions:{mode:f.mode,systemPrompt:f.systemPrompt,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,autoApproveTools:f.autoApproveTools,toolExecutors:f.toolExecutors,configExtensions:f.configExtensions},modelSelection:{provider:f.provider,model:f.model,apiKey:f.apiKey},toolPolicies:f.toolPolicies}),J=h4($.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession(f,$,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:$.prompt,attachments:$.attachments,delivery:$.delivery,timeoutSeconds:$.config.timeoutSeconds},f,J)).payload?.result}}async stopRuntimeSession(f){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:f},f),{applied:!0}}async abortRuntimeSession(f){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:f},f),{applied:!0}}async updateSession(f){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:f.sessionId,metadata:f.metadata},f.sessionId),{updated:!0}}async getSession(f){await this.ensureMetadataApplied();let $=await this.client.command("session.get",void 0,f);return h4($.payload)}async readMessages(f){let $=f.trim();if(!$)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:$},$);if(!J.ok)throw Error(Ej(J,"session.messages"));let W=J.payload?.messages;return Array.isArray(W)?W:[]}async restore(f){let $=f.sessionId.trim();if(!$)throw Error("sessionId is required");let J=f.restore?.messages!==!1;if(J&&!f.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=f.config,H=await this.client.command("session.restore",{sessionId:$,checkpointRunCount:f.checkpointRunCount,restore:f.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},$);if(!H.ok)throw Error(Ej(H,"session.restore"));let Q=h4(H.payload);if(J&&!Q?.sessionId)throw Error("hub checkpoint restore returned no session id");let Z=Array.isArray(H.payload?.messages)?H.payload.messages:void 0,j=s_(H.payload);return{sessionId:Q?.sessionId,startResult:Q?.sessionId?{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}:void 0,...Z?{messages:Z}:{},checkpoint:j}}async listSessions(f){await this.ensureMetadataApplied();let $=await this.client.command("session.list",{limit:f?.limit??200});return(Array.isArray($.payload?.sessions)?$.payload?.sessions:[]).map((W)=>h4({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession(f,$=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:f,deleteCheckpointRefs:$})).payload?.deleted===!0}async respondToolApproval(f){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:f.approvalId,approved:f.approved,payload:f.reason?{reason:f.reason}:void 0,responderClientId:f.responderClientId})}streamEvents(f,$){let J=new Set((f.sessionIds??[]).map((H)=>H.trim()).filter(Boolean)),W=this.client.subscribe((H)=>{let Q=o_(H);if(!Q)return;if(J.size>0&&!J.has(Q.sessionId))return;$.onEvent?.(Q)});return this.ensureMetadataApplied().catch((H)=>{$.onError?.(H instanceof Error?H:Error(String(H)))}),W}streamTeamProgress(f,$){let J=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;$.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{$.onError?.(W instanceof Error?W:Error(String(W)))}),J}async createSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",f)).payload?.schedule}async listSchedules(f){await this.ensureMetadataApplied();let $=await this.client.command("schedule.list");return Array.isArray($.payload?.schedules)?$.payload?.schedules:[]}async getSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:f})).payload?.schedule}async updateSchedule(f,$){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:f,...$})).payload?.schedule}async pauseSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:f})).payload?.schedule}async resumeSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:f})).payload?.schedule}async deleteSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:f})).payload?.deleted===!0}async triggerScheduleNow(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:f})).payload?.execution}async listScheduleExecutions(f,$){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:f,limit:$});return Array.isArray(J.payload?.executions)?J.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let f=await this.client.command("schedule.active");return Array.isArray(f.payload?.executions)?f.payload?.executions:[]}async getUpcomingScheduledRuns(f){await this.ensureMetadataApplied();let $=await this.client.command("schedule.upcoming",{limit:f});return Array.isArray($.payload?.upcoming)?$.payload?.upcoming:[]}}class fM{client;constructor(f){this.client=new Z0({url:f.address,authToken:f.authToken,clientId:f.clientId,clientType:f.clientType??"hub-ui-client",displayName:f.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(f){await this.client.command("ui.notify",f)}async sendShowWindow(f){await this.client.command("ui.show_window",f??{})}async listClients(){let f=await this.client.command("client.list");return Array.isArray(f.payload?.clients)?f.payload.clients:[]}async listSessions(f=200){let $=await this.client.command("session.list",{limit:f});return Array.isArray($.payload?.sessions)?$.payload.sessions:[]}subscribeUI(f){return this.client.subscribe(($)=>{switch($.event){case"ui.notify":f.onNotify?.($.payload);break;case"ui.show_window":f.onShowWindow?.($.payload);break;case"hub.client.registered":f.onClientRegistered?.($.payload??{});break;case"hub.client.disconnected":f.onClientDisconnected?.($.payload??{});break;case"session.created":f.onSessionCreated?.($.payload??{});break;case"session.updated":f.onSessionUpdated?.($.payload??{});break;case"session.detached":f.onSessionDetached?.($.payload??{});break}})}}import{normalizeProviderId as $M}from"@cline/llms";function JM(f){return{text:f.text,usage:f.usage,inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,iterations:f.iterations,finishReason:f.finishReason,toolCalls:f.toolCalls.map(($)=>({name:$.name,input:$.input,output:$.output,error:$.error,durationMs:$.durationMs}))}}function WM(f){return f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"}function Hx(f={}){let $=new g0({sessionService:new S0(new E0),fetch:f.fetch,telemetry:f.telemetry});return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),H=await $.startSession({source:J.source?.trim()||Rf.CLI,interactive:!1,config:{providerId:$M(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:WM(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:H.sessionId,startResult:{sessionId:H.sessionId,manifestPath:H.manifestPath,messagesPath:H.messagesPath}}},async sendSession(J,W){let H=await $.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((Q)=>Q.content)});if(!H)throw Error("local hub schedule runtime returned no turn result");return{result:JM(H)}},async abortSession(J){return await $.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await $.stopSession(J),{applied:!0}}}}function HM(f){if(typeof f==="string")return f.trim()||void 0;if(!Array.isArray(f))return;return f.map((J)=>{if(J&&typeof J==="object"&&"type"in J&&J.type==="text"&&"text"in J&&typeof J.text==="string")return J.text.trim();return""}).filter(Boolean).join(`
|
|
695
|
-
`).trim()||void 0}var Sj=120,CW="...";function EW(f){let $=f.trim();if(!$)return"";if(Buffer.byteLength($,"utf8")<=Sj)return $;let J=Sj-Buffer.byteLength(CW,"utf8");if(J<=0)return CW;let W="";for(let H of $){if(Buffer.byteLength(W+H,"utf8")>J)break;W+=H}return`${W}${CW}`}async function kj(f){let $=f?.sessionId?.trim()||"unknown",J=typeof f?.metadata?.messagesPath==="string"?f.metadata.messagesPath:void 0,H=[...await N0(J)].reverse().find((X)=>X.role==="assistant"),Q=H?HM(H.content):void 0,Z=f?.workspaceRoot?.trim()||"workspace",j=typeof f?.metadata?.prompt==="string"?f.metadata.prompt.trim():Z;return{title:`Task completed (${$})`,body:EW(Q&&Q.length>0?Q:j.length>0?j:Z),severity:"info"}}import{createSessionId as CM}from"@cline/shared";import{createSessionId as XM}from"@cline/shared";import{createSessionId as jM}from"@cline/shared";function QM(f){switch(f){case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function ZM(f){let $=f.metadata&&typeof f.metadata==="object"?JSON.parse(JSON.stringify(f.metadata)):{};if(f.parentSessionId?.trim())$.parentSessionId=f.parentSessionId;if(f.parentAgentId?.trim())$.parentAgentId=f.parentAgentId;if(f.agentId?.trim())$.agentId=f.agentId;if(f.conversationId?.trim())$.conversationId=f.conversationId;if(f.messagesPath?.trim())$.messagesPath=f.messagesPath;if(f.prompt?.trim())$.prompt=f.prompt;if(f.provider?.trim())$.provider=f.provider;if(f.model?.trim())$.model=f.model;if(f.source?.trim())$.source=f.source;if(typeof f.pid==="number")$.pid=f.pid;return Object.keys($).length>0?$:void 0}function O4(f,$,J,W){return{sessionId:f.sessionId,workspaceRoot:f.workspaceRoot,cwd:f.cwd,createdAt:Date.parse(f.startedAt),updatedAt:Date.parse(f.updatedAt),createdByClientId:$?.createdByClientId??"hub",status:QM(f.status),participants:$?[...$.participants.values()]:[],metadata:ZM(f),runtimeOptions:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,mode:typeof f.metadata?.mode==="string"?f.metadata.mode:void 0,systemPrompt:typeof f.metadata?.systemPrompt==="string"?f.metadata.systemPrompt:void 0},runtimeSession:f.agentId?{agentId:f.agentId,team:f.teamName?{teamId:f.teamName}:void 0}:void 0,...J?{usage:{...J}}:{},...W?{aggregateUsage:{...W}}:{}}}function m(f,$){return{version:f.version,requestId:f.requestId,ok:!0,...$!==void 0?{payload:$}:{}}}function S(f,$,J){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:$,message:J}}}function z4(f){return f&&typeof f==="object"&&!Array.isArray(f)?f:void 0}function Mf(f){if(typeof f.payload?.sessionId==="string")return f.payload.sessionId.trim();return f.sessionId?.trim()??""}function T$(f,$,J){return{version:"v1",event:f,eventId:jM("hevt_"),sessionId:J,timestamp:Date.now(),payload:$}}async function kf(f,$){let J=await f.sessionHost.getSession($);if(!J)return;let W=await f.sessionHost.getAccumulatedUsage?.($);return O4(J,f.sessionState.get($),W?.usage,W?.aggregateUsage)}async function If(f,$){let J=await f.sessionHost.getSession($);if(!J)return;let[W,H]=await Promise.all([typeof f.sessionHost.readSessionMessages==="function"?f.sessionHost.readSessionMessages($):[],f.sessionHost.getAccumulatedUsage?.($)]);return b0({session:J,messages:W,usage:H?.usage,aggregateUsage:H?.aggregateUsage})}function N4(f,$,J,W,H={}){let Q=f.sessionState.get($);if(Q){if(H.interactive!==void 0)Q.interactive=H.interactive;if(!Q.participants.has(J))Q.participants.set(J,{clientId:J,attachedAt:Date.now(),role:W});return Q}let Z={createdByClientId:J,interactive:H.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:W}]])};return f.sessionState.set($,Z),Z}async function SW(f,$){let J=XM("approval_"),W=$.sessionId;if(f.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((Q)=>{f.pendingApprovals.set(J,{sessionId:W,resolve:Q}),f.publish(f.buildEvent("approval.requested",{approvalId:J,sessionId:$.sessionId,agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,toolCallId:$.toolCallId,toolName:$.toolName,inputJson:JSON.stringify($.input??null),policy:$.policy},W))})}function kW(f,$,J){let W=f.pendingApprovals.get($);if(!W)return;return f.pendingApprovals.delete($),W.resolve(J),{sessionId:W.sessionId}}function IW(f,$,J){let W=0;for(let[H,Q]of[...f.pendingApprovals.entries()]){if(!$({approvalId:H,sessionId:Q.sessionId}))continue;f.pendingApprovals.delete(H),Q.resolve({approved:!1,reason:J}),f.publish(f.buildEvent("approval.resolved",{approvalId:H,approved:!1,cancelled:!0,reason:J},Q.sessionId)),W+=1}return W}async function Ij(f,$){let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"";if(!f.pendingApprovals.get(J))return S($,"approval_not_found",`Unknown approval: ${J}`);let H=typeof $.payload?.reason==="string"?$.payload.reason:$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)&&typeof $.payload.payload.reason==="string"?$.payload.payload.reason:void 0,Q=$.payload?.approved===!0,Z=kW(f,J,{approved:Q,reason:H});if(!Z)return S($,"approval_not_found",`Unknown approval: ${J}`);return f.publish(f.buildEvent("approval.resolved",{approvalId:J,approved:Q,reason:H},Z.sessionId)),m($,{approvalId:J,approved:Q})}import{createSessionId as BM}from"@cline/shared";function AM(f){if(f instanceof Error)return{name:f.name,message:f.message,stack:f.stack};if(f===void 0)return;return f}var mj={debug:10,info:20,warn:30,error:40,silent:50};function PM(){let f=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if(f==="debug"||f==="info"||f==="warn"||f==="error"||f==="silent")return f;return process.env.VITEST?"error":"info"}function I(f,$,J={}){if(mj[f]<mj[PM()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:f,component:"hub",message:$,...Object.fromEntries(Object.entries(J).map(([H,Q])=>[H,AM(Q)]).filter(([,H])=>H!==void 0))});if(f==="error"||f==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function mW(f,$){let J=$ instanceof Error?$.stack||$.message:String($);I("error",f,{error:J})}async function xj(f,$,J,W,H,Q){let Z=BM("capreq_"),j=performance.now();return I("info","capability.request.start",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:H}),await new Promise((X,A)=>{f.pendingCapabilityRequests.set(Z,{sessionId:$,targetClientId:H,capabilityName:J,onProgress:Q,resolve:(P)=>{if(I(P.ok?"info":"warn","capability.request.end",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:H,ok:P.ok,error:P.error,durationMs:Math.round(performance.now()-j)}),!P.ok){A(Error(P.error||`Capability ${J} was rejected by ${H}.`));return}X(P.payload)}}),f.publish(f.buildEvent("capability.requested",{requestId:Z,targetClientId:H,capabilityName:J,payload:W},$)),I("info","capability.request.published",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:H})})}function gj(f,$){let J=typeof $.payload?.requestId==="string"?$.payload.requestId.trim():"",W=f.pendingCapabilityRequests.get(J);if(!W)return S($,"capability_not_found",`Unknown capability request: ${J}`);if(($.clientId?.trim()||"")!==W.targetClientId)return S($,"capability_wrong_client",`Capability request ${J} is owned by ${W.targetClientId}`);if($.sessionId?.trim()&&$.sessionId.trim()!==W.sessionId)return S($,"capability_wrong_session",`Capability request ${J} belongs to session ${W.sessionId}`);let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{};return W.onProgress?.(Q),m($,{requestId:J})}function v0(f,$,J){let W=0;for(let[H,Q]of[...f.pendingCapabilityRequests.entries()]){if(!$({requestId:H,...Q}))continue;f.pendingCapabilityRequests.delete(H),I("warn","capability.request.cancelled",{requestId:H,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,reason:J}),Q.resolve({ok:!1,error:J}),f.publish(f.buildEvent("capability.resolved",{requestId:H,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,ok:!1,cancelled:!0,error:J},Q.sessionId)),W+=1}return W}async function vj(f,$){let J=typeof $.payload?.sessionId==="string"?$.payload.sessionId.trim():$.sessionId?.trim()||"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName.trim():"",H=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId.trim():"";if(!J||!W||!H)return S($,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Z=await f.requestCapability(J,W,Q,H);return m($,Z)}catch(Q){return S($,"capability_request_failed",Q instanceof Error?Q.message:String(Q))}}function uj(f,$){let J=typeof $.payload?.requestId==="string"?$.payload.requestId.trim():"",W=f.pendingCapabilityRequests.get(J);if(!W)return S($,"capability_not_found",`Unknown capability request: ${J}`);let H=$.clientId?.trim()||"";if(H!==W.targetClientId)return S($,"capability_wrong_client",`Capability request ${J} is owned by ${W.targetClientId}`);if($.sessionId?.trim()&&$.sessionId.trim()!==W.sessionId)return S($,"capability_wrong_session",`Capability request ${J} belongs to session ${W.sessionId}`);f.pendingCapabilityRequests.delete(J);let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:void 0,Z=typeof $.payload?.error==="string"?$.payload.error:void 0,j=$.payload?.ok===!0;return I(j?"info":"warn","capability.respond",{requestId:J,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:H,ok:j,error:Z}),W.resolve({ok:j,payload:Q,error:Z}),f.publish(f.buildEvent("capability.resolved",{requestId:J,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:H,ok:j,payload:Q,error:Z},W.sessionId)),m($,{requestId:J,ok:j})}import{createSessionId as YM}from"@cline/shared";function cj(f,$){let J=$.payload,W=J?.clientId?.trim()||$.clientId?.trim()||YM("client_");return f.clients.set(W,{clientId:W,clientType:J?.clientType??"unknown",displayName:J?.displayName,actorKind:J?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:J?.transport??"native",capabilities:J?.capabilities??[],metadata:J?.metadata,workspaceContext:J?.workspaceContext}),f.publish(f.buildEvent("hub.client.registered",{clientId:W,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),m($,{clientId:W})}function dj(f,$){let J=$.clientId?.trim(),W=J?f.clients.get(J):void 0;if(!J||!W)return S($,"client_not_found","Client is not registered with this hub.");let H=z4($.payload?.metadata);if(W.lastSeenAt=Date.now(),H)W.metadata=JSON.parse(JSON.stringify(H));return m($)}function rj(f,$,J){let W=$.clientId?.trim();if(W)f.clients.delete(W),J(W),f.publish(f.buildEvent("hub.client.disconnected",{clientId:W}));return m($)}function lj(f,$){return m($,{clients:[...f.clients.values()]})}var VM=30000;function RM(f){if(f==="aborted")return"run.aborted";if(f==="error"||f==="failed")return"run.failed";return"run.completed"}function FM(f){if(f.finishReason!=="error")return;return f.text.trim()||void 0}function KM(f){let $=typeof f.timeoutMs==="number"?f.timeoutMs:typeof f.timeout_ms==="number"?f.timeout_ms:void 0;if($&&Number.isFinite($)&&$>0)return Math.floor($);let J=typeof f.timeoutSeconds==="number"?f.timeoutSeconds:typeof f.timeout_seconds==="number"?f.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function yM(f,$,J,W){let H=performance.now(),Q=!1,Z={command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:J.sessionId,timeoutMs:W},j=setInterval(()=>{if(Q)return;let P=Math.round(performance.now()-H);I("warn","run.heartbeat",{...Z,elapsedMs:P}),f.publish(f.buildEvent("run.heartbeat",{requestId:$.requestId,elapsedMs:P,...W?{timeoutMs:W}:{}},J.sessionId))},VM),X=f.sessionHost.runTurn(J);X.then((P)=>{if(!Q)return;I("warn","run.late_end",{...Z,elapsedMs:Math.round(performance.now()-H),finishReason:P?.finishReason})},(P)=>{if(!Q)return;I("error","run.late_error",{...Z,elapsedMs:Math.round(performance.now()-H),error:P})});let A;try{if(!W)return await X;return await Promise.race([X,new Promise((P,B)=>{A=setTimeout(()=>{let Y=`Hub run ${$.command} timed out after ${W}ms.`;Q=!0,clearInterval(j),B(Error(Y)),I("error","run.timeout",{...Z,elapsedMs:Math.round(performance.now()-H)}),IW(f,(V)=>V.sessionId===J.sessionId,Y),v0(f,(V)=>V.sessionId===J.sessionId,Y),f.sessionHost.abort(J.sessionId,Y).catch((V)=>{I("error","run.timeout_abort_failed",{...Z,error:V})})},W)})])}finally{if(Q=!0,clearInterval(j),A)clearTimeout(A)}}async function pj(f,$){let J=Mf($),W=$.payload&&typeof $.payload==="object"?$.payload:{},H=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!H.trim())return S($,"invalid_session_input","session input requires a prompt string");f.publish(f.buildEvent("run.started",void 0,J));let Q=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Z=Array.isArray(Q?.userFiles)?Q.userFiles.filter((P)=>typeof P==="string"):void 0,j=KM(W);f.suppressNextTerminalEventBySession.set(J,"run.start.reply");let X;try{X=await yM(f,$,{sessionId:J,prompt:H,delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(Q?.userImages)?Q.userImages:void 0,userFiles:Z,timeoutMs:j},j)}catch(P){if(f.suppressNextTerminalEventBySession.get(J)==="run.start.reply")f.suppressNextTerminalEventBySession.delete(J);throw f.publish(f.buildEvent("run.failed",{reason:"error",error:P instanceof Error?P.message:String(P)},J)),P}if(X){let P=await If(f,J),B=FM(X);if(f.publish(f.buildEvent(RM(X.finishReason),{reason:X.finishReason,...B?{error:B}:{},result:X,...P?{snapshot:P}:{}},J)),f.suppressNextTerminalEventBySession.get(J)==="run.start.reply")f.suppressNextTerminalEventBySession.delete(J)}else f.suppressNextTerminalEventBySession.delete(J);let A=await If(f,J);return m($,X||A?{...X?{result:X}:{},...A?{snapshot:A}:{}}:void 0)}async function ij(f,$){let J=Mf($),W=typeof $.payload?.reason==="string"?$.payload.reason:"Run was aborted before pending approval or capability request was resolved.";return IW(f,(H)=>H.sessionId===J,W),await f.sessionHost.abort(J,$.payload?.reason),v0(f,(H)=>H.sessionId===J,W),f.publish(f.buildEvent("run.aborted",{reason:W},J)),m($,{applied:!0})}async function nj(f,$){let J=F4($.payload?.payload);if(!J)return S($,"invalid_hook_payload","session.hook requires a valid hook event payload");return await f.sessionHost.dispatchHookEvent(J),m($,{applied:!0})}async function aj(f,$){switch($.type){case"chunk":return;case"agent_event":await UM(f,$);return;case"hook":if($.payload.hookEventName==="tool_call")f.publish(f.buildEvent("tool.started",{toolName:$.payload.toolName},$.payload.sessionId));else if($.payload.hookEventName==="tool_result")f.publish(f.buildEvent("tool.finished",{toolName:$.payload.toolName},$.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:$.payload.sessionId,summary:$.payload.summary,lastEvent:$.payload.lifecycle};f.publish(f.buildEvent("team.progress",J,$.payload.sessionId));return}case"pending_prompts":f.publish(f.buildEvent("session.pending_prompts",{sessionId:$.payload.sessionId,prompts:$.payload.prompts},$.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:$.payload.id,prompt:$.payload.prompt,delivery:$.payload.delivery,attachmentCount:$.payload.attachmentCount};f.publish(f.buildEvent("session.pending_prompt_submitted",{sessionId:$.payload.sessionId,prompt:J},$.payload.sessionId));return}case"session_snapshot":f.publish(f.buildEvent("session.updated",{sessionId:$.payload.sessionId,snapshot:$.payload.snapshot},$.payload.sessionId));return;case"status":{let[J,W]=await Promise.all([kf(f,$.payload.sessionId),If(f,$.payload.sessionId)]);if(J)f.publish(f.buildEvent("session.updated",{session:J,...W?{snapshot:W}:{}},$.payload.sessionId));return}case"ended":await GM(f,$);return;default:return}}async function UM(f,$){let{sessionId:J,event:W}=$.payload;if(W.type==="iteration_start"){f.publish(f.buildEvent("iteration.started",{iteration:W.iteration},J));return}if(W.type==="iteration_end"){f.publish(f.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},J));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){f.publish(f.buildEvent("assistant.delta",{text:W.text},J));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){f.publish(f.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)f.publish(f.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},J));return}if(W.contentType==="tool"){f.publish(f.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},J));return}}if(W.type==="content_end"){switch(W.contentType){case"text":f.publish(f.buildEvent("assistant.finished",{text:W.text},J));break;case"reasoning":f.publish(f.buildEvent("reasoning.finished",{reasoning:W.reasoning},J));break;case"tool":f.publish(f.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},J));break}return}if(W.type==="usage"){let H;try{H=await f.sessionHost.getAccumulatedUsage?.(J)}catch{H=void 0}f.publish(f.buildEvent("usage.updated",{sessionId:J,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:H?.usage,aggregateUsage:H?.aggregateUsage,agent:{kind:$.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:$.payload.teamAgentId,teamRole:$.payload.teamRole}},J));return}if(W.type==="done")f.publish(f.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},J))}async function GM(f,$){let J=f.suppressNextTerminalEventBySession.get($.payload.sessionId),W=J===$.payload.reason||J==="run.start.reply";if(W)f.suppressNextTerminalEventBySession.delete($.payload.sessionId);let[H,Q]=await Promise.all([kf(f,$.payload.sessionId),If(f,$.payload.sessionId)]);if($.payload.reason==="completed"){let Z=await kj(H);f.publish(f.buildEvent("ui.notify",Z,$.payload.sessionId))}if(W)return;f.publish(f.buildEvent($.payload.reason==="aborted"?"run.aborted":$.payload.reason==="error"||$.payload.reason==="failed"?"run.failed":"run.completed",{reason:$.payload.reason,...Q?{snapshot:Q}:{}},$.payload.sessionId))}import{createSessionId as sj,parseRuntimeConfigExtensions as oj}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Sx,HUB_COMPACTION_CAPABILITY as kx,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Ix,HUB_HOOK_CAPABILITY_PREFIX as mx,HUB_MISTAKE_LIMIT_CAPABILITY as xx,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as gx,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as vx,isHubToolExecutorName as TM}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as lx,HUB_COMPACTION_CAPABILITY as px,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as ix,HUB_HOOK_CAPABILITY_PREFIX as nx,HUB_MISTAKE_LIMIT_CAPABILITY as ax,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as tx,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as sx}from"@cline/shared";var DM=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function D$(f){return f&&typeof f==="object"&&!Array.isArray(f)?JSON.parse(JSON.stringify(f)):void 0}function _M(f,$){let J=typeof f.name==="string"?f.name.trim():"",W=typeof f.description==="string"?f.description:"",H=typeof f.capabilityName==="string"?f.capabilityName.trim():"",Q=D$(f.inputSchema);if(!J||!W||!Q||!H||$.has(H))return;return $.add(H),{kind:"tool",capabilityName:H,name:J,description:W,inputSchema:Q,...D$(f.lifecycle)?{lifecycle:D$(f.lifecycle)}:{}}}function gW(f){if(!Array.isArray(f))return[];let $=[],J=new Set;for(let W of f){if(!W||typeof W!=="object"||Array.isArray(W))continue;let H=W,Q=H.kind,Z=typeof H.capabilityName==="string"?H.capabilityName.trim():"";if(!Z||J.has(Z))continue;if(Q==="tool"){let j=_M(H,J);if(j)$.push(j);continue}if(Q==="toolExecutor"){let j=H.executor;if(!TM(j))continue;J.add(Z),$.push({kind:"toolExecutor",capabilityName:Z,executor:j});continue}if(Q==="hook"){let j=typeof H.name==="string"?H.name.trim():"";if(!j)continue;J.add(Z),$.push({kind:"hook",capabilityName:Z,name:j});continue}if(Q==="compaction"){J.add(Z),$.push({kind:"compaction",capabilityName:Z,...D$(H.config)?{config:D$(H.config)}:{}});continue}if(Q==="checkpoint"){J.add(Z),$.push({kind:"checkpoint",capabilityName:Z,...D$(H.config)?{config:D$(H.config)}:{}});continue}if(Q==="mistakeLimit"){J.add(Z),$.push({kind:"mistakeLimit",capabilityName:Z});continue}if(Q==="userInstructionService")J.add(Z),$.push({kind:"userInstructionService",capabilityName:Z})}return $}function tj(f){return{agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,metadata:f.metadata}}function MM(f){return Object.hasOwn(f,"update")?f.update:f}function Y2(f){return f.trim().replace(/^\/+/,"").toLowerCase()}function LM(f){let $=(f??[]).map(Y2).filter(Boolean);return $.length>0?new Set($):void 0}function hM(f,$,J){if(!J)return!0;let W=Y2(f),H=Y2($),Q=W.includes(":")?W.split(":").at(-1)??W:W,Z=H.includes(":")?H.split(":").at(-1)??H:H;return J.has(W)||J.has(H)||J.has(Q)||J.has(Z)}function xW(f,$){let J=LM($);return f.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>hM(W.id,W.name,J))}function OM(f,$){let J=async(W,H)=>{let Q=Y2(W),j=xW(f,$).filter((Y)=>Y.id===Q||Y2(Y.name)===Q||Y.id.endsWith(`:${Q}`)).filter((Y)=>!Y.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((Y)=>Y.id).join(", ")}`:`Skill "${W}" not found.`;let X=j[0].skill,A=H?.trim(),P=A?`
|
|
696
|
-
<command-args>${
|
|
697
|
-
|
|
698
|
-
`:"";return`<command-name>${
|
|
693
|
+
version = team_outcome_fragments.version + 1`,[Q,W.outcomeId,W.id,W.section,W.sourceAgentId,W.sourceRunId??null,W.content,W.status,W.reviewedBy??null,W.reviewedAt?W.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,f){let J=Wf($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[J]);if(Q.length===0)return[];let Z=E9();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
694
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[f,Z,J]),Q.map((W)=>W.run_id)}handleTeamEvent($,f){this.appendTeamEvent($,f.type,f)}}function dX($={}){try{let f=new D2($);return f.init(),f}catch{let f=new N4({teamDir:$.teamDir});return f.init(),f}}function b9($,f){return Tz($,f)}function Mz($,f){let J=f?.["*"]??{},Q=f?.[$]??{};return{...J,...Q}.enabled!==!1}function qz($,f){return $.filter((J)=>Mz(J.name,f))}function lX($,f){return d1(qz($,f))}function pX(){return`team-${Nz(5)}`}function k9($,f,J,Q,Z,W,j,X){let H=p0[y$({mode:J})],Y=Rf(f,Q,J,Z??Df);return lX(yf({cwd:$,...H,enableSkills:!!j,...Y,executors:{...j?{skills:j}:{},...X??{}}}),W)}function wz($){return k9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Sz,$.toolExecutors).some((f)=>f.name==="skills")}var Sz=async()=>"";async function Cz($){let f=w0();if(!Z1({filePath:f}))return{tools:[]};let J=new hf({clientFactory:q8({settingsPath:f})}),Q;try{Q=await Cf(J,{filePath:f})}catch(X){await J.dispose().catch(()=>{});let H=X instanceof Error?X.message:String(X);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${H}`),{tools:[]}}let Z=Q.filter((X)=>X.disabled!==!0),W=await Promise.allSettled(Z.map((X)=>S8({serverName:X.name,provider:J}))),j=[];for(let[X,H]of W.entries())if(H.status==="fulfilled")j.push(...H.value);else{let Y=H.reason instanceof Error?H.reason.message:String(H.reason);$?.log(`[mcp] Failed to load tools from MCP server "${Z[X].name}", skipping: ${Y}`)}return{tools:j,shutdown:async()=>{await J.dispose()}}}function hz($,f){if(!$)return;for(let J of $.getTeammateIds())try{$.shutdownTeammate(J,f)}catch{}}function Ez($){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 bz($){let f=p0[y$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??f.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??f.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 M4{teamRuntimeEntries=new Map;async build($){let{config:f,hooks:J,extensions:Q,logger:Z,telemetry:W,createSpawnTool:j,onTeamRestored:X,userInstructionService:H,configExtensions:Y,toolExecutors:V}=$,A=$.onTeamEvent??(()=>{}),B=bz(f),K=r0(),G=[],R=f.teamName?.trim()||pX(),F=f.sessionId?.trim()||R,P=b9(Y,"rules"),D=b9(Y,"skills"),O=b9(Y,"workflows"),_=P||D||O,L=!1,z=Boolean(H),y=H,N;if(!y&&_)y=v1({skills:{workspacePath:f.cwd},rules:{workspacePath:f.cwd},workflows:{workspacePath:f.cwd}});if(y)await y.start().catch(()=>{});let e=B.enableTools&&D&&Boolean(y)&&(z||y?.hasConfiguredSkills(f.skills)===!0)&&wz({cwd:f.cwd,providerId:f.providerId,mode:B.mode,modelId:f.modelId,toolRoutingRules:f.toolRoutingRules,toolPolicies:f.toolPolicies,toolExecutors:V}),$0=y&&_?y.createExtension({includeRules:P,includeSkills:D,includeWorkflows:O,registerSkillsTool:e,allowedSkillNames:f.skills}):void 0,a=$0?[...Q??f.extensions??[],$0]:Q??f.extensions;if(B.enableTools){if(G.push(...k9(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V)),!B.disableMcpSettingsTools){let u=await Cz(f.logger);G.push(...u.tools),N=u.shutdown}}let m,V0=B.enableAgentTeams?dX():void 0,B$=V0?.loadRuntime(F),v=B$?.state,s0=B$?.teammates??[],h=new Map(s0.map((u)=>[u.agentId,u])),p=f.sessionId||R,o0,u0=[],l$=!1,N1=R8({providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey??"",baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:J,extensions:a,logger:Z??f.logger,telemetry:$.telemetry??f.telemetry,workspaceMetadata:f.workspaceMetadata});if(!this.teamRuntimeEntries.has(p))this.teamRuntimeEntries.set(p,{delegatedAgentConfigProvider:N1});let jf=()=>{if(!B.enableAgentTeams)return;let u=this.teamRuntimeEntries.get(p)??{delegatedAgentConfigProvider:N1};if(this.teamRuntimeEntries.set(p,u),m=u.runtime,!m){if(m=new X2({teamName:R,leadAgentId:f.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:(o)=>{if(A(o),m&&V0){if(o.type==="teammate_spawned"&&o.teammate?.rolePrompt){let e0={agentId:o.agentId,rolePrompt:o.teammate.rolePrompt,modelId:o.teammate.modelId,maxIterations:o.teammate.maxIterations};h.set(e0.agentId,e0)}if(o.type==="teammate_shutdown"&&!Ez(o.reason))h.delete(o.agentId);V0.handleTeamEvent(F,o),V0.persistRuntime(F,m.exportState(),Array.from(h.values()))}}}),v)m.hydrateState(v),l$=!0;u.runtime=m}if(!L){if(!m)return;L=!0;let o=z8({runtime:m,leadAgentId:f.sessionId||"lead",restoredFromPersistence:Boolean(v),restoredTeammates:s0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(e0)=>{u0=e0,o0?.addTools(e0)},createBaseTools:B.enableTools?()=>k9(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V):void 0,teammateConfigProvider:N1});if(l$)m.recoverActiveRuns("runtime_recovered");if(o.restoredFromPersistence)X?.();G.push(...o.tools)}return m};if(B.enableSpawnAgent&&j){let u=j();G.push({...u,execute:async(o,e0)=>{return jf(),u.execute(o,e0)}})}if(B.enableAgentTeams)jf();let N2=lX(G,f.toolPolicies),n4=N2.some((u)=>u.name===Z0.SUBMIT_AND_EXIT&&u.lifecycle?.completesRun===!0),M1=B.enableAgentTeams?()=>{let u=this.teamRuntimeEntries.get(p)?.runtime;if(!u)return;let o=u.listTasks(),e0=o.some((K$)=>K$.status==="in_progress"||K$.status==="pending"),U7=u.listRuns({}),NY=U7.some((K$)=>K$.status==="running"||K$.status==="queued");if(e0||NY){let K$=o.filter((y0)=>y0.status==="in_progress"||y0.status==="pending").map((y0)=>`${y0.id} (${y0.status}): ${y0.title}`).join(", "),L7=U7.filter((y0)=>y0.status==="running"||y0.status==="queued").map((y0)=>`${y0.id} (${y0.status})`).join(", "),a4=[];if(K$)a4.push(`Unfinished tasks: ${K$}`);if(L7)a4.push(`Active runs: ${L7}`);return`[SYSTEM] You still have team obligations. ${a4.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,Xf=n4?{requireCompletionTool:!0,...M1?{completionGuard:M1}:{}}:M1?{completionGuard:M1}:void 0;return{tools:N2,logger:Z??f.logger,telemetry:W??f.telemetry,teamRuntime:m,teamRestoredFromPersistence:Boolean(v),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(p)?.delegatedAgentConfigProvider??N1,extensions:a,completionPolicy:Xf,registerLeadAgent:(u)=>{if(o0=u,u0.length>0)u.addTools(d1(u0,[...K]))},shutdown:async(u)=>{if(hz(m,u),this.teamRuntimeEntries.delete(p),await N?.(),!z)y?.stop()}}}}import{getClineEnvironmentConfig as kz,isOAuthProviderId as Iz}from"@cline/shared";var I9="workos:";function xz($,f){if($==="cline")return`${I9}${f}`;return f}function gz($,f){if($==="cline"&&f.toLowerCase().startsWith(I9))return f.slice(I9.length);return f}function mz($){let J=j0($)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function vz($,f){let J=$.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let Q=mz(f);if(Q)return Q;return Date.now()-1}function cz($,f){let J=f.auth?.accessToken?.trim(),Q=f.auth?.refreshToken?.trim();if(!J||!Q)return null;let Z=gz($,J);if(!Z)return null;return{access:Z,refresh:Q,expires:vz(f,Z),accountId:f.auth?.accountId}}function uz($,f){let J=$?.expiresAt,Q=f?.expiresAt;return $?.accessToken===f?.accessToken&&$?.refreshToken===f?.refreshToken&&$?.accountId===f?.accountId&&J===Q}class q4 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 x9{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new c$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){if(!Iz($.providerId))return null;return this.resolveWithSingleFlight($.providerId,$.forceRefresh)}async resolveWithSingleFlight($,f=!1){let J=this.refreshInFlight.get($);if(J)return J;let Q=this.resolveProviderApiKeyInternal($,f).catch((Z)=>{throw Z}).finally(()=>{this.refreshInFlight.delete($)});return this.refreshInFlight.set($,Q),Q}async resolveProviderApiKeyInternal($,f){let J=this.providerSettingsManager.getProviderSettings($);if(!J)return null;let Q=cz($,J);if(!Q)return null;let Z=await this.resolveCredentials($,J,Q,f);if(!Z)throw new q4($);let W=xz($,Z.access),j={...J.auth??{},accessToken:W,refreshToken:Z.refresh,accountId:Z.accountId};j.expiresAt=Z.expires;let X={...J,auth:j},H=!uz(J.auth,X.auth);if(H)this.providerSettingsManager.saveProviderSettings(X,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:$,apiKey:W,accountId:Z.accountId,refreshed:H}}async resolveCredentials($,f,J,Q){if($==="cline")return L6(J,{apiBaseUrl:f.baseUrl?.trim()||kz().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:Q});if($==="oca")return q6(J,{forceRefresh:Q,telemetry:this.telemetry},{mode:f.oca?.mode,telemetry:this.telemetry});return z6(J,{forceRefresh:Q,telemetry:this.telemetry})}}import{normalizeUserInput as dz}from"@cline/shared";import{nanoid as lz}from"nanoid";class rX{list($){return $?b0($):[]}update($,f){if(!$)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((H)=>H.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:b0($),updated:!1};let Z=$.pendingPrompts[Q];if(!Z)return{sessionId:f.sessionId,prompts:b0($),updated:!1};let W=f.prompt===void 0?Z.prompt:dz(f.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=f.delivery??Z.delivery,X={...Z,prompt:W,mode:f.mode??Z.mode,delivery:j};return $.pendingPrompts.splice(Q,1),pz($,X,Q,Z.delivery),{sessionId:f.sessionId,prompts:b0($),prompt:w4(X),updated:!0}}delete($,f){if(!$)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((W)=>W.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:b0($),removed:!1};let[Z]=$.pendingPrompts.splice(Q,1);return{sessionId:f.sessionId,prompts:b0($),prompt:Z?w4(Z):void 0,removed:!0}}enqueue($,f){let{prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j}=f,X=$.pendingPrompts.findIndex((H)=>H.prompt===J);if(X>=0){let[H]=$.pendingPrompts.splice(X,1),Y={...H,prompt:J,mode:Q??H.mode,userImages:W??H.userImages,userFiles:j??H.userFiles};if(Z==="steer"||H.delivery==="steer")$.pendingPrompts.unshift({...Y,delivery:"steer"});else $.pendingPrompts.push(Y)}else{let H={id:`pending_${Date.now()}_${lz(5)}`,prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j};if(Z==="steer")$.pendingPrompts.unshift(H);else $.pendingPrompts.push(H)}return b0($)}consumeSteer($){let f=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(f<0)return{prompts:b0($)};let[J]=$.pendingPrompts.splice(f,1);return{entry:J,prompts:b0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:b0($)}}requeueFront($,f){return $.pendingPrompts.unshift(f),b0($)}clear($){return $.pendingPrompts.length=0,[]}}class g9{deps;service=new rX;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=this.service.update(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}delete($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=this.service.delete(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}enqueue($,f){let J=this.deps.getSession($);if(!J||J.aborting)return;this.service.enqueue(J,f),this.emitPrompts(J),this.scheduleDrain($,J)}consumeSteer($){let f=this.deps.getSession($);if(!f)return;let{entry:J}=this.service.consumeSteer(f);if(!J)return;return this.emitPrompts(f),this.emitSubmitted(f,J),J}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:b0($)}})}scheduleDrain($,f){if(f.pendingPrompts.length===0||f.aborting||f.drainingPendingPrompts||!f.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let f=this.deps.getSession($);if(!f)return;if(f.aborting||f.drainingPendingPrompts)return;if(!f.agent.canStartRun())return;let{entry:J}=this.service.shiftNext(f);if(!J)return;this.emitPrompts(f),this.emitSubmitted(f,J),f.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:J.prompt,...J.mode?{mode:J.mode}:{},userImages:J.userImages,userFiles:J.userFiles})}catch{Q=!1,this.service.requeueFront(f,J),this.emitPrompts(f)}finally{if(f.drainingPendingPrompts=!1,Q&&f.pendingPrompts.length>0&&f.status!=="failed"&&f.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,f){let J=w4(f);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function w4($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function b0($){return $.pendingPrompts.map(w4)}function pz($,f,J,Q){if(f.delivery==="steer")$.pendingPrompts.unshift(f);else if(Q==="steer")$.pendingPrompts.push(f);else $.pendingPrompts.splice(J,0,f)}R0();class v9{deps;constructor($){this.deps=$}dispatchAgentEvent($,f,J){let Q=this.deps.getSession($),Z={sessionId:$,config:f,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=K9(J),j=!!Q&&(!W.agentId||W.agentId===m9(Q.agent));G9(Z,J,j?{isPrimaryAgentEvent:!0,agentId:m9(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,f){let J=this.deps.getSession($);if(J){if(n5(J,f),f.type==="agent_event"){let Q={sessionId:$,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};G9(Q,f.event,{agentId:f.agentId,teamRole:"teammate",teamAgentId:f.agentId,isPrimaryAgentEvent:!1})}if(f.type==="teammate_spawned"){let Q=V$({agentId:f.teammate.runtimeAgentId??f.agentId,conversationId:f.teammate.conversationId,parentAgentId:f.teammate.parentAgentId,createdByAgentId:m9(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:f.agentId});if(Q)i$(J.config.telemetry,{ulid:$,modelId:f.teammate.modelId??J.config.modelId,provider:J.config.providerId,...Q})}}if(await a5($,f,this.deps.invokeBackendOptional),J)t5(J,$,f,this.deps.emit)}async handlePluginEvent($,f,J){if(f.name==="plugin_log"){this.handlePluginLog($,f.payload);return}if(f.name==="automation_event"){let H=this.deps.getSession($)?.config.extensionContext?.automation??J;if(!H)return;let Y=f.payload&&typeof f.payload==="object"?f.payload:void 0;if(!Y)return;await H.ingestEvent(Y);return}if(f.name!=="steer_message"&&f.name!=="queue_message"&&f.name!=="pending_prompt")return;let Q=f.payload&&typeof f.payload==="object"?f.payload:void 0,Z=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,W=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!W)return;let j=f.name==="steer_message"?"steer":f.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(Z,{prompt:W,delivery:j})}handlePluginLog($,f,J){let Q=this.deps.getSession($),Z=J??Q?.config.extensionContext?.logger??Q?.config.logger;if(!Z||!f||typeof f!=="object")return;let W=f,j=typeof W.message==="string"?W.message:"";if(!j)return;let X=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(X.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)X.pluginName=W.pluginName;if(W.level==="debug"){Z.debug(j,X);return}if(W.level==="error"){if(Z.error)Z.error(j,X);else Z.log(j,{...X,severity:"error"});return}Z.log(j,X)}}function m9($){return $.getAgentId()}function c9($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:g$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function u9($,f){let J=$[f];return typeof J==="function"?J:null}async function iX($,f,...J){let Q=u9($,f);if(!Q)throw Error(`session service method not available: ${f}`);return Promise.resolve(Q.apply($,J))}async function nX($,f,...J){let Q=u9($,f);if(!Q)return;await Promise.resolve(Q.apply($,J))}async function aX($,f,...J){let Q=u9($,f);if(!Q)return;return await Promise.resolve(Q.apply($,J))}Z$();R0();function d9($,f,J,Q){return m1({configProvider:{getRuntimeConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:f.hooks,extensions:f.extensions,logger:f.logger,telemetry:f.telemetry},getConnectionConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let W=f.enableTools?yf({cwd:f.cwd,...p0[y$({mode:f.mode})],executors:Q}):[];if(f.enableSpawnAgent)W.push(d9($,f,J,Q));return d1(W)},onSubAgentEvent:(W)=>$.onAgentEvent(J,f,W),onSubAgentStart:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:J});let X=V$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)i$(f.telemetry,{ulid:J,modelId:f.modelId,provider:f.providerId,...X});S2(f.telemetry,{event:"started",ulid:J,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",J,W)},onSubAgentEnd:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),H=X?Date.now()-X.startedAt:0,Y=W.result?.text?W.result.text.split(`
|
|
695
|
+
`).length:0;S2(f.telemetry,{event:"ended",ulid:J,durationMs:H,outputLines:Y,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...V$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",J,W)}})}import{readFile as rz,stat as iz}from"node:fs/promises";var nz=20480000;async function tX($){let f=await iz($);if(!f.isFile())throw Error("Path is not a file");if(f.size>nz)throw Error("File is too large to read into context.");let J=await rz($,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var sX=5000;function R2($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function J_($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=R2(f.inputTokens),Q=R2(f.outputTokens),Z=R2(f.cacheReadTokens),W=R2(f.cacheWriteTokens),j=R2(f.totalCost);if(J===void 0||Q===void 0||Z===void 0||W===void 0||j===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:Z,cacheWriteTokens:W,totalCost:j}}function Q_($,f){return{inputTokens:Math.max($.inputTokens,f.inputTokens),outputTokens:Math.max($.outputTokens,f.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,f.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,f.cacheWriteTokens),totalCost:Math.max($.totalCost,f.totalCost)}}class u${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new of;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new Qf;constructor($){let f=tz();if(f)f_(f);let J=P1($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new M4,this.createAgentInstance=$.createAgent??((Q)=>new T$(Q)),this.defaultCapabilities=P0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new c$,this.oauthTokenManager=$.oauthTokenManager??new x9({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=$.fetch,this.pendingPromptsController=new g9({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new v9({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,Z,W)=>{this.invoke("persistSessionMessages",Q,Z,W)},enqueuePendingPrompt:(Q,Z)=>this.pendingPromptsController.enqueue(Q,Z),invokeBackendOptional:(Q,...Z)=>this.invokeOptional(Q,...Z)})}async startSession($){let f=$.source??G0.CLI,J=n(),Q=$.config.sessionId?.trim()??"",Z=Q||oz(),W=$,j=W.initialMessages??[],X=j.length>0?B4(j):K0(),H=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!H)throw Error("session service method not available: ensureSessionsDir");let Y=l9(H,Z),V=l9(Y,`${Z}.messages.json`),A=l9(Y,`${Z}.json`),B=g$($.config),K=O0.parse({version:1,session_id:Z,source:f,pid:process.pid,started_at:J,status:"running",interactive:$.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:W.config.cwd,workspace_root:B,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,messages_path:V}),G;if(Q.length>0&&j.length>0&&!W.prompt?.trim()){let h=await this.invokeOptionalValue("readSessionManifest",Z);if(h)K=h,G={manifestPath:A,messagesPath:h.messages_path||V,manifest:h}}let F=await this.seedAggregateUsageFromArtifacts({initialUsage:X,sessionDir:Y,rootMessagesPath:G?.messagesPath??V,manifest:K});this.usageBySession.set(Z,X),this.aggregateUsageBySession.set(Z,F);let P=P0(this.defaultCapabilities,$.capabilities),D=P?.toolExecutors??this.toolExecutors,O=$.localRuntime,_=O?.extensionContext?.logger??O?.logger,L=O?.extensionContext?.automation,z;z=await KX({input:W,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:P,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(h)=>{if(h.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,h.payload,_);return}this.eventBridge.handlePluginEvent(Z,h,L)},onTeamEvent:(h)=>{this.eventBridge.handleTeamEvent(Z,h),z.config.onTeamEvent?.(h)},createSpawnTool:()=>d9({getSession:(h)=>this.sessions.get(h),subAgentStarts:this.subAgentStarts,onAgentEvent:(h,p,o0)=>this.eventBridge.dispatchAgentEvent(h,p,o0),invokeBackendOptional:(h,...p)=>this.invokeOptional(h,...p)},z.config,Z,D),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(h)=>{await this.persistSessionMetadata(Z,()=>h)}});let y=await this.runtimeBuilder.build(z.runtimeBuilderInput),N=z.config,e=z.providerConfig;if(y.teamRuntime&&!N.teamName?.trim())N.teamName=y.teamRuntime.getTeamName();let $0=[...y.tools,...N.extraTools??[]],a=y.extensions??z.extensions,m={sessionId:Z,providerId:e.providerId,modelId:e.modelId,apiKey:e.apiKey,baseUrl:e.baseUrl,headers:e.headers,knownModels:e.knownModels,providerConfig:e,thinking:N.thinking,reasoningEffort:N.reasoningEffort??e.reasoningEffort,systemPrompt:N.systemPrompt,maxIterations:N.maxIterations,execution:N.execution,prepareTurn:B9(N),tools:$0,hooks:z.hooks,extensions:a,hookErrorMode:N.hookErrorMode,initialMessages:z.effectiveInput.initialMessages,userFileContentLoader:tX,toolPolicies:z.toolPolicies,requestToolApproval:z.requestToolApproval,telemetry:N.telemetry,onConsecutiveMistakeLimitReached:N.onConsecutiveMistakeLimitReached,completionPolicy:y.completionPolicy,consumePendingUserMessage:()=>{let h=this.pendingPromptsController.consumeSteer(Z);return h?Y2(h.prompt,h.mode??N.mode):void 0},logger:y.logger??N.logger,extensionContext:N.extensionContext,onEvent:(h)=>this.eventBridge.dispatchAgentEvent(Z,N,h)};m.hooks={...m.hooks,onEvent:async(h)=>{if(await z.hooks?.onEvent?.(h),h.type!=="assistant-message")return;let p=this.sessions.get(Z);if(!p)return;let o0=p.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,o0,N.systemPrompt)}catch(u0){N.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:u0}),L1(N.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:u0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:N.providerId,modelId:N.modelId}})}}};let V0=this.createAgentInstance(m);if(m.onEvent)V0.subscribeEvents(m.onEvent);y.registerLeadAgent?.(V0);let B$=V$({agentId:V0.getAgentId(),conversationId:V0.getConversationId(),teamId:y.teamRuntime?.getTeamId(),teamName:y.teamRuntime?.getTeamName(),teamRole:y.teamRuntime?"lead":void 0});if(GX(N,Z,Q.length>0,B,B$),B$)i$(N.telemetry,{ulid:Z,modelId:N.modelId,provider:N.providerId,...B$});if(y.teamRuntime)B6(N.telemetry,{ulid:Z,teamId:y.teamRuntime.getTeamId(),teamName:y.teamRuntime.getTeamName(),leadAgentId:V0.getAgentId(),restoredFromPersistence:y.teamRestoredFromPersistence===!0});let v={sessionId:Z,config:N,sessionMetadata:W.sessionMetadata,...G?{artifacts:G}:{},source:f,startedAt:G?.manifest.started_at??J,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??J,pendingPrompt:K.prompt,runtime:y,agent:V0,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:j,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:z.pluginSandboxShutdown,submitAndExitObserved:!1};if(this.sessions.set(Z,v),this.emitStatus(Z,"running"),j.length>0&&!G){if(await this.ensureSessionPersisted(v),await this.invoke("persistSessionMessages",v.sessionId,j,v.config.systemPrompt),!W.prompt?.trim())await this.updateStatus(v,"completed",0)}let s0;try{if(W.prompt?.trim())if(s0=await this.executeTurn(v,{prompt:W.prompt,userImages:W.userImages,userFiles:W.userFiles}),!v.interactive)await this.finalizeSingleRun(v,s0.finishReason);else await this.completeInteractiveTurn(v,s0.finishReason)}catch(h){if(v.interactive&&v.aborting)s0=await this.completeAbortedInteractiveTurn(v);else throw L1(v.config.telemetry,{component:"core",operation:"session.start",error:h,severity:"error",handled:!1,context:{sessionId:v.sessionId,providerId:v.config.providerId,modelId:v.config.modelId}}),await this.failSession(v),h}return{sessionId:Z,manifest:K,manifestPath:A,messagesPath:V,result:s0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(f)=>this.getSession(f),readMessages:(f)=>this.readSessionMessages(f),buildStartInput:(f,J)=>{let Q=f.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:f.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...Q?{sessionMetadata:Q}:{},initialMessages:f.initialMessages}},startSession:(f)=>this.startSession(f),getStartedSessionId:(f)=>f.sessionId,readRestoredSession:(f)=>this.getSession(f)})}async runTurn($){let f=this.getSessionOrThrow($.sessionId),J=f.agent.canStartRun(),Q=$.delivery??(f.interactive&&!J?"queue":void 0);if(f.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let Z=await this.executeTurn(f,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!f.interactive)await this.finalizeSingleRun(f,Z.finishReason);else await this.completeInteractiveTurn(f,Z.finishReason);if(Z.finishReason==="error"||Z.finishReason==="aborted")return Z;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),Z}catch(Z){if(f.interactive&&f.aborting)return await this.completeAbortedInteractiveTurn(f);throw L1(f.config.telemetry,{component:"core",operation:"session.submit",error:Z,severity:"error",handled:!1,context:{sessionId:f.sessionId,providerId:f.config.providerId,modelId:f.config.modelId}}),await this.failSession(f),Z}}async getAccumulatedUsage($){let f=y5(this.usageBySession.get($)),J=y5(this.aggregateUsageBySession.get($));return f||J?{usage:f,aggregateUsage:J}:void 0}async abort($,f){let J=this.sessions.get($);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort(f)}async stopSession($){let f=this.sessions.get($);if(!f)return;if(f.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),f.interactive&&f.status!=="running"){await this.releaseSessionRuntime(f,"session_stop");return}f.aborting=!0,f.agent.abort(Error("session_stop")),await this.shutdownSession(f,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let f=[...this.sessions.values()];if(f.length===0)return;await Promise.allSettled(f.map((J)=>J.interactive&&J.status!=="running"?this.releaseSessionRuntime(J,$):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let f=this.sessions.get($);if(f)return c9(f);let J=$.trim();if(!J)return;let Q=await this.getRow(J);if(Q)return tf(Q);let Z=await this.readManifest(J);return Z?M5(Z):void 0}async listSessions($=200){let J=(await this.listRows($)).map(tf),Q=new Set(J.map((Z)=>Z.sessionId));for(let Z of this.sessions.values()){if(Q.has(Z.sessionId))continue;J.unshift(c9(Z))}return J.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let f=await this.invoke("deleteSession",$);if(f.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return f.deleted}async updateSession($,f){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:f.prompt,metadata:f.metadata,title:f.title}))?.updated===!0}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.getRow(f);if(J?.messagesPath)return S$(J.messagesPath);let Q=await this.readManifest(f);return S$(Q?.messages_path)}async dispatchHookEvent($){await qW($,{queueSpawnRequest:(f)=>this.invokeOptional("queueSpawnRequest",f),upsertSubagentSessionFromHook:(f)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",f),appendSubagentHookAudit:(f,J)=>this.invokeOptional("appendSubagentHookAudit",f,J),applySubagentStatus:(f,J)=>this.invokeOptional("applySubagentStatus",f,J)})}subscribe($,f){return this.events.subscribe($,f)}async updateSessionModel($,f){let J=this.getSessionOrThrow($);J.config.modelId=f,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:f}),J.agent.updateConnection({modelId:f})}handlePluginEvent($,f,J){return this.eventBridge.handlePluginEvent($,f,J)}async executeTurn($,f){let J=await this.prepareTurnInput($,f),Q=J.prompt.trim();if(!Q)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let Z=await this.executeAgentTurn($,Q,J.userImages,J.userFiles);while(s5($,Z.finishReason)){let W=await o5($);if(W.length===0)break;let j=e5($,W);Z=await this.executeAgentTurn($,j)}return Z}async completeInteractiveTurn($,f){if(H2($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.updateStatus($,J?"cancelled":Q?"failed":"completed",Q?1:0),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f,ts:Date.now()}}),$.aborting=!1}async completeAbortedInteractiveTurn($){let f=new Date,J=$.agent.getMessages(),Q=K0();return $.persistedMessages=J,$.started=$.started||J.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:f,endedAt:f,durationMs:0}}async executeAgentTurn($,f,J,Q){let Z=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??K0(),X=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=X,$.turnPrimaryUsage=K0(),$.turnUsageByAgent=new Map,W6($.config.telemetry,$.sessionId,$.config.mode),Hf($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let H=Z?()=>$.agent.continue(f,J,Q):()=>$.agent.run(f,J,Q),Y=await this.runWithAuthRetry($,H,W);$.started=!0;let V=n8(Y.messages,Y,W);$.persistedMessages=V;let A=A4($.turnUsageByAgent?.values()??[]),B=H0(j,Y.usage),K=H0(H0(K0(),Y.usage),A),G=H0(X,K);return this.usageBySession.set($.sessionId,B),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:B.totalCost,aggregatedAgentsCost:G.totalCost,usage:B,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,V,$.config.systemPrompt),this.observeTaskCompletionTool($,Y),Y}catch(H){throw L1($.config.telemetry,{component:"core",operation:"session.turn",error:H,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),H}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,f){if($.submitAndExitObserved)return;if(!f.toolCalls.some((Q)=>Q.name===Z0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,q2($.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($,f){let J=g$($.config),Q=$_(f.prompt).trim();if(!Q)return{prompt:"",userImages:f.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles)};let Z=await B8(Q,J);PX($.config.telemetry,Z);let W=Y2(Z.prompt,f.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles),X=this.resolveAbsoluteFilePaths(J,Z.matchedFiles),H=Array.from(new Set([...j,...X]));return{prompt:W,userImages:f.userImages,userFiles:H.length>0?H:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let f=g$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:f,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 persistSessionMetadata($,f){let J=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??J?.artifacts?.manifest,Z=f(Q?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:Z}))?.updated===!1)return;J.sessionMetadata=Z,J.artifacts.manifest.metadata=Z}async finalizeSingleRun($,f){if(H2($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.shutdownSession($,{status:J?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:f})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,f){if(f.status==="completed"&&!$.submitAndExitObserved)q2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});H4($);let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),L1($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,status:f.status,shutdownReason:f.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,f.status,f.exitCode)}catch(Z){Q("update_status",Z)}try{await $.agent.shutdown(f.shutdownReason)}catch(Z){Q("agent_shutdown",Z)}}try{await Promise.resolve($.runtime.shutdown(f.shutdownReason))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f.endReason,ts:Date.now()}}),J.length>0&&f.status==="failed")throw J[0]}async releaseSessionRuntime($,f){let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),L1($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,reason:f,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(f)}catch(Z){Q("agent_shutdown",Z)}try{await Promise.resolve($.runtime.shutdown(f))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),J.length>0)throw J[0]}async updateStatus($,f,J){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,f,J);if(!Q.updated)return;let Z=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(Z.status=f,f==="running")delete Z.ended_at,Z.exit_code=null;else Z.ended_at=Q.endedAt??n(),Z.exit_code=typeof J==="number"?J:null;$.artifacts.manifest=Z,$.status=f,$.updatedAt=Q.endedAt??n(),$.endedAt=f==="running"?null:Z.ended_at,$.exitCode=Z.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,Z),this.emitStatus($.sessionId,f)}async runWithAuthRetry($,f,J){try{return await f()}catch(Q){if(!ez(Q,$.config.providerId))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(J),f()}}async syncOAuthCredentials($,f){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:f?.forceRefresh})}catch(Q){if(Q instanceof q4)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!J?.apiKey||$.config.apiKey===J.apiKey)return;$.config.apiKey=J.apiKey,$.agent.updateConnection({apiKey:J.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow($){let f=this.sessions.get($);if(!f){let J=Error(`session not found: ${$}`);throw L1(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:J,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),J}return f}resolveAbsoluteFilePaths($,f){if(!f||f.length===0)return[];let J=f.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>sz(Q)?Q:p9($,Q));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity($){return V$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let f=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),J=H0($.initialUsage,f);return this.withPersistedAggregateUsageFloor(J,$.manifest)}async summarizePersistedTeammateUsage($,f,J){let Q=p9(f),Z=`${J}.messages.json`,W;try{W=az($)}catch{return K0()}let j=K0();for(let X of W){if(!X.endsWith(".messages.json"))continue;if(X===Z)continue;let H=p9($,X);if(H===Q)continue;let Y=await S$(H);if(Y.length===0)continue;j=H0(j,B4(Y))}return j}withPersistedAggregateUsageFloor($,f){let J=J_(f.metadata?.aggregateUsage);if(J)return Q_($,J);let Q=f.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,f){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:f}})}async emitSessionSnapshot($){let f=await this.getSession($);if(!f)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:E$({session:f,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($)),sX))}async getRow($){let f=$.trim();if(!f)return;return(await this.listRows(sX)).find((Q)=>Q.sessionId===f)}async readManifest($){let f=$.trim();if(!f)return;return await this.invokeOptionalValue("readSessionManifest",f)}invoke($,...f){return iX(this.sessionService,$,...f)}invokeOptional($,...f){return nX(this.sessionService,$,...f)}invokeOptionalValue($,...f){return aX(this.sessionService,$,...f)}}function Z_($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let f=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(f==="local"||f==="hub"||f==="remote")return f;return"auto"}var U2,L2;function W_($,f){if($!=="auto"&&$!=="hub")return;if(f.hub?.endpoint?.trim())return;rW(f.hub?.workspaceRoot?.trim()||f.hub?.cwd?.trim()||process.cwd())}async function j_($){await $.reconcileDeadSessions?.().catch(()=>{})}function $H($){try{let f=new k$;return f.init(),new I$(f,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(f){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),eX($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:f,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new Q9(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function oX($,f,J){return new u$({sessionService:J??$.sessionService??$H($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:f,fetch:$.fetch})}async function X_($){if(U2)return U2;if(L2)return await L2;return L2=(async()=>{return U2=$H($),await j_(U2),U2})().finally(()=>{L2=void 0}),await L2}async function S4($){let f=P1($.distinctId);$.telemetry?.setDistinctId(f);let J=Z_($);if(W_(J,$),J==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new $4({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(J==="hub"){let Q=$.hub?.endpoint?.trim(),Z=Q||await J2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!Z)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:Z,explicitEndpoint:Q||void 0}),new G1({url:Z,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(J==="auto"){let Q=await g5({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let Z=new G1({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await Z.connect(),Z}catch(W){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:W}),eX($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:W,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),oX($,f)}return oX($,f)}class r9{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,f,J,Q,Z,W,j,X,H){this.clientName=f,this.runtimeAddress=J,this.host=$,this.prepare=Q,this.capabilities=Z,this.logger=W,this.telemetry=j,this.distinctId=X,this.settings=t3($),this.pendingPrompts=s3($),this.automation=new c6(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new rf({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:BQ(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:KQ({host:$,getExtensionContext:()=>p2({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((Y)=>{if(Y.type!=="ended")return;this.disposeSessionBootstrap(Y.payload.sessionId)})}static async create($={}){let f=P0($.capabilities),J=await S4({...$,capabilities:f}),Q=AQ($.automation),Z=new r9(J,$.clientName,J.runtimeAddress,$.prepare,f,$.logger,$.telemetry,$.distinctId,Q?{...Q,logger:$.logger}:void 0);if(Q&&Q.autoStart!==!1)await Z.automation.start();return Z}async disposeSessionBootstrap($){let f=this.activeSessionBootstraps.get($);if(!f)return;this.activeSessionBootstraps.delete($),await Promise.resolve(f.dispose?.())}async start($){let f=o3($),J=await this.prepare?.(f);try{let Q=J?await J.applyToStartSessionInput(f):f,Z=await this.host.startSession(tJ(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(W)=>p2({automationService:this.automationService,automation:this.automation,context:W,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(Z.sessionId))this.activeSessionBootstraps.set(Z.sessionId,J);else await Promise.resolve(J.dispose?.());return e3({input:Q,sessionId:Z.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),Z}catch(Q){throw await Promise.resolve(J?.dispose?.()),Q}}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 f=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(f.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await q5(this.host,$);list=async($=200,f={})=>await this.listHistory({...f,limit:$});delete=async($)=>{let f=await this.host.deleteSession($);if(f)await this.disposeSessionBootstrap($);return f};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let f=$.start?tJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>p2({automationService:this.automationService,automation:this.automation,context:J,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:f})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,f){return this.host.subscribe($,f)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}import{HookEventNameSchema as JH,HookEventPayloadSchema as QH,parseHookEventPayload as h4,resolveHookSessionContext as G_}from"@cline/shared";import{z as O1}from"zod";import{spawn as H_}from"node:child_process";import{augmentNodeCommandForDebug as Y_,withResolvedClineBuildEnv as V_}from"@cline/shared";function A_($){let f=$.trim();if(!f)return{};let Q=f.split(`
|
|
696
|
+
`).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse subprocess stdout JSON"}}}function B_($,f){let J=$ instanceof Error?$:Error(String($)),Q=J,Z=f.join(" ");if(Q.code==="EACCES")return Error(`Failed to execute hook command "${Z}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${Z}": ${J.message}`)}async function K_($,f){let J=$.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,Z)=>{let W=(j)=>{J.off("error",W);let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j)};J.once("error",W),J.end(f,(j)=>{if(J.off("error",W),j){let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j);return}Q()})})}async function C4($,f){let J=Y_(f.command,{env:f.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!f.detached,Z=H_(J[0],J.slice(1),{cwd:f.cwd,env:V_(f.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q}),W=new Promise((B)=>{Z.once("spawn",()=>{try{f.onSpawn?.({command:J,pid:Z.pid??void 0,detached:Q})}catch{}B()})}),j=new Promise((B,K)=>{Z.once("error",(G)=>{K(B_(G,J))})});if(await K_(Z,JSON.stringify($)),Q){await Promise.race([W,j]),Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let X="",H="",Y=!1,V;Z.stdout.on("data",(B)=>{X+=B.toString()}),Z.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Z.kill("SIGKILL")},f.timeoutMs);Z.once("close",(K)=>{if(V)clearTimeout(V);let{parsedJson:G,parseError:R}=A_(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([A,j])}var P_=O1.object({contextModification:O1.string().optional(),cancel:O1.boolean().optional(),review:O1.boolean().optional(),errorMessage:O1.string().optional(),context:O1.string().optional(),overrideInput:O1.unknown().optional()}).passthrough();var F_=["agent","hook"];async function E4($,f={}){let J=f.command??F_;return await C4($,{command:J,cwd:f.cwd,env:f.env,detached:f.detached,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn})}function ZH($){return $ instanceof Error?$:Error(String($))}function D_($){if(!$||typeof $!=="object")return;let f=P_.safeParse($);if(!f.success)return;let J=f.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let Z=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"&&J.errorMessage.length>0?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Z,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function fH($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))if(typeof Q==="string")f[J]=Q;else f[J]=JSON.stringify(Q);return f}function A$($,f,J){let Q=J.env??process.env,Z=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",W=J.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:f.conversationId,sessionContext:G_(J.sessionContext,{hookName:$,conversationId:f.conversationId,agentId:f.agentId,parentAgentId:f.parentAgentId}),workspaceRoots:W?[W]:[],workspaceInfo:J.workspaceInfo,userId:Z,agent_id:f.agentId,parent_agent_id:f.parentAgentId}}function R_($){return{name:$.name,message:$.message,stack:$.stack}}function U_($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function L_($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function O_($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function z_($){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 __($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}async function z1($,f){try{let J=await E4($,{command:f.command,cwd:f.cwd,env:f.env,detached:!0,onSpawn:f.onSpawn});f.onDispatch?.({payload:$,result:J,detached:!0})}catch(J){f.onDispatchError?.(ZH(J),$)}}function WH($={}){return{hooks:{beforeRun:async(X)=>{let H=L_(X);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let V={...A$("agent_resume",H,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await z1(V,$)}else{let V={...A$("agent_start",H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await z1(V,$)}return},beforeTool:async(X)=>{let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...A$("tool_call",H,$),hookName:"tool_call",iteration:X.snapshot.iteration,tool_call:{id:X.toolCall.toolCallId,name:X.toolCall.toolName,input:X.input},preToolUse:{toolName:X.toolCall.toolName,parameters:fH(X.input)}};try{let V=await E4(Y,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:Y,result:V,detached:!1}),V?.timedOut)throw Error("tool_call hook command timed out");if(V?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${V.parseError}`);return __(D_(V?.parsedJson))}catch(V){$.onDispatchError?.(ZH(V),Y);return}},afterTool:async(X)=>{let H=z_(X),Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},V={...A$("tool_result",Y,$),hookName:"tool_result",iteration:X.snapshot.iteration,tool_result:H,postToolUse:{toolName:H.name,parameters:fH(H.input),result:typeof H.output==="string"?H.output:JSON.stringify(H.output),success:!H.error,executionTimeMs:H.durationMs}};await z1(V,$);return},afterRun:async({snapshot:X,result:H})=>{let Y={agentId:X.agentId,conversationId:X.conversationId??X.runId??X.agentId,parentAgentId:X.parentAgentId??null};if(H.status==="completed"){let B={...A$("agent_end",Y,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}};await z1(B,$);return}let V=H.status==="aborted"||U_(H.error?.message)?"agent_abort":"agent_error",A=V==="agent_error"?{...A$(V,Y,$),hookName:V,iteration:H.iterations,error:R_(H.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...A$(V,Y,$),hookName:V,reason:H.error?.message,taskCancel:{taskMetadata:{}}};await z1(A,$)},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...A$("prompt_submit",H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:O_(X.message.content),attachments:[]}};await z1(Y,$)}},shutdown:async({agentId:X,conversationId:H,parentAgentId:Y,reason:V})=>{let A={...A$("session_shutdown",{agentId:X,conversationId:H,parentAgentId:Y},$),hookName:"session_shutdown",reason:V};await z1(A,$)}}}import{createSessionId as y_}from"@cline/shared";function k0($,f){return{version:$.version,requestId:$.requestId,ok:!0,payload:f}}function jH($,f,J){return{version:$.version,requestId:$.requestId??y_("hubreq_"),ok:!1,error:{code:f,message:J}}}class b4{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return k0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return k0($,{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 k0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return k0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return k0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return k0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return k0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return k0($,{execution:await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return k0($,{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 k0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return k0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return k0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return jH($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(f){return jH($,"schedule_command_failed",f instanceof Error?f.message:String(f))}}toCreateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:f}}toUpdateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:f}}}function I4($){return $?new Date($).getTime():void 0}function T_($){let f=$.metadata?{...$.metadata}:void 0;if(f)delete f.__hubScheduleCreatedBy,delete f.__hubScheduleCwd,delete f.__hubRuntimeOptions;return f}function k4($){let f=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof f?.__hubScheduleCwd==="string"?f.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:I4($.nextRunAt),lastRunAt:I4($.lastRunAt),createdBy:typeof f?.__hubScheduleCreatedBy==="string"?f.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:f?.__hubRuntimeOptions&&typeof f.__hubRuntimeOptions==="object"&&!Array.isArray(f.__hubRuntimeOptions)?f.__hubRuntimeOptions:void 0,metadata:T_($)}}function N_($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function XH($,f){return{executionId:$.runId,scheduleId:f,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:I4($.startedAt),endedAt:I4($.completedAt),status:N_($.status),errorMessage:$.error}}class x4{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new pf({dbPath:$.dbPath}),this.materializer=new vf({store:this.store}),this.runner=new cf({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,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(X5($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return k4(this.store.createHubSchedule($))}getSchedule($){let f=this.store.getHubSchedule($);return f?k4(f):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((f)=>k4(f))}updateSchedule($,f){if(f.cronPattern!==void 0)X5(f.cronPattern);let J=this.store.getHubSchedule($);if(!J)return;let Q=f.workspaceRoot!==void 0?f.workspaceRoot.trim():J.workspaceRoot;if((f.enabled??J.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let W=this.store.updateHubSchedule($,{...f,scheduleId:$});return W?k4(W):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;await this.runner.tick();let J=this.store.getRun(f.runId)??f;return XH(J,$)}listScheduleExecutions($){let f=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,J={specId:f?.specId,limit:$.limit};return this.store.listRuns(J).map((Z)=>{let W=f??this.store.getSpec(Z.specId);if(!W||W.source!=="hub-schedule")return;return XH(Z,W.externalId)}).filter((Z)=>{if(!Z)return!1;return!$.status||Z.status===$.status})}getScheduleStats($){let f=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(f.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,Q=0,Z=0,W;for(let j of f){if(j.status==="success"||j.status==="completed")J+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)Z+=j.endedAt-j.startedAt,Q+=1}return{totalRuns:f.length,successRate:J/f.length,avgDurationSeconds:Q>0?Z/Q/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let f=this.store.getSpec($.specId);if(!f||f.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:f.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:f.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+f.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let f={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(f).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,Q)=>String(J.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:J,nextRunAt:Q})=>({scheduleId:J.externalId,name:J.title,nextRunAt:Q}))}}c4();function a_($,f){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(J?`Failed to connect to hub at ${f} (${J} event before socket open).`:`Failed to connect to hub at ${f}.`)}var t_="cline-hub-auth.";function s_($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function o_($,f){let J=new URL($),Q=new URL(f);return J.search="",J.hash="",Q.search="",Q.hash="",J.toString()===Q.toString()}async function e_($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=D0(),Q=await B0(J.discoveryPath);if(Q?.url&&o_($.toString(),Q.url))return Q.authToken;return}async function $y($={}){let f=C$($);if(!s_($)){let J=D0(),Q=await B0(J.discoveryPath);if(Q?.url)return Q.url}return j$(f.host,f.port,f.pathname)}async function VH($){return await new Promise((f,J)=>{(async()=>{let Q=new URL($),Z=await e_(Q);Q.hash="";let W=new WebSocket(Q.toString(),Z?[`${t_}${Z}`]:void 0),j=new Map,X=0;W.addEventListener("open",()=>{f({send(H){let Y=H.requestId??`hub-client-${++X}`;return new Promise((V,A)=>{j.set(Y,{resolve:V,reject:A});let B={kind:"command",envelope:{...H,requestId:Y}};W.send(JSON.stringify(B))})},close(){W.close()}})}),W.addEventListener("message",(H)=>{let Y=JSON.parse(String(H.data));if(Y.kind==="reply"&&Y.envelope.requestId){let V=j.get(Y.envelope.requestId);if(V)j.delete(Y.envelope.requestId),V.resolve(Y.envelope)}}),W.addEventListener("close",()=>{for(let H of j.values())H.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(H)=>{J(a_(H,$))})})().catch(J)})}async function Rm($){try{return(await VH($)).close(),!0}catch{return!1}}async function Um($,f){let J=await $y($),Q=await VH(J);try{return await Q.send({version:f.version??"v1",clientId:f.clientId??"hub-client",...f})}finally{Q.close()}}function c0($){return $?JSON.parse(JSON.stringify($)):{}}function u4($){let f=$?.session&&typeof $.session==="object"?$.session:void 0;if(!f)return;let J=f.metadata&&typeof f.metadata==="object"?c0(f.metadata):void 0;return{sessionId:typeof f.sessionId==="string"?f.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function AH($,f){return $.error?.message??`hub command failed: ${f}`}function fy($){let f=c0($);if(typeof f.error==="string"&&f.error.trim())return{...f,error:f.error.trim()};let J=f.result&&typeof f.result==="object"?f.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...f,error:J.text.trim()};let Q=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...f,error:Q.message.trim()};return f}function Jy($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))throw Error("hub checkpoint restore returned no checkpoint");let J=f;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function Qy($){let f=$.sessionId?.trim();if(!f)return;switch($.event){case"iteration.started":return{sessionId:f,eventType:"runtime.chat.iteration_start",payload:c0($.payload)};case"iteration.finished":return{sessionId:f,eventType:"runtime.chat.iteration_end",payload:c0($.payload)};case"assistant.delta":return{sessionId:f,eventType:"runtime.chat.text_delta",payload:c0($.payload)};case"usage.updated":return{sessionId:f,eventType:"runtime.chat.usage",payload:c0($.payload)};case"tool.started":return{sessionId:f,eventType:"runtime.chat.tool_call_start",payload:c0($.payload)};case"tool.finished":return{sessionId:f,eventType:"runtime.chat.tool_call_end",payload:c0($.payload)};case"approval.requested":return{sessionId:f,eventType:"approval.requested",payload:c0($.payload)};case"run.aborted":return{sessionId:f,eventType:"runtime.chat.aborted",payload:c0($.payload)};case"run.failed":return{sessionId:f,eventType:"runtime.chat.failed",payload:fy($.payload)};case"run.completed":return{sessionId:f,eventType:"runtime.chat.completed",payload:c0($.payload)};default:return}}class Zy{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new X$({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 f=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}),J=u4(f.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession($,f,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:f.prompt,mode:f.config.mode,attachments:f.attachments,delivery:f.delivery,timeoutSeconds:f.config.timeoutSeconds},$,J)).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 f=await this.client.command("session.get",void 0,$);return u4(f.payload)}async readMessages($){let f=$.trim();if(!f)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Error(AH(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,Z=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},f);if(!Z.ok)throw Error(AH(Z,"session.restore"));let W=u4(Z.payload);if(J&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(Z.payload?.messages)?Z.payload.messages:void 0,X=Jy(Z.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let f=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(f.payload?.sessions)?f.payload?.sessions:[]).map((Q)=>u4({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,f=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:f})).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($,f){let J=new Set(($.sessionIds??[]).map((Z)=>Z.trim()).filter(Boolean)),Q=this.client.subscribe((Z)=>{let W=Qy(Z);if(!W)return;if(J.size>0&&!J.has(W.sessionId))return;f.onEvent?.(W)});return this.ensureMetadataApplied().catch((Z)=>{f.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}streamTeamProgress($,f){let J=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;f.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{f.onError?.(Q instanceof Error?Q:Error(String(Q)))}),J}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.list");return Array.isArray(f.payload?.schedules)?f.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...f})).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($,f){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:$,limit:f});return Array.isArray(J.payload?.executions)?J.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 f=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(f.payload?.upcoming)?f.payload?.upcoming:[]}}class Wy{client;constructor($){this.client=new X$({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 f=await this.client.command("session.list",{limit:$});return Array.isArray(f.payload?.sessions)?f.payload.sessions:[]}subscribeUI($){return this.client.subscribe((f)=>{switch(f.event){case"ui.notify":$.onNotify?.(f.payload);break;case"ui.show_window":$.onShowWindow?.(f.payload);break;case"hub.client.registered":$.onClientRegistered?.(f.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(f.payload??{});break;case"session.created":$.onSessionCreated?.(f.payload??{});break;case"session.updated":$.onSessionUpdated?.(f.payload??{});break;case"session.detached":$.onSessionDetached?.(f.payload??{});break}})}}import{normalizeProviderId as jy}from"@cline/llms";function Xy($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function Hy($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Sm($={}){let f=new u$({sessionService:new I$(new k$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||G0.CLI,interactive:!1,config:{providerId:jy(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:Hy(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:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content)});if(!Z)throw Error("local hub schedule runtime returned no turn result");return{result:Xy(Z)}},async abortSession(J){return await f.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}function Yy($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((J)=>{if(J&&typeof J==="object"&&"type"in J&&J.type==="text"&&"text"in J&&typeof J.text==="string")return J.text.trim();return""}).filter(Boolean).join(`
|
|
697
|
+
`).trim()||void 0}var BH=120,t9="...";function s9($){let f=$.trim();if(!f)return"";if(Buffer.byteLength(f,"utf8")<=BH)return f;let J=BH-Buffer.byteLength(t9,"utf8");if(J<=0)return t9;let Q="";for(let Z of f){if(Buffer.byteLength(Q+Z,"utf8")>J)break;Q+=Z}return`${Q}${t9}`}async function KH($){let f=$?.sessionId?.trim()||"unknown",J=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,Z=[...await S$(J)].reverse().find((H)=>H.role==="assistant"),W=Z?Yy(Z.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",X=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${f})`,body:s9(W&&W.length>0?W:X.length>0?X:j),severity:"info"}}import{captureSdkError as r4,createSessionId as gy}from"@cline/shared";import{createSessionId as Ky}from"@cline/shared";import{createSessionId as By}from"@cline/shared";function Vy($){switch($){case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function Ay($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())f.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())f.parentAgentId=$.parentAgentId;if($.agentId?.trim())f.agentId=$.agentId;if($.conversationId?.trim())f.conversationId=$.conversationId;if($.messagesPath?.trim())f.messagesPath=$.messagesPath;if($.prompt?.trim())f.prompt=$.prompt;if($.provider?.trim())f.provider=$.provider;if($.model?.trim())f.model=$.model;if($.source?.trim())f.source=$.source;if(typeof $.pid==="number")f.pid=$.pid;return Object.keys(f).length>0?f:void 0}function d4($,f,J,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:f?.createdByClientId??"hub",status:Vy($.status),participants:f?[...f.participants.values()]:[],metadata:Ay($),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,...J?{usage:{...J}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function x($,f){return{version:$.version,requestId:$.requestId,ok:!0,...f!==void 0?{payload:f}:{}}}function b($,f,J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:f,message:J}}}function l4($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function _0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function y1($,f,J){return{version:"v1",event:$,eventId:By("hevt_"),sessionId:J,timestamp:Date.now(),payload:f}}async function I0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let Q=await $.sessionHost.getAccumulatedUsage?.(f);return d4(J,$.sessionState.get(f),Q?.usage,Q?.aggregateUsage)}async function x0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let[Q,Z]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(f):[],$.sessionHost.getAccumulatedUsage?.(f)]);return E$({session:J,messages:Q,usage:Z?.usage,aggregateUsage:Z?.aggregateUsage})}function p4($,f,J,Q,Z={}){let W=$.sessionState.get(f);if(W){if(Z.interactive!==void 0)W.interactive=Z.interactive;if(!W.participants.has(J))W.participants.set(J,{clientId:J,attachedAt:Date.now(),role:Q});return W}let j={createdByClientId:J,interactive:Z.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(f,j),j}async function o9($,f){let J=Ky("approval_"),Q=f.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((W)=>{$.pendingApprovals.set(J,{sessionId:Q,resolve:W}),$.publish($.buildEvent("approval.requested",{approvalId:J,sessionId:f.sessionId,agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,toolCallId:f.toolCallId,toolName:f.toolName,inputJson:JSON.stringify(f.input??null),policy:f.policy},Q))})}function e9($,f,J){let Q=$.pendingApprovals.get(f);if(!Q)return;return $.pendingApprovals.delete(f),Q.resolve(J),{sessionId:Q.sessionId}}function $7($,f,J){let Q=0;for(let[Z,W]of[...$.pendingApprovals.entries()]){if(!f({approvalId:Z,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(Z),W.resolve({approved:!1,reason:J}),$.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:!1,cancelled:!0,reason:J},W.sessionId)),Q+=1}return Q}async function GH($,f){let J=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"";if(!$.pendingApprovals.get(J))return b(f,"approval_not_found",`Unknown approval: ${J}`);let Z=typeof f.payload?.reason==="string"?f.payload.reason:f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)&&typeof f.payload.payload.reason==="string"?f.payload.payload.reason:void 0,W=f.payload?.approved===!0,j=e9($,J,{approved:W,reason:Z});if(!j)return b(f,"approval_not_found",`Unknown approval: ${J}`);return $.publish($.buildEvent("approval.resolved",{approvalId:J,approved:W,reason:Z},j.sessionId)),x(f,{approvalId:J,approved:W})}import{createSessionId as Fy}from"@cline/shared";function Gy($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var PH={debug:10,info:20,warn:30,error:40,silent:50};function Py(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function I($,f,J={}){if(PH[$]<PH[Py()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:f,...Object.fromEntries(Object.entries(J).map(([Z,W])=>[Z,Gy(W)]).filter(([,Z])=>Z!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function f7($,f){let J=f instanceof Error?f.stack||f.message:String(f);I("error",$,{error:J})}async function FH($,f,J,Q,Z,W){let j=Fy("capreq_"),X=performance.now();return I("info","capability.request.start",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z}),await new Promise((H,Y)=>{$.pendingCapabilityRequests.set(j,{sessionId:f,targetClientId:Z,capabilityName:J,onProgress:W,resolve:(V)=>{if(I(V.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z,ok:V.ok,error:V.error,durationMs:Math.round(performance.now()-X)}),!V.ok){Y(Error(V.error||`Capability ${J} was rejected by ${Z}.`));return}H(V.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:Z,capabilityName:J,payload:Q},f)),I("info","capability.request.published",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z})})}function DH($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return b(f,"capability_not_found",`Unknown capability request: ${J}`);if((f.clientId?.trim()||"")!==Q.targetClientId)return b(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return b(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{};return Q.onProgress?.(W),x(f,{requestId:J})}function d$($,f,J){let Q=0;for(let[Z,W]of[...$.pendingCapabilityRequests.entries()]){if(!f({requestId:Z,...W}))continue;$.pendingCapabilityRequests.delete(Z),I("warn","capability.request.cancelled",{requestId:Z,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:J}),W.resolve({ok:!1,error:J}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:J},W.sessionId)),Q+=1}return Q}async function RH($,f){let J=typeof f.payload?.sessionId==="string"?f.payload.sessionId.trim():f.sessionId?.trim()||"",Q=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName.trim():"",Z=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId.trim():"";if(!J||!Q||!Z)return b(f,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=await $.requestCapability(J,Q,W,Z);return x(f,j)}catch(W){return b(f,"capability_request_failed",W instanceof Error?W.message:String(W))}}function UH($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return b(f,"capability_not_found",`Unknown capability request: ${J}`);let Z=f.clientId?.trim()||"";if(Z!==Q.targetClientId)return b(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return b(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(J);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:void 0,j=typeof f.payload?.error==="string"?f.payload.error:void 0,X=f.payload?.ok===!0;return I(X?"info":"warn","capability.respond",{requestId:J,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,error:j}),Q.resolve({ok:X,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,payload:W,error:j},Q.sessionId)),x(f,{requestId:J,ok:X})}import{createSessionId as Dy}from"@cline/shared";function LH($,f){let J=f.payload,Q=J?.clientId?.trim()||f.clientId?.trim()||Dy("client_");return $.clients.set(Q,{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,actorKind:J?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:J?.transport??"native",capabilities:J?.capabilities??[],metadata:J?.metadata,workspaceContext:J?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),x(f,{clientId:Q})}function OH($,f){let J=f.clientId?.trim(),Q=J?$.clients.get(J):void 0;if(!J||!Q)return b(f,"client_not_found","Client is not registered with this hub.");let Z=l4(f.payload?.metadata);if(Q.lastSeenAt=Date.now(),Z)Q.metadata=JSON.parse(JSON.stringify(Z));return x(f)}function zH($,f,J){let Q=f.clientId?.trim();if(Q)$.clients.delete(Q),J(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return x(f)}function _H($,f){return x(f,{clients:[...$.clients.values()]})}var Ry=30000;function Uy($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Ly($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Oy($){return $?$:void 0}function zy($){let f=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(f&&Number.isFinite(f)&&f>0)return Math.floor(f);let J=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function _y($,f,J,Q){let Z=performance.now(),W=!1,j={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:J.sessionId,timeoutMs:Q},X=setInterval(()=>{if(W)return;let V=Math.round(performance.now()-Z);I("warn","run.heartbeat",{...j,elapsedMs:V}),$.publish($.buildEvent("run.heartbeat",{requestId:f.requestId,elapsedMs:V,...Q?{timeoutMs:Q}:{}},J.sessionId))},Ry),H=$.sessionHost.runTurn(J);H.then((V)=>{if(!W)return;I("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-Z),finishReason:V?.finishReason})},(V)=>{if(!W)return;I("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-Z),error:V})});let Y;try{if(!Q)return await H;return await Promise.race([H,new Promise((V,A)=>{Y=setTimeout(()=>{let B=`Hub run ${f.command} timed out after ${Q}ms.`;W=!0,clearInterval(X),A(Error(B)),I("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-Z)}),$7($,(K)=>K.sessionId===J.sessionId,B),d$($,(K)=>K.sessionId===J.sessionId,B),$.sessionHost.abort(J.sessionId,B).catch((K)=>{I("error","run.timeout_abort_failed",{...j,error:K})})},Q)})])}finally{if(W=!0,clearInterval(X),Y)clearTimeout(Y)}}async function yH($,f){let J=_0(f),Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!Z.trim())return b(f,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,J));let W=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,j=Array.isArray(W?.userFiles)?W.userFiles.filter((V)=>typeof V==="string"):void 0,X=zy(Q);$.suppressNextTerminalEventBySession.set(J,"run.start.reply");let H;try{H=await _y($,f,{sessionId:J,prompt:Z,mode:Oy(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(W?.userImages)?W.userImages:void 0,userFiles:j,timeoutMs:X},X)}catch(V){if($.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J);throw $.publish($.buildEvent("run.failed",{reason:"error",error:V instanceof Error?V.message:String(V)},J)),V}if(H){let V=await x0($,J),A=Ly(H);if($.publish($.buildEvent(Uy(H.finishReason),{reason:H.finishReason,...A?{error:A}:{},result:H,...V?{snapshot:V}:{}},J)),$.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J)}else $.suppressNextTerminalEventBySession.delete(J);let Y=await x0($,J);return x(f,H||Y?{...H?{result:H}:{},...Y?{snapshot:Y}:{}}:void 0)}async function TH($,f){let J=_0(f),Q=typeof f.payload?.reason==="string"?f.payload.reason:"Run was aborted before pending approval or capability request was resolved.";return $7($,(Z)=>Z.sessionId===J,Q),await $.sessionHost.abort(J,f.payload?.reason),d$($,(Z)=>Z.sessionId===J,Q),$.publish($.buildEvent("run.aborted",{reason:Q},J)),x(f,{applied:!0})}async function NH($,f){let J=h4(f.payload?.payload);if(!J)return b(f,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(J),x(f,{applied:!0})}async function MH($,f){switch(f.type){case"chunk":return;case"agent_event":await yy($,f);return;case"hook":if(f.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:f.payload.toolName},f.payload.sessionId));else if(f.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:f.payload.toolName},f.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:f.payload.sessionId,summary:f.payload.summary,lastEvent:f.payload.lifecycle};$.publish($.buildEvent("team.progress",J,f.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:f.payload.sessionId,prompts:f.payload.prompts},f.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:f.payload.id,prompt:f.payload.prompt,delivery:f.payload.delivery,attachmentCount:f.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:f.payload.sessionId,prompt:J},f.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:f.payload.sessionId,snapshot:f.payload.snapshot},f.payload.sessionId));return;case"status":{let[J,Q]=await Promise.all([I0($,f.payload.sessionId),x0($,f.payload.sessionId)]);if(J)$.publish($.buildEvent("session.updated",{session:J,...Q?{snapshot:Q}:{}},f.payload.sessionId));return}case"ended":await Ty($,f);return;default:return}}async function yy($,f){let{sessionId:J,event:Q}=f.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},J));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},J));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},J));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},J));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},J));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},J));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},J));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},J));break}return}if(Q.type==="usage"){let Z;try{Z=await $.sessionHost.getAccumulatedUsage?.(J)}catch{Z=void 0}$.publish($.buildEvent("usage.updated",{sessionId:J,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:Z?.usage,aggregateUsage:Z?.aggregateUsage,agent:{kind:f.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:f.payload.teamAgentId,teamRole:f.payload.teamRole}},J));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},J))}async function Ty($,f){let J=$.suppressNextTerminalEventBySession.get(f.payload.sessionId),Q=J===f.payload.reason||J==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(f.payload.sessionId);let[Z,W]=await Promise.all([I0($,f.payload.sessionId),x0($,f.payload.sessionId)]);if(f.payload.reason==="completed"){let j=await KH(Z);$.publish($.buildEvent("ui.notify",j,f.payload.sessionId))}if(Q)return;$.publish($.buildEvent(f.payload.reason==="aborted"?"run.aborted":f.payload.reason==="error"||f.payload.reason==="failed"?"run.failed":"run.completed",{reason:f.payload.reason,...W?{snapshot:W}:{}},f.payload.sessionId))}import{createSessionId as wH,parseRuntimeConfigExtensions as SH}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as jv,HUB_COMPACTION_CAPABILITY as Xv,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Hv,HUB_HOOK_CAPABILITY_PREFIX as Yv,HUB_MISTAKE_LIMIT_CAPABILITY as Vv,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Av,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Bv,isHubToolExecutorName as Ny}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Dv,HUB_COMPACTION_CAPABILITY as Rv,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Uv,HUB_HOOK_CAPABILITY_PREFIX as Lv,HUB_MISTAKE_LIMIT_CAPABILITY as Ov,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as zv,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as _v}from"@cline/shared";var My=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function T1($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function qy($,f){let J=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",Z=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=T1($.inputSchema);if(!J||!Q||!W||!Z||f.has(Z))return;return f.add(Z),{kind:"tool",capabilityName:Z,name:J,description:Q,inputSchema:W,...T1($.lifecycle)?{lifecycle:T1($.lifecycle)}:{}}}function Q7($){if(!Array.isArray($))return[];let f=[],J=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let Z=Q,W=Z.kind,j=typeof Z.capabilityName==="string"?Z.capabilityName.trim():"";if(!j||J.has(j))continue;if(W==="tool"){let X=qy(Z,J);if(X)f.push(X);continue}if(W==="toolExecutor"){let X=Z.executor;if(!Ny(X))continue;J.add(j),f.push({kind:"toolExecutor",capabilityName:j,executor:X});continue}if(W==="hook"){let X=typeof Z.name==="string"?Z.name.trim():"";if(!X)continue;J.add(j),f.push({kind:"hook",capabilityName:j,name:X});continue}if(W==="compaction"){J.add(j),f.push({kind:"compaction",capabilityName:j,...T1(Z.config)?{config:T1(Z.config)}:{}});continue}if(W==="checkpoint"){J.add(j),f.push({kind:"checkpoint",capabilityName:j,...T1(Z.config)?{config:T1(Z.config)}:{}});continue}if(W==="mistakeLimit"){J.add(j),f.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")J.add(j),f.push({kind:"userInstructionService",capabilityName:j})}return f}function qH($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function wy($){return Object.hasOwn($,"update")?$.update:$}function y2($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Sy($){let f=($??[]).map(y2).filter(Boolean);return f.length>0?new Set(f):void 0}function Cy($,f,J){if(!J)return!0;let Q=y2($),Z=y2(f),W=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=Z.includes(":")?Z.split(":").at(-1)??Z:Z;return J.has(Q)||J.has(Z)||J.has(W)||J.has(j)}function J7($,f){let J=Sy(f);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>Cy(Q.id,Q.name,J))}function hy($,f){let J=async(Q,Z)=>{let W=y2(Q),X=J7($,f).filter((B)=>B.id===W||y2(B.name)===W||B.id.endsWith(`:${W}`)).filter((B)=>!B.disabled);if(X.length!==1)return X.length>1?`Skill "${Q}" is ambiguous. Use one of: ${X.map((B)=>B.id).join(", ")}`:`Skill "${Q}" not found.`;let H=X[0].skill,Y=Z?.trim(),V=Y?`
|
|
698
|
+
<command-args>${Y}</command-args>`:"",A=H.description?.trim()?`Description: ${H.description.trim()}
|
|
699
|
+
|
|
700
|
+
`:"";return`<command-name>${H.name}</command-name>${V}
|
|
699
701
|
<command-instructions>
|
|
700
|
-
${
|
|
701
|
-
</command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>
|
|
702
|
+
${A}${H.instructions}
|
|
703
|
+
</command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>J7($,f).map(({skill:Q,...Z})=>Z),enumerable:!0}),J}function Ey($,f,J,Q){let Z={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},W=async()=>{let j=await Q($,J.capabilityName,{},f);if(j?.snapshot)Z=j.snapshot};return{start:W,stop:()=>{},refreshType:async()=>{await W()},listRecords:(j)=>[...Z.records[j]],listRuntimeCommands:()=>[...Z.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let H=j.match(/^\/(\S+)/)?.[1];if(!H)return j;let Y=Z.runtimeCommands.find((V)=>V.name===H);return Y?`${Y.instructions}${j.slice(H.length+1)}`:j},hasConfiguredSkills:(j)=>J7(Z,j).some((X)=>!X.disabled),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((X)=>Boolean(X))},setup(X){if(j.includeRules)X.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>t2(Z.records.rule.map((H)=>H.item).filter((H)=>H.disabled!==!0))});if(j.registerSkillsTool)X.registerTool(k1(hy(Z,j.allowedSkillNames)));for(let H of Z.runtimeCommands.filter((Y)=>Y.kind==="skill"&&j.includeSkills||Y.kind==="workflow"&&j.includeWorkflows))X.registerCommand({name:H.name,description:H.description,handler:(Y)=>{let V=Y.trim();return V?`${H.instructions}
|
|
702
704
|
|
|
703
|
-
${P}`:X.instructions}})}})}}function NM(f,$,J,W){let H=J.map((Q)=>[Q.executor,async(...Z)=>{let j=Z.at(-1),X=Z.slice(0,-1);return(await W(f,Q.capabilityName,{executor:Q.executor,args:X,context:tj(j)},$))?.result}]);return H.length>0?Object.fromEntries(H):void 0}function qM(f,$,J,W){if(J.length===0)return;return J.map((H)=>({name:H.name,description:H.description,inputSchema:H.inputSchema,lifecycle:H.lifecycle,async execute(Q,Z){return(await W(f,H.capabilityName,{toolName:H.name,input:Q,context:tj(Z)},$,Z.emitUpdate?(X)=>{Z.emitUpdate?.(MM(X))}:void 0))?.result}}))}function wM(f,$,J,W){let H=new Map(J.map((Z)=>[Z.name,Z])),Q={};for(let Z of DM){let j=H.get(Z);if(!j)continue;Q[Z]=async(X)=>{return(await W(f,j.capabilityName,{context:X},$))?.control}}return Object.keys(Q).length>0?Q:void 0}function vW(f){let $=f.contributions.filter((X)=>X.kind==="toolExecutor"),J=f.contributions.filter((X)=>X.kind==="tool"),W=f.contributions.filter((X)=>X.kind==="hook"),H=f.contributions.find((X)=>X.kind==="compaction"),Q=f.contributions.find((X)=>X.kind==="checkpoint"),Z=f.contributions.find((X)=>X.kind==="mistakeLimit"),j=f.contributions.find((X)=>X.kind==="userInstructionService");return{hasClientContributions:f.contributions.length>0,toolExecutors:NM(f.sessionId,f.targetClientId,$,f.requestCapability),localRuntime:{...W.length>0?{hooks:wM(f.sessionId,f.targetClientId,W,f.requestCapability)}:{},...J.length>0?{extraTools:qM(f.sessionId,f.targetClientId,J,f.requestCapability)}:{},...H?{compaction:{...f.sessionConfig?.compaction??{},...H.config,compact:async(X)=>{return(await f.requestCapability(f.sessionId,H.capabilityName,{context:X},f.targetClientId))?.result}}}:{},...Q?{checkpoint:{...f.sessionConfig?.checkpoint??{},...Q.config,createCheckpoint:async(X)=>{return(await f.requestCapability(f.sessionId,Q.capabilityName,{context:X},f.targetClientId))?.result}}}:{},...Z?{onConsecutiveMistakeLimitReached:async(X)=>{return(await f.requestCapability(f.sessionId,Z.capabilityName,{context:X},f.targetClientId))?.result}}:{},...j?{userInstructionService:zM(f.sessionId,f.targetClientId,j,f.requestCapability)}:{}}}}var ej="hubCapabilityOwnerClientId";function fX(f,$){f[ej]=$}function bM(f){let $=f?.[ej];return typeof $==="string"&&$.trim()?$.trim():void 0}async function $X(f,$,J){let W=performance.now(),H={command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:$.sessionId};I("info","session.create.begin",H);let Q=$.payload&&typeof $.payload==="object"?$.payload:{},Z=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{},j=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0,X=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{};if(typeof j?.mode==="string")Z.mode=j.mode;else if(typeof X.mode==="string")Z.mode=X.mode;if(typeof j?.systemPrompt==="string")Z.systemPrompt=j.systemPrompt;else if(typeof X.systemPrompt==="string")Z.systemPrompt=X.systemPrompt;if(j?.checkpoint?.enabled===!0)Z.checkpointEnabled=!0;else if(X.checkpointEnabled===!0)Z.checkpointEnabled=!0;let A=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},P=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():"";if(!P)return I("warn","session.create.invalid",{...H,reason:"missing_workspace_root"}),S($,"invalid_session_create","session.create requires workspaceRoot or cwd");let B=$.clientId?.trim()||"hub-client",Y=gW(X.clientContributions);if(I("info","session.create.contributions_parsed",{...H,clientId:B,workspaceRoot:P,cwd:typeof Q.cwd==="string"?Q.cwd:void 0,contributionCount:Y.length}),Y.length>0)fX(Z,B);let R=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||sj(),U=oj(X.configExtensions);I("info","session.create.runtime_build.begin",{...H,sessionId:R,configExtensionCount:U?.length??0});let K=vW({sessionId:R,targetClientId:B,contributions:Y,sessionConfig:j,requestCapability:f.requestCapability});I("info","session.create.start_session.begin",{...H,sessionId:R,provider:j?.providerId??(typeof A.provider==="string"?A.provider:typeof Z.provider==="string"?Z.provider:"hub"),model:j?.modelId??(typeof A.model==="string"?A.model:typeof Z.model==="string"?Z.model:"hub")});let F=await f.sessionHost.startSession({source:typeof Z.source==="string"?Z.source:void 0,interactive:Z.interactive!==!1,sessionMetadata:Object.keys(Z).length>0?Z:void 0,initialMessages:Array.isArray(Q.initialMessages)?Q.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,...K.localRuntime},capabilities:{toolExecutors:K.toolExecutors,requestToolApproval:J},config:{...j??{},sessionId:R,providerId:j?.providerId??(typeof A.provider==="string"?A.provider:typeof Z.provider==="string"?Z.provider:"hub"),modelId:j?.modelId??(typeof A.model==="string"?A.model:typeof Z.model==="string"?Z.model:"hub"),apiKey:j?.apiKey??(typeof A.apiKey==="string"?A.apiKey:void 0),cwd:j?.cwd??(typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():P),workspaceRoot:j?.workspaceRoot??P,systemPrompt:j?.systemPrompt??(typeof X.systemPrompt==="string"?X.systemPrompt:""),mode:j?.mode??(X.mode==="plan"||X.mode==="yolo"?X.mode:"act"),maxIterations:j?.maxIterations??(typeof X.maxIterations==="number"?X.maxIterations:void 0),enableTools:j?.enableTools??X.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??X.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??X.enableTeams!==!1,checkpoint:j?.checkpoint??(X.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Z.teamName==="string"?Z.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):X.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});I("info","session.create.start_session.end",{...H,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!F.result}),N4(f,F.sessionId,B,"creator",{interactive:Z.interactive!==!1}),I("info","session.create.read_records.begin",{...H,sessionId:F.sessionId});let[y,D]=await Promise.all([kf(f,F.sessionId),If(f,F.sessionId)]);if(I("info","session.create.read_records.end",{...H,sessionId:F.sessionId,hasSession:!!y,hasSnapshot:!!D,elapsedMs:Math.round(performance.now()-W)}),y)f.publish(f.buildEvent("session.created",{session:y,...D?{snapshot:D}:{}},F.sessionId));return I("info","session.create.reply",{...H,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-W)}),m($,{session:y,...D?{snapshot:D}:{}})}async function JX(f,$,J){let W=$.payload&&typeof $.payload==="object"?$.payload:{},H=typeof W.sessionId==="string"?W.sessionId.trim():$.sessionId?.trim()||"",Q=W.checkpointRunCount;if(!H)return S($,"invalid_restore","session.restore requires a session id");let Z=W.restore&&typeof W.restore==="object"?W.restore:{},j=Z.messages!==!1;if(typeof Q!=="number")return S($,"invalid_restore","checkpointRunCount must be a positive integer");try{let X=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!X)return S($,"invalid_restore","sessionConfig is required when restore.messages is true");let A=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},P=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof X?.mode==="string")P.mode=X.mode;else if(typeof A.mode==="string")P.mode=A.mode;if(typeof X?.systemPrompt==="string")P.systemPrompt=X.systemPrompt;else if(typeof A.systemPrompt==="string")P.systemPrompt=A.systemPrompt;if(X?.checkpoint?.enabled===!0)P.checkpointEnabled=!0;else if(A.checkpointEnabled===!0)P.checkpointEnabled=!0;let B=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},Y=$.clientId?.trim()||"hub-client",V=gW(A.clientContributions);if(V.length>0)fX(P,Y);let U=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||sj(),K=oj(A.configExtensions),F=vW({sessionId:U,targetClientId:Y,contributions:V,sessionConfig:X,requestCapability:f.requestCapability}),D=await new e$().restoreCheckpoint({sessionId:H,checkpointRunCount:Q,restore:{messages:Z.messages,workspace:Z.workspace,omitCheckpointMessageFromSession:Z.omitCheckpointMessageFromSession===!0},start:X,cwd:typeof X?.cwd==="string"&&X.cwd.trim()||typeof X?.workspaceRoot==="string"&&X.workspaceRoot.trim()||void 0,getSession:(L)=>f.sessionHost.getSession(L),readMessages:(L)=>f.sessionHost.readSessionMessages(L),buildStartInput:(L)=>{if(L.restoredCheckpointMetadata)P.checkpoint=L.restoredCheckpointMetadata;let O=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():L.sourceSession.workspaceRoot||L.sourceSession.cwd;return{source:typeof P.source==="string"?P.source:void 0,interactive:P.interactive!==!1,sessionMetadata:{...P,restoredFromSessionId:H,restoredCheckpointRunCount:Q},initialMessages:L.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:K,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...X??{},sessionId:U,providerId:X?.providerId??(typeof B.provider==="string"?B.provider:L.sourceSession.provider),modelId:X?.modelId??(typeof B.model==="string"?B.model:L.sourceSession.model),apiKey:X?.apiKey??(typeof B.apiKey==="string"?B.apiKey:""),cwd:X?.cwd??L.plan.cwd,workspaceRoot:X?.workspaceRoot??O,systemPrompt:X?.systemPrompt??(typeof A.systemPrompt==="string"?A.systemPrompt:""),mode:X?.mode??(A.mode==="plan"||A.mode==="yolo"?A.mode:"act"),maxIterations:X?.maxIterations??(typeof A.maxIterations==="number"?A.maxIterations:void 0),enableTools:X?.enableTools??A.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??A.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??A.enableTeams!==!1,checkpoint:X?.checkpoint??(A.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof P.teamName==="string"?P.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):A.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(L)=>f.sessionHost.startSession(L),getStartedSessionId:(L)=>L.sessionId,readRestoredSession:(L)=>f.sessionHost.getSession(L)});if(!j)return m($,{checkpoint:D.checkpoint});let M=D.startResult;if(!M)return S($,"restore_failed","Checkpoint restore did not start a session");N4(f,M.sessionId,Y,"creator",{interactive:P.interactive!==!1});let[T,_]=await Promise.all([kf(f,M.sessionId),If(f,M.sessionId)]);if(T)f.publish(f.buildEvent("session.created",{session:T,..._?{snapshot:_}:{}},M.sessionId));return m($,{session:T,..._?{snapshot:_}:{},messages:D.messages??[],checkpoint:D.checkpoint})}catch(X){if(X instanceof gf)return S($,X.code,X.code==="session_not_found"?`Unknown session: ${H}`:X.message);return S($,"restore_failed",X instanceof Error?X.message:String(X))}}async function WX(f,$){let J=Mf($);if(!J)return S($,"invalid_session_attach","session.attach requires a session id");N4(f,J,$.clientId?.trim()||"hub-client","participant");let W=await kf(f,J);if(W)f.publish(f.buildEvent("session.attached",{session:W},J));return W?m($,{session:W}):S($,"session_not_found",`Unknown session: ${J}`)}async function HX(f,$){let J=Mf($);if(!J)return S($,"invalid_session_detach","session.detach requires a session id");let W=$.clientId?.trim()||"hub-client",[H]=await Promise.all([kf(f,J)]),Q=bM(H?.metadata)??W,Z=f.sessionState.get(J);if(Z){if(Z.participants.delete(W),Z.createdByClientId===W)Z.createdByClientId=Q;if(Z.participants.size===0)f.sessionState.delete(J)}v0(f,(A)=>A.sessionId===J&&A.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,X]=await Promise.all([kf(f,J),If(f,J)]);return f.publish(f.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:W}:{clientId:W},J)),m($)}async function QX(f,$){let J=Mf($),W=$.payload?.includeSnapshot===!0,[H,Q]=await Promise.all([kf(f,J),W?If(f,J):Promise.resolve(void 0)]);return H?m($,{session:H,...Q?{snapshot:Q}:{}}):S($,"session_not_found",`Unknown session: ${J}`)}async function ZX(f,$){let J=Mf($);if(!J)return S($,"invalid_session_id","session.messages requires a session id");if(!await kf(f,J))return S($,"session_not_found",`Unknown session: ${J}`);let H=await f.sessionHost.readSessionMessages(J);return m($,{sessionId:J,messages:H})}async function jX(f,$){let J=typeof $.payload?.limit==="number"?$.payload.limit:200,H=(await f.sessionHost.listSessions(J)).map((Q)=>O4(Q,f.sessionState.get(Q.sessionId)));return m($,{sessions:H})}async function XX(f,$){let J=Mf($),W=z4($.payload?.metadata),H=await f.sessionHost.updateSession(J,{metadata:W}),[Q,Z]=await Promise.all([kf(f,J),If(f,J)]);if(Q)f.publish(f.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J));return{version:$.version,requestId:$.requestId,ok:H.updated,payload:{updated:H.updated,session:Q,...Z?{snapshot:Z}:{}}}}async function AX(f,$){let J=Mf($),W=await f.sessionHost.deleteSession(J);return f.sessionState.delete(J),m($,{deleted:W})}async function PX(f,$){let J=Mf($),W=f.sessionHost.pendingPrompts;if(!W)return S($,"pending_prompts_unavailable","Pending prompt service is not available.");let H=await W.list({sessionId:J});return m($,{sessionId:J,prompts:H})}async function BX(f,$){let J=Mf($),W=typeof $.payload?.promptId==="string"?$.payload.promptId.trim():"",H=typeof $.payload?.prompt==="string"?$.payload.prompt:void 0,Q=$.payload?.delivery==="queue"||$.payload?.delivery==="steer"?$.payload.delivery:void 0,Z=f.sessionHost.pendingPrompts;if(!Z)return S($,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Z.update({sessionId:J,promptId:W,prompt:H,delivery:Q});return m($,j)}async function YX(f,$){let J=Mf($),W=typeof $.payload?.promptId==="string"?$.payload.promptId.trim():"",H=f.sessionHost.pendingPrompts;if(!H)return S($,"pending_prompts_unavailable","Pending prompt service is not available.");let Q=await H.delete({sessionId:J,promptId:W});return m($,Q)}function VX(f){switch(f){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 EM=new Set(["skills","workflows","rules","tools"]);function uW(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function V2(f,$){let J=f[$];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${$}' must be a string.`);return J}function SM(f,$){let J=f[$];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${$}' must be a boolean.`);return J}function RX(f){if(f===void 0)return{};if(!uW(f))throw Error("settings.list payload must be an object.");return{cwd:V2(f,"cwd"),workspaceRoot:V2(f,"workspaceRoot"),availabilityContext:uW(f.availabilityContext)?f.availabilityContext:void 0}}function kM(f){if(!uW(f))throw Error("settings.toggle payload must be an object.");let{type:$}=f;if(typeof $!=="string"||!EM.has($))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools.");return{...RX(f),type:$,id:V2(f,"id"),path:V2(f,"path"),name:V2(f,"name"),enabled:SM(f,"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=CM("hub_");ctx;constructor(f){this.options=f;if(this.sessionHost=f.sessionHost??new g0({sessionService:new S0(new E0),fetch:f.fetch,telemetry:f.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,sessionHost:this.sessionHost,publish:($)=>this.publish($),buildEvent:T$,requestCapability:($,J,W,H,Q)=>xj(this.ctx,$,J,W,H,Q)},this.schedules=new T4({...f.scheduleOptions,runtimeHandlers:f.runtimeHandlers,eventPublisher:($,J)=>{let W=$==="schedule.execution.completed"?"schedule.execution_completed":$==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(T$(W,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new y4(this.schedules),this.settings=f.settingsService??new c$,f.cronOptions)this.cronService=new k1({runtimeHandlers:f.runtimeHandlers,...f.cronOptions});this.sessionHost.subscribe(($)=>{aj(this.ctx,$).catch((J)=>{mW("session event handling failed",J)})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch(f){console.error("[hub] cron service start failed",f)}}async stop(){for(let f of this.pendingApprovals.keys())kW(this.ctx,f,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(v0(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(f){console.error("[hub] cron service stop failed",f)}}async handleCommand(f){switch(f.command){case"client.register":return cj(this.ctx,f);case"client.update":return dj(this.ctx,f);case"client.unregister":return rj(this.ctx,f,($)=>{this.listeners.delete($),this.detachClientFromSessions($)});case"client.list":return lj(this.ctx,f);case"session.create":return await $X(this.ctx,f,($)=>SW(this.ctx,$));case"session.restore":return await JX(this.ctx,f,($)=>SW(this.ctx,$));case"session.attach":return await WX(this.ctx,f);case"session.detach":return await HX(this.ctx,f);case"session.get":return await QX(this.ctx,f);case"session.messages":return await ZX(this.ctx,f);case"session.list":return await jX(this.ctx,f);case"session.update":return await XX(this.ctx,f);case"session.pending_prompts":return await PX(this.ctx,f);case"session.update_pending_prompt":return await BX(this.ctx,f);case"session.remove_pending_prompt":return await YX(this.ctx,f);case"session.delete":return await AX(this.ctx,f);case"session.hook":return await nj(this.ctx,f);case"run.start":case"session.send_input":return await pj(this.ctx,f);case"run.abort":return await ij(this.ctx,f);case"capability.request":return await vj(this.ctx,f);case"approval.respond":return await Ij(this.ctx,f);case"capability.respond":return uj(this.ctx,f);case"capability.progress":return gj(this.ctx,f);case"ui.notify":return this.publish(T$("ui.notify",f.payload??{})),m(f);case"ui.show_window":return this.publish(T$("ui.show_window",f.payload??{})),m(f);case"settings.list":return await this.handleSettingsList(f);case"settings.toggle":return await this.handleSettingsToggle(f);case"settings.get":case"settings.patch":return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"not_implemented",message:`${f.command} is not implemented yet.`}};default:{let $=await this.scheduleCommands.handleCommand(f);if($.ok){let J=VX(f.command);if(J)this.publish(T$(J,$.payload))}return $}}}async handleSettingsList(f){try{let $=await this.settings.list(RX(f.payload));return{version:f.version,requestId:f.requestId,ok:!0,payload:{snapshot:$}}}catch($){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"settings_list_failed",message:$ instanceof Error?$.message:String($)}}}}async handleSettingsToggle(f){try{let $=await this.settings.toggle(kM(f.payload));return this.publish(T$("settings.changed",{types:$.changedTypes,snapshot:$.snapshot})),{version:f.version,requestId:f.requestId,ok:!0,payload:{snapshot:$.snapshot,changedTypes:$.changedTypes}}}catch($){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"settings_toggle_failed",message:$ instanceof Error?$.message:String($)}}}}subscribe(f,$,J){let W=this.listeners.get(f)??new Set,H={sessionId:J?.sessionId,listener:$};return W.add(H),this.listeners.set(f,W),()=>{let Q=this.listeners.get(f);if(!Q)return;if(Q.delete(H),Q.size===0)this.listeners.delete(f)}}detachClientFromSessions(f){for(let[$,J]of this.sessionState.entries())if(J.participants.delete(f),J.participants.size===0)this.sessionState.delete($);v0(this.ctx,($)=>$.targetClientId===f,`Capability owner client ${f} disconnected before request was resolved.`)}publish(f){for(let $ of this.listeners.values())for(let J of $){if(J.sessionId&&J.sessionId!==f.sessionId)continue;try{J.listener(f)}catch(W){mW(`listener threw while publishing ${f.event}`,W)}}}}import{timingSafeEqual as gM}from"node:crypto";import vM from"node:http";import uM from"node:net";import{URL as yX}from"node:url";import{WebSocketServer as cM}from"ws";import{HUB_COMMAND_SLOW_LOG_MS as IM,resolveHubCommandTimeoutMs as mM,safeJsonParse as xM}from"@cline/shared";function FX(f){return{command:f.envelope.command,requestId:f.envelope.requestId,clientId:f.envelope.clientId,sessionId:f.envelope.sessionId}}function KX(f,$,J){return{version:f.envelope.version,requestId:f.envelope.requestId,ok:!1,error:{code:$,message:J}}}class cW{transport;constructor(f){this.transport=f}attach(f){let $=new Map,J=new Set,W=!1,H=(X)=>{try{f.send(JSON.stringify(X))}catch(A){console.error(`[hub] failed to send websocket frame: ${A instanceof Error?A.stack||A.message:String(A)}`)}},Q=(X)=>{H({kind:"event",envelope:X})},Z=async(X)=>{try{let A=JSON.parse(X.data);switch(A.kind){case"command":{let P=performance.now(),B=!1,Y=FX(A);I("info","command.start",Y);let V=setTimeout(()=>{if(B)return;I("warn","command.slow",{...Y,elapsedMs:Math.round(performance.now()-P)})},IM),R=this.transport.command(A.envelope);R.then((M)=>{if(!B)return;I(M.ok?"warn":"error","command.late_end",{...Y,elapsedMs:Math.round(performance.now()-P),ok:M.ok,errorCode:M.error?.code,errorMessage:M.error?.message})},(M)=>{if(!B)return;I("error","command.late_error",{...Y,elapsedMs:Math.round(performance.now()-P),error:M})});let U=!1,K,F,y=mM(A.envelope.command,A.envelope.timeoutMs);try{F=y===null?await R:await Promise.race([R,new Promise((M)=>{K=setTimeout(()=>{U=!0,M(KX(A,"hub_command_timeout",`Hub command ${A.envelope.command} did not complete within ${y}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${A.envelope.requestId}.`))},y)})])}catch(M){if(clearTimeout(V),K)clearTimeout(K);throw M}if(B=U,clearTimeout(V),K)clearTimeout(K);let D=Math.round(performance.now()-P);if(U)I("error","command.timeout",{...Y,durationMs:D,timeoutMs:y});else I(F.ok?"info":"warn","command.end",{...Y,durationMs:D,ok:F.ok,errorCode:F.error?.code,errorMessage:F.error?.message});if(A.envelope.command==="client.register"&&F.ok){let T=(A.envelope.payload??{}).clientId?.trim()||A.envelope.clientId?.trim();if(T)J.add(T)}else if(A.envelope.command==="client.unregister"&&F.ok){let M=A.envelope.clientId?.trim();if(M)J.delete(M)}H({kind:"reply",envelope:F});break}case"stream.subscribe":{let P=`${A.clientId}:${A.sessionId??"*"}`;if($.has(P))break;let B=await this.transport.subscribe(A.clientId,Q,{sessionId:A.sessionId});$.set(P,B);break}case"stream.unsubscribe":{let P=`${A.clientId}:${A.sessionId??"*"}`;$.get(P)?.(),$.delete(P);break}case"reply":case"event":break}}catch(A){let P=typeof X.data==="string"?xM(X.data):void 0;if(!P||P.kind!=="command"){I("error","rejected malformed websocket frame",{error:A});return}I("error","command.error",{...FX(P),error:A}),H({kind:"reply",envelope:KX(P,"command_failed",A instanceof Error?A.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let X of $.values())X();$.clear();for(let X of J)this.transport.command({version:"v1",command:"client.unregister",clientId:X});J.clear(),f.removeEventListener("message",Z),f.removeEventListener("close",j)};return f.addEventListener("message",Z),f.addEventListener("close",j),j}}class dW{transport;constructor(f){this.transport=f}command(f){return this.transport.handleCommand(f)}subscribe(f,$,J){return this.transport.subscribe(f,$,J)}}function dM(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString();if(f instanceof ArrayBuffer)return Buffer.from(f).toString();if(Array.isArray(f))return Buffer.concat(f.map(($)=>Buffer.from($))).toString();return String(f)}function rM(f){return{send($){f.send($)},addEventListener($,J){if($==="message"){f.on("message",(W)=>{J({data:dM(W)})});return}f.on("close",J)},removeEventListener(){}}}function lM(f){try{f.write(`HTTP/1.1 400 Bad Request\r
|
|
705
|
+
${V}`:H.instructions}})}})}}function by($,f,J,Q){let Z=J.map((W)=>[W.executor,async(...j)=>{let X=j.at(-1),H=j.slice(0,-1);return(await Q($,W.capabilityName,{executor:W.executor,args:H,context:qH(X)},f))?.result}]);return Z.length>0?Object.fromEntries(Z):void 0}function ky($,f,J,Q){if(J.length===0)return;return J.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema,lifecycle:Z.lifecycle,async execute(W,j){return(await Q($,Z.capabilityName,{toolName:Z.name,input:W,context:qH(j)},f,j.emitUpdate?(H)=>{j.emitUpdate?.(wy(H))}:void 0))?.result}}))}function Iy($,f,J,Q){let Z=new Map(J.map((j)=>[j.name,j])),W={};for(let j of My){let X=Z.get(j);if(!X)continue;W[j]=async(H)=>{return(await Q($,X.capabilityName,{context:H},f))?.control}}return Object.keys(W).length>0?W:void 0}function Z7($){let f=$.contributions.filter((H)=>H.kind==="toolExecutor"),J=$.contributions.filter((H)=>H.kind==="tool"),Q=$.contributions.filter((H)=>H.kind==="hook"),Z=$.contributions.find((H)=>H.kind==="compaction"),W=$.contributions.find((H)=>H.kind==="checkpoint"),j=$.contributions.find((H)=>H.kind==="mistakeLimit"),X=$.contributions.find((H)=>H.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:by($.sessionId,$.targetClientId,f,$.requestCapability),localRuntime:{...Q.length>0?{hooks:Iy($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J.length>0?{extraTools:ky($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Z?{compaction:{...$.sessionConfig?.compaction??{},...Z.config,compact:async(H)=>{return(await $.requestCapability($.sessionId,Z.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(H)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(H)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:H},$.targetClientId))?.result}}:{},...X?{userInstructionService:Ey($.sessionId,$.targetClientId,X,$.requestCapability)}:{}}}}var CH="hubCapabilityOwnerClientId";function hH($,f){$[CH]=f}function xy($){let f=$?.[CH];return typeof f==="string"&&f.trim()?f.trim():void 0}async function EH($,f,J){let Q=performance.now(),Z={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:f.sessionId};I("info","session.create.begin",Z);let W=f.payload&&typeof f.payload==="object"?f.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},X=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{};if(typeof X?.mode==="string")j.mode=X.mode;else if(typeof H.mode==="string")j.mode=H.mode;if(typeof X?.systemPrompt==="string")j.systemPrompt=X.systemPrompt;else if(typeof H.systemPrompt==="string")j.systemPrompt=H.systemPrompt;if(X?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)j.checkpointEnabled=!0;let Y=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},V=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():"";if(!V)return I("warn","session.create.invalid",{...Z,reason:"missing_workspace_root"}),b(f,"invalid_session_create","session.create requires workspaceRoot or cwd");let A=f.clientId?.trim()||"hub-client",B=Q7(H.clientContributions);if(I("info","session.create.contributions_parsed",{...Z,clientId:A,workspaceRoot:V,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:B.length}),B.length>0)hH(j,A);let G=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||wH(),R=SH(H.configExtensions);I("info","session.create.runtime_build.begin",{...Z,sessionId:G,configExtensionCount:R?.length??0});let F=Z7({sessionId:G,targetClientId:A,contributions:B,sessionConfig:X,requestCapability:$.requestCapability});I("info","session.create.start_session.begin",{...Z,sessionId:G,provider:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),model:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub")});let P=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(W.initialMessages)?W.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...X??{},sessionId:G,providerId:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub"),apiKey:X?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:void 0),cwd:X?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():V),workspaceRoot:X?.workspaceRoot??V,systemPrompt:X?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:X?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:X?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:X?.enableTools??H.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??H.enableTeams!==!1,checkpoint:X?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});I("info","session.create.start_session.end",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!P.result}),p4($,P.sessionId,A,"creator",{interactive:j.interactive!==!1}),I("info","session.create.read_records.begin",{...Z,sessionId:P.sessionId});let[D,O]=await Promise.all([I0($,P.sessionId),x0($,P.sessionId)]);if(I("info","session.create.read_records.end",{...Z,sessionId:P.sessionId,hasSession:!!D,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Q)}),D)$.publish($.buildEvent("session.created",{session:D,...O?{snapshot:O}:{}},P.sessionId));return I("info","session.create.reply",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q)}),x(f,{session:D,...O?{snapshot:O}:{}})}async function bH($,f,J){let Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.sessionId==="string"?Q.sessionId.trim():f.sessionId?.trim()||"",W=Q.checkpointRunCount;if(!Z)return b(f,"invalid_restore","session.restore requires a session id");let j=Q.restore&&typeof Q.restore==="object"?Q.restore:{},X=j.messages!==!1;if(typeof W!=="number")return b(f,"invalid_restore","checkpointRunCount must be a positive integer");try{let H=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(X&&!H)return b(f,"invalid_restore","sessionConfig is required when restore.messages is true");let Y=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},V=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof H?.mode==="string")V.mode=H.mode;else if(typeof Y.mode==="string")V.mode=Y.mode;if(typeof H?.systemPrompt==="string")V.systemPrompt=H.systemPrompt;else if(typeof Y.systemPrompt==="string")V.systemPrompt=Y.systemPrompt;if(H?.checkpoint?.enabled===!0)V.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)V.checkpointEnabled=!0;let A=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},B=f.clientId?.trim()||"hub-client",K=Q7(Y.clientContributions);if(K.length>0)hH(V,B);let R=(typeof H?.sessionId==="string"?H.sessionId.trim():"")||wH(),F=SH(Y.configExtensions),P=Z7({sessionId:R,targetClientId:B,contributions:K,sessionConfig:H,requestCapability:$.requestCapability}),O=await new Qf().restoreCheckpoint({sessionId:Z,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:H,cwd:typeof H?.cwd==="string"&&H.cwd.trim()||typeof H?.workspaceRoot==="string"&&H.workspaceRoot.trim()||void 0,getSession:(y)=>$.sessionHost.getSession(y),readMessages:(y)=>$.sessionHost.readSessionMessages(y),buildStartInput:(y)=>{if(y.restoredCheckpointMetadata)V.checkpoint=y.restoredCheckpointMetadata;let N=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():y.sourceSession.workspaceRoot||y.sourceSession.cwd;return{source:typeof V.source==="string"?V.source:void 0,interactive:V.interactive!==!1,sessionMetadata:{...V,restoredFromSessionId:Z,restoredCheckpointRunCount:W},initialMessages:y.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:F,...P.localRuntime},capabilities:{toolExecutors:P.toolExecutors,requestToolApproval:J},config:{...H??{},sessionId:R,providerId:H?.providerId??(typeof A.provider==="string"?A.provider:y.sourceSession.provider),modelId:H?.modelId??(typeof A.model==="string"?A.model:y.sourceSession.model),apiKey:H?.apiKey??(typeof A.apiKey==="string"?A.apiKey:""),cwd:H?.cwd??y.plan.cwd,workspaceRoot:H?.workspaceRoot??N,systemPrompt:H?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:H?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:H?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:H?.enableTools??Y.enableTools!==!1,enableSpawnAgent:H?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:H?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:H?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:H?.teamName??(typeof V.teamName==="string"?V.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(y)=>$.sessionHost.startSession(y),getStartedSessionId:(y)=>y.sessionId,readRestoredSession:(y)=>$.sessionHost.getSession(y)});if(!X)return x(f,{checkpoint:O.checkpoint});let _=O.startResult;if(!_)return b(f,"restore_failed","Checkpoint restore did not start a session");p4($,_.sessionId,B,"creator",{interactive:V.interactive!==!1});let[L,z]=await Promise.all([I0($,_.sessionId),x0($,_.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...z?{snapshot:z}:{}},_.sessionId));return x(f,{session:L,...z?{snapshot:z}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(H){if(H instanceof v0)return b(f,H.code,H.code==="session_not_found"?`Unknown session: ${Z}`:H.message);return b(f,"restore_failed",H instanceof Error?H.message:String(H))}}async function kH($,f){let J=_0(f);if(!J)return b(f,"invalid_session_attach","session.attach requires a session id");p4($,J,f.clientId?.trim()||"hub-client","participant");let Q=await I0($,J);if(Q)$.publish($.buildEvent("session.attached",{session:Q},J));return Q?x(f,{session:Q}):b(f,"session_not_found",`Unknown session: ${J}`)}async function IH($,f){let J=_0(f);if(!J)return b(f,"invalid_session_detach","session.detach requires a session id");let Q=f.clientId?.trim()||"hub-client",[Z]=await Promise.all([I0($,J)]),W=xy(Z?.metadata)??Q,j=$.sessionState.get(J);if(j){if(j.participants.delete(Q),j.createdByClientId===Q)j.createdByClientId=W;if(j.participants.size===0)$.sessionState.delete(J)}d$($,(Y)=>Y.sessionId===J&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[X,H]=await Promise.all([I0($,J),x0($,J)]);return $.publish($.buildEvent("session.detached",X?{session:X,...H?{snapshot:H}:{},clientId:Q}:{clientId:Q},J)),x(f)}async function xH($,f){let J=_0(f),Q=f.payload?.includeSnapshot===!0,[Z,W]=await Promise.all([I0($,J),Q?x0($,J):Promise.resolve(void 0)]);return Z?x(f,{session:Z,...W?{snapshot:W}:{}}):b(f,"session_not_found",`Unknown session: ${J}`)}async function gH($,f){let J=_0(f);if(!J)return b(f,"invalid_session_id","session.messages requires a session id");if(!await I0($,J))return b(f,"session_not_found",`Unknown session: ${J}`);let Z=await $.sessionHost.readSessionMessages(J);return x(f,{sessionId:J,messages:Z})}async function mH($,f){let J=typeof f.payload?.limit==="number"?f.payload.limit:200,Z=(await $.sessionHost.listSessions(J)).map((W)=>d4(W,$.sessionState.get(W.sessionId)));return x(f,{sessions:Z})}async function vH($,f){let J=_0(f),Q=l4(f.payload?.metadata),Z=await $.sessionHost.updateSession(J,{metadata:Q}),[W,j]=await Promise.all([I0($,J),x0($,J)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},J));return{version:f.version,requestId:f.requestId,ok:Z.updated,payload:{updated:Z.updated,session:W,...j?{snapshot:j}:{}}}}async function cH($,f){let J=_0(f),Q=await $.sessionHost.deleteSession(J);return $.sessionState.delete(J),x(f,{deleted:Q})}async function uH($,f){let J=_0(f),Q=$.sessionHost.pendingPrompts;if(!Q)return b(f,"pending_prompts_unavailable","Pending prompt service is not available.");let Z=await Q.list({sessionId:J});return x(f,{sessionId:J,prompts:Z})}async function dH($,f){let J=_0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=typeof f.payload?.prompt==="string"?f.payload.prompt:void 0,W=f.payload?.delivery==="queue"||f.payload?.delivery==="steer"?f.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return b(f,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await j.update({sessionId:J,promptId:Q,prompt:Z,delivery:W});return x(f,X)}async function lH($,f){let J=_0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=$.sessionHost.pendingPrompts;if(!Z)return b(f,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.delete({sessionId:J,promptId:Q});return x(f,W)}function pH($){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 my=new Set(["skills","workflows","rules","tools","mcp"]);function W7($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function T2($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${f}' must be a string.`);return J}function vy($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${f}' must be a boolean.`);return J}function rH($){if($===void 0)return{};if(!W7($))throw Error("settings.list payload must be an object.");return{cwd:T2($,"cwd"),workspaceRoot:T2($,"workspaceRoot"),availabilityContext:W7($.availabilityContext)?$.availabilityContext:void 0}}function cy($){if(!W7($))throw Error("settings.toggle payload must be an object.");let{type:f}=$;if(typeof f!=="string"||!my.has(f))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...rH($),type:f,id:T2($,"id"),path:T2($,"path"),name:T2($,"name"),enabled:vy($,"enabled")}}class i4{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=gy("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new u$({sessionService:new I$(new k$),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(f)=>this.publish(f),buildEvent:y1,requestCapability:(f,J,Q,Z,W)=>FH(this.ctx,f,J,Q,Z,W)},this.schedules=new x4({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(f,J)=>{let Q=f==="schedule.execution.completed"?"schedule.execution_completed":f==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(y1(Q,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new b4(this.schedules),this.settings=$.settingsService??new r1,$.cronOptions)this.cronService=new rf({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((f)=>{MH(this.ctx,f).catch((J)=>{f7("session event handling failed",J),r4(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:J,severity:"error",handled:!0,context:{eventType:f.type,sessionId:f.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())e9(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(d$(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 f=await this.dispatchCommand($);return this.captureFailedReply($,f),f}catch(f){throw r4(this.options.telemetry,{component:"core",operation:"hub.command",error:f,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),f}}async dispatchCommand($){switch($.command){case"client.register":return LH(this.ctx,$);case"client.update":return OH(this.ctx,$);case"client.unregister":return zH(this.ctx,$,(f)=>{this.listeners.delete(f),this.detachClientFromSessions(f)});case"client.list":return _H(this.ctx,$);case"session.create":return await EH(this.ctx,$,(f)=>o9(this.ctx,f));case"session.restore":return await bH(this.ctx,$,(f)=>o9(this.ctx,f));case"session.attach":return await kH(this.ctx,$);case"session.detach":return await IH(this.ctx,$);case"session.get":return await xH(this.ctx,$);case"session.messages":return await gH(this.ctx,$);case"session.list":return await mH(this.ctx,$);case"session.update":return await vH(this.ctx,$);case"session.pending_prompts":return await uH(this.ctx,$);case"session.update_pending_prompt":return await dH(this.ctx,$);case"session.remove_pending_prompt":return await lH(this.ctx,$);case"session.delete":return await cH(this.ctx,$);case"session.hook":return await NH(this.ctx,$);case"run.start":case"session.send_input":return await yH(this.ctx,$);case"run.abort":return await TH(this.ctx,$);case"capability.request":return await RH(this.ctx,$);case"approval.respond":return await GH(this.ctx,$);case"capability.respond":return UH(this.ctx,$);case"capability.progress":return DH(this.ctx,$);case"ui.notify":return this.publish(y1("ui.notify",$.payload??{})),x($);case"ui.show_window":return this.publish(y1("ui.show_window",$.payload??{})),x($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let f=await this.scheduleCommands.handleCommand($);if(f.ok){let J=pH($.command);if(J)this.publish(y1(J,f.payload))}return f}}}captureFailedReply($,f){if(f.ok||!f.error||!uy(f.error.code))return;r4(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(f.error.message),severity:f.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:f.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let f=await this.settings.list(rH($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:f instanceof Error?f.message:String(f)}}}}async handleSettingsToggle($){try{let f=await this.settings.toggle(cy($.payload));return this.publish(y1("settings.changed",{types:f.changedTypes,snapshot:f.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f.snapshot,changedTypes:f.changedTypes}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:f instanceof Error?f.message:String(f)}}}}subscribe($,f,J){let Q=this.listeners.get($)??new Set,Z={sessionId:J?.sessionId,listener:f};return Q.add(Z),this.listeners.set($,Q),()=>{let W=this.listeners.get($);if(!W)return;if(W.delete(Z),W.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[f,J]of this.sessionState.entries())if(J.participants.delete($),J.participants.size===0)this.sessionState.delete(f);d$(this.ctx,(f)=>f.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let f of this.listeners.values())for(let J of f){if(J.sessionId&&J.sessionId!==$.sessionId)continue;try{J.listener($)}catch(Q){f7(`listener threw while publishing ${$.event}`,Q),r4(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function uy($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as ry}from"node:crypto";import iy from"node:http";import ny from"node:net";import{URL as aH}from"node:url";import{WebSocketServer as ay}from"ws";import{captureSdkError as iH,HUB_COMMAND_SLOW_LOG_MS as dy,resolveHubCommandTimeoutMs as ly,safeJsonParse as py}from"@cline/shared";function j7($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function nH($,f,J){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:f,message:J}}}class X7{transport;telemetry;constructor($,f){this.transport=$;this.telemetry=f}attach($){let f=new Map,J=new Set,Q=!1,Z=(H)=>{try{$.send(JSON.stringify(H))}catch(Y){console.error(`[hub] failed to send websocket frame: ${Y instanceof Error?Y.stack||Y.message:String(Y)}`)}},W=(H)=>{Z({kind:"event",envelope:H})},j=async(H)=>{try{let Y=JSON.parse(H.data);switch(Y.kind){case"command":{let V=performance.now(),A=!1,B=j7(Y);I("info","command.start",B);let K=setTimeout(()=>{if(A)return;I("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-V)})},dy),G=this.transport.command(Y.envelope);G.then((_)=>{if(!A)return;I(_.ok?"warn":"error","command.late_end",{...B,elapsedMs:Math.round(performance.now()-V),ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message})},(_)=>{if(!A)return;I("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-V),error:_})});let R=!1,F,P,D=ly(Y.envelope.command,Y.envelope.timeoutMs);try{P=D===null?await G:await Promise.race([G,new Promise((_)=>{F=setTimeout(()=>{R=!0,iH(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${Y.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...B,timeoutMs:D}}),_(nH(Y,"hub_command_timeout",`Hub command ${Y.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${Y.envelope.requestId}.`))},D)})])}catch(_){if(clearTimeout(K),F)clearTimeout(F);throw _}if(A=R,clearTimeout(K),F)clearTimeout(F);let O=Math.round(performance.now()-V);if(R)I("error","command.timeout",{...B,durationMs:O,timeoutMs:D});else I(P.ok?"info":"warn","command.end",{...B,durationMs:O,ok:P.ok,errorCode:P.error?.code,errorMessage:P.error?.message});if(Y.envelope.command==="client.register"&&P.ok){let L=(Y.envelope.payload??{}).clientId?.trim()||Y.envelope.clientId?.trim();if(L)J.add(L)}else if(Y.envelope.command==="client.unregister"&&P.ok){let _=Y.envelope.clientId?.trim();if(_)J.delete(_)}Z({kind:"reply",envelope:P});break}case"stream.subscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;if(f.has(V))break;let A=await this.transport.subscribe(Y.clientId,W,{sessionId:Y.sessionId});f.set(V,A);break}case"stream.unsubscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;f.get(V)?.(),f.delete(V);break}case"reply":case"event":break}}catch(Y){let V=typeof H.data==="string"?py(H.data):void 0;if(!V||V.kind!=="command"){I("error","rejected malformed websocket frame",{error:Y});return}I("error","command.error",{...j7(V),error:Y}),iH(this.telemetry,{component:"core",operation:"hub.websocket_command",error:Y,severity:"error",handled:!0,context:j7(V)}),Z({kind:"reply",envelope:nH(V,"command_failed",Y instanceof Error?Y.message:"Unknown hub error")})}},X=()=>{if(Q)return;Q=!0;for(let H of f.values())H();f.clear();for(let H of J)this.transport.command({version:"v1",command:"client.unregister",clientId:H});J.clear(),$.removeEventListener("message",j),$.removeEventListener("close",X)};return $.addEventListener("message",j),$.addEventListener("close",X),X}}class H7{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,f,J){return this.transport.subscribe($,f,J)}}function ty($){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((f)=>Buffer.from(f))).toString();return String($)}function sy($){return{send(f){$.send(f)},addEventListener(f,J){if(f==="message"){$.on("message",(Q)=>{J({data:ty(Q)})});return}$.on("close",J)},removeEventListener(){}}}function oy($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
704
706
|
Connection: close\r
|
|
705
707
|
Content-Length: 0\r
|
|
706
708
|
\r
|
|
707
|
-
`)
|
|
709
|
+
`),$.end()}catch{$.destroy()}}function ey($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
708
710
|
Connection: close\r
|
|
709
711
|
Content-Length: 0\r
|
|
710
712
|
\r
|
|
711
|
-
`)
|
|
712
|
-
Caused by: ${
|
|
713
|
-
`,"utf8");let X=$.timeoutMs??300000,A=$.pollIntervalMs??200,P=Date.now();while(Date.now()-P<X){try{let B=await XL(Z,"utf8"),Y=JSON.parse(B),V={approved:Y.approved===!0,reason:typeof Y.reason==="string"?Y.reason:void 0};return await Promise.all([iW(Z),iW(Q)]),V}catch{}await YL(A)}return await iW(Q),{approved:!1,reason:"Tool approval request timed out"}}W0();import*as Qf from"@cline/llms";import{getClineEnvironmentConfig as RL,isOAuthProviderId as FL}from"@cline/shared";function KL(f){return f.apiKey??f.auth?.apiKey}function yL(f){return(f.auth?.accessToken?.trim()??"").length>0}function NX(f){return f.split(/[-_]/).filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}function UL(f){let $=f.split(/\s+/).filter(Boolean);if($.length===0)return"?";if($.length===1)return $[0].slice(0,2).toUpperCase();return`${$[0][0]}${$[1][0]}`.toUpperCase()}function GL(f){let $=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let W of f)J=J*31+W.charCodeAt(0)>>>0;return $[J%$.length]}function qX(f){return Object.entries(f).sort(([$],[J])=>$.localeCompare(J)).map(([$,J])=>SZ($,J))}async function TL(f,$){let J=await Qf.getModelsForProvider(f);if(!$)return J;let W=await U6(f,{loadPrivateOnAuth:!0,failOnError:!1},$);return W?.knownModels?{...J,...W.knownModels}:J}function nW(f){return[...new Set((f??[]).map(($)=>$.trim()).filter(Boolean))]}function wX(f){let $=Object.entries(f??{}).filter(([J])=>J.trim().length>0);return $.length>0?Object.fromEntries($):void 0}function aW(f,$){let J=$?.includes("vision")??!1,W=$?.includes("reasoning")??!1;return Object.fromEntries(f.map((H)=>[H,{id:H,name:H,supportsVision:J,supportsAttachments:J,supportsReasoning:W}]))}async function bX(f){if(!f.shouldRecompute)return f.fallbackModelIds??[];let $=f.modelsSourceUrl?await z2(f.modelsSourceUrl,f.providerId):[];return[...new Set([...f.explicitModels??[],...$])]}function CX(f,$){let J=f.read(),W=!1;if(J.providers[$])delete J.providers[$],W=!0;if(J.lastUsedProvider===$)delete J.lastUsedProvider,W=!0;if(W)f.write(J);Qf.unregisterProvider($)}async function DL(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let W=$.baseUrl.trim(),H=$.apiKey?.trim()??"";if(!W&&!H){let R=K$(f);if((await s$(R)).providers[J]){let K=await SX(f,{providerId:J});return{providerId:J,settingsPath:K.settingsPath,modelsPath:K.modelsPath,modelsCount:0}}return CX(f,J),{providerId:J,settingsPath:f.getFilePath(),modelsPath:R,modelsCount:0}}if(Qf.hasProvider(J))throw Error(`provider "${J}" already exists`);let Q=$.name.trim();if(!Q)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Z=nW($.models),j=$.modelsSourceUrl?.trim(),X=await bX({providerId:J,explicitModels:Z,modelsSourceUrl:j,shouldRecompute:!0});if(X.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let A=$.defaultModelId?.trim()&&X.includes($.defaultModelId.trim())?$.defaultModelId.trim():X[0],P=$.capabilities?.length?[...new Set($.capabilities)]:void 0,B=wX($.headers);f.saveProviderSettings({provider:J,apiKey:H||void 0,baseUrl:W,headers:B,timeout:$.timeoutMs,model:A,protocol:$.protocol,client:$.client},{setLastUsed:!1});let Y=K$(f),V=await s$(Y);return V.providers[J]={provider:{name:Q,baseUrl:W,defaultModelId:A,protocol:$.protocol,client:$.client,capabilities:P,modelsSourceUrl:j},models:aW(X,P)},await J4(Y,V),J2(J,V.providers[J]),{providerId:J,settingsPath:f.getFilePath(),modelsPath:Y,modelsCount:X.length}}async function EX(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let W=K$(f),H=await s$(W),Q=H.providers[J];if(!Q){let M=f.getProviderSettings(J);if(!M)throw Error(`provider "${J}" does not exist`);let T=$.modelsSourceUrl?.trim(),_=nW($.models)[0]??M.model?.trim();if(!_&&!T)throw Error(`provider "${J}" cannot be updated because no model is configured`);Q={provider:{name:$.name?.trim()||NX(J),baseUrl:$.baseUrl?.trim()??M.baseUrl?.trim()??"",defaultModelId:_,protocol:M.protocol,client:M.client,capabilities:M.capabilities},models:_?aW([_],M.capabilities):{}}}if(!Q.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let Z=$.name?.trim()??Q.provider.name.trim();if(!Z)throw Error("name is required");let j=$.baseUrl?.trim()??Q.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let X=$.capabilities===void 0?Q.provider.capabilities:$.capabilities===null?void 0:[...new Set($.capabilities)],A=$.protocol===void 0?Q.provider.protocol:$.protocol??void 0,P=$.client===void 0?Q.provider.client:$.client??void 0,B=nW($.models),Y=$.modelsSourceUrl===void 0?Q.provider.modelsSourceUrl:$.modelsSourceUrl?.trim()||void 0,V=$.models!==void 0||$.modelsSourceUrl!==void 0&&!!Y,R=Object.keys(Q.models??{}).map((M)=>M.trim()).filter(Boolean),U=await bX({providerId:J,explicitModels:B,modelsSourceUrl:Y,fallbackModelIds:R,shouldRecompute:V});if(U.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let K=$.defaultModelId===void 0?Q.provider.defaultModelId?.trim():$.defaultModelId?.trim(),F=K&&U.includes(K)?K:U[0],D={...f.getProviderSettings(J)??{},provider:J,baseUrl:j,model:F};if(A)D.protocol=A;else delete D.protocol;if(P)D.client=P;else delete D.client;if($.apiKey!==void 0){let M=$.apiKey?.trim()??"";if(M)D.apiKey=M;else delete D.apiKey}if($.headers!==void 0){let M=wX($.headers);if(M)D.headers=M;else delete D.headers}if($.timeoutMs!==void 0)if(typeof $.timeoutMs==="number")D.timeout=$.timeoutMs;else delete D.timeout;return f.saveProviderSettings(D,{setLastUsed:!1}),H.providers[J]={provider:{name:Z,baseUrl:j,defaultModelId:F,protocol:A,client:P,capabilities:X,modelsSourceUrl:Y},models:aW(U,X)},await J4(W,H),J2(J,H.providers[J]),{providerId:J,settingsPath:f.getFilePath(),modelsPath:W,modelsCount:U.length}}async function SX(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let W=K$(f),H=await s$(W);if(!H.providers[J])throw Error(`provider "${J}" does not exist`);return delete H.providers[J],await J4(W,H),Qf.unregisterProvider(J),CX(f,J),{providerId:J,settingsPath:f.getFilePath(),modelsPath:W}}async function _L(f){let $=f.read(),J=Qf.getProviderIds().sort((H,Q)=>H.localeCompare(Q));return{providers:await Promise.all(J.map(async(H)=>{let[Q,Z]=await Promise.all([Qf.getProvider(H),Qf.getModelsForProvider(H)]),j=qX(Z),X=$.providers[H]?.settings,A=Q?.name??NX(H);return{id:H,name:A,models:j.length,color:GL(H),letter:UL(A),enabled:Boolean(X),apiKey:X?KL(X):void 0,oauthAccessTokenPresent:X?yL(X):void 0,baseUrl:X?.baseUrl??Q?.baseUrl,defaultModelId:Q?.defaultModelId,protocol:X?.protocol??Q?.protocol,client:X?.client??Q?.client,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",modelList:j}})),settingsPath:f.getFilePath()}}async function ML(f,$){let J=f.trim(),W=await TL(J,$),H=qX(W);return{providerId:J,models:H}}function LL(f,$){let J=$.providerId.trim();if($.enabled===!1){let Q=f.read();if(delete Q.providers[J],Q.lastUsedProvider===J)delete Q.lastUsedProvider;return f.write(Q),{providerId:J,enabled:!1,settingsPath:f.getFilePath()}}let H={...f.getProviderSettings(J)??{},provider:J};for(let Q of["apiKey","baseUrl","model","region"])if(Object.hasOwn($,Q)&&typeof $[Q]==="string")if($[Q].trim().length===0)delete H[Q];else H[Q]=$[Q];for(let Q of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn($,Q))H[Q]=$[Q];for(let Q of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn($,Q)&&$[Q]!=null)H[Q]={...typeof H[Q]==="object"&&H[Q]!=null?H[Q]:{},...$[Q]};return f.saveProviderSettings(H,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:f.getFilePath()}}async function hL(f,$){let J=$.trim(),W=f.getProviderSettings(J),Q=Qf.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,Z=W?.baseUrl?.trim()||Q?.baseUrl?.trim(),j=N2(Z,Q?.baseUrl,Q?.modelsSourceUrl);if(!W||!Q||!Z||!j)return{providerId:J,refreshed:!1};let X=await EX(f,{providerId:J,name:Q.name,baseUrl:Z,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??Q.protocol??null,client:W.client??Q.client??null,capabilities:W.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:X.modelsCount}}function OL(f){let $=f.trim().toLowerCase();if($==="codex"||$==="openai-codex")return"openai-codex";if($==="cline"||$==="oca")return $;throw Error(`provider "${f}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function zL(f,$){if(f==="cline")return $.access.startsWith("workos:")?$.access:`workos:${$.access}`;return $.access}async function NL(f,$,J){let W=S4({onPrompt:async(H)=>H.defaultValue??"",openUrl:J,onOpenUrlError:({error:H})=>{throw H instanceof Error?H:Error(String(H))}});if(f==="cline")return _2({apiBaseUrl:$?.baseUrl?.trim()||RL().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:W});if(f==="oca")return O2({mode:$?.oca?.mode,callbacks:W});return L2(W)}function qL(f,$,J,W){let H={...J?.auth??{},accessToken:zL($,W),refreshToken:W.refresh,accountId:W.accountId,expiresAt:W.expires},Q={...J??{provider:$},provider:$,auth:H};return f.saveProviderSettings(Q,{tokenSource:"oauth"}),Q}function wL(f){let $=f?.auth?.accessToken?.trim()||f?.apiKey?.trim();return $&&$.length>0?$:void 0}var bL=new Set(["ollama","lmstudio","litellm"]);function CL(f,$){if(!$?.provider.baseUrl)return!1;if($.provider.source!=="system")return!0;return bL.has(f)}function EL(f){let $=Qf.normalizeProviderId(f);if(FL($))return{providerId:$,authMethod:"oauth",fields:{}};let J=Qf.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=J?.provider.baseUrl,H={apiKey:{}};if(CL($,J))H.baseUrl={defaultValue:W};return{providerId:$,authMethod:"api-key",fields:H}}Uf();L4();import{appendFileSync as SL,existsSync as tW,mkdirSync as kL,readFileSync as IL,renameSync as mL,unlinkSync as xL,writeFileSync as gL}from"node:fs";import{join as sW}from"node:path";import{resolveTeamDataDir as vL}from"@cline/shared/storage";function uL(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class kX{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor(f){let $=uL(f.teamName),J=f.baseDir?.trim()||vL();this.dirPath=sW(J,$),this.statePath=sW(this.dirPath,"state.json"),this.taskHistoryPath=sW(this.dirPath,"task-history.jsonl")}loadState(){if(!tW(this.statePath))return;try{let f=IL(this.statePath,"utf8"),$=JSON.parse(f);if($.version!==1||!$.teamState)return;for(let J of $.teammates??[])this.teammateSpecs.set(J.agentId,J);return r7($.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec(f){this.teammateSpecs.set(f.agentId,f)}removeTeammateSpec(f){this.teammateSpecs.delete(f)}persist(f){if(!this.hasPersistableState(f)){this.clearPersistedState();return}this.ensureDir();let $={version:1,updatedAt:new Date().toISOString(),teamState:f.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;gL(J,`${JSON.stringify($,null,2)}
|
|
714
|
-
`,"utf8"),
|
|
715
|
-
`,"utf8")}ensureDir(){if(!tW(this.dirPath))kL(this.dirPath,{recursive:!0})}hasPersistableState(f){let $=f.exportState();if(this.teammateSpecs.size>0)return!0;if($.members.some((J)=>J.role==="teammate"))return!0;return $.tasks.length>0||$.mailbox.length>0||$.missionLog.length>0}clearPersistedState(){if(tW(this.statePath))xL(this.statePath)}}import{z}from"zod";var IX=z.object({workspaceRoot:z.string().min(1),cwd:z.string().optional(),provider:z.string().min(1),model:z.string().min(1),mode:z.enum(["act","plan"]).default("act"),apiKey:z.string(),systemPrompt:z.string().optional(),rules:z.string().optional(),maxIterations:z.number().int().positive().optional(),enableTools:z.boolean(),enableSpawn:z.boolean().optional(),enableTeams:z.boolean().optional(),autoApproveTools:z.boolean().optional(),missionStepInterval:z.number().int().positive().optional(),missionTimeIntervalMs:z.number().int().positive().optional()}),mX=z.enum(["idle","starting","running","stopping","completed","cancelled","failed","error"]),xX=z.enum(["user","assistant","tool","system","status","error"]),gX=z.object({id:z.string().min(1),sessionId:z.string().nullable(),role:xX,content:z.string(),createdAt:z.number().int().nonnegative(),meta:z.object({stream:z.enum(["stdout","stderr"]).optional(),toolName:z.string().optional(),iteration:z.number().int().nonnegative().optional(),agentId:z.string().optional(),conversationId:z.string().optional(),hookEventName:z.string().optional(),inputTokens:z.number().int().nonnegative().optional(),outputTokens:z.number().int().nonnegative().optional(),checkpoint:z.object({ref:z.string(),createdAt:z.number().int().nonnegative(),runCount:z.number().int().positive(),kind:z.enum(["stash","commit"]).optional()}).optional()}).optional()}),vX=z.object({toolCalls:z.number().int().nonnegative(),tokensIn:z.number().int().nonnegative(),tokensOut:z.number().int().nonnegative()}),cL=z.object({sessionId:z.string().nullable(),status:mX,config:IX,messages:z.array(gX),rawTranscript:z.string(),error:z.string().nullable(),summary:vX});var dL=sQ;import{Agent as Vc,createAgentRuntime as Rc}from"@cline/agents";import{getClineEnvironmentConfig as rL}from"@cline/shared";var lL=5000,cX={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function pL(f){return{recommended:f.recommended.map(($)=>({...$,tags:[...$.tags]})),free:f.free.map(($)=>({...$,tags:[...$.tags]}))}}function uX(f){if(!f||typeof f!=="object")return null;let $=f;if(typeof $.id!=="string"||$.id.length===0)return null;return{id:$.id,name:typeof $.name==="string"&&$.name.length>0?$.name:$.id,description:typeof $.description==="string"?$.description:"",tags:Array.isArray($.tags)?$.tags.filter((J)=>typeof J==="string"):[]}}function iL(f){if(!f||typeof f!=="object")return null;let $=f,J=Array.isArray($.recommended)?$.recommended:[],W=Array.isArray($.free)?$.free:[],H=J.map(uX).filter((Z)=>Z!==null),Q=W.map(uX).filter((Z)=>Z!==null);if(H.length===0&&Q.length===0)return null;return{recommended:H,free:Q}}function nL(f){let $=f.baseUrl?.trim();if($)return $;let J=rL().apiBaseUrl;try{return(f.providerSettingsManager??new x0).getProviderSettings("cline")?.baseUrl?.trim()||J}catch{return J}}async function aL(f,$,J){let W=new AbortController,H=setTimeout(()=>W.abort(),J);try{return await f($,{signal:W.signal})}finally{clearTimeout(H)}}async function tL(f={}){try{let $=nL(f),J=f.fetchImpl??fetch,W=await aL(J,`${$}/api/v1/ai/cline/recommended-models`,f.timeoutMs??lL);if(!W.ok)throw Error(`HTTP ${W.status}`);let H=await W.json(),Q=iL(H);if(Q)return Q}catch{}return pL(cX)}import{readFile as sL}from"node:fs/promises";import oL from"node:path";function eL(f){return f}async function fh(f){let $=oL.resolve(f),J=await sL($,"utf8"),W;try{W=JSON.parse(J)}catch(H){let Q=H instanceof Error?H.message:String(H);throw Error(`Failed to parse JSON config at "${$}": ${Q}`)}return $h(W,$)}function $h(f,$){if(!f||typeof f!=="object")throw Error(`Invalid llms config in "${$}": expected an object.`);let W=f.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${$}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${$}": "providers" cannot be empty.`);return f}import{BUILT_IN_PROVIDER_IDS as lX,createHandler as Hh,createHandlerAsync as Qh,getProviderCollection as Zh,hasProvider as pX,registerAsyncHandler as jh,registerHandler as Xh,registerModel as Ah,registerProvider as iX}from"@cline/llms";function dX(f){return f?{...f}:{}}function Jh(f,$){if(f)return f;if(!$)return;let J=globalThis.process;if(!J?.env)return;return J.env[$]}function Wh(f,$){if(!$.length)throw Error(`Provider "${f}" must include at least one model.`)}function rX(f){let $=Object.keys(f.collection.models);return{id:f.collection.provider.id,name:f.collection.provider.name,description:f.collection.provider.description,protocol:f.collection.provider.protocol,baseUrl:f.collection.provider.baseUrl,capabilities:f.collection.provider.capabilities,env:f.collection.provider.env,models:$,defaultModel:f.collection.provider.defaultModelId,modelCount:$.length}}class oW{providers=new Map;register(f){Wh(f.id,f.models);let $=f.defaultModel??f.models[0];if(!$)throw Error(`Provider "${f.id}" must define a default model.`);if(!f.models.includes($))throw Error(`Default model "${$}" is not included in configured models for "${f.id}".`);let J=this.providers.get(f.id);this.providers.set(f.id,{id:f.id,models:new Set([...J?.models??[],...f.models]),defaultModel:$,defaults:{...J?.defaults??{},...dX(f.defaults)}})}registerSelectionConfig(f){this.register({id:f.id,models:f.models,defaultModel:f.defaultModel,defaults:{apiKey:Jh(f.apiKey,f.apiKeyEnv),routingProviderId:f.builtinProviderId,baseUrl:f.baseUrl,headers:f.headers,timeoutMs:f.timeoutMs,capabilities:f.capabilities,...dX(f.settings)}})}registerModel(f,$){let J=this.providers.get(f);if(!J){this.providers.set(f,{id:f,models:new Set([$]),defaultModel:$,defaults:{}});return}J.models.add($)}createHandlerConfig(f){let $=this.require(f.providerId),J=f.modelId??$.defaultModel;if(!$.models.has(J))throw Error(`Model "${J}" is not configured for provider "${f.providerId}".`);return{providerId:f.providerId,modelId:J,...$.defaults,...f.overrides}}list(){return Array.from(this.providers.values()).map((f)=>({id:f.id,models:Array.from(f.models),defaultModel:f.defaultModel}))}getModels(f){return Array.from(this.require(f).models)}hasProvider(f){return this.providers.has(f)}hasModel(f,$){return this.providers.get(f)?.models.has($)??!1}require(f){let $=this.providers.get(f);if(!$)throw Error(`Provider "${f}" is not configured in this SDK instance.`);return $}}class eW{configuredProviders=new oW;constructor(f){this.applyConfig(f)}createHandler(f){return Hh(this.configuredProviders.createHandlerConfig(f))}async createHandlerAsync(f){return Qh(this.configuredProviders.createHandlerConfig(f))}registerProvider(f){if(iX(f.collection),f.handlerFactory&&f.asyncHandlerFactory)throw Error(`Provider "${f.collection.provider.id}" cannot register both sync and async handlers.`);if(f.handlerFactory)Xh(f.collection.provider.id,f.handlerFactory);if(f.asyncHandlerFactory)jh(f.collection.provider.id,f.asyncHandlerFactory);this.configuredProviders.register({id:f.collection.provider.id,models:f.exposeModels??Object.keys(f.collection.models),defaultModel:f.defaultModel??f.collection.provider.defaultModelId,defaults:f.defaults})}registerBuiltinProvider(f){let $=f.exposeModels??Object.keys(f.models),J=f.defaultModel??$[0];if(!J)throw Error(`Provider "${f.id}" must define a default model.`);iX({provider:{id:f.id,name:f.name??f.id,description:f.description,protocol:f.protocol,baseUrl:f.baseUrl,defaultModelId:J,client:f.client??"openai-compatible",capabilities:f.capabilities,env:f.env,source:"system"},models:f.models}),this.configuredProviders.register({id:f.id,models:$,defaultModel:J,defaults:{routingProviderId:f.builtinProviderId,...f.defaults??{}}})}registerModel(f){Ah(f.providerId,f.modelId,f.info),this.configuredProviders.registerModel(f.providerId,f.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...lX]}async getBuiltInProviders(){return(await Promise.all(lX.map(($)=>Zh($)))).filter(($)=>$!==void 0).map(($)=>rX({collection:$}))}getModels(f){return this.configuredProviders.getModels(f)}isProviderConfigured(f){return this.configuredProviders.hasProvider(f)}isModelConfigured(f,$){return this.configuredProviders.hasModel(f,$)}applyConfig(f){for(let $ of f.providers)this.configuredProviders.registerSelectionConfig($);for(let $ of f.models??[])this.registerModel($);for(let $ of f.customProviders??[])this.registerProvider($);for(let $ of this.configuredProviders.list()){let J=pX($.id),W=this.configuredProviders.createHandlerConfig({providerId:$.id,modelId:$.defaultModel}).routingProviderId,H=typeof W==="string"&&pX(W);if(!J&&!H)throw Error(`Provider "${$.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function Ph(f){return new eW(f)}qW();async function $u(){return Promise.resolve().then(() => (pW(),MX))}export{Q7 as writeHubDiscovery,x$ as writeGlobalSettings,Z7 as withHubStartupLock,w0 as verifyHubConnection,EX as updateLocalProvider,EW as truncateNotificationBody,XJ as toggleDisabledTool,v8 as toTeamProgressLifecycleEvent,f0 as toProviderConfig,GK as toHubHealthUrl,i5 as toHookConfigFileName,r8 as summarizeUsageFromMessages,Dy as stopLocalHubServerGracefully,r0 as startLocalOAuthServer,lW as startHubWebSocketServer,sg as startHubServer,KA as startClineDeviceAuth,OJ as splitCoreSessionConfig,b8 as spawnDetachedHubServerWithRetry,fy as spawnDetachedHubServer,DV as setTelemetryOptOutGlobally,d3 as setDisabledTools,LV as setDisabledPlugin,im as sendHubCommand,LL as saveLocalProviderSettings,qL as saveLocalProviderOAuthCredentials,I1 as sanitizeSessionToken,pH as safeParseSettings,NP as safeCreateProviderConfig,R4 as runSubprocessEvent,K4 as runHook,q3 as reviveTeamStateDates,G7 as restartLocalHubIfIdleAfterStartupTimeout,Ab as resolveWorkspaceHubOwnerContext,k6 as resolveWorkflowsConfigSearchPaths,E6 as resolveSkillsConfigSearchPaths,yf as resolveSharedHubOwnerContext,J_ as resolveSessionBackend,S6 as resolveRulesConfigSearchPaths,U6 as resolveProviderConfig,DJ as resolvePluginConfigSearchPaths,BW as resolveMcpServerRegistrations,wL as resolveLocalClineAuthToken,a_ as resolveHubUrl,j$ as resolveHubOwnerContext,q0 as resolveHubEndpointOptions,d$ as resolveHubBuildId,l5 as resolveHooksConfigSearchPaths,rf as resolveDisabledToolNames,V8 as resolveDisabledPluginPaths,f1 as resolveDefaultMcpSettingsPath,w8 as resolveDefaultHubPort,wK as resolveDefaultHubPathname,qK as resolveDefaultHubHost,E3 as resolveCoreSelectedToolIds,F5 as resolveCompatibleLocalHubUrl,fb as resolveClineDir,A5 as resolveClineDataDir,U8 as resolveAndLoadAgentPlugins,O1 as resolveAgentPluginPaths,P5 as requestHubShutdown,VL as requestDesktopToolApproval,r$ as rememberRecoverableLocalHubUrl,OX as registerRemoteConfigSessionBlobUpload,Z4 as registerMcpServersFromSettingsFile,Ku as registerDisposable,hL as refreshProviderModelsFromSource,J6 as refreshOpenAICodexToken,X6 as refreshOcaToken,f6 as refreshClineToken,ZW as readSessionCheckpointHistory,WL as readRemoteConfigSessionBlobUploadMetadata,Yf as readHubDiscovery,J0 as readGlobalSettings,Kf as probeHubServer,pm as probeHubConnection,g9 as prewarmFileIndex,A7 as prewarmDetachedHubServer,ZL as prepareRemoteConfigCoreIntegration,C6 as parseWorkflowConfigFromMarkdown,Fu as parseUserCommandEnvelope,w6 as parseSkillConfigFromMarkdown,lH as parseSettings,b6 as parseRuleConfigFromMarkdown,F4 as parseHookEventPayload,OA as openaiCodexOAuthProvider,J$ as normalizeWorkspacePath,Ru as normalizeUserInput,Ff as normalizeRuntimeCapabilities,C2 as normalizeProviderId,hA as normalizeOpenAICodexCredentials,OL as normalizeOAuthProvider,l$ as normalizeHubWebSocketUrl,Vu as noopBasicLogger,WW as migrateLegacyProviderSettings,g2 as mergeRulesForSystemPrompt,$2 as mergeAgentHooks,nJ as makeTeamTaskSubSessionId,L8 as makeSubSessionId,L2 as loginOpenAICodex,O2 as loginOcaOAuth,NL as loginLocalProvider,_2 as loginClineOAuth,$u as loadOpenTelemetryAdapter,PW as loadMcpSettingsFile,fh as loadLlmsConfigFromFile,$$ as loadAgentPluginsFromPathsWithDiagnostics,HQ as loadAgentPluginsFromPaths,UJ as loadAgentPluginFromPath,HK as listSessionHistoryFromBackend,MJ as listPluginTools,_L as listLocalProviders,a$ as listHookConfigFiles,_V as isToolDisabledGlobally,jJ as isTelemetryOptedOutGlobally,Z9 as isRuleEnabled,MV as isPluginDisabledGlobally,LA as isOpenAICodexTokenExpired,Ry as isHubReconnectableTransportError,y7 as isHubCommandTimeoutError,Wb as isDiscoveryFilePresent,QH as isClineAccountActionRequest,LP as isBuiltInProviderId,K0 as identifyAccount,Q4 as hasMcpSettingsFile,W6 as getValidOpenAICodexCredentials,A6 as getValidOcaCredentials,$6 as getValidClineCredentials,EL as getProviderConfigFields,SH as getProviderConfig,ML as getLocalProviderModels,b2 as getLiveModelsCatalog,t0 as getFileIndex,fG as getCurrentContextSize,ZJ as getCoreHeadlessToolNames,C3 as getCoreDefaultEnabledToolIds,T1 as getCoreBuiltinToolCatalog,S3 as getCoreAcpToolNames,Qu as getClineDefaultSystemPrompt,bJ as generateWorkspaceInfoWithDiagnostics,_8 as generateWorkspaceInfo,OH as generateOcaOpcRequestId,x2 as formatRulesForSystemPrompt,Yu as formatDisplayUserInput,PJ as filterExtensionToolRegistrations,g$ as filterDisabledTools,AJ as filterDisabledPluginPaths,tL as fetchClineRecommendedModels,ZH as executeClineAccountAction,_X as ensureHubWebSocketServer,og as ensureHubServer,Tb as ensureDetachedHubServer,vZ as ensureCustomProvidersLoaded,d1 as ensureCompatibleLocalHubUrl,f8 as enrichPromptWithMentions,Bu as emptyWorkspaceManifest,t$ as emptyStoredProviderSettings,_J as discoverPluginModulePaths,aJ as deriveSubsessionStatus,SX as deleteLocalProvider,eL as defineLlmsConfig,x6 as createWorkflowsConfigDefinition,m$ as createUserInstructionConfigService,d9 as createToolPoliciesWithPreset,Pu as createTool,Rj as createTeamName,zj as createSubprocessHooks,I$ as createSpawnAgentTool,I6 as createSkillsConfigDefinition,V4 as createSessionHost,V4 as createRuntimeHost,m6 as createRulesConfigDefinition,QL as createRemoteConfigSessionMessagesArtifactUploader,zP as createProviderConfig,_4 as createOpenTelemetryTelemetryService,iA as createOcaRequestHeaders,pA as createOcaOAuthProvider,S4 as createOAuthClientCallbacks,X4 as createMcpTools,Hx as createLocalHubScheduleRuntimeHandlers,Ph as createLlmsSdk,Vf as createInitialAccumulatedUsage,Jb as createInMemoryHubOwnerContext,Q0 as createHubServerUrl,H7 as createHubAuthToken,s5 as createHookConfigFileHooks,t8 as createHookConfigFileExtension,a8 as createHookAuditHooks,YW as createDisabledMcpToolPolicy,Zj as createDisabledMcpToolPolicies,Z8 as createDelegatedAgentConfigProvider,j8 as createDelegatedAgent,r9 as createDefaultToolsWithPreset,E$ as createDefaultTools,H4 as createDefaultMcpServerClientFactory,H8 as createDefaultExecutors,z1 as createCoreSettingsService,b0 as createCoreSessionSnapshot,Au as createContributionRegistry,c5 as createContextCompactionPrepareTurn,G$ as createConfiguredTelemetryService,M4 as createConfiguredTelemetryHandle,Xu as createClineTelemetryServiceMetadata,ju as createClineTelemetryServiceConfig,UA as createClineOAuthProvider,D1 as createBuiltinTools,G1 as createAgentTeamsTools,Rc as createAgentRuntime,l8 as createAgentHooksExtension,Cj as connectToHub,yA as completeClineDeviceAuth,DP as clearPrivateModelsCatalogCache,TP as clearLiveModelsCatalogCache,pf as clearHubDiscovery,WA as captureWorkspacePathResolved,k4 as captureWorkspaceInitialized,I4 as captureWorkspaceInitError,u4 as captureToolUsage,g4 as captureTokenUsage,x4 as captureTaskRestarted,m4 as captureTaskCreated,K2 as captureTaskCompleted,U2 as captureSubagentExecution,c4 as captureSkillUsed,y2 as captureProviderApiError,v4 as captureModeSwitch,r4 as captureMentionUsed,p4 as captureMentionSearchResults,l4 as captureMentionFailed,n4 as captureHookDiscovery,JA as captureExtensionActivated,d4 as captureDiffEditFailure,Q1 as captureConversationTurnEvent,R0 as captureAuthSucceeded,V0 as captureAuthStarted,c0 as captureAuthLoggedOut,F0 as captureAuthFailed,i4 as captureAgentTeamCreated,d0 as captureAgentCreated,CJ as buildWorkspaceMetadata,g8 as buildTeamProgressSummary,LX as buildRemoteConfigSessionBlobUploadMetadata,y1 as buildDelegatedAgentConfig,P8 as bootstrapAgentTeams,DL as addLocalProvider,Xf as accumulateUsageTotals,O6 as WORKFLOWS_CONFIG_DIRECTORY_NAME,A1 as UnifiedConfigFileWatcher,df as ToolPresets,P2 as TelemetryService,D4 as TelemetryLoggerSink,A8 as TEAM_TOOL_NAMES,F8 as SubprocessSandbox,o8 as StoredProviderSettingsSchema,_Z as StoredProviderSettingsEntrySchema,Q2 as SqliteTeamStore,E0 as SqliteSessionStore,e$ as SessionVersioningService,gf as SessionVersioningError,Rf as SessionSource,cH as SapSettingsSchema,h6 as SKILLS_CONFIG_DIRECTORY_NAME,D6 as SESSION_STATUSES,E4 as RpcClineAccountService,E8 as RemoteRuntimeHost,xH as ReasoningSettingsSchema,f9 as RULES_CONFIG_DIRECTORY_NAME,hX as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,q$ as ProviderSettingsSchema,x0 as ProviderSettingsManager,kH as ProviderProtocolSchema,T6 as ProviderIdSchema,IH as ProviderClientSchema,B2 as OpenTelemetryProvider,dH as OcaSettingsSchema,y6 as OPENAI_COMPATIBLE_PROVIDERS,Z0 as NodeHubClient,dW as NativeHubTransportAdapter,rH as ModelCatalogSettingsSchema,g0 as LocalRuntimeHost,Wu as Llms,e8 as InMemoryWorkspaceManager,H2 as InMemoryMcpManager,fM as HubUIClient,bf as HubTransportError,e_ as HubSessionClient,q4 as HubServerTransport,T4 as HubScheduleService,y4 as HubScheduleCommandService,P$ as HubRuntimeHost,C8 as HubCommandError,hj as HookEventPayloadSchema,Lj as HookEventNameSchema,p8 as HookConfigFileName,p5 as HOOK_CONFIG_FILE_EVENT_MAP,VZ as HOOKS_CONFIG_DIRECTORY_NAME,Y8 as GlobalSettingsSchema,vH as GcpSettingsSchema,kX as FileTeamPersistenceStore,cX as FALLBACK_CLINE_RECOMMENDED_MODELS,Hf as DefaultToolNames,P4 as DefaultRuntimeBuilder,eW as DefaultLlmsSdk,bH as DEFAULT_MODELS_CATALOG_URL,zK as DEFAULT_HUB_PORT,NK as DEFAULT_HUB_PATHNAME,OK as DEFAULT_HUB_HOST,c$ as CoreSettingsService,S0 as CoreSessionService,Zu as ContributionRegistry,NW as ClineCore,C4 as ClineAccountService,cL as ChatViewStateSchema,vX as ChatSummarySchema,mX as ChatSessionStatusSchema,IX as ChatSessionConfigSchema,gX as ChatMessageSchema,xX as ChatMessageRoleSchema,x as CORE_TELEMETRY_EVENTS,dL as CORE_BUILD_VERSION,cW as BrowserWebSocketHubAdapter,MP as BUILT_IN_PROVIDER_IDS,G6 as BUILT_IN_PROVIDER,uH as AzureSettingsSchema,gH as AwsSettingsSchema,mH as AuthSettingsSchema,n1 as AgentTeamsRuntime,h5 as AgentTeam,Vc as Agent,b$ as ALL_DEFAULT_TOOL_NAMES};
|
|
713
|
+
`),$.end()}catch{$.destroy()}}function tH($,f){if(!$||!f)return!1;let J=Buffer.from($,"utf8"),Q=Buffer.from(f,"utf8");return J.length===Q.length&&ry(J,Q)}function sH($,f){let J=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",Z=`Failed to start hub server on ${f.host}:${f.port}${f.pathname}: ${Q}`,W=Error(J?`${Z} (${J})`:Z);if(J)$.code=J,W.code=J;if($ instanceof Error&&$.stack)W.stack=`${W.name}: ${W.message}
|
|
714
|
+
Caused by: ${$.stack}`;return W}async function $T($){return await new Promise((f,J)=>{let Q=ny.createServer();Q.once("error",J),Q.listen(0,$,()=>{let Z=Q.address();if(!Z||typeof Z==="string"){Q.close(()=>J(Error("Failed to resolve free port")));return}let W=Z.port;Q.close((j)=>{if(j){J(j);return}f(W)})})})}function fT($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var Y7=new Map,oH="cline-hub-auth.",JT=30000;function eH($){return Array.isArray($)?$.join(","):$??""}function QT($){let f=eH($).trim();return/^Bearer\s+(.+)$/i.exec(f)?.[1]?.trim()||null}function ZT($){for(let f of eH($).split(",")){let J=f.trim();if(J.startsWith(oH))return J.slice(oH.length).trim()||null}return null}async function V7($){let f=$.owner??A1(),J=$.host??"127.0.0.1",Q=$.pathname??"/hub",Z=$.port??t8(),W=Z===0?await $T(J):Z,j=W,X=j$(J,W,Q),H=i1(),Y=cW(),V=new i4($);await V.start();let A=new X7(new H7(V),$.telemetry),B=new Set,K=new Date().toISOString(),G={protocolVersion:"v1",buildId:H,pid:process.pid,startedAt:K},R=new Set,F,P,D=async()=>{if(P)return P;return P=(async()=>{if(F)clearInterval(F),F=void 0;for(let z of R)z.terminate?.();R.clear();for(let z of B)z();if(B.clear(),await new Promise((z,y)=>{_.close((N)=>{if(N){y(N);return}z()})}),await new Promise((z,y)=>{O.close((N)=>{if(N){y(N);return}z()})}),await V.stop(),(await B0(f.discoveryPath))?.url===X)await n0(f.discoveryPath)})(),P},O=iy.createServer((L,z)=>{if((L.url??"/")==="/health"){let N=JSON.stringify({hubId:V.getHubId(),...G,authToken:"",host:J,port:j,url:X,updatedAt:new Date().toISOString()});z.statusCode=200,z.setHeader("content-type","application/json"),z.end(N);return}if((L.url??"/")==="/version"){z.statusCode=200,z.setHeader("content-type","application/json"),z.end(JSON.stringify(G));return}if(new aH(L.url??"/",`http://${J}:${j}`).pathname==="/shutdown"&&L.method==="POST"){if(!tH(QT(L.headers.authorization),Y)){z.statusCode=401,z.end("Unauthorized");return}z.statusCode=202,z.setHeader("content-type","application/json"),z.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}z.statusCode=404,z.end("Not found")}),_=new ay({noServer:!0});F=setInterval(()=>{for(let L of R){if(L.isAlive===!1){try{L.terminate?.()}catch{}R.delete(L);continue}L.isAlive=!1;try{L.ping?.()}catch{try{L.terminate?.()}catch{}R.delete(L)}}},JT),O.on("upgrade",(L,z,y)=>{if(new aH(L.url??"/",`http://${J}:${j}`).pathname!==Q){z.destroy();return}if(!tH(ZT(L.headers["sec-websocket-protocol"]),Y)){ey(z);return}try{_.handleUpgrade(L,z,y,(e)=>{let $0=e;$0.isAlive=!0,$0.on("pong",()=>{$0.isAlive=!0}),R.add($0);let a=A.attach(sy(e));B.add(a),e.once("close",()=>{R.delete($0),a(),B.delete(a)})})}catch{oy(z)}});try{await new Promise((L,z)=>{O.once("error",(y)=>{z(sH(y,{host:J,port:W,pathname:Q}))}),O.listen(W,J,()=>{let y=O.address();if(!y||typeof y==="string"){z(sH(Error("Failed to resolve hub port"),{host:J,port:W,pathname:Q}));return}j=y.port,X=j$(J,j,Q),L()})})}catch(L){if(F)clearInterval(F),F=void 0;throw await V.stop().catch(()=>{return}),L}return await uW(f.discoveryPath,{hubId:V.getHubId(),protocolVersion:"v1",buildId:H,authToken:Y,host:J,port:j,url:X,pid:process.pid,startedAt:K,updatedAt:K}),{host:J,port:j,url:X,authToken:Y,close:D}}async function $Y($){let f=$.owner??A1(),J=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",Z=$.port??t8(),W=$.pathname??"/hub",j=j$(Q,Z,W),X=f.discoveryPath,H=(V)=>{if(!J)n1(V.url,V.authToken);return V},Y=Y7.get(X);if(Y){let V=await Y;if(V.url===j)return H({server:V,url:V.url,authToken:V.authToken,action:"reuse"})}return await dW(f.discoveryPath,async()=>{let V=await B0(f.discoveryPath);if(V?.url&&(V.url===j||$.allowPortFallback===!0)){let G=await F0(V.url);if(G?.url&&await h$(G.url,{authToken:V.authToken}))return H({url:G.url,authToken:V.authToken,action:"reuse"})}if((await F0(j))?.url||V?.url)await n0(f.discoveryPath);let K=async(G)=>{let R=V7({...G,owner:f});Y7.set(X,R);try{let F=await R;return H({server:F,url:F.url,authToken:F.authToken,action:"started"})}catch(F){throw Y7.delete(X),F}};try{return await K($)}catch(G){if(!$.allowPortFallback||!fT(G))throw G;return await K({...$,port:0})}})}async function _c($){let f=C$({host:$.host,port:$.port,pathname:$.pathname});return await V7({...$,...f,owner:D0()})}async function yc($){let f=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=C$({host:$.host,port:$.port,pathname:$.pathname});return await $Y({...$,...J,allowPortFallback:$.allowPortFallback??!f,owner:D0()})}A7();import{buildRemoteConfigSessionBlobUploadMetadata as JY,clearRemoteConfigSessionBlobUpload as WT,createClineTelemetryServiceConfig as jT,createSessionId as XT,createRemoteConfigSessionMessagesArtifactUploader as HT,prepareRemoteConfigRuntime as YT,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as QY,readRemoteConfigSessionBlobUploadMetadata as VT,registerRemoteConfigSessionBlobUpload as ZY}from"@cline/shared";function AT($,f){let J=$.telemetry||f.telemetryService?{...f.telemetryService??{},...$.telemetry??{}}:void 0;if(!J)return;return _1(jT(J)).telemetry}function BT(){let $=HT();return{async uploadMessagesFile(f){await $.uploadMessagesFile(f)}}}async function KT($){let f=await YT($),J=AT(f,$),Q=[f.pluginDefinition],Z=f.claims?.subject,W=JY(f.bundle?.remoteConfig,Z),j;return{prepared:f,extensions:Q,telemetry:J,applyToStartSessionInput(X){let H=X.config.extensions??[],Y=X.config.telemetry,V=W?X.config.sessionId?.trim()||XT():X.config.sessionId;if(V&&W)j=V;let A=V&&W?ZY(V,f.bundle?.remoteConfig,Z):void 0,B=A?{...X.sessionMetadata??{},[QY]:A}:X.sessionMetadata;return{...X,...B?{sessionMetadata:B}:{},config:{...X.config,...V?{sessionId:V}:{},extensions:[...H,...Q],telemetry:J??Y}}},async dispose(){if(j)WT(j)}}}import{mkdir as GT,readFile as PT,unlink as FT,writeFile as DT}from"node:fs/promises";import{join as WY}from"node:path";function RT($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function UT($){return new Promise((f)=>setTimeout(f,$))}async function B7($){try{await FT($)}catch{}}async function LT($,f={}){let J=f.approvalDir?.trim(),Q=f.sessionId?.trim();if(!J||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await GT(J,{recursive:!0});let Z=RT(`${$.toolCallId}`),W=WY(J,`${Q}.request.${Z}.json`),j=WY(J,`${Q}.decision.${Z}.json`),X=f.nowIso??(()=>new Date().toISOString());await DT(W,`${JSON.stringify({requestId:Z,sessionId:Q,createdAt:X(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
715
|
+
`,"utf8");let H=f.timeoutMs??300000,Y=f.pollIntervalMs??200,V=Date.now();while(Date.now()-V<H){try{let A=await PT(j,"utf8"),B=JSON.parse(A),K={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([B7(j),B7(W)]),K}catch{}await UT(Y)}return await B7(W),{approved:!1,reason:"Tool approval request timed out"}}Z$();import*as W0 from"@cline/llms";import{getClineEnvironmentConfig as OT,isOAuthProviderId as zT}from"@cline/shared";function _T($){return $.apiKey??$.auth?.apiKey}function yT($){return($.auth?.accessToken?.trim()??"").length>0}function jY($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function TT($){let f=$.split(/\s+/).filter(Boolean);if(f.length===0)return"?";if(f.length===1)return f[0].slice(0,2).toUpperCase();return`${f[0][0]}${f[1][0]}`.toUpperCase()}function NT($){let f=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let Q of $)J=J*31+Q.charCodeAt(0)>>>0;return f[J%f.length]}function XY($){return Object.entries($).sort(([f],[J])=>f.localeCompare(J)).map(([f,J])=>OX(f,J))}async function MT($,f){let J=await W0.getModelsForProvider($);if(!f)return J;let Q=await x6($,{loadPrivateOnAuth:!0,failOnError:!1},f);return Q?.knownModels?{...J,...Q.knownModels}:J}function K7($){return[...new Set(($??[]).map((f)=>f.trim()).filter(Boolean))]}function qT($){if(!$?.length)return;return[...new Set($)]}function wT($,f){return qT([...$??[],...f??[]])}function ST($){let f=$?.popularRank;return typeof f==="number"&&Number.isFinite(f)?f:Number.MAX_SAFE_INTEGER}function HY($){let f=Object.entries($??{}).filter(([J])=>J.trim().length>0);return f.length>0?Object.fromEntries(f):void 0}function G7($,f){let J=f?.includes("vision")??!1,Q=f?.includes("reasoning")??!1;return Object.fromEntries($.map((Z)=>[Z,{id:Z,name:Z,supportsVision:J,supportsAttachments:J,supportsReasoning:Q}]))}async function YY($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let f=$.modelsSourceUrl?await m2($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...f])]}function VY($,f){let J=$.read(),Q=!1;if(J.providers[f])delete J.providers[f],Q=!0;if(J.lastUsedProvider===f)delete J.lastUsedProvider,Q=!0;if(Q)$.write(J);W0.unregisterProvider(f)}async function CT($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=f.baseUrl.trim(),Z=f.apiKey?.trim()??"";if(!Q&&!Z){let G=U1($);if((await ff(G)).providers[J]){let F=await BY($,{providerId:J});return{providerId:J,settingsPath:F.settingsPath,modelsPath:F.modelsPath,modelsCount:0}}return VY($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(W0.hasProvider(J))throw Error(`provider "${J}" already exists`);let W=f.name.trim();if(!W)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let j=K7(f.models),X=f.modelsSourceUrl?.trim(),H=await YY({providerId:J,explicitModels:j,modelsSourceUrl:X,shouldRecompute:!0});if(H.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let Y=f.defaultModelId?.trim()&&H.includes(f.defaultModelId.trim())?f.defaultModelId.trim():H[0],V=f.capabilities?.length?[...new Set(f.capabilities)]:void 0,A=HY(f.headers);$.saveProviderSettings({provider:J,apiKey:Z||void 0,baseUrl:Q,headers:A,timeout:f.timeoutMs,model:Y,protocol:f.protocol,client:f.client},{setLastUsed:!1});let B=U1($),K=await ff(B);return K.providers[J]={provider:{name:W,baseUrl:Q,defaultModelId:Y,protocol:f.protocol,client:f.client,capabilities:V,modelsSourceUrl:X},models:G7(H,V)},await y4(B,K),F2(J,K.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:B,modelsCount:H.length}}async function AY($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=U1($),Z=await ff(Q),W=Z.providers[J];if(!W){let _=$.getProviderSettings(J);if(!_)throw Error(`provider "${J}" does not exist`);let L=f.modelsSourceUrl?.trim(),z=K7(f.models)[0]??_.model?.trim();if(!z&&!L)throw Error(`provider "${J}" cannot be updated because no model is configured`);W={provider:{name:f.name?.trim()||jY(J),baseUrl:f.baseUrl?.trim()??_.baseUrl?.trim()??"",defaultModelId:z,protocol:_.protocol,client:_.client,capabilities:_.capabilities},models:z?G7([z],_.capabilities):{}}}if(!W.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let j=f.name?.trim()??W.provider.name.trim();if(!j)throw Error("name is required");let X=f.baseUrl?.trim()??W.provider.baseUrl.trim();if(!X)throw Error("baseUrl is required");let H=f.capabilities===void 0?W.provider.capabilities:f.capabilities===null?void 0:[...new Set(f.capabilities)],Y=f.protocol===void 0?W.provider.protocol:f.protocol??void 0,V=f.client===void 0?W.provider.client:f.client??void 0,A=K7(f.models),B=f.modelsSourceUrl===void 0?W.provider.modelsSourceUrl:f.modelsSourceUrl?.trim()||void 0,K=f.models!==void 0||f.modelsSourceUrl!==void 0&&!!B,G=Object.keys(W.models??{}).map((_)=>_.trim()).filter(Boolean),R=await YY({providerId:J,explicitModels:A,modelsSourceUrl:B,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let F=f.defaultModelId===void 0?W.provider.defaultModelId?.trim():f.defaultModelId?.trim(),P=F&&R.includes(F)?F:R[0],O={...$.getProviderSettings(J)??{},provider:J,baseUrl:X,model:P};if(Y)O.protocol=Y;else delete O.protocol;if(V)O.client=V;else delete O.client;if(f.apiKey!==void 0){let _=f.apiKey?.trim()??"";if(_)O.apiKey=_;else delete O.apiKey}if(f.headers!==void 0){let _=HY(f.headers);if(_)O.headers=_;else delete O.headers}if(f.timeoutMs!==void 0)if(typeof f.timeoutMs==="number")O.timeout=f.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),Z.providers[J]={provider:{name:j,baseUrl:X,defaultModelId:P,protocol:Y,client:V,capabilities:H,modelsSourceUrl:B},models:G7(R,H)},await y4(Q,Z),F2(J,Z.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:R.length}}async function BY($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=U1($),Z=await ff(Q);if(!Z.providers[J])throw Error(`provider "${J}" does not exist`);return delete Z.providers[J],await y4(Q,Z),W0.unregisterProvider(J),VY($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q}}async function hT($){let f=$.read(),J=W0.getProviderIds(),Q=await Promise.all(J.map(async(W)=>{let[j,X]=await Promise.all([W0.getProvider(W),W0.getModelsForProvider(W)]),H=XY(X),Y=f.providers[W]?.settings,V=j?.name??jY(W),A=wT(j?.capabilities,Y?.capabilities);return{provider:{id:W,name:V,models:H.length,color:NT(W),letter:TT(V),enabled:Boolean(Y),apiKey:Y?_T(Y):void 0,oauthAccessTokenPresent:Y?yT(Y):void 0,baseUrl:Y?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:Y?.protocol??j?.protocol,client:Y?.client??j?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",modelList:H},rank:ST(j?.metadata)}}));return Q.sort((W,j)=>{if(W.rank!==j.rank)return W.rank-j.rank;return W.provider.name.localeCompare(j.provider.name)||W.provider.id.localeCompare(j.provider.id)}),{providers:Q.map((W)=>W.provider),settingsPath:$.getFilePath()}}async function ET($,f){let J=$.trim(),Q=await MT(J,f),Z=XY(Q);return{providerId:J,models:Z}}function bT($,f){let J=f.providerId.trim();if(f.enabled===!1){let W=$.read();if(delete W.providers[J],W.lastUsedProvider===J)delete W.lastUsedProvider;return $.write(W),{providerId:J,enabled:!1,settingsPath:$.getFilePath()}}let Z={...$.getProviderSettings(J)??{},provider:J};for(let W of["apiKey","baseUrl","model","region"])if(Object.hasOwn(f,W)&&typeof f[W]==="string")if(f[W].trim().length===0)delete Z[W];else Z[W]=f[W];for(let W of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(f,W))Z[W]=f[W];for(let W of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(f,W)&&f[W]!=null)Z[W]={...typeof Z[W]==="object"&&Z[W]!=null?Z[W]:{},...f[W]};return $.saveProviderSettings(Z,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function kT($,f){let J=f.trim(),Q=$.getProviderSettings(J),W=W0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,j=Q?.baseUrl?.trim()||W?.baseUrl?.trim(),X=v2(j,W?.baseUrl,W?.modelsSourceUrl);if(!Q||!W||!j||!X)return{providerId:J,refreshed:!1};let H=await AY($,{providerId:J,name:W.name,baseUrl:j,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:X,protocol:Q.protocol??W.protocol??null,client:Q.client??W.client??null,capabilities:Q.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:H.modelsCount}}function IT($){let f=$.trim().toLowerCase();if(f==="codex"||f==="openai-codex")return"openai-codex";if(f==="cline"||f==="oca")return f;throw Error(`provider "${$}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function xT($,f){if($==="cline")return f.access.startsWith("workos:")?f.access:`workos:${f.access}`;return f.access}async function gT($,f,J){let Q=e4({onPrompt:async(Z)=>Z.defaultValue??"",openUrl:J,onOpenUrlError:({error:Z})=>{throw Z instanceof Error?Z:Error(String(Z))}});if($==="cline")return b2({apiBaseUrl:f?.baseUrl?.trim()||OT().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q});if($==="oca")return g2({mode:f?.oca?.mode,callbacks:Q});return I2(Q)}function mT($,f,J,Q){let Z={...J?.auth??{},accessToken:xT(f,Q),refreshToken:Q.refresh,accountId:Q.accountId,expiresAt:Q.expires},W={...J??{provider:f},provider:f,auth:Z};return $.saveProviderSettings(W,{tokenSource:"oauth"}),W}function vT($){let f=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return f&&f.length>0?f:void 0}var cT=new Set(["ollama","lmstudio","litellm"]);function uT($,f){if(!f?.provider.baseUrl)return!1;if(f.provider.source!=="system")return!0;return cT.has($)}function dT($){let f=W0.normalizeProviderId($);if(zT(f))return{providerId:f,authMethod:"oauth",fields:{}};let J=W0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f];if(J?.provider.capabilities?.includes("local-auth"))return{providerId:f,authMethod:"local",fields:{}};let Q=J?.provider.baseUrl,Z={apiKey:{}};if(uT(f,J))Z.baseUrl={defaultValue:Q};return{providerId:f,authMethod:"api-key",fields:Z}}R0();c4();import{appendFileSync as lT,existsSync as P7,mkdirSync as pT,readFileSync as rT,renameSync as iT,unlinkSync as nT,writeFileSync as aT}from"node:fs";import{join as F7}from"node:path";import{resolveTeamDataDir as tT}from"@cline/shared/storage";function sT($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class KY{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let f=sT($.teamName),J=$.baseDir?.trim()||tT();this.dirPath=F7(J,f),this.statePath=F7(this.dirPath,"state.json"),this.taskHistoryPath=F7(this.dirPath,"task-history.jsonl")}loadState(){if(!P7(this.statePath))return;try{let $=rT(this.statePath,"utf8"),f=JSON.parse($);if(f.version!==1||!f.teamState)return;for(let J of f.teammates??[])this.teammateSpecs.set(J.agentId,J);return Mj(f.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 f={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;aT(J,`${JSON.stringify(f,null,2)}
|
|
716
|
+
`,"utf8"),iT(J,this.statePath)}appendTaskHistory($){let f={};switch($.type){case"team_task_updated":f=$.task;break;case"team_message":f={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":f={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":f={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":f={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":f={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),lT(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:f})}
|
|
717
|
+
`,"utf8")}ensureDir(){if(!P7(this.dirPath))pT(this.dirPath,{recursive:!0})}hasPersistableState($){let f=$.exportState();if(this.teammateSpecs.size>0)return!0;if(f.members.some((J)=>J.role==="teammate"))return!0;return f.tasks.length>0||f.mailbox.length>0||f.missionLog.length>0}clearPersistedState(){if(P7(this.statePath))nT(this.statePath)}}import{z as q}from"zod";var GY=q.object({workspaceRoot:q.string().min(1),cwd:q.string().optional(),provider:q.string().min(1),model:q.string().min(1),mode:q.enum(["act","plan"]).default("act"),apiKey:q.string(),systemPrompt:q.string().optional(),rules:q.string().optional(),maxIterations:q.number().int().positive().optional(),enableTools:q.boolean(),enableSpawn:q.boolean().optional(),enableTeams:q.boolean().optional(),autoApproveTools:q.boolean().optional(),missionStepInterval:q.number().int().positive().optional(),missionTimeIntervalMs:q.number().int().positive().optional()}),PY=q.enum(["idle","starting","running","stopping","completed","cancelled","failed","error"]),FY=q.enum(["user","assistant","tool","system","status","error"]),DY=q.object({id:q.string().min(1),sessionId:q.string().nullable(),role:FY,content:q.string(),createdAt:q.number().int().nonnegative(),meta:q.object({stream:q.enum(["stdout","stderr"]).optional(),toolName:q.string().optional(),iteration:q.number().int().nonnegative().optional(),agentId:q.string().optional(),conversationId:q.string().optional(),hookEventName:q.string().optional(),inputTokens:q.number().int().nonnegative().optional(),outputTokens:q.number().int().nonnegative().optional(),checkpoint:q.object({ref:q.string(),createdAt:q.number().int().nonnegative(),runCount:q.number().int().positive(),kind:q.enum(["stash","commit"]).optional()}).optional()}).optional()}),RY=q.object({toolCalls:q.number().int().nonnegative(),tokensIn:q.number().int().nonnegative(),tokensOut:q.number().int().nonnegative()}),oT=q.object({sessionId:q.string().nullable(),status:PY,config:GY,messages:q.array(DY),rawTranscript:q.string(),error:q.string().nullable(),summary:RY});var eT=bW;import{Agent as dd,createAgentRuntime as ld}from"@cline/agents";import{getClineEnvironmentConfig as $N}from"@cline/shared";var fN=5000,LY={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function JN($){return{recommended:$.recommended.map((f)=>({...f,tags:[...f.tags]})),free:$.free.map((f)=>({...f,tags:[...f.tags]}))}}function UY($){if(!$||typeof $!=="object")return null;let f=$;if(typeof f.id!=="string"||f.id.length===0)return null;return{id:f.id,name:typeof f.name==="string"&&f.name.length>0?f.name:f.id,description:typeof f.description==="string"?f.description:"",tags:Array.isArray(f.tags)?f.tags.filter((J)=>typeof J==="string"):[]}}function QN($){if(!$||typeof $!=="object")return null;let f=$,J=Array.isArray(f.recommended)?f.recommended:[],Q=Array.isArray(f.free)?f.free:[],Z=J.map(UY).filter((j)=>j!==null),W=Q.map(UY).filter((j)=>j!==null);if(Z.length===0&&W.length===0)return null;return{recommended:Z,free:W}}function ZN($){let f=$.baseUrl?.trim();if(f)return f;let J=$N().apiBaseUrl;try{return($.providerSettingsManager??new c$).getProviderSettings("cline")?.baseUrl?.trim()||J}catch{return J}}async function WN($,f,J){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await $(f,{signal:Q.signal})}finally{clearTimeout(Z)}}async function jN($={}){try{let f=ZN($),J=$.fetchImpl??fetch,Q=await WN(J,`${f}/api/v1/ai/cline/recommended-models`,$.timeoutMs??fN);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let Z=await Q.json(),W=QN(Z);if(W)return W}catch{}return JN(LY)}import{readFile as XN}from"node:fs/promises";import HN from"node:path";function YN($){return $}async function VN($){let f=HN.resolve($),J=await XN(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to parse JSON config at "${f}": ${W}`)}return AN(Q,f)}function AN($,f){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${f}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${f}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${f}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as _Y,createHandler as GN,createHandlerAsync as PN,getProviderCollection as FN,hasProvider as yY,registerAsyncHandler as DN,registerHandler as RN,registerModel as UN,registerProvider as TY}from"@cline/llms";function OY($){return $?{...$}:{}}function BN($,f){if($)return $;if(!f)return;let J=globalThis.process;if(!J?.env)return;return J.env[f]}function KN($,f){if(!f.length)throw Error(`Provider "${$}" must include at least one model.`)}function zY($){let f=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:f,defaultModel:$.collection.provider.defaultModelId,modelCount:f.length}}class D7{providers=new Map;register($){KN($.id,$.models);let f=$.defaultModel??$.models[0];if(!f)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(f))throw Error(`Default model "${f}" is not included in configured models for "${$.id}".`);let J=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...J?.models??[],...$.models]),defaultModel:f,defaults:{...J?.defaults??{},...OY($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:BN($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...OY($.settings)}})}registerModel($,f){let J=this.providers.get($);if(!J){this.providers.set($,{id:$,models:new Set([f]),defaultModel:f,defaults:{}});return}J.models.add(f)}createHandlerConfig($){let f=this.require($.providerId),J=$.modelId??f.defaultModel;if(!f.models.has(J))throw Error(`Model "${J}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:J,...f.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($,f){return this.providers.get($)?.models.has(f)??!1}require($){let f=this.providers.get($);if(!f)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return f}}class R7{configuredProviders=new D7;constructor($){this.applyConfig($)}createHandler($){return GN(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return PN(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(TY($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)RN($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)DN($.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 f=$.exposeModels??Object.keys($.models),J=$.defaultModel??f[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);TY({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:J,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:f,defaultModel:J,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){UN($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[..._Y]}async getBuiltInProviders(){return(await Promise.all(_Y.map((f)=>FN(f)))).filter((f)=>f!==void 0).map((f)=>zY({collection:f}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,f){return this.configuredProviders.hasModel($,f)}applyConfig($){for(let f of $.providers)this.configuredProviders.registerSelectionConfig(f);for(let f of $.models??[])this.registerModel(f);for(let f of $.customProviders??[])this.registerProvider(f);for(let f of this.configuredProviders.list()){let J=yY(f.id),Q=this.configuredProviders.createHandlerConfig({providerId:f.id,modelId:f.defaultModel}).routingProviderId,Z=typeof Q==="string"&&yY(Q);if(!J&&!Z)throw Error(`Provider "${f.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function LN($){return new R7($)}i9();async function Mu(){return Promise.resolve().then(() => (A7(),fY))}export{uW as writeHubDiscovery,u1 as writeGlobalSettings,dW as withHubStartupLock,h$ as verifyHubConnection,Sf as updateMcpServerOAuthState,AY as updateLocalProvider,s9 as truncateNotificationBody,bJ as toggleDisabledTool,X4 as toTeamProgressLifecycleEvent,f$ as toProviderConfig,dD as toHubHealthUrl,D9 as toHookConfigFileName,B4 as summarizeUsageFromMessages,pR as stopLocalHubServerGracefully,$$ as startLocalOAuthServer,V7 as startHubWebSocketServer,_c as startHubServer,tY as startClineDeviceAuth,aJ as splitCoreSessionConfig,s8 as spawnDetachedHubServerWithRetry,yR as spawnDetachedHubServer,uG as setTelemetryOptOutGlobally,qf as setMcpServerDisabled,N3 as setDisabledTools,pG as setDisabledPlugin,Um as sendHubCommand,bT as saveLocalProviderSettings,mT as saveLocalProviderOAuthCredentials,nf as sanitizeSessionToken,VQ as safeParseSettings,HA as safeCreateProviderConfig,C4 as runSubprocessEvent,E4 as runHook,iZ as reviveTeamStateDates,Jj as restartLocalHubIfIdleAfterStartupTimeout,$E as resolveWorkspaceHubOwnerContext,$J as resolveWorkflowsConfigSearchPaths,o6 as resolveSkillsConfigSearchPaths,D0 as resolveSharedHubOwnerContext,X_ as resolveSessionBackend,e6 as resolveRulesConfigSearchPaths,x6 as resolveProviderConfig,rJ as resolvePluginConfigSearchPaths,N$ as resolveMcpServerRegistrations,vT as resolveLocalClineAuthToken,$y as resolveHubUrl,A1 as resolveHubOwnerContext,C$ as resolveHubEndpointOptions,i1 as resolveHubBuildId,P9 as resolveHooksConfigSearchPaths,r0 as resolveDisabledToolNames,h8 as resolveDisabledPluginPaths,w0 as resolveDefaultMcpSettingsPath,t8 as resolveDefaultHubPort,$R as resolveDefaultHubPathname,eD as resolveDefaultHubHost,sZ as resolveCoreSelectedToolIds,g5 as resolveCompatibleLocalHubUrl,ph as resolveClineDir,h5 as resolveClineDataDir,g8 as resolveAndLoadAgentPlugins,If as resolveAgentPluginPaths,E5 as requestHubShutdown,LT as requestDesktopToolApproval,n1 as rememberRecoverableLocalHubUrl,ZY as registerRemoteConfigSessionBlobUpload,Cf as registerMcpServersFromSettingsFile,pu as registerDisposable,kT as refreshProviderModelsFromSource,O6 as refreshOpenAICodexToken,M6 as refreshOcaToken,U6 as refreshClineToken,S9 as readSessionCheckpointHistory,VT as readRemoteConfigSessionBlobUploadMetadata,B0 as readHubDiscovery,Q$ as readGlobalSettings,F0 as probeHubServer,Rm as probeHubConnection,QZ as prewarmFileIndex,rW as prewarmDetachedHubServer,KT as prepareRemoteConfigCoreIntegration,s6 as parseWorkflowConfigFromMarkdown,lu as parseUserCommandEnvelope,a6 as parseSkillConfigFromMarkdown,YQ as parseSettings,t6 as parseRuleConfigFromMarkdown,h4 as parseHookEventPayload,jV as openaiCodexOAuthProvider,j1 as normalizeWorkspacePath,du as normalizeUserInput,uu as normalizeSdkError,P0 as normalizeRuntimeCapabilities,l2 as normalizeProviderId,WV as normalizeOpenAICodexCredentials,IT as normalizeOAuthProvider,a1 as normalizeHubWebSocketUrl,cu as noopBasicLogger,M9 as migrateLegacyProviderSettings,s2 as mergeRulesForSystemPrompt,P2 as mergeAgentHooks,D5 as makeTeamTaskSubSessionId,p8 as makeSubSessionId,I2 as loginOpenAICodex,g2 as loginOcaOAuth,gT as loginLocalProvider,b2 as loginClineOAuth,Mu as loadOpenTelemetryAdapter,Mf as loadMcpSettingsFile,VN as loadLlmsConfigFromFile,W1 as loadAgentPluginsFromPathsWithDiagnostics,c3 as loadAgentPluginsFromPaths,dJ as loadAgentPluginFromPath,qD as listSessionHistoryFromBackend,nJ as listPluginTools,wJ as listMcpServerOAuthStatuses,hT as listLocalProviders,e1 as listHookConfigFiles,dG as isToolDisabledGlobally,EJ as isTelemetryOptedOutGlobally,yQ as isRuleEnabled,lG as isPluginDisabledGlobally,ZV as isOpenAICodexTokenExpired,gR as isHubReconnectableTransportError,$j as isHubCommandTimeoutError,nh as isDiscoveryFilePresent,_7 as isClineAccountActionRequest,ZA as isBuiltInProviderId,D$ as identifyAccount,Z1 as hasMcpSettingsFile,z6 as getValidOpenAICodexCredentials,q6 as getValidOcaCredentials,L6 as getValidClineCredentials,dT as getProviderConfigFields,o7 as getProviderConfig,wf as getMcpServerOAuthState,ET as getLocalProviderModels,d2 as getLiveModelsCatalog,e$ as getFileIndex,CL as getCurrentContextSize,TJ as getCoreHeadlessToolNames,tZ as getCoreDefaultEnabledToolIds,_f as getCoreBuiltinToolCatalog,oZ as getCoreAcpToolNames,Cu as getClineDefaultSystemPrompt,$5 as generateWorkspaceInfoWithDiagnostics,d8 as generateWorkspaceInfo,l7 as generateOcaOpcRequestId,t2 as formatRulesForSystemPrompt,vu as formatDisplayUserInput,IJ as filterExtensionToolRegistrations,d1 as filterDisabledTools,kJ as filterDisabledPluginPaths,jN as fetchClineRecommendedModels,y7 as executeClineAccountAction,$Y as ensureHubWebSocketServer,yc as ensureHubServer,AE as ensureDetachedHubServer,MX as ensureCustomProvidersLoaded,J2 as ensureCompatibleLocalHubUrl,B8 as enrichPromptWithMentions,mu as emptyWorkspaceManifest,$f as emptyStoredProviderSettings,iJ as discoverPluginModulePaths,R5 as deriveSubsessionStatus,BY as deleteLocalProvider,YN as defineLlmsConfig,QJ as createWorkflowsConfigDefinition,v1 as createUserInstructionConfigService,XZ as createToolPoliciesWithPreset,gu as createTool,pX as createTeamName,WH as createSubprocessHooks,m1 as createSpawnAgentTool,fJ as createSkillsConfigDefinition,S4 as createSessionHost,S4 as createRuntimeHost,JJ as createRulesConfigDefinition,BT as createRemoteConfigSessionMessagesArtifactUploader,XA as createProviderConfig,m4 as createOpenTelemetryTelemetryService,MV as createOcaRequestHeaders,NV as createOcaOAuthProvider,e4 as createOAuthClientCallbacks,S8 as createMcpTools,Sm as createLocalHubScheduleRuntimeHandlers,LN as createLlmsSdk,K0 as createInitialAccumulatedUsage,ih as createInMemoryHubOwnerContext,j$ as createHubServerUrl,cW as createHubAuthToken,O9 as createHookConfigFileHooks,R4 as createHookConfigFileExtension,D4 as createHookAuditHooks,hJ as createDisabledMcpToolPolicy,z3 as createDisabledMcpToolPolicies,R8 as createDelegatedAgentConfigProvider,U8 as createDelegatedAgent,HZ as createDefaultToolsWithPreset,I1 as createDefaultTools,q8 as createDefaultMcpServerClientFactory,F8 as createDefaultExecutors,gf as createCoreSettingsService,E$ as createCoreSessionSnapshot,xu as createContributionRegistry,B9 as createContextCompactionPrepareTurn,_1 as createConfiguredTelemetryService,v4 as createConfiguredTelemetryHandle,Iu as createClineTelemetryServiceMetadata,ku as createClineTelemetryServiceConfig,oY as createClineOAuthProvider,yf as createBuiltinTools,zf as createAgentTeamsTools,ld as createAgentRuntime,K4 as createAgentHooksExtension,VH as connectToHub,sY as completeClineDeviceAuth,fA as clearPrivateModelsCatalogCache,$A as clearLiveModelsCatalogCache,n0 as clearHubDiscovery,xY as captureWorkspacePathResolved,$6 as captureWorkspaceInitialized,f6 as captureWorkspaceInitError,j6 as captureToolUsage,Z6 as captureTokenUsage,Q6 as captureTaskRestarted,J6 as captureTaskCreated,q2 as captureTaskCompleted,S2 as captureSubagentExecution,X6 as captureSkillUsed,bu as captureSdkError,w2 as captureProviderApiError,W6 as captureModeSwitch,Y6 as captureMentionUsed,A6 as captureMentionSearchResults,V6 as captureMentionFailed,K6 as captureHookDiscovery,IY as captureExtensionActivated,H6 as captureDiffEditFailure,Hf as captureConversationTurnEvent,P$ as captureAuthSucceeded,G$ as captureAuthStarted,r$ as captureAuthLoggedOut,F$ as captureAuthFailed,B6 as captureAgentTeamCreated,i$ as captureAgentCreated,f5 as buildWorkspaceMetadata,j4 as buildTeamProgressSummary,hu as buildSdkErrorProperties,JY as buildRemoteConfigSessionBlobUploadMetadata,Lf as buildDelegatedAgentConfig,z8 as bootstrapAgentTeams,B3 as authorizeMcpServerOAuth,CT as addLocalProvider,H0 as accumulateUsageTotals,p6 as WORKFLOWS_CONFIG_DIRECTORY_NAME,Bf as UnifiedConfigFileWatcher,p0 as ToolPresets,z2 as TelemetryService,g4 as TelemetryLoggerSink,O8 as TEAM_TOOL_NAMES,k8 as SubprocessSandbox,L4 as StoredProviderSettingsSchema,YX as StoredProviderSettingsEntrySchema,D2 as SqliteTeamStore,k$ as SqliteSessionStore,Qf as SessionVersioningService,v0 as SessionVersioningError,G0 as SessionSource,jQ as SapSettingsSchema,l6 as SKILLS_CONFIG_DIRECTORY_NAME,v6 as SESSION_STATUSES,ru as SDK_ERROR_TELEMETRY_EVENT,o4 as RpcClineAccountService,$4 as RemoteRuntimeHost,JQ as ReasoningSettingsSchema,RQ as RULES_CONFIG_DIRECTORY_NAME,QY as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,h1 as ProviderSettingsSchema,c$ as ProviderSettingsManager,e7 as ProviderProtocolSchema,m6 as ProviderIdSchema,$Q as ProviderClientSchema,_2 as OpenTelemetryProvider,XQ as OcaSettingsSchema,I6 as OPENAI_COMPATIBLE_PROVIDERS,X$ as NodeHubClient,H7 as NativeHubTransportAdapter,HQ as ModelCatalogSettingsSchema,u$ as LocalRuntimeHost,wu as Llms,O4 as InMemoryWorkspaceManager,hf as InMemoryMcpManager,Wy as HubUIClient,E0 as HubTransportError,Zy as HubSessionClient,i4 as HubServerTransport,x4 as HubScheduleService,b4 as HubScheduleCommandService,G1 as HubRuntimeHost,o8 as HubCommandError,QH as HookEventPayloadSchema,JH as HookEventNameSchema,G4 as HookConfigFileName,F9 as HOOK_CONFIG_FILE_EVENT_MAP,$X as HOOKS_CONFIG_DIRECTORY_NAME,C8 as GlobalSettingsSchema,ZQ as GcpSettingsSchema,KY as FileTeamPersistenceStore,LY as FALLBACK_CLINE_RECOMMENDED_MODELS,Z0 as DefaultToolNames,M4 as DefaultRuntimeBuilder,R7 as DefaultLlmsSdk,a7 as DEFAULT_MODELS_CATALOG_URL,sD as DEFAULT_HUB_PORT,oD as DEFAULT_HUB_PATHNAME,tD as DEFAULT_HUB_HOST,r1 as CoreSettingsService,I$ as CoreSessionService,Eu as ContributionRegistry,r9 as ClineCore,s4 as ClineAccountService,oT as ChatViewStateSchema,RY as ChatSummarySchema,PY as ChatSessionStatusSchema,GY as ChatSessionConfigSchema,DY as ChatMessageSchema,FY as ChatMessageRoleSchema,g as CORE_TELEMETRY_EVENTS,eT as CORE_BUILD_VERSION,X7 as BrowserWebSocketHubAdapter,QA as BUILT_IN_PROVIDER_IDS,g6 as BUILT_IN_PROVIDER,WQ as AzureSettingsSchema,QQ as AwsSettingsSchema,fQ as AuthSettingsSchema,X2 as AgentTeamsRuntime,i5 as AgentTeam,dd as Agent,b1 as ALL_DEFAULT_TOOL_NAMES};
|