@cline/core 0.0.78 → 0.0.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hub/daemon/entry.js +223 -215
- package/dist/hub/index.js +32 -24
- package/dist/hub/server/hub-event-log.d.ts +6 -1
- package/dist/index.js +49 -41
- package/dist/runtime/host/local-runtime-host.d.ts +31 -4
- package/dist/types/session.d.ts +10 -3
- package/package.json +4 -4
package/dist/hub/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire as PM}from"node:module";var{defineProperty:fW,getOwnPropertyNames:MM}=Object;var KH=Object.prototype.hasOwnProperty;function GH($){return this[$]}var R=($,Z,Q)=>{var X=MM(Z);for(let J of X)if(!KH.call($,J)&&J!=="default")fW($,J,{get:GH.bind(Z,J),enumerable:!0});if(Q){for(let J of X)if(!KH.call(Q,J)&&J!=="default")fW(Q,J,{get:GH.bind(Z,J),enumerable:!0});return Q}};var RM=($)=>$;function CM($,Z){this[$]=RM.bind(null,Z)}var f=($,Z)=>{for(var Q in Z)fW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:CM.bind(Z,Q)})};var i2=($,Z)=>()=>($&&(Z=$($=0)),Z);var HH=PM(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as _R,captureAgentUnexpectedReasoningTokens as uH,captureTaskLifecycleEvent as
|
|
1
|
+
import{createRequire as PM}from"node:module";var{defineProperty:fW,getOwnPropertyNames:MM}=Object;var KH=Object.prototype.hasOwnProperty;function GH($){return this[$]}var R=($,Z,Q)=>{var X=MM(Z);for(let J of X)if(!KH.call($,J)&&J!=="default")fW($,J,{get:GH.bind(Z,J),enumerable:!0});if(Q){for(let J of X)if(!KH.call(Q,J)&&J!=="default")fW(Q,J,{get:GH.bind(Z,J),enumerable:!0});return Q}};var RM=($)=>$;function CM($,Z){this[$]=RM.bind(null,Z)}var f=($,Z)=>{for(var Q in Z)fW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:CM.bind(Z,Q)})};var i2=($,Z)=>()=>($&&(Z=$($=0)),Z);var HH=PM(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as _R,captureAgentUnexpectedReasoningTokens as uH,captureTaskLifecycleEvent as Mt,SDK_ERROR_TELEMETRY_EVENT as zR,TASK_CANCELLED_EVENT as OR,TASK_FIRST_CHUNK_RECEIVED_EVENT as NR,TASK_PROVIDER_REQUEST_STARTED_EVENT as qR,TASK_PROVIDER_STREAM_FAILED_EVENT as AR,TASK_PROVIDER_STREAM_STARTED_EVENT as TR}from"@cline/shared";function Q0($,Z,Q){$?.capture({event:Z,properties:Q})}function KQ($){if(!$)return;return $.substring(0,ER)}function MR($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function RR($){return typeof $==="string"?$:$.message}function cH($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function dH($){Q0($,p.CLIENT.EXTENSION_ACTIVATED)}function GQ($,Z){let Q=[...Z.vcs_types],X={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:cH(Q,new Set(["git"])),has_mercurial:cH(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)X.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)X.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)X.is_remote_workspace=Z.is_remote_workspace;Q0($,p.WORKSPACE.INITIALIZED,X)}function HQ($,Z,Q){Q0($,p.WORKSPACE.INIT_ERROR,{error_type:MR(Z),error_message:KQ(RR(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function lH($,Z){Q0($,p.WORKSPACE.PATH_RESOLVED,{...Z})}function O$($,Z){Q0($,p.USER.AUTH_STARTED,{provider:Z})}function N$($,Z,Q){Q0($,p.USER.AUTH_SUCCEEDED,{provider:Z,...Q})}function q$($,Z,Q,X){Q0($,p.USER.AUTH_FAILED,{provider:Z,errorMessage:KQ(Q),...X?.requestId?{request_id:X.requestId}:{}})}function e$($,Z,Q,X){Q0($,p.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q,...X})}function k5($,Z,Q){Q0($,p.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:Z,...Q})}function pH($,Z,Q){Q0($,p.USER.AUTH_RUN_RETRY,{provider:Z,recovered:Q?.recovered})}function iH($,Z){Q0($,p.USER.PROVIDER_CONFIGURED,{provider:Z})}function rH($,Z){$?.captureRequired(p.USER.TELEMETRY_OPT_OUT,Z)}function A$($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({user_id:Q||Z.id,account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function UQ($,Z){Q0($,p.TASK.CREATED,Z)}function FQ($,Z){Q0($,p.TASK.RESTARTED,Z)}function x5($,Z){Q0($,p.TASK.COMPLETED,Z)}function A8($,Z){Q0($,p.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function LQ($,Z){Q0($,p.TASK.TOKEN_USAGE,Z)}function DQ($,Z,Q){Q0($,p.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function o1($,Z){Q0($,p.TASK.TOOL_USED,Z)}function _Q($,Z){Q0($,p.TASK.SKILL_USED,Z)}function zQ($,Z){Q0($,p.TASK.DIFF_EDIT_FAILED,Z)}function aH($,Z){Q0($,p.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:KQ(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function OQ($,Z){Q0($,p.TASK.MISTAKE_LIMIT_REACHED,{...Z,timestamp:new Date().toISOString()})}function nH($,Z){Q0($,p.SDK.TOOL_TIMEOUT,sH(Z))}function oH($,Z){Q0($,p.SDK.PLAN_MODE_COMMAND_BLOCKED,sH(Z))}function sH($){let Z={};for(let[Q,X]of Object.entries($))if(X!==void 0)Z[Q]=X;return Z}function NQ($,Z,Q){Q0($,p.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function qQ($,Z,Q,X){Q0($,p.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:KQ(X),timestamp:new Date().toISOString()})}function AQ($,Z,Q,X,J){Q0($,p.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:X,isEmpty:J,timestamp:new Date().toISOString()})}function $2($,Z){Q0($,p.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function TQ($,Z){Q0($,p.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function y5($,Z){Q0($,Z.event==="ended"?p.TASK.SUBAGENT_COMPLETED:p.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function EQ($,Z,Q,X){Q0($,p.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:X,totalCount:Q+X,timestamp:new Date().toISOString()})}function MQ($,Z){Q0($,p.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function RQ($,Z){Q0($,p.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}function tH($,Z){Q0($,p.TASK.COMPACTION_BUDGET_EMERGENCY,{...Z,timestamp:new Date().toISOString()})}var ER=500,p;var q0=i2(()=>{p={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:_R},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:qR,PROVIDER_STREAM_STARTED:TR,FIRST_CHUNK_RECEIVED:NR,PROVIDER_STREAM_FAILED:AR,CANCELLED:OR,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:zR,TOOL_TIMEOUT:"sdk.tool_timeout",PLAN_MODE_COMMAND_BLOCKED:"sdk.plan_mode_command_blocked"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as yR,readFileSync as IR,statSync as hR,writeFileSync as vR}from"node:fs";import{dirname as gR}from"node:path";import{CONFIGURABLE_MODEL_TOOL_NAMES as BU}from"@cline/shared";import{resolveGlobalSettingsPath as KU}from"@cline/shared/storage";import{z as n0}from"zod";function CQ(){return v5.parse({})}function dR(){PQ=void 0}function lR($){if($.disabledTools)Object.freeze($.disabledTools);if($.tools){for(let Z of Object.values($.tools))Object.freeze(Z);Object.freeze($.tools)}if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function pR($){let Z;try{Z=IR($,"utf8")}catch{return CQ()}try{let Q=v5.safeParse(JSON.parse(Z));return Q.success?Q.data:CQ()}catch{return CQ()}}function iR(){let $=KU(),Z=hR($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,X=Z?.size??0,J=PQ;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===X)return J;let W=lR(Z?pR($):CQ());return PQ={path:$,mtimeMs:Q,size:X,value:W},PQ}function W0(){return iR().value}function u0($,Z={}){let Q=KU(),X=W0();yR(gR(Q),{recursive:!0});let J=v5.parse($);if(!X.telemetryOptOut&&J.telemetryOptOut)rH(Z.telemetry);vR(Q,`${JSON.stringify(J,null,2)}
|
|
2
2
|
`,"utf8"),dR()}function fQ(){return W0().telemetryOptOut}function GU($,Z={}){u0({...W0(),telemetryOptOut:$},Z)}function HU(){return W0().autoUpdateEnabled}function UU($,Z={}){u0({...W0(),autoUpdateEnabled:$},Z)}function FU(){return W0().compactionStrategy??"agentic"}function LU($){u0({...W0(),compactionStrategy:$})}function DU(){let $=W0();if($.compactionEnabled===!1)return"off";return $.compactionStrategy}function _U($){let Z=W0();if($==="off"){u0({...Z,compactionEnabled:!1});return}u0({...Z,compactionEnabled:!0,compactionStrategy:$})}function zU(){return W0().planActMode}function OU($){u0({...W0(),planActMode:$})}function NU(){return W0().toolAutoApprove}function qU(){return W0().tuiTheme}function AU($){u0({...W0(),tuiTheme:$})}function TU($){u0({...W0(),toolAutoApprove:$})}function s1($){return new Set($??W0().disabledTools??[])}function g5($){return new Set($??W0().disabledPlugins??[])}function EU($){if(rW($))return!R8($);return s1().has($)}function rW($){return BU.includes($)}function aW(){return W0().tools??{}}function R8($){return aW()[$]?.enabled===!0}function nW($,Z){let Q=W0();u0({...Q,tools:{...Q.tools,[$]:{enabled:Z}}})}function wQ($){if(rW($)){let J=R8($);return nW($,!J),J}let Z=W0(),Q=new Set(Z.disabledTools??[]),X=Q.has($);if(X)Q.delete($);else Q.add($);return u0({...Z,disabledTools:[...Q]}),!X}function oW($,Z){let Q=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Q.length===0)return;let X=W0(),J=s1(X.disabledTools),W={...X.tools};for(let j of Q){if(rW(j)){W[j]={enabled:!Z};continue}if(Z)J.add(j);else J.delete(j)}u0({...X,disabledTools:[...J],tools:W})}function MU($,Z){return oW([$],Z),Z}function RU($){return g5().has($)}function SQ($,Z){let Q=$.trim();if(!Q)return;let X=W0(),J=g5(X.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);u0({...X,disabledPlugins:[...J]})}function bQ($,Z){let Q=g5(Z);if(Q.size===0)return[...$];return $.filter((X)=>!Q.has(X))}function T$($,Z){let Q=s1(Z);if(Q.size===0)return[...$];return $.filter((X)=>!Q.has(X.name))}function kQ($,Z){if(!$||$.length===0)return $;let Q=s1(Z);if(Q.size===0)return $;return $.map((X)=>{if(!X.setup)return X;return{...X,setup:(J,W)=>X.setup?.({...J,registerTool:(j)=>{if(!Q.has(j.name))J.registerTool(j)}},W)}})}var VU,mR,cR,uR,v5,PQ;var y1=i2(()=>{q0();VU=n0.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,n0.array(n0.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,X)=>Q.localeCompare(X));return Z.length>0?Z:void 0}),mR=n0.enum(["basic","agentic"]).catch("agentic"),cR=n0.partialRecord(n0.enum(BU),n0.object({enabled:n0.boolean()}).strip()).optional(),uR=n0.enum(["plan","act"]),v5=n0.object({telemetryOptOut:n0.boolean().default(!1).catch(!1),autoUpdateEnabled:n0.boolean().default(!0).catch(!0),compactionStrategy:mR.optional(),compactionEnabled:n0.boolean().optional().catch(void 0),planActMode:uR.optional().catch(void 0),toolAutoApprove:n0.boolean().optional().catch(void 0),tuiTheme:n0.string().optional().catch(void 0),disabledTools:VU.optional(),tools:cR,disabledPlugins:VU.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.compactionEnabled!==void 0)Z.compactionEnabled=$.compactionEnabled;if($.planActMode)Z.planActMode=$.planActMode;if($.toolAutoApprove!==void 0)Z.toolAutoApprove=$.toolAutoApprove;if($.tuiTheme?.trim())Z.tuiTheme=$.tuiTheme.trim();if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.tools&&Object.keys($.tools).length>0)Z.tools=$.tools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as rR,mkdirSync as aR,readFileSync as nR,writeFileSync as oR}from"node:fs";import{resolve as sR}from"node:path";import{resolveSessionDataDir as tR}from"@cline/shared/storage";import{nanoid as eR}from"nanoid";import*as $C from"node-machine-id";function C8(){if(!PU)CU=fU(),PU=!0;return CU??wU()}function W1($){let Z=$?.trim();if(Z)return Z;let Q=fU();if(Q)return Q;return wU()}function QC(){let $=$C;return $.machineIdSync??$.default?.machineIdSync}function fU(){try{let $=QC();if(!$)return;return $().trim()||void 0}catch{return}}function wU(){let $=tR(),Z=sR($,ZC);try{if(rR(Z)){let X=nR(Z,"utf8").trim();if(X.length>0)return X}}catch{}let Q=`cl-${eR()}`;try{aR($,{recursive:!0}),oR(Z,Q,"utf8")}catch{}return Q}var ZC="machine-id",CU,PU=!1;var o2=()=>{};class m5{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,X?{description:X}:void 0),this.counters.set($,W);W.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,X?{description:X}:void 0),this.histograms.set($,W);W.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.buildAttributes(Q),j=JSON.stringify(W),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,X?{description:X}:void 0);B.addCallback((K)=>{for(let G of this.snapshotGaugeSeries($))K.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(j,{value:Z,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($,Z,Q){if(!this.logger)return;let X=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:X})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,X=0){if(!$)return{};let J={},W=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let K=V.length>W?V.slice(0,W):V;try{J[B]=JSON.stringify(K)}catch{J[B]="[UnserializableArray]"}if(V.length>W)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Q.has(V)){J[B]="[Circular]";continue}if(X>=j){J[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,B,Q,X+1));continue}if(XC(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function XC($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class c5{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:X,required:J===!0})}recordHistogram($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:X,required:J===!0})}recordGauge($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:X,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class P8{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new c5({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??C8(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let X of this.adapters)X.emitRequired($,Q)}recordCounter($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,W,X,J)}recordHistogram($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,W,X,J)}recordGauge($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,W,X,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}var sW=i2(()=>{o2()});import{metrics as JC,trace as WC}from"@opentelemetry/api";import{logs as jC}from"@opentelemetry/api-logs";import{OTLPLogExporter as YC}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as VC}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as BC}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as KC}from"@opentelemetry/resources";import{BatchLogRecordProcessor as GC,ConsoleLogRecordExporter as HC,LoggerProvider as UC}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as FC,MeterProvider as LC,PeriodicExportingMetricReader as SU}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as DC,ConsoleSpanExporter as _C,SimpleSpanProcessor as zC}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as OC}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as NC,ATTR_SERVICE_VERSION as qC}from"@opentelemetry/semantic-conventions";class bU{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class f8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=KC({[NC]:$.serviceName??"cline",...$.serviceVersion?{[qC]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)JC.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)jC.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return WC.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new m5({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new P8({...$,adapters:[Z],distinctId:W1($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=tW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),X=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((W)=>EC(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:X})).filter((W)=>W!==null);if(J.length===0)return null;return new LC({resource:$,readers:J})}createTracerProvider($){let Z=tW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,X=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let W of Z){let j=TC(W,{endpoint:Q,headers:X,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)J.push(j)}if(J.length===0)return null;return new OC({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=tW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((X)=>{let J=AC(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new GC(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((X)=>X!==null);if(Q.length===0)return null;return new UC({resource:$,processors:Q})}}function u5($){let Z=new f8($),Q=Z.createTelemetryService($),X=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)X();return{provider:Z,telemetry:Q,emitProviderCreated:X}}function E$($){if(fQ())return{telemetry:new bU($)};if($.enabled!==!0)return{telemetry:new P8({...$,distinctId:W1($.distinctId)})};return u5($)}function w8($){let{telemetry:Z,provider:Q,emitProviderCreated:X}=E$($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&X?{emitProviderCreated:X}:{}}}function tW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function AC($,Z){if($==="console")return new HC;if(!Z.endpoint)return null;let Q=eW(Z.endpoint,"/v1/logs");return new YC({url:Q,headers:Z.headers})}function TC($,Z){if($==="console")return new zC(new _C);if(!Z.endpoint)return null;let Q=eW(Z.endpoint,"/v1/traces");return new DC(new BC({url:Q,headers:Z.headers}))}function EC($,Z){if($==="console")return new SU({exporter:new FC,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=eW(Z.endpoint,"/v1/metrics");return new SU({exporter:new VC({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function eW($,Z){let Q=new URL($),X=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=X.endsWith(Z)?X:`${X}${Z}`,Q.toString()}var xQ=i2(()=>{y1();o2();sW()});var K_={};f(K_,{normalizeUserMessage:()=>Gx,buildInitialUserContent:()=>Kx});async function Kx($,Z,Q,X){let J=Hx(Z),W=await Fx(Q,X);if(J.length===0&&!W)return $;let j=[{type:"text",text:$},...J];if(W)j.push(...W);return j}function Gx($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let X of Z)if(X&&typeof X==="object"&&X.type==="text"){let J=X.text;if(typeof J==="string")Q.push(J)}return Q.join(`
|
|
3
3
|
`)}function Hx($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let X=Ux(Q);if(X)Z.push(X)}return Z}function Ux($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let X=Q[1],J=Q[2];if(!X||!J)return;return{type:"image",mediaType:X,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function Fx($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),X=await Promise.all($.map(async(J)=>{let W=J.replace(/\\/g,"/");try{let j=await Q(J);return{type:"file",path:W,content:j}}catch(j){let Y=j instanceof Error?j.message:String(j);return{type:"file",path:W,content:`Error fetching content: ${Y}`}}}));if(X.length===0)return;return X}function uv($){return $.trim().split(/[\\/]/).at(-1)?.toLowerCase().replace(/\.(?:cmd|exe)$/i,"")??""}function dv($){if(uv($.command)!=="npx")return;if(Object.keys($.env??{}).length>0)return;let Z=$.args??[],Q=0;while(Z[Q]==="-y"||Z[Q]==="--yes")Q+=1;if(!/^mcp-remote(?:@[^/\s]+)?$/.test(Z[Q]??""))return;let X=Z[Q+1];if(!X||Z.length!==Q+2)return;try{let J=new URL(X);if(J.protocol!=="http:"&&J.protocol!=="https:")return;return{type:"streamableHttp",url:J.toString()}}catch{return}}function gX($){return $.type==="stdio"?dv($)??$:$}var ZB={};f(ZB,{updateMcpSettingsFileSync:()=>M1,updateMcpSettingsFile:()=>m4,updateMcpServerOAuthStateAsync:()=>u6,updateMcpServerOAuthState:()=>P7,setMcpServerDisabled:()=>m6,resolveMcpServerRegistrations:()=>R1,resolveMcpServerRegistration:()=>C7,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>d6,parseMcpServerRegistration:()=>u4,normalizeMcpServerOAuthState:()=>c4,loadMcpSettingsFile:()=>g6,listMcpServerOAuthStatuses:()=>f7,hasMcpSettingsFile:()=>c$,getMcpServerOAuthStatus:()=>d4,getMcpServerOAuthState:()=>c6,McpSettingsUpdateSkippedError:()=>g4,McpSettingsMutatorPurityError:()=>S2,McpSettingsLockTimeoutError:()=>b2,McpOAuthClientChangedError:()=>X$});import{randomUUID as lv}from"node:crypto";import{existsSync as SO,mkdirSync as rV,readFileSync as bO,renameSync as oV,rmdirSync as pv,rmSync as aV,statSync as iv,unlinkSync as kO,writeFileSync as xO}from"node:fs";import{dirname as yO,join as wO}from"node:path";import{setTimeout as rv}from"node:timers/promises";import{isMcpTimeoutConfigured as av,resolveMcpTimeoutSeconds as nv}from"@cline/shared";import{resolveMcpSettingsPath as ov}from"@cline/shared/storage";import{z as v}from"zod";function nV($){if(!$)return;if($==="http")return"streamableHttp";return $}function K0(){return ov()}function jg($,Z){rV(yO($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{xO(Q,Z,{encoding:"utf8",flag:"wx"}),oV(Q,$)}catch(X){try{kO(Q)}catch{}throw X}}function Vg($){Atomics.wait(Yg,0,0,$)}function Bg($){return`${$}.lock`}function cO(){return`${process.pid}.${Date.now()}.${lv()}`}function uO($,Z){rV(yO($),{recursive:!0});let Q=`${$}.tmp.${Z}`;aV(Q,{recursive:!0,force:!0}),rV(Q,{recursive:!0}),xO(wO(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return oV(Q,$),{lockDir:$,ownerFile:wO($,`owner.${Z}`)}}catch(X){if(aV(Q,{recursive:!0,force:!0}),SO($))return;throw X}}function dO($,Z){let Q;try{Q=Date.now()-iv($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<eV)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let X=`${$}.stale.${cO()}`;try{oV($,X)}catch(J){if(J.code==="ENOENT")return;throw J}aV(X,{recursive:!0,force:!0})}function Kg($){try{kO($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{pv($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function lO($){let Z=Bg($);if(mX.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:cO()}}function Gg($,Z){let{lockDir:Q,token:X}=lO($),J=Z.timeoutMs??eV,W=Date.now();while(!0){let j=uO(Q,X);if(j)return mX.add(Q),j;if(Date.now()-W>J)throw new b2(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);dO(Q,Z),Vg(mO)}}async function Hg($,Z){let{lockDir:Q,token:X}=lO($),J=Z.timeoutMs??eV,W=Date.now();while(!0){let j=uO(Q,X);if(j)return mX.add(Q),j;if(Date.now()-W>J)throw new b2(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);dO(Q,Z),await rv(mO)}}function pO($,Z,Q){try{let X=Ug(Z),J=Fg(X,Q);return jg(Z,`${JSON.stringify(X,null,2)}
|
|
4
4
|
`),J}finally{mX.delete($.lockDir),Kg($)}}function M1($,Z,Q={}){let X=Gg($,Q);return pO(X,$,Z)}async function m4($,Z,Q={}){let X=await Hg($,Q);return pO(X,$,Z)}function Ug($){let Z=Lg($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Fg($,Z){let Q=JSON.stringify($),X=JSON.parse(Q),J=Z(X),W=JSON.stringify(X),j=Z($);if(JSON.stringify($)!==W)throw new S2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(J))throw new S2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function iO($){let Z=bO($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(X){let J=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function Lg($){try{return iO($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function $B($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function Dg($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function g6($={}){let Z=$.filePath??K0(),Q=bO(Z,"utf8"),X;try{X=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let J=Wg.safeParse(X);if(!J.success){let W=J.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${W}`)}return J.data}function c4($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{},...$.authorizationRequired?{authorizationRequired:!0}:{}};return Object.keys(Z).length>0?Z:void 0}function _g($){if($===void 0)return;let Z=sV.safeParse($);if(!Z.success)return;return c4(Z.data)}function c$($={}){let Z=$.filePath??K0();return SO(Z)}function R1($={}){let Z=g6($);return Object.entries(Z.mcpServers).map(([Q,X])=>rO(Q,X))}function rO($,Z){return{name:$,transport:gX(Z.transport),disabled:Z.disabled,timeoutSeconds:Z.timeoutSeconds,metadata:Z.metadata,oauthClient:Z.oauthClient,oauth:Z.oauth}}function u4($,Z){let Q=gO.safeParse(Z);if(!Q.success){let X=Q.error.issues.map((J)=>{let W=J.path.join(".");return W?`${W}: ${J.message}`:J.message}).join("; ");throw Error(`Invalid MCP server "${$}": ${X}`)}return rO($,Q.data)}function C7($,Z={}){let Q=Z.filePath??K0(),J=iO(Q).mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))return;let W=$B(J,$);return W?u4($,W):void 0}function m6($){let Z=$.filePath??K0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");M1(Z,(X)=>{let J=X.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let W={...J},j=$B(W,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;Dg(W,Q,Y),X.mcpServers=W})}function c6($,Z={}){let Q=g6(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return c4(Q.mcpServers[$]?.oauth)}function aO($,Z,Q){return(X)=>{let J=X.mcpServers,W=$B(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);if(Q.expectedOAuthClient!==void 0){let V=tV.safeParse(W.oauthClient),B=V.success?V.data:void 0,K=Q.expectedOAuthClient??void 0;if(B?.clientId!==K?.clientId||B?.clientSecret!==K?.clientSecret)throw new X$($)}let j=_g(W.oauth)??{},Y=c4(Z(j));if(Y)W.oauth=Y;else delete W.oauth;return Y??{}}}function P7($,Z,Q={}){let X=Q.filePath??K0();return M1(X,aO($,Z,Q))}async function u6($,Z,Q={}){let X=Q.filePath??K0();return m4(X,aO($,Z,Q))}function f7($={}){return R1($).map(d4).sort((Q,X)=>Q.serverName.localeCompare(X.serverName))}function d4($){let Z=$.transport.type!=="stdio",Q=$.oauth?.tokens?.access_token,X=$.oauth?.clientInformation,J=$.oauthClient?X?.client_id===$.oauthClient.clientId&&X?.client_secret===$.oauthClient.clientSecret:!0,W=Z&&J&&typeof Q==="string"&&Q.trim().length>0;return{serverName:$.name,oauthSupported:Z,oauthConfigured:W,authorizationRequired:Z&&!W&&$.oauth?.authorizationRequired===!0,lastError:$.oauth?.lastError,lastAuthenticatedAt:$.oauth?.lastAuthenticatedAt}}async function d6($,Z={}){let Q=R1(Z);for(let X of Q)await $.registerServer(X);return Q}var R7,IO,hO,sV,tV,sv,tv,ev,$g,Zg,Qg,vO,Xg,Jg,gO,Wg,g4,X$,b2,S2,eV=1e4,mO=25,Yg,mX;var w7=i2(()=>{R7=v.record(v.string(),v.string()),IO=v.record(v.string(),v.unknown()),hO=v.preprocess(($)=>av($)?nv($):void 0,v.number().optional()),sV=v.object({clientInformation:v.record(v.string(),v.unknown()).optional(),tokens:v.record(v.string(),v.unknown()).optional(),codeVerifier:v.string().optional(),discoveryState:v.record(v.string(),v.unknown()).optional(),redirectUrl:v.string().url().optional(),lastError:v.string().optional(),lastAuthenticatedAt:v.number().int().positive().optional(),authorizationRequired:v.boolean().optional()}).strip(),tV=v.object({clientId:v.string().min(1),clientSecret:v.string().min(1).optional()}).strip(),sv=v.object({type:v.literal("stdio"),command:v.string().min(1),args:v.array(v.string()).optional(),cwd:v.string().min(1).optional(),env:R7.optional()}),tv=v.object({type:v.literal("sse"),url:v.string().url(),headers:R7.optional()}),ev=v.object({type:v.literal("streamableHttp"),url:v.string().url(),headers:R7.optional()}),$g=v.discriminatedUnion("type",[sv,tv,ev]),Zg=v.object({transport:$g,disabled:v.boolean().optional(),timeout:hO,metadata:IO.optional(),oauthClient:tV.optional(),oauth:sV.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth})),Qg=v.enum(["stdio","sse","http","streamableHttp"]).optional(),vO=v.object({type:v.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Qg,disabled:v.boolean().optional(),timeout:hO,metadata:IO.optional(),oauthClient:tV.optional(),oauth:sV.optional()});Xg=vO.extend({command:v.string().min(1),args:v.array(v.string()).optional(),cwd:v.string().min(1).optional(),env:R7.optional()}).superRefine(($,Z)=>{let Q=$.type??nV($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:v.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth})),Jg=vO.extend({url:v.string().url(),headers:R7.optional()}).superRefine(($,Z)=>{let Q=$.type??nV($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:v.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??nV($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth}}),gO=v.union([Zg,Xg,Jg]),Wg=v.object({mcpServers:v.record(v.string(),gO)}).passthrough();g4=class g4 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};X$=class X$ extends Error{constructor($){super(`OAuth client configuration changed while authorizing MCP server "${$}". Start authorization again.`);this.name="McpOAuthClientChangedError"}};b2=class b2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};S2=class S2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Yg=new Int32Array(new SharedArrayBuffer(4)),mX=new Set});var rq={};f(rq,{resolveCoreDistinctId:()=>W1,resolveCoreDeviceId:()=>C8,createOpenTelemetryTelemetryService:()=>u5,createConfiguredTelemetryService:()=>E$,createConfiguredTelemetryHandle:()=>w8,OpenTelemetryProvider:()=>f8,OpenTelemetryAdapter:()=>m5});var KJ=i2(()=>{o2();xQ()});var QE={};f(QE,{writeHubDiscovery:()=>I8,withHubStartupLock:()=>h8,watchManagedHubBuildMismatch:()=>DF,verifyHubConnection:()=>e0,truncateNotificationBody:()=>vZ,toHubStatusUrl:()=>jj,toHubHealthUrl:()=>gQ,stopLocalHubServerGracefully:()=>Cj,startHubWebSocketServer:()=>lZ,startHubServer:()=>$E,spawnDetachedHubServerWithRetry:()=>_j,spawnDetachedHubServer:()=>Dj,sendHubCommand:()=>LF,retireDiscoveredHub:()=>Q6,restartLocalHubIfIdleAfterStartupTimeout:()=>dQ,resolveWorkspaceHubOwnerContext:()=>$F,resolveSharedHubOwnerContext:()=>j1,resolveProductionHubOwnerContext:()=>z1,resolveHubUrl:()=>Pj,resolveHubRunQueuePath:()=>PG,resolveHubOwnerContext:()=>R$,resolveHubInstanceLockPath:()=>DW,resolveHubEventLogPath:()=>fG,resolveHubEndpointOptions:()=>C$,resolveHubBuildIdentity:()=>a5,resolveHubBuildId:()=>_1,resolveHubBuildEpochMs:()=>i5,resolveDefaultHubPort:()=>v8,resolveDefaultHubPathname:()=>Gj,resolveDefaultHubHost:()=>Kj,resolveCompatibleLocalHubUrl:()=>$9,resolveClineDir:()=>nU,resolveClineDataDir:()=>$6,requestHubShutdown:()=>e5,requestHubDrain:()=>cQ,rememberRecoverableLocalHubUrl:()=>J2,readSupersededHubDiscovery:()=>Lj,readHubDiscovery:()=>R0,readBearerToken:()=>dZ,probeHubServer:()=>h1,probeHubConnection:()=>FF,prewarmDetachedHubServer:()=>mQ,normalizeHubWebSocketUrl:()=>W2,localHubHasNoActiveSessions:()=>g8,isManagedHubReusable:()=>X2,isLocalHubOrigin:()=>wG,isLocalHubHostName:()=>_W,isHubReconnectableTransportError:()=>Tj,isHubLockHeldError:()=>LW,isHubCommandTimeoutError:()=>uQ,isDiscoveryFilePresent:()=>tU,hubHasLiveSessions:()=>s5,hasActiveHubSessions:()=>Rj,getManagedHubCompatibility:()=>Z6,executeScheduleOperation:()=>h5,ensureHubWebSocketServer:()=>zW,ensureHubServer:()=>ZE,ensureDetachedHubServer:()=>t5,ensureCompatibleLocalHubUrl:()=>X6,createTasksTool:()=>x8,createTasksPromptExtension:()=>y8,createLocalHubScheduleRuntimeHandlers:()=>tT,createInMemoryHubOwnerContext:()=>oU,createHubServerUrl:()=>v1,createHubAuthToken:()=>hQ,createConfiguredTelemetryService:()=>E$,createConfiguredTelemetryHandle:()=>w8,connectToHub:()=>lQ,compareHubBuilds:()=>r5,clearHubDiscoveryIfOwned:()=>vQ,clearHubDiscovery:()=>I1,checkManagedHubBuildMismatch:()=>fj,__test__:()=>jF,TasksToolInputSchema:()=>l5,TASKS_TOOL_NAME:()=>Z2,TASKS_SYSTEM_PROMPT_RULE:()=>d5,ScheduledTaskInputSchema:()=>n2,NodeHubClient:()=>g1,NativeHubTransportAdapter:()=>uZ,HubUIClient:()=>bj,HubTransportError:()=>$1,HubSessionClient:()=>Sj,HubServerTransport:()=>A5,HubScheduleService:()=>q8,HubScheduleCommandService:()=>D8,HubRunQueue:()=>gZ,HubRunAdmissionRejectedError:()=>q5,HubLockHeldError:()=>FW,HubInstanceLock:()=>u2,HubEventLogStore:()=>mZ,HubCommandError:()=>m8,HUB_LOCK_HELD_EXIT_CODE:()=>eT,DEFAULT_HUB_PORT:()=>Vj,DEFAULT_HUB_PATHNAME:()=>Bj,DEFAULT_HUB_HOST:()=>Yj,BrowserWebSocketHubAdapter:()=>cZ});import{isAbsolute as fM,relative as wM,resolve as ZQ,sep as SM}from"node:path";import{createSessionId as bM,readHubScheduleMode as UH}from"@cline/shared";function FH($,Z){if(typeof Z!=="string"||!Z.trim())return;let Q=ZQ($.workspaceRoot,Z);if(!DH($.workspaceRoot,Q))throw Error("schedule cwd is outside the client workspace scope");return Q}function DH($,Z){let Q=wM($,Z);return Q!==".."&&!Q.startsWith(`..${SM}`)&&!fM(Q)}function L1($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function LH($,Z,Q){return{version:$.version,requestId:$.requestId??bM("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class D8{schedules;constructor($){this.schedules=$}async handleCommand($,Z){try{let Q=this.resolveScope(Z);switch($.command){case"schedule.create":return L1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{},Q))});case"schedule.list":return L1($,{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,workspaceRoot:Q.workspaceRoot})});case"schedule.get":return L1($,{schedule:this.requireScopedSchedule($,Q)});case"schedule.update":return L1($,{schedule:this.schedules.updateSchedule(this.requireScopedSchedule($,Q).scheduleId,this.toUpdateInput($.payload??{},Q))});case"schedule.delete":return L1($,{deleted:this.schedules.deleteSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.enable":return L1($,{schedule:this.schedules.resumeSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.disable":return L1($,{schedule:this.schedules.pauseSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.trigger":return L1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(this.requireScopedSchedule($,Q).scheduleId):await this.schedules.triggerScheduleNow(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.list_executions":return L1($,{executions:this.listScopedExecutions($,Q)});case"schedule.stats":return L1($,{stats:this.schedules.getScheduleStats(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.active":{let X=this.scopedScheduleIds(Q);return L1($,{executions:this.schedules.getActiveExecutions().filter((J)=>X.has(J.scheduleId))})}case"schedule.upcoming":{let X=this.scopedScheduleIds(Q);return L1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0).filter((J)=>X.has(J.scheduleId))})}default:return LH($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Q){return LH($,"schedule_command_failed",Q instanceof Error?Q.message:String(Q))}}resolveScope($){let Z=$?.workspaceContext;if(!$?.clientId||!Z?.workspaceRoot?.trim())throw Error("schedule commands require a registered workspace client");let Q=ZQ(Z.workspaceRoot),X=ZQ(Z.cwd?.trim()||Q);if(!DH(Q,X))throw Error("client cwd is outside its workspace scope");return{workspaceRoot:Q,cwd:X}}requireScopedSchedule($,Z){let Q=String($.payload?.scheduleId??"").trim(),X=Q?this.schedules.getSchedule(Q):void 0;if(!X||ZQ(X.workspaceRoot)!==Z.workspaceRoot)throw Error("schedule does not exist in this workspace");return X}scopedScheduleIds($){return new Set(this.schedules.listSchedules({workspaceRoot:$.workspaceRoot}).map((Z)=>Z.scheduleId))}listScopedExecutions($,Z){let Q=typeof $.payload?.scheduleId==="string"?$.payload.scheduleId.trim():void 0;if(Q)this.requireScopedSchedule($,Z);let X=this.scopedScheduleIds(Z);return this.schedules.listScheduleExecutions({scheduleId:Q,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0}).filter((J)=>X.has(J.scheduleId))}toCreateInput($,Z){let Q=UH($,"yolo"),X=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:X,mode:Q,workspaceRoot:Z.workspaceRoot,cwd:FH(Z,$.cwd)??Z.cwd}}toUpdateInput($,Z){let Q=UH($),X=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:X,...Q===void 0?{}:{mode:Q},workspaceRoot:Z.workspaceRoot,...Object.hasOwn($,"cwd")?{cwd:$.cwd===null?Z.workspaceRoot:FH(Z,$.cwd)??Z.cwd}:{}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as VQ,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as FR}from"@cline/shared";class T5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let X of Z)if(this.materializeOneOff(X))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let X of Q)try{if(this.materializeSchedule(X))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasConsumedOneOffRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:$.nextRunAt??new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as pM}from"node:path";import{buildClineSystemPrompt as iM}from"@cline/shared";import{nowIso as fH}from"@cline/shared/db";var O0={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"},o$=[O0.READ_FILES,O0.SEARCH_CODEBASE,O0.RUN_COMMANDS,O0.FETCH_WEB_CONTENT,O0.APPLY_PATCH,O0.EDITOR,O0.SKILLS,O0.ASK,O0.SUBMIT_AND_EXIT];var zH={};f(zH,{mergeRulesForSystemPrompt:()=>z8,loadRulesForSystemPromptFromWatcher:()=>wW,listEnabledRulesFromWatcher:()=>_H,isRuleEnabled:()=>QQ,formatRulesForSystemPrompt:()=>_8});function QQ($){return $.disabled!==!0}function _8($){if($.length===0)return"";return`
|
|
@@ -292,7 +292,7 @@ ${JSON.stringify(X,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
292
292
|
error = ?,
|
|
293
293
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
294
294
|
updated_at = ?
|
|
295
|
-
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,x0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,x0(),$)}}function BQ($){return $?new Date($).getTime():void 0}function LR($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function b5($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?VQ:$.scheduleExpr??"",timezone:$.triggerKind==="schedule"?$.timezone:void 0,prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:BQ($.nextRunAt),lastRunAt:BQ($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:LR($)}}function DR($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function dW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:BQ($.startedAt),endedAt:BQ($.completedAt),status:DR($.status),errorMessage:$.error}}class q8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new S5({dbPath:$.dbPath}),this.materializer=new T5({store:this.store}),this.runner=new R5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",specs:$.specs,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(this.validateScheduleTiming($.cronPattern,$.timezone,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return b5(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?b5(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>b5(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let X=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,J=Z.enabled??Q.enabled,W=b5(Q),j=Z.cronPattern??W.cronPattern;if(j.trim()===VQ&&typeof Z.timezone==="string"&&Z.timezone.trim())throw Error("timezone is only supported for recurring schedules");if(this.validateScheduleTiming(j,j.trim()===VQ?void 0:Z.timezone===null?void 0:Z.timezone??W.timezone,Z.metadata??W.metadata,J),J&&!X)throw Error("workspaceRoot is required for enabled schedules");let Y=this.store.updateHubSchedule($,{...Z,scheduleId:$});return Y?b5(Y):void 0}validateScheduleTiming($,Z,Q,X){if($.trim()!==VQ){kH($),mW(Z);return}if(Z?.trim())throw Error("timezone is only supported for recurring schedules");let J=Q?.[FR];if(typeof J!=="number"||!Number.isFinite(J)||X&&J<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return dW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),dW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let W=Z??this.store.getSpec(J.specId);if(!W||W.source!=="hub-schedule")return;return dW(J,W.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,X=0,J=0,W;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)J+=j.endedAt-j.startedAt,X+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:X>0?J/X/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,X)=>String(Q.nextRunAt).localeCompare(String(X.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:X})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:X}))}}q0();import{realpathSync as pW,statSync as CR}from"node:fs";import{isAbsolute as $U,relative as PR,sep as ZU}from"node:path";import{ONE_TIME_SCHEDULE_CRON_PATTERN as QU,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as XU}from"@cline/shared";import{z as N0}from"zod";var fR=N0.enum(["create","update","list","get","pause","resume","delete","run_now"]),wR=N0.object({provider_id:N0.string().min(1),model_id:N0.string().min(1).optional()}),n2=N0.object({operation:fR,schedule_id:N0.string().min(1).optional(),schedule_type:N0.enum(["once","recurring"]).optional(),name:N0.string().min(1).optional(),prompt:N0.string().min(1).optional(),run_at:N0.string().datetime({offset:!0}).optional(),cron_pattern:N0.string().min(1).optional(),timezone:N0.string().min(1).nullable().optional(),enabled:N0.boolean().optional(),mode:N0.enum(["act","plan","yolo"]).optional(),system_prompt:N0.string().nullable().optional(),max_iterations:N0.number().int().positive().nullable().optional(),timeout_seconds:N0.number().int().positive().nullable().optional(),max_parallel:N0.number().int().positive().max(32).optional(),tags:N0.array(N0.string().min(1)).optional(),model_selection:wR.optional(),limit:N0.number().int().positive().max(200).optional()});function T8($,Z,Q,X){if(!JU.has(Z.operation))return;o1($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.scheduled.${Z.operation}`,success:X,agentId:Q.agentId})}var JU=new Set(["create","update","pause","resume","delete","run_now"]);function M8($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function iW($,Z){try{let Q=pW.native($);if(!CR(Q).isDirectory())throw Error("not a directory");return Q}catch{throw Error(`${Z} does not resolve to an existing safe path`)}}function SR($,Z){try{return pW.native($)===pW.native(Z)}catch{return!1}}function WU($,Z,Q){let X=PR($,Z);if(X===".."||X.startsWith(`..${ZU}`)||$U(X))throw Error(`${Q} is outside the workspace scope`)}function jU($,Z,Q){return iW($U(Z)?Z:`${$}${ZU}${Z}`,Q)}function bR($){let Z=iW($.workspaceRoot,"workspaceRoot"),Q=$.cwd?jU(Z,$.cwd,"cwd"):Z;return WU(Z,Q,"cwd"),{...$,workspaceRoot:Z,cwd:Q}}function E8($,Z){if(!$)throw Error("schedule does not exist");if(!SR($.workspaceRoot,Z.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let Q=iW($.workspaceRoot,"schedule workspaceRoot");if($.cwd){let X=jU(Q,$.cwd,"schedule cwd");WU(Q,X,"schedule cwd")}}function eH($){if(!$)return;return{providerId:$.provider_id.trim(),modelId:$.model_id?.trim()||void 0}}function lW($){if(!$)return;return[...new Set($.map((Z)=>Z.trim()).filter(Boolean))]}function YU($){let Z=Date.parse(M8($,"run_at"));if(!Number.isFinite(Z))throw Error("run_at must be an ISO timestamp");if(Z<=Date.now())throw Error("run_at must be in the future");return Z}function kR($){if($.schedule_type==="once"){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:QU,metadata:{[XU]:YU($.run_at)}}}if($.schedule_type==="recurring"){if($.run_at)throw Error("run_at cannot be used with a recurring schedule");return{cronPattern:M8($.cron_pattern,"cron_pattern"),timezone:$.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function xR($){if($.run_at&&$.cron_pattern)throw Error("run_at and cron_pattern cannot be updated together");if($.schedule_type==="once"||$.run_at){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:QU,timezone:null,metadata:{[XU]:YU($.run_at)}}}if($.schedule_type==="recurring"||$.cron_pattern)return{cronPattern:M8($.cron_pattern,"cron_pattern"),timezone:$.timezone===null?null:$.timezone?.trim()||void 0};return{timezone:$.timezone===null?null:$.timezone?.trim()||void 0}}function I5($){return M8($.schedule_id,"schedule_id")}async function h5($,Z,Q){let X=n2.safeParse(Z);if(!X.success)return{ok:!1,error:{code:"invalid_schedule_input",message:X.error.issues[0]?.message??"Invalid schedule input"}};let J=X.data;try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let W=await $.resolveSessionDefaults(Q.sessionId);if(!W?.workspaceRoot.trim())throw Error("tasks could not resolve the current workspace");let j=bR(W);if(JU.has(J.operation)&&!j.interactive)throw Error("schedule mutations require an interactive user session");switch(J.operation){case"create":{let Y=$.schedules.createSchedule({name:M8(J.name,"name"),...kR(J),prompt:M8(J.prompt,"prompt"),workspaceRoot:j.workspaceRoot,cwd:j.cwd,modelSelection:eH(J.model_selection)??j.modelSelection,enabled:J.enabled,mode:J.mode??"yolo",systemPrompt:J.system_prompt??void 0,maxIterations:J.max_iterations??void 0,timeoutSeconds:J.timeout_seconds??void 0,maxParallel:J.max_parallel??1,createdBy:`agent:${Q.agentId}`,tags:lW(J.tags)});return $.publish?.("schedule.created",{schedule:Y},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:Y}}case"update":{let Y=I5(J);E8($.schedules.getSchedule(Y),j);let V=$.schedules.updateSchedule(Y,{scheduleId:Y,...xR(J),name:J.name?.trim()||void 0,prompt:J.prompt?.trim()||void 0,modelSelection:eH(J.model_selection),enabled:J.enabled,mode:J.mode,systemPrompt:J.system_prompt,maxIterations:J.max_iterations,timeoutSeconds:J.timeout_seconds,maxParallel:J.max_parallel,tags:lW(J.tags)});if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:V}}case"list":{let Y=$.schedules.listSchedules({enabled:J.enabled,tags:lW(J.tags),workspaceRoot:j.workspaceRoot,limit:J.limit??50}).filter((V)=>{try{return E8(V,j),!0}catch{return!1}}).slice(0,J.limit??50);return{ok:!0,operation:J.operation,schedules:Y}}case"get":{let Y=$.schedules.getSchedule(I5(J));return E8(Y,j),{ok:!0,operation:J.operation,schedule:Y}}case"pause":case"resume":{let Y=I5(J);E8($.schedules.getSchedule(Y),j);let V=J.operation==="pause"?$.schedules.pauseSchedule(Y):$.schedules.resumeSchedule(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:V}}case"delete":{let Y=I5(J);E8($.schedules.getSchedule(Y),j);let V=$.schedules.deleteSchedule(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.deleted",{deleted:V,scheduleId:Y},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,deleted:V}}case"run_now":{let Y=I5(J);E8($.schedules.getSchedule(Y),j);let V=$.schedules.triggerScheduleNowDetached(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.triggered",{execution:V},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,execution:V}}}}catch(W){return T8($,J,Q,!1),{ok:!1,operation:J.operation,error:{code:"schedule_operation_failed",message:W instanceof Error?W.message:String(W)}}}}xQ();import{createTool as fC,zodToJsonSchema as wC}from"@cline/shared";import{z as k8}from"zod";q0();import{resolve as kU}from"node:path";import{z as $0}from"zod";var xU=$0.enum(["suggestion","follow-up","todo","handoff","idea","reminder"]),MC=$0.enum(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),yU=$0.union([$0.literal(0),$0.literal(1),$0.literal(2),$0.literal(3),$0.literal(4),$0.literal(5)]),RC=$0.object({provider_id:$0.string().min(1),model_id:$0.string().min(1).optional()}),b8=$0.object({operation:$0.enum(["create","update","list","get"]),task_id:$0.string().min(1).optional(),expected_revision:$0.number().int().positive().optional(),type:xU.optional(),title:$0.string().min(1).optional(),description:$0.string().nullable().optional(),instructions:$0.string().min(1).optional(),scope:$0.enum(["workspace","global"]).optional(),workspace_root:$0.string().min(1).nullable().optional(),cwd:$0.string().min(1).nullable().optional(),resource_paths:$0.array($0.string().min(1)).optional(),priority:yU.optional(),assignee:$0.string().min(1).nullable().optional(),model_selection:RC.nullable().optional(),mode:$0.enum(["act","plan","yolo"]).nullable().optional(),system_prompt:$0.string().nullable().optional(),max_iterations:$0.number().int().positive().nullable().optional(),timeout_seconds:$0.number().int().positive().nullable().optional(),available_at:$0.string().datetime().optional(),expires_at:$0.string().datetime().optional(),automation_eligible:$0.boolean().optional(),statuses:$0.array(MC).optional(),types:$0.array(xU).optional(),priorities:$0.array(yU).optional(),limit:$0.number().int().positive().max(500).optional()}),CC=new Set(["create","update"]);function $j($,Z,Q,X){if(!CC.has(Z.operation))return;o1($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.todo.${Z.operation}`,success:X,agentId:Q.agentId})}function S8($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function IU($){if($===void 0||$===null)return $;return{providerId:$.provider_id,modelId:$.model_id}}function vU($,Z){return kU($)===kU(Z)}function hU($,Z){if(!$)throw Error("task does not exist");if(Z.workspaceRoot){if($.scope!=="workspace"||!$.workspaceRoot||!vU($.workspaceRoot,Z.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if($.scope!=="global")throw Error("task is outside this session's global scope")}function PC($,Z){let Q=Z.workspaceRoot?"workspace":"global";if($.scope&&$.scope!==Q)throw Error(`this session can only manage ${Q} tasks`);if($.workspace_root!==void 0){if(!Z.workspaceRoot||$.workspace_root===null||!vU($.workspace_root,Z.workspaceRoot))throw Error(`this session can only manage ${Q} tasks`)}return Q}async function yQ($,Z,Q){let X=b8.safeParse(Z);if(!X.success)return{ok:!1,error:{code:"invalid_task_input",message:X.error.issues[0]?.message??"Invalid task input"}};let J=X.data,W={kind:"agent",id:Q.agentId,agentId:Q.agentId,sessionId:Q.sessionId};try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let j=await $.resolveSessionDefaults(Q.sessionId);if(!j)throw Error("tasks could not resolve the current session");let Y=PC(J,j);switch(J.operation){case"create":{let V={type:S8(J.type,"type"),title:S8(J.title,"title"),description:J.description??void 0,instructions:S8(J.instructions,"instructions"),scope:Y,workspaceRoot:j.workspaceRoot,cwd:Y==="workspace"?(J.cwd??j.cwd)?.trim()||void 0:void 0,resourcePaths:J.resource_paths,priority:J.priority,assignee:J.assignee??void 0,modelSelection:IU(J.model_selection)??j.modelSelection,mode:J.mode??void 0,systemPrompt:J.system_prompt??void 0,maxIterations:J.max_iterations??void 0,timeoutSeconds:J.timeout_seconds??void 0,availableAt:J.available_at,expiresAt:S8(J.expires_at,"expires_at"),automationEligible:J.automation_eligible,createdBy:W,originSessionId:Q.sessionId,originTaskId:j.originTaskId},B={ok:!0,operation:J.operation,task:await $.manager.createTask(V)};return $j($,J,Q,!0),B}case"update":{let V=S8(J.task_id,"task_id");if(hU(await $.manager.getTask(V),j),!J.expected_revision)throw Error("expected_revision is required for update");let B={ok:!0,operation:J.operation,task:await $.manager.updateTask({taskId:V,expectedRevision:J.expected_revision,type:J.type,title:J.title,description:J.description,instructions:J.instructions,scope:Y,workspaceRoot:j.workspaceRoot??null,cwd:J.cwd,resourcePaths:J.resource_paths,priority:J.priority,assignee:J.assignee,modelSelection:IU(J.model_selection),mode:J.mode,systemPrompt:J.system_prompt,maxIterations:J.max_iterations,timeoutSeconds:J.timeout_seconds,availableAt:J.available_at,expiresAt:J.expires_at,automationEligible:J.automation_eligible,updatedBy:W})};return $j($,J,Q,!0),B}case"list":{let V={statuses:J.statuses,types:J.types,scope:Y,workspaceRoot:j.workspaceRoot,priorities:J.priorities,automationEligible:J.automation_eligible,limit:J.limit};return{ok:!0,operation:J.operation,tasks:await $.manager.listTasks(V)}}case"get":{let V=await $.manager.getTask(S8(J.task_id,"task_id"));return hU(V,j),{ok:!0,operation:J.operation,task:V}}}}catch(j){return $j($,J,Q,!1),{ok:!1,operation:J.operation,error:{code:"task_operation_failed",message:j instanceof Error?j.message:String(j)}}}}var Z2="tasks",d5='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and may include an IANA `timezone`.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',SC=b8.extend({kind:k8.literal("todo")}).strict(),bC=n2.extend({kind:k8.literal("scheduled")}).strict(),l5=k8.discriminatedUnion("kind",[SC,bC]),kC=k8.object({...n2.shape,...b8.shape,kind:k8.enum(["todo","scheduled"]),operation:k8.enum(["create","update","list","get","pause","resume","delete","run_now"])}).strict();function x8($){return fC({name:Z2,description:'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.',inputSchema:wC(kC),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let X=l5.safeParse(Z);if(!X.success)return{ok:!1,kind:typeof Z==="object"&&Z!==null&&"kind"in Z&&(Z.kind==="todo"||Z.kind==="scheduled")?Z.kind:void 0,error:{code:"invalid_tasks_input",message:X.error.issues[0]?.message??"Invalid tasks input"}};if(X.data.kind==="todo")return{kind:"todo",...await yQ($.todo,X.data,Q)};return{kind:"scheduled",...await h5($.scheduled,X.data,Q)}}})}function y8(){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:($)=>{$.registerRule({id:"hub:task-guidance",content:d5,whenToolAvailable:Z2})}}}import{createSessionId as IP,isHubProtocolCompatible as hP,resolveClineBuildEnv as vP,resolveHubCommandTimeoutMs as gP}from"@cline/shared";var gU={};f(gU,{splitCoreSessionConfig:()=>p5,isUnusableSessionError:()=>Zj,isSessionNotFoundError:()=>t1,SessionNotFoundError:()=>M$,SESSION_NOT_FOUND_ERROR_CODE:()=>t2});var t2="session_not_found";class M$ extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function t1($){return $ instanceof M$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function xC($){if($ instanceof Error)return $.message;if(typeof $==="object"&&$!==null&&"message"in $){let Z=$.message;return typeof Z==="string"?Z:""}return typeof $==="string"?$:""}function Zj($){if(t1($))return!0;if(typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_run_in_progress")return!0;return xC($).includes("shutdown called while a run is in progress")}function p5($){let{hooks:Z,logger:Q,telemetry:X,extensionContext:J,extraTools:W,extensions:j,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:K,...G}=$,H={};if(Z)H.hooks=Z;if(Q)H.logger=Q;if(X)H.telemetry=X;if(J)H.extensionContext=J;if(W)H.extraTools=W;if(j)H.extensions=j;if(Y)H.onTeamEvent=Y;if(V)H.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)H.checkpoint=B;if(K?.compact)H.compaction=K;let U=Object.keys(H).length>0?H:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...K?{compaction:{enabled:K.enabled,strategy:K.strategy,preserveRecentTokens:K.preserveRecentTokens,summarizer:K.summarizer}}:{}},...U?{localRuntime:U}:{}}}import{spawn as YP}from"node:child_process";import{closeSync as VP,mkdirSync as BP,openSync as KP,readFileSync as GP,unlinkSync as HP}from"node:fs";import{basename as UP,dirname as FP,join as LP}from"node:path";import{fileURLToPath as DP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as _P,isHubDaemonProcess as JF,resolveClineBuildEnv as WF,withResolvedClineBuildEnv as zP}from"@cline/shared";import{createHash as yC,randomBytes as iU}from"node:crypto";import{existsSync as IC}from"node:fs";import{mkdir as Xj,open as cU,readFile as rU,rename as hC,rm as IQ,writeFile as vC}from"node:fs/promises";import{dirname as aU,join as Jj}from"node:path";import{isHubProtocolCompatible as gC}from"@cline/shared";import{resolveClineDataDir as $6,resolveClineDir as nU}from"@cline/shared/storage";var Q2="0.0.78";var e2={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Q2,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var mC="CLINE_HUB_DISCOVERY_PATH",cC="CLINE_HUB_BUILD_ID",uC="CLINE_HUB_BUILD_EPOCH_MS",dC=30000,lC=15000,uU=100;function pC($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function iC($){return yC("sha256").update($).digest("hex").slice(0,12)}function rC($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function hQ(){return iU(32).toString("hex")}function dU($){return new Promise((Z)=>setTimeout(Z,$))}function aC($){return`${$}.lock`}async function nC($){try{let Z=JSON.parse(await rU(Jj($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function Qj($){await IQ($,{recursive:!0,force:!0}).catch(()=>{return})}function _1(){let $=process.env[cC]?.trim();if($)return $;return"sdk-v1-4b1d84f053ef14f36b0769606e03a68098d0ffbaf85112a093f24f519f4531a5".trim()||`source-${String(e2.version)}`}function i5(){let $=Number(process.env[uC]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1787443036902)?1787443036902:void 0}function Z6($,Z=_1()){let Q=gC($);if(!Q.compatible)return Q;let X=$.buildId?.trim();if(!X)return{compatible:!1,reason:"missing_build"};if(X!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function lU($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function pU($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((X)=>Number(X));if(Q.length===0||Q.some((X)=>!Number.isInteger(X)||X<0))return;return Q}function oC($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let X=$[Q]??0,J=Z[Q]??0;if(X!==J)return X<J?-1:1}return 0}function r5($,Z){let Q=$.buildId?.trim(),X=Z.buildId?.trim();if(Q&&X&&Q===X)return 0;let J=lU($.buildEpochMs),W=lU(Z.buildEpochMs);if(J!==void 0&&W!==void 0&&J!==W)return J<W?-1:1;let j=pU($.coreVersion),Y=pU(Z.coreVersion);if(j&&Y){let V=oC(j,Y);if(V!==0)return V}if(Q&&X&&Q!==X)return Q<X?-1:1;return 0}function a5(){return{buildId:_1(),buildEpochMs:i5(),coreVersion:String(e2.version)}}function X2($,Z){let Q=Z?.self??a5(),X=Z6($,Q.buildId??"");if(X.compatible)return!0;if(X.reason!=="build_mismatch"&&X.reason!=="missing_build")return!1;return r5(Q,$)<=0}function R$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${iC($)}`,Q=process.env[mC]?.trim()||Jj($6(),"locks","hub","owners",`${pC(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function oU($=`hub-${Date.now().toString(36)}`){return R$($)}async function R0($){try{let Z=JSON.parse(await rU($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function I8($,Z){await Wj($,async()=>{let Q=aU($);await Xj(Q,{recursive:!0});let X=`${$}.${process.pid}.${iU(6).toString("hex")}.tmp`,J;try{J=await cU(X,"wx",384),await J.writeFile(`${JSON.stringify(Z,null,2)}
|
|
295
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,x0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,x0(),$)}}function BQ($){return $?new Date($).getTime():void 0}function LR($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function b5($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?VQ:$.scheduleExpr??"",timezone:$.triggerKind==="schedule"?$.timezone:void 0,prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:BQ($.nextRunAt),lastRunAt:BQ($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:LR($)}}function DR($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function dW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:BQ($.startedAt),endedAt:BQ($.completedAt),status:DR($.status),errorMessage:$.error}}class q8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new S5({dbPath:$.dbPath}),this.materializer=new T5({store:this.store}),this.runner=new R5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",specs:$.specs,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(this.validateScheduleTiming($.cronPattern,$.timezone,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return b5(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?b5(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>b5(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let X=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,J=Z.enabled??Q.enabled,W=b5(Q),j=Z.cronPattern??W.cronPattern;if(j.trim()===VQ&&typeof Z.timezone==="string"&&Z.timezone.trim())throw Error("timezone is only supported for recurring schedules");if(this.validateScheduleTiming(j,j.trim()===VQ?void 0:Z.timezone===null?void 0:Z.timezone??W.timezone,Z.metadata??W.metadata,J),J&&!X)throw Error("workspaceRoot is required for enabled schedules");let Y=this.store.updateHubSchedule($,{...Z,scheduleId:$});return Y?b5(Y):void 0}validateScheduleTiming($,Z,Q,X){if($.trim()!==VQ){kH($),mW(Z);return}if(Z?.trim())throw Error("timezone is only supported for recurring schedules");let J=Q?.[FR];if(typeof J!=="number"||!Number.isFinite(J)||X&&J<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return dW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),dW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let W=Z??this.store.getSpec(J.specId);if(!W||W.source!=="hub-schedule")return;return dW(J,W.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,X=0,J=0,W;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)J+=j.endedAt-j.startedAt,X+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:X>0?J/X/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,X)=>String(Q.nextRunAt).localeCompare(String(X.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:X})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:X}))}}q0();import{realpathSync as pW,statSync as CR}from"node:fs";import{isAbsolute as $U,relative as PR,sep as ZU}from"node:path";import{ONE_TIME_SCHEDULE_CRON_PATTERN as QU,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as XU}from"@cline/shared";import{z as N0}from"zod";var fR=N0.enum(["create","update","list","get","pause","resume","delete","run_now"]),wR=N0.object({provider_id:N0.string().min(1),model_id:N0.string().min(1).optional()}),n2=N0.object({operation:fR,schedule_id:N0.string().min(1).optional(),schedule_type:N0.enum(["once","recurring"]).optional(),name:N0.string().min(1).optional(),prompt:N0.string().min(1).optional(),run_at:N0.string().datetime({offset:!0}).optional(),cron_pattern:N0.string().min(1).optional(),timezone:N0.string().min(1).nullable().optional(),enabled:N0.boolean().optional(),mode:N0.enum(["act","plan","yolo"]).optional(),system_prompt:N0.string().nullable().optional(),max_iterations:N0.number().int().positive().nullable().optional(),timeout_seconds:N0.number().int().positive().nullable().optional(),max_parallel:N0.number().int().positive().max(32).optional(),tags:N0.array(N0.string().min(1)).optional(),model_selection:wR.optional(),limit:N0.number().int().positive().max(200).optional()});function T8($,Z,Q,X){if(!JU.has(Z.operation))return;o1($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.scheduled.${Z.operation}`,success:X,agentId:Q.agentId})}var JU=new Set(["create","update","pause","resume","delete","run_now"]);function M8($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function iW($,Z){try{let Q=pW.native($);if(!CR(Q).isDirectory())throw Error("not a directory");return Q}catch{throw Error(`${Z} does not resolve to an existing safe path`)}}function SR($,Z){try{return pW.native($)===pW.native(Z)}catch{return!1}}function WU($,Z,Q){let X=PR($,Z);if(X===".."||X.startsWith(`..${ZU}`)||$U(X))throw Error(`${Q} is outside the workspace scope`)}function jU($,Z,Q){return iW($U(Z)?Z:`${$}${ZU}${Z}`,Q)}function bR($){let Z=iW($.workspaceRoot,"workspaceRoot"),Q=$.cwd?jU(Z,$.cwd,"cwd"):Z;return WU(Z,Q,"cwd"),{...$,workspaceRoot:Z,cwd:Q}}function E8($,Z){if(!$)throw Error("schedule does not exist");if(!SR($.workspaceRoot,Z.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let Q=iW($.workspaceRoot,"schedule workspaceRoot");if($.cwd){let X=jU(Q,$.cwd,"schedule cwd");WU(Q,X,"schedule cwd")}}function eH($){if(!$)return;return{providerId:$.provider_id.trim(),modelId:$.model_id?.trim()||void 0}}function lW($){if(!$)return;return[...new Set($.map((Z)=>Z.trim()).filter(Boolean))]}function YU($){let Z=Date.parse(M8($,"run_at"));if(!Number.isFinite(Z))throw Error("run_at must be an ISO timestamp");if(Z<=Date.now())throw Error("run_at must be in the future");return Z}function kR($){if($.schedule_type==="once"){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:QU,metadata:{[XU]:YU($.run_at)}}}if($.schedule_type==="recurring"){if($.run_at)throw Error("run_at cannot be used with a recurring schedule");return{cronPattern:M8($.cron_pattern,"cron_pattern"),timezone:$.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function xR($){if($.run_at&&$.cron_pattern)throw Error("run_at and cron_pattern cannot be updated together");if($.schedule_type==="once"||$.run_at){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:QU,timezone:null,metadata:{[XU]:YU($.run_at)}}}if($.schedule_type==="recurring"||$.cron_pattern)return{cronPattern:M8($.cron_pattern,"cron_pattern"),timezone:$.timezone===null?null:$.timezone?.trim()||void 0};return{timezone:$.timezone===null?null:$.timezone?.trim()||void 0}}function I5($){return M8($.schedule_id,"schedule_id")}async function h5($,Z,Q){let X=n2.safeParse(Z);if(!X.success)return{ok:!1,error:{code:"invalid_schedule_input",message:X.error.issues[0]?.message??"Invalid schedule input"}};let J=X.data;try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let W=await $.resolveSessionDefaults(Q.sessionId);if(!W?.workspaceRoot.trim())throw Error("tasks could not resolve the current workspace");let j=bR(W);if(JU.has(J.operation)&&!j.interactive)throw Error("schedule mutations require an interactive user session");switch(J.operation){case"create":{let Y=$.schedules.createSchedule({name:M8(J.name,"name"),...kR(J),prompt:M8(J.prompt,"prompt"),workspaceRoot:j.workspaceRoot,cwd:j.cwd,modelSelection:eH(J.model_selection)??j.modelSelection,enabled:J.enabled,mode:J.mode??"yolo",systemPrompt:J.system_prompt??void 0,maxIterations:J.max_iterations??void 0,timeoutSeconds:J.timeout_seconds??void 0,maxParallel:J.max_parallel??1,createdBy:`agent:${Q.agentId}`,tags:lW(J.tags)});return $.publish?.("schedule.created",{schedule:Y},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:Y}}case"update":{let Y=I5(J);E8($.schedules.getSchedule(Y),j);let V=$.schedules.updateSchedule(Y,{scheduleId:Y,...xR(J),name:J.name?.trim()||void 0,prompt:J.prompt?.trim()||void 0,modelSelection:eH(J.model_selection),enabled:J.enabled,mode:J.mode,systemPrompt:J.system_prompt,maxIterations:J.max_iterations,timeoutSeconds:J.timeout_seconds,maxParallel:J.max_parallel,tags:lW(J.tags)});if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:V}}case"list":{let Y=$.schedules.listSchedules({enabled:J.enabled,tags:lW(J.tags),workspaceRoot:j.workspaceRoot,limit:J.limit??50}).filter((V)=>{try{return E8(V,j),!0}catch{return!1}}).slice(0,J.limit??50);return{ok:!0,operation:J.operation,schedules:Y}}case"get":{let Y=$.schedules.getSchedule(I5(J));return E8(Y,j),{ok:!0,operation:J.operation,schedule:Y}}case"pause":case"resume":{let Y=I5(J);E8($.schedules.getSchedule(Y),j);let V=J.operation==="pause"?$.schedules.pauseSchedule(Y):$.schedules.resumeSchedule(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:V}}case"delete":{let Y=I5(J);E8($.schedules.getSchedule(Y),j);let V=$.schedules.deleteSchedule(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.deleted",{deleted:V,scheduleId:Y},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,deleted:V}}case"run_now":{let Y=I5(J);E8($.schedules.getSchedule(Y),j);let V=$.schedules.triggerScheduleNowDetached(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.triggered",{execution:V},Q.sessionId),T8($,J,Q,!0),{ok:!0,operation:J.operation,execution:V}}}}catch(W){return T8($,J,Q,!1),{ok:!1,operation:J.operation,error:{code:"schedule_operation_failed",message:W instanceof Error?W.message:String(W)}}}}xQ();import{createTool as fC,zodToJsonSchema as wC}from"@cline/shared";import{z as k8}from"zod";q0();import{resolve as kU}from"node:path";import{z as $0}from"zod";var xU=$0.enum(["suggestion","follow-up","todo","handoff","idea","reminder"]),MC=$0.enum(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),yU=$0.union([$0.literal(0),$0.literal(1),$0.literal(2),$0.literal(3),$0.literal(4),$0.literal(5)]),RC=$0.object({provider_id:$0.string().min(1),model_id:$0.string().min(1).optional()}),b8=$0.object({operation:$0.enum(["create","update","list","get"]),task_id:$0.string().min(1).optional(),expected_revision:$0.number().int().positive().optional(),type:xU.optional(),title:$0.string().min(1).optional(),description:$0.string().nullable().optional(),instructions:$0.string().min(1).optional(),scope:$0.enum(["workspace","global"]).optional(),workspace_root:$0.string().min(1).nullable().optional(),cwd:$0.string().min(1).nullable().optional(),resource_paths:$0.array($0.string().min(1)).optional(),priority:yU.optional(),assignee:$0.string().min(1).nullable().optional(),model_selection:RC.nullable().optional(),mode:$0.enum(["act","plan","yolo"]).nullable().optional(),system_prompt:$0.string().nullable().optional(),max_iterations:$0.number().int().positive().nullable().optional(),timeout_seconds:$0.number().int().positive().nullable().optional(),available_at:$0.string().datetime().optional(),expires_at:$0.string().datetime().optional(),automation_eligible:$0.boolean().optional(),statuses:$0.array(MC).optional(),types:$0.array(xU).optional(),priorities:$0.array(yU).optional(),limit:$0.number().int().positive().max(500).optional()}),CC=new Set(["create","update"]);function $j($,Z,Q,X){if(!CC.has(Z.operation))return;o1($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.todo.${Z.operation}`,success:X,agentId:Q.agentId})}function S8($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function IU($){if($===void 0||$===null)return $;return{providerId:$.provider_id,modelId:$.model_id}}function vU($,Z){return kU($)===kU(Z)}function hU($,Z){if(!$)throw Error("task does not exist");if(Z.workspaceRoot){if($.scope!=="workspace"||!$.workspaceRoot||!vU($.workspaceRoot,Z.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if($.scope!=="global")throw Error("task is outside this session's global scope")}function PC($,Z){let Q=Z.workspaceRoot?"workspace":"global";if($.scope&&$.scope!==Q)throw Error(`this session can only manage ${Q} tasks`);if($.workspace_root!==void 0){if(!Z.workspaceRoot||$.workspace_root===null||!vU($.workspace_root,Z.workspaceRoot))throw Error(`this session can only manage ${Q} tasks`)}return Q}async function yQ($,Z,Q){let X=b8.safeParse(Z);if(!X.success)return{ok:!1,error:{code:"invalid_task_input",message:X.error.issues[0]?.message??"Invalid task input"}};let J=X.data,W={kind:"agent",id:Q.agentId,agentId:Q.agentId,sessionId:Q.sessionId};try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let j=await $.resolveSessionDefaults(Q.sessionId);if(!j)throw Error("tasks could not resolve the current session");let Y=PC(J,j);switch(J.operation){case"create":{let V={type:S8(J.type,"type"),title:S8(J.title,"title"),description:J.description??void 0,instructions:S8(J.instructions,"instructions"),scope:Y,workspaceRoot:j.workspaceRoot,cwd:Y==="workspace"?(J.cwd??j.cwd)?.trim()||void 0:void 0,resourcePaths:J.resource_paths,priority:J.priority,assignee:J.assignee??void 0,modelSelection:IU(J.model_selection)??j.modelSelection,mode:J.mode??void 0,systemPrompt:J.system_prompt??void 0,maxIterations:J.max_iterations??void 0,timeoutSeconds:J.timeout_seconds??void 0,availableAt:J.available_at,expiresAt:S8(J.expires_at,"expires_at"),automationEligible:J.automation_eligible,createdBy:W,originSessionId:Q.sessionId,originTaskId:j.originTaskId},B={ok:!0,operation:J.operation,task:await $.manager.createTask(V)};return $j($,J,Q,!0),B}case"update":{let V=S8(J.task_id,"task_id");if(hU(await $.manager.getTask(V),j),!J.expected_revision)throw Error("expected_revision is required for update");let B={ok:!0,operation:J.operation,task:await $.manager.updateTask({taskId:V,expectedRevision:J.expected_revision,type:J.type,title:J.title,description:J.description,instructions:J.instructions,scope:Y,workspaceRoot:j.workspaceRoot??null,cwd:J.cwd,resourcePaths:J.resource_paths,priority:J.priority,assignee:J.assignee,modelSelection:IU(J.model_selection),mode:J.mode,systemPrompt:J.system_prompt,maxIterations:J.max_iterations,timeoutSeconds:J.timeout_seconds,availableAt:J.available_at,expiresAt:J.expires_at,automationEligible:J.automation_eligible,updatedBy:W})};return $j($,J,Q,!0),B}case"list":{let V={statuses:J.statuses,types:J.types,scope:Y,workspaceRoot:j.workspaceRoot,priorities:J.priorities,automationEligible:J.automation_eligible,limit:J.limit};return{ok:!0,operation:J.operation,tasks:await $.manager.listTasks(V)}}case"get":{let V=await $.manager.getTask(S8(J.task_id,"task_id"));return hU(V,j),{ok:!0,operation:J.operation,task:V}}}}catch(j){return $j($,J,Q,!1),{ok:!1,operation:J.operation,error:{code:"task_operation_failed",message:j instanceof Error?j.message:String(j)}}}}var Z2="tasks",d5='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and may include an IANA `timezone`.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',SC=b8.extend({kind:k8.literal("todo")}).strict(),bC=n2.extend({kind:k8.literal("scheduled")}).strict(),l5=k8.discriminatedUnion("kind",[SC,bC]),kC=k8.object({...n2.shape,...b8.shape,kind:k8.enum(["todo","scheduled"]),operation:k8.enum(["create","update","list","get","pause","resume","delete","run_now"])}).strict();function x8($){return fC({name:Z2,description:'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.',inputSchema:wC(kC),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let X=l5.safeParse(Z);if(!X.success)return{ok:!1,kind:typeof Z==="object"&&Z!==null&&"kind"in Z&&(Z.kind==="todo"||Z.kind==="scheduled")?Z.kind:void 0,error:{code:"invalid_tasks_input",message:X.error.issues[0]?.message??"Invalid tasks input"}};if(X.data.kind==="todo")return{kind:"todo",...await yQ($.todo,X.data,Q)};return{kind:"scheduled",...await h5($.scheduled,X.data,Q)}}})}function y8(){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:($)=>{$.registerRule({id:"hub:task-guidance",content:d5,whenToolAvailable:Z2})}}}import{createSessionId as IP,isHubProtocolCompatible as hP,resolveClineBuildEnv as vP,resolveHubCommandTimeoutMs as gP}from"@cline/shared";var gU={};f(gU,{splitCoreSessionConfig:()=>p5,isUnusableSessionError:()=>Zj,isSessionNotFoundError:()=>t1,SessionNotFoundError:()=>M$,SESSION_NOT_FOUND_ERROR_CODE:()=>t2});var t2="session_not_found";class M$ extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function t1($){return $ instanceof M$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function xC($){if($ instanceof Error)return $.message;if(typeof $==="object"&&$!==null&&"message"in $){let Z=$.message;return typeof Z==="string"?Z:""}return typeof $==="string"?$:""}function Zj($){if(t1($))return!0;if(typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_run_in_progress")return!0;return xC($).includes("shutdown called while a run is in progress")}function p5($){let{hooks:Z,logger:Q,telemetry:X,extensionContext:J,extraTools:W,extensions:j,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:K,...G}=$,H={};if(Z)H.hooks=Z;if(Q)H.logger=Q;if(X)H.telemetry=X;if(J)H.extensionContext=J;if(W)H.extraTools=W;if(j)H.extensions=j;if(Y)H.onTeamEvent=Y;if(V)H.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)H.checkpoint=B;if(K?.compact)H.compaction=K;let U=Object.keys(H).length>0?H:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...K?{compaction:{enabled:K.enabled,strategy:K.strategy,preserveRecentTokens:K.preserveRecentTokens,summarizer:K.summarizer}}:{}},...U?{localRuntime:U}:{}}}import{spawn as YP}from"node:child_process";import{closeSync as VP,mkdirSync as BP,openSync as KP,readFileSync as GP,unlinkSync as HP}from"node:fs";import{basename as UP,dirname as FP,join as LP}from"node:path";import{fileURLToPath as DP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as _P,isHubDaemonProcess as JF,resolveClineBuildEnv as WF,withResolvedClineBuildEnv as zP}from"@cline/shared";import{createHash as yC,randomBytes as iU}from"node:crypto";import{existsSync as IC}from"node:fs";import{mkdir as Xj,open as cU,readFile as rU,rename as hC,rm as IQ,writeFile as vC}from"node:fs/promises";import{dirname as aU,join as Jj}from"node:path";import{isHubProtocolCompatible as gC}from"@cline/shared";import{resolveClineDataDir as $6,resolveClineDir as nU}from"@cline/shared/storage";var Q2="0.0.79";var e2={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Q2,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var mC="CLINE_HUB_DISCOVERY_PATH",cC="CLINE_HUB_BUILD_ID",uC="CLINE_HUB_BUILD_EPOCH_MS",dC=30000,lC=15000,uU=100;function pC($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function iC($){return yC("sha256").update($).digest("hex").slice(0,12)}function rC($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function hQ(){return iU(32).toString("hex")}function dU($){return new Promise((Z)=>setTimeout(Z,$))}function aC($){return`${$}.lock`}async function nC($){try{let Z=JSON.parse(await rU(Jj($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function Qj($){await IQ($,{recursive:!0,force:!0}).catch(()=>{return})}function _1(){let $=process.env[cC]?.trim();if($)return $;return"sdk-v1-6a421dae68d376a32dd63d44ec21b5cbe4419ab1b8c1f09ca8dffc3f7832cf62".trim()||`source-${String(e2.version)}`}function i5(){let $=Number(process.env[uC]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1787612400373)?1787612400373:void 0}function Z6($,Z=_1()){let Q=gC($);if(!Q.compatible)return Q;let X=$.buildId?.trim();if(!X)return{compatible:!1,reason:"missing_build"};if(X!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function lU($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function pU($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((X)=>Number(X));if(Q.length===0||Q.some((X)=>!Number.isInteger(X)||X<0))return;return Q}function oC($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let X=$[Q]??0,J=Z[Q]??0;if(X!==J)return X<J?-1:1}return 0}function r5($,Z){let Q=$.buildId?.trim(),X=Z.buildId?.trim();if(Q&&X&&Q===X)return 0;let J=lU($.buildEpochMs),W=lU(Z.buildEpochMs);if(J!==void 0&&W!==void 0&&J!==W)return J<W?-1:1;let j=pU($.coreVersion),Y=pU(Z.coreVersion);if(j&&Y){let V=oC(j,Y);if(V!==0)return V}if(Q&&X&&Q!==X)return Q<X?-1:1;return 0}function a5(){return{buildId:_1(),buildEpochMs:i5(),coreVersion:String(e2.version)}}function X2($,Z){let Q=Z?.self??a5(),X=Z6($,Q.buildId??"");if(X.compatible)return!0;if(X.reason!=="build_mismatch"&&X.reason!=="missing_build")return!1;return r5(Q,$)<=0}function R$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${iC($)}`,Q=process.env[mC]?.trim()||Jj($6(),"locks","hub","owners",`${pC(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function oU($=`hub-${Date.now().toString(36)}`){return R$($)}async function R0($){try{let Z=JSON.parse(await rU($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function I8($,Z){await Wj($,async()=>{let Q=aU($);await Xj(Q,{recursive:!0});let X=`${$}.${process.pid}.${iU(6).toString("hex")}.tmp`,J;try{J=await cU(X,"wx",384),await J.writeFile(`${JSON.stringify(Z,null,2)}
|
|
296
296
|
`,{encoding:"utf8"}),await J.sync(),await J.close(),J=void 0,await hC(X,$);let W;try{W=await cU(Q,"r"),await W.sync()}catch{}finally{await W?.close().catch(()=>{return})}}catch(W){throw await J?.close().catch(()=>{return}),await IQ(X,{force:!0}).catch(()=>{return}),W}})}async function I1($){await Wj($,async()=>{await IQ($,{force:!0}).catch(()=>{return})})}async function vQ($,Z){return await Wj($,async()=>{if((await R0($))?.hubId!==Z)return!1;return await IQ($,{force:!0}),!0})}async function sU($,Z,Q){let X=aC($);await Xj(aU(X),{recursive:!0});let J=Date.now()+lC;while(!0){try{await Xj(X,{recursive:!1})}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let Y=await nC(X);if(!Y){if(Date.now()>=J){await Qj(X);continue}await dU(uU);continue}let V=Date.now()-Date.parse(Y.acquiredAt);if(!rC(Y.pid)||V>dC){await Qj(X);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub ${Z} lock ${X}`);await dU(uU);continue}try{return await vC(Jj(X,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
297
297
|
`,"utf8"),await Q()}finally{await Qj(X)}}}function Wj($,Z){return sU(`${$}.mutation`,"discovery mutation",Z)}function h8($,Z){return sU($,"startup",Z)}async function h1($,Z){try{let Q=await fetch(Z?.authToken?jj($):gQ($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let X=await Q.json();if(typeof X.protocolVersion!=="string"||typeof X.host!=="string"||typeof X.port!=="number"||typeof X.url!=="string")return;return{protocolVersion:X.protocolVersion,minClientProtocolVersion:typeof X.minClientProtocolVersion==="string"?X.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof X.maxClientProtocolVersion==="string"?X.maxClientProtocolVersion:void 0,capabilities:Array.isArray(X.capabilities)?X.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof X.coreVersion==="string"?X.coreVersion:void 0,buildId:typeof X.buildId==="string"?X.buildId:void 0,buildEpochMs:typeof X.buildEpochMs==="number"?X.buildEpochMs:void 0,host:X.host,port:X.port,url:X.url,hubId:typeof X.hubId==="string"?X.hubId:void 0,authToken:typeof X.authToken==="string"?X.authToken:void 0,pid:typeof X.pid==="number"?X.pid:void 0,startedAt:typeof X.startedAt==="string"?X.startedAt:void 0,updatedAt:typeof X.updatedAt==="string"?X.updatedAt:void 0}}catch{return}}function v1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function gQ($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function jj($){let Z=new URL(gQ($));return Z.pathname="/status",Z.toString()}function tU($){return IC($)}import{CLINE_HUB_DEV_PORT as sC,CLINE_HUB_PORT as tC,resolveClineBuildEnv as eC}from"@cline/shared";var $P="CLINE_HUB_HOST",ZP="CLINE_HUB_PORT",QP="CLINE_HUB_PATHNAME",Yj="127.0.0.1",Vj=tC,Bj="/hub";function eU($){return eC($)==="development"?sC:Vj}function Kj($={}){return($.env??process.env)[$P]?.trim()||Yj}function v8($={}){let Q=($.env??process.env)[ZP]?.trim();if(!Q)return eU($);let X=Number.parseInt(Q,10);if(!Number.isInteger(X)||X<1||X>65535)return eU($);return X}function Gj($={}){return($.env??process.env)[QP]?.trim()||Bj}function C$($={},Z={}){return{host:$.host??Kj(Z),port:$.port??v8(Z),pathname:$.pathname??Gj(Z)}}import{join as XP}from"node:path";var JP="shared:cline",WP="CLINE_HUB_DISCOVERY_PATH",jP="hub-production";function $F($){let Z=n1($.trim());return R$(`workspace:${Z||$.trim()}`)}function j1($=JP){return R$(`${$}@${_1()}`)}function z1(){return{ownerId:jP,discoveryPath:process.env[WP]?.trim()||XP($6(),"locks","hub","production.json")}}var OP=8000,NP=200,ZF=3000,qP=100,AP=[100,250,500,1000,2000],TP="--cline-hub-daemon",EP=3,MP=60000,Fj=new Map,jF={resetRetireAttempts(){Fj.clear()}};function RP($,Z=Date.now()){let Q=Fj.get($);if(!Q||Z-Q.windowStartedAt>MP)return Fj.set($,{count:1,windowStartedAt:Z}),!0;return Q.count+=1,Q.count<=EP}function CP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function PP(){try{let $=LP($6(),"logs","hub-daemon.log");return BP(FP($),{recursive:!0}),{fd:KP($,"a"),logPath:$}}catch{return}}function fP(){return WF()==="production"?z1():j1()}function n5($){return X2($)}function Lj($){try{let Z=JSON.parse(GP(`${$}.superseded`,"utf8"));return{url:typeof Z.url==="string"?Z.url:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0}}catch{return}}function Hj($){try{HP(`${$}.superseded`)}catch{}}function QF($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function o5($,Z){try{return await h1($,{authToken:Z})}catch{return}}async function XF($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await o5($))?.url)return!0;await new Promise((J)=>setTimeout(J,qP))}return!1}async function Q6($,Z){if(!RP($.url))return!1;await cQ($.url,$.authToken,"retired by newer install").catch(()=>!1),await e5($.url,$.authToken).catch(()=>!1);let Q=await XF($.url,ZF);if(!Q&&$.pid&&wP($.pid)){try{process.kill($.pid,"SIGTERM")}catch{}Q=await XF($.url,ZF)}if(Q)await I1(Z).catch(()=>{return});return Q}function wP($){try{return process.kill($,0),!0}catch(Z){return Z?.code==="EPERM"}}async function s5($){try{return!await g8($.url,$.authToken)}catch{return!1}}async function Uj($,Z){if(n5($))return"reusable";if(await s5($))return"deferred_busy";return await Q6($,Z)?"retired":"failed"}async function SP($){if(WF()!=="production")return;let Z=j1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await R0(Z.discoveryPath);if(Q?.url)await Q6(Q,Z.discoveryPath);else await I1(Z.discoveryPath).catch(()=>{return})}function bP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return DP(new URL(`./entry.${$}`,import.meta.url))}function kP($,Z){let Q=bP(),X=process.execPath?.trim();if(!X)throw Error("unable to resolve runtime executable for hub daemon");let J=UP(X).toLowerCase().includes("bun"),W=Q.startsWith("/$bunfs/"),j=J&&Q.toLowerCase().endsWith(".ts"),Y=W?[TP]:[...j?["--conditions=development"]:[],Q];return{launcher:X,args:[...Y,"--cwd",$,...CP(Z)],cwd:$,env:{...zP(process.env),CLINE_NO_INTERACTIVE:"1",[_P]:"1"}}}function xP($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function Dj($,Z={}){if(JF())return;let Q=kP($,Z),X=PP();try{YP(Q.launcher,Q.args,{detached:!0,stdio:X?["ignore",X.fd,X.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(X)VP(X.fd)}}async function _j($,Z={}){for(let Q=0;;Q++)try{Dj($,Z);return}catch(X){let J=AP[Q];if(!xP(X)||J===void 0)throw X;await new Promise((W)=>setTimeout(W,J))}}function mQ($,Z={}){if(JF())return;t5($,Z).catch(()=>{})}async function yP($,Z,Q={}){let X=Q.host!==void 0||Q.port!==void 0||Q.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=C$(Q),W=v1(J.host,J.port,J.pathname),j=(F)=>{if(!X)J2(F.url,F.authToken);return F};await SP($).catch(()=>{return});let Y=await R0($.discoveryPath),V=Y?.url?void 0:Lj($.discoveryPath),B=!1;if(Y?.url){let F=Y.authToken;if(!F)B=!0,await Q6(Y,$.discoveryPath);else{let L=await o5(Y.url,F);if(L?.url&&n5(L)&&await e0(L.url,{authToken:F}))return Hj($.discoveryPath),j({url:L.url,authToken:F});if(L?.url){if(await Uj({...L,authToken:F},$.discoveryPath)==="deferred_busy"&&await e0(L.url,{authToken:F}))return j({url:L.url,authToken:F})}else await I1($.discoveryPath).catch(()=>{return})}}let K=await o5(W);if(K?.url){let F=QF(K,Y??V,W);if(n5(K)){let D=[K.authToken,Y?.authToken,V?.authToken].filter((_)=>typeof _==="string"&&_.trim().length>0);for(let _ of D){if(!await e0(K.url,{authToken:_}))continue;let O={hubId:K.hubId??`repaired-${K.port}`,protocolVersion:K.protocolVersion,minClientProtocolVersion:K.minClientProtocolVersion,maxClientProtocolVersion:K.maxClientProtocolVersion,capabilities:K.capabilities,coreVersion:K.coreVersion,buildId:K.buildId,authToken:_,host:K.host,port:K.port,url:K.url,pid:K.pid??Y?.pid??V?.pid,startedAt:K.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await I8($.discoveryPath,O)}catch{}return Hj($.discoveryPath),j({url:K.url,authToken:_})}throw Error(`A compatible Cline Hub is already running at ${W}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${B?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`)}let L=await Uj(F,$.discoveryPath);if(L==="deferred_busy"){for(let D of[F.authToken,Y?.authToken].filter((z)=>typeof z==="string"&&z.trim().length>0))if(await e0(K.url,{authToken:D}))return j({url:K.url,authToken:D});if(Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An older Cline Hub is running at ${W} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(L==="failed"&&Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${W} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let H=Q.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await _j(Z,H);let U=Date.now()+OP;while(Date.now()<U){let F=await R0($.discoveryPath);if(F?.url&&F.authToken){let D=await o5(F.url,F.authToken);if(D?.url&&n5(D)&&await e0(D.url,{authToken:F.authToken}))return Hj($.discoveryPath),j({url:D.url,authToken:F.authToken})}let L=await o5(W);if(L?.url&&!n5(L)){let D=QF(L,F??V,W),z=await Uj(D,$.discoveryPath);if(z==="deferred_busy"&&F?.authToken&&await e0(L.url,{authToken:F.authToken}))return j({url:L.url,authToken:F.authToken});if(z==="failed"&&Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${W} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,NP))}throw Error("Timed out waiting for detached hub startup.")}async function t5($,Z={}){let Q=fP();return await h8(Q.discoveryPath,async()=>yP(Q,$,Z))}function Aj(){return vP()==="production"?z1():j1()}function mP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function KF($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return KF($.data);return String($)}function cP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function YF($){let Z=$,Q=cP(Z.reason);return new $1("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:Oj,{closeCode:Z.code,closeReason:Q||void 0})}function uP($,Z){if($ instanceof $1)return $;if($ instanceof Error)return new $1("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new $1("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new $1("hub_connect_failed",Q);let X=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new $1("hub_connect_failed",X?`Failed to connect to hub at ${Z.toString()} (${X} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var zj="*",VF=8000,dP="cline-hub-auth.",GF=new Map,HF=new Set,lP=3000,pP=3000,iP=100,Oj="Hub connection closed",rP=250,aP=5000,BF=0.5;class $1 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function Tj($){return $ instanceof $1}class m8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function uQ($,Z){return $ instanceof m8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function Ej($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=Mj($.toString());return Q?GF.get(Q):void 0}function nP($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function Mj($){if(!nP($))return;let Z=new URL(W2($));return Z.search="",Z.hash="",Z.toString()}function Nj($){let Z=Mj($);return!!Z&&HF.has(Z)}function J2($,Z){let Q=Mj($);if(Q){if(HF.add(Q),Z?.trim())GF.set(Q,Z)}return $}class g1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new $1("hub_connection_closed",Oj);sawSocketClose=!1;registered=!1;capabilities;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url,this.capabilities=[...$.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities($){if(this.capabilities=$.map((Z)=>({...Z})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||Ej($);$.hash="";let X=new(mP())($.toString(),Z?[`${dP}${Z}`]:void 0);this.socket=X;let J=!1;this.connectPromise=new Promise((W,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,J=!0,this.lastCloseError=new $1("hub_connect_timeout",`Timed out connecting to hub after ${VF}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{X.close()}catch{}j(this.lastCloseError)},VF);X.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),W()}),X.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=uP(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),X.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!J)this.lastCloseError=YF(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),X.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(KF(W)))}),X.addEventListener("close",(W)=>{if(this.socket!==X)return;if(!J)this.lastCloseError=YF(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",capabilities:this.capabilities,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($,Z){let Q=Z?.sessionId?.trim()||void 0,X={listener:$,sessionId:Q};return this.listeners.add(X),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(X))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,X){let J=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,X)}catch(j){if(!W||J>=1||!await this.recoverLocalHubTransport(j))throw j;J+=1}}async commandOnce($,Z,Q,X){await this.connect();let J=IP("hubreq_"),W=gP($,X?.timeoutMs),j=new Promise((V,B)=>{let K=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new m8($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(J,{resolve:(G)=>{if(K)clearTimeout(K);V(G)},reject:(G)=>{if(K)clearTimeout(K);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:W,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let Y=await j;if(!Y.ok){if(Y.error?.code===t2){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new M$(V,Y.error.message)}throw new m8($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!Nj(this.currentUrl)||!Tj($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await X6({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(rP*2**this.reconnectAttempt,aP),Z=Math.round($*(1-BF)+Math.random()*$*BF);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!Nj(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await X6({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 $1("hub_connection_closed",Oj),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new $1("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){let Q=$==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(Z)):void 0;this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{},...Q!==void 0?{sinceSequence:Q}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),X=(this.subscriptionCounts.get(Q)??0)+Z;if(X<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,X),Z>0&&X===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??zj}subscriptionSessionIdFromKey($){return $===zj?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":{let Z=$.envelope.sequence;if(typeof Z==="number"){let Q=$.envelope.sessionId?.trim();for(let X of[zj,Q]){if(!X||!this.subscriptionCounts.has(X))continue;let J=this.lastEventSequenceByKey.get(X)??0;if(Z>J)this.lastEventSequenceByKey.set(X,Z)}}for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==$.envelope.sessionId?.trim())continue;Q.listener($.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function W2($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function e0($,Z){let Q=new g1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function qj($,Z){let Q=W2($),X=await h1(Q,{authToken:Z?.authToken});if(!X)return{status:"unreachable",url:Q};if(Z?.requireCurrentBuild){let J=_1(),W=Z6(X,J);if(!W.compatible&&!X2(X))return{status:W.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:Q}}else if(!hP(X).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await e0(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function oP($){let Z=Date.now()+pP;while(Date.now()<Z){if(!(await h1($).catch(()=>{return}))?.url)return!0;await new Promise((X)=>setTimeout(X,iP))}return!1}function sP($,Z){try{return W2($)===W2(Z)}catch{return!1}}function Rj($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let X=Q;return Array.isArray(X.participants)&&X.participants.length>0})}async function g8($,Z,Q){let X=new g1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await X.command("session.list",{limit:500},void 0,{timeoutMs:lP});return!Rj(J.payload)}catch{return!1}finally{await X.dispose().catch(()=>{return})}}async function tP($,Z){let Q=`${$.discoveryPath}.superseded`,X=await R0(Q);if(!X?.url||!X.authToken)return;let J=await qj(X.url,{authToken:X.authToken});if(J.status!=="compatible")return;if(await g8(J.url,X.authToken,Z))return;return J2(J.url,X.authToken)}async function $9($={}){if($.endpoint?.trim()){let J=await qj($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=Aj(),Q=await R0(Z.discoveryPath);if(!Q?.url)return await tP(Z,$);let X=await qj(Q.url,{authToken:Q.authToken,requireCurrentBuild:!0});if(X.status==="compatible")return J2(X.url,Q.authToken);if(X.status==="protocol_mismatch")await I1(Z.discoveryPath).catch(()=>{return});return}async function X6($={}){let Z=await $9($);if(Z&&await e0(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;try{return(await t5($.workspaceRoot??process.cwd())).url}catch{return}}async function cQ($,Z,Q,X){let J=new URL($),W=Z?.trim()||Ej(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";if(J.pathname="/drain",J.hash="",Q)J.searchParams.set("reason",Q);if(X?.off)J.searchParams.set("off","1");return(await fetch(J,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function e5($,Z){let Q=new URL($),X=Z?.trim()||Ej(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:X?{authorization:`Bearer ${X}`}:void 0})).ok}async function Cj($=Aj()){let Z=await R0($.discoveryPath);if(!Z?.url)return!1;try{if(await e5(Z.url,Z.authToken))return!0}catch{}return!1}async function dQ($){if(!Nj($.url))return;let Z=Aj(),Q=await R0(Z.discoveryPath);if(!Q?.url||!sP(Q.url,$.url))return;if(!await g8(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await Cj())return;if(!await oP(Q.url))return;return await I1(Z.discoveryPath).catch(()=>{return}),await X6({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as eP}from"@cline/shared";function $f($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var Zf="cline-hub-auth.";function Qf($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Xf($,Z){let Q=new URL($),X=new URL(Z);return Q.search="",Q.hash="",X.search="",X.hash="",Q.toString()===X.toString()}function UF(){return eP()==="production"?z1():j1()}async function Jf($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=UF(),X=await R0(Q.discoveryPath);if(X?.url&&Xf($.toString(),X.url))return X.authToken;return}async function Pj($={}){let Z=C$($);if(!Qf($)){let Q=UF(),X=await R0(Q.discoveryPath);if(X?.url)return X.url}return v1(Z.host,Z.port,Z.pathname)}async function lQ($){return await new Promise((Z,Q)=>{(async()=>{let X=new URL($),J=await Jf(X);X.hash="";let W=new WebSocket(X.toString(),J?[`${Zf}${J}`]:void 0),j=new Map,Y=0;W.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((K,G)=>{j.set(B,{resolve:K,reject:G});let H={kind:"command",envelope:{...V,requestId:B}};W.send(JSON.stringify(H))})},close(){W.close()}})}),W.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let K=j.get(B.envelope.requestId);if(K)j.delete(B.envelope.requestId),K.resolve(B.envelope)}}),W.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(V)=>{Q($f(V,$))})})().catch(Q)})}async function FF($){try{return(await lQ($)).close(),!0}catch{return!1}}async function LF($,Z){let Q=await Pj($),X=await lQ(Q);try{return await X.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{X.close()}}import{existsSync as Wf}from"node:fs";import{isHubDaemonProcess as jf,resolveClineBuildEnv as Yf}from"@cline/shared";var Vf=1e4,Bf="CLINE_HUB_BUILD_WATCH_INTERVAL_MS";function Kf(){let $=Number(process.env[Bf]);return Number.isFinite($)&&$>0?$:Vf}function Gf(){return Yf()==="production"?z1():j1()}function Hf($){try{return Wf(`${$}.lock`)}catch{return!1}}async function fj(){let $=Gf();if(Hf($.discoveryPath))return;let Z=await R0($.discoveryPath).catch(()=>{return});if(!Z?.url)return;let Q=await h1(Z.url).catch(()=>{return});if(!Q?.url)return;let X=_1(),J=Z6(Q,X);if(J.compatible)return;let W=(j)=>({url:Q.url,reason:j,hubBuildId:Q.buildId,hubCoreVersion:Q.coreVersion,expectedBuildId:X});if(J.reason==="unsupported_protocol")return W("unsupported_protocol");if(r5(a5(),Q)>0)return W("outdated_hub");return W("build_mismatch")}function DF($){if(jf()||process.env.CLINE_HUB_PORT?.trim())return()=>{};let Z=$.intervalMs??Kf(),Q,X,J=!1,W=setInterval(()=>{if(J)return;J=!0,fj().then((j)=>{if(!j){Q=void 0,X=void 0;return}let Y=`${j.reason}:${j.hubBuildId??""}`;if(Y===Q)return;if(j.reason==="outdated_hub"&&X!==Y){X=Y;return}X=void 0,Q=Y,$.onMismatch(j)}).catch(()=>{return}).finally(()=>{J=!1})},Z);return W.unref?.(),()=>{clearInterval(W)}}function wj($){return $?JSON.parse(JSON.stringify($)):{}}function pQ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?wj(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,status:typeof Z.status==="string"?Z.status:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function _F($,Z){return $.error?.message??`hub command failed: ${Z}`}function Uf($){let Z=wj($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let X=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof X?.message==="string"&&X.message.trim())return{...Z,error:X.message.trim()};return Z}function zF($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Ff($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Lf($){let Z=wj($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||zF(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||zF(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"assistant.media":return{sessionId:Q,eventType:"runtime.chat.media",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.updated":return{sessionId:Q,eventType:"runtime.chat.tool_call_update",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:Uf($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class Sj{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new g1({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()}async taskCommand($,Z){return await this.ensureMetadataApplied(),(await this.client.command($,Z)).payload??{}}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=pQ(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(t1(Q))return;throw Q}return pQ(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(_F(Q,"session.messages"));let X=Q.payload?.messages;return Array.isArray(X)?X:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let X=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...X?{workspaceRoot:X.workspaceRoot,cwd:X.cwd,sessionConfig:{providerId:X.provider,modelId:X.model,apiKey:X.apiKey,cwd:X.cwd??X.workspaceRoot,workspaceRoot:X.workspaceRoot,systemPrompt:X.systemPrompt??"",mode:X.mode??"act",rules:X.rules,maxIterations:X.maxIterations,enableTools:X.enableTools,enableSpawnAgent:X.enableSpawn!==!1,enableAgentTeams:X.enableTeams!==!1,disableMcpSettingsTools:X.disableMcpSettingsTools,missionLogIntervalSteps:X.missionStepInterval,missionLogIntervalMs:X.missionTimeIntervalMs},metadata:{source:X.source??"cli",provider:X.provider,model:X.model,enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,prompt:void 0,interactive:X.interactive!==!1},runtimeOptions:{mode:X.mode,systemPrompt:X.systemPrompt,maxIterations:X.maxIterations,enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,autoApproveTools:X.autoApproveTools,configExtensions:X.configExtensions},modelSelection:{provider:X.provider,model:X.model,apiKey:X.apiKey},toolPolicies:X.toolPolicies}:{}},Z);if(!J.ok)throw Error(_F(J,"session.restore"));let W=pQ(J.payload);if(Q&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,Y=Ff(J.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((X)=>pQ({session:X})).filter((X)=>Boolean(X?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),X=this.client.subscribe((J)=>{let W=Lf(J);if(!W)return;if(Q.size>0&&!Q.has(W.sessionId))return;Z.onEvent?.(W)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),X}streamTeamProgress($,Z){let Q=this.client.subscribe((X)=>{if(X.event!=="team.progress"||!X.payload)return;Z.onProjection?.(X.payload)});return this.ensureMetadataApplied().catch((X)=>{Z.onError?.(X instanceof Error?X:Error(String(X)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}async createTask($){return(await this.taskCommand("task.create",$)).task}async listTasks($={}){let Z=await this.taskCommand("task.list",$);return Array.isArray(Z.tasks)?Z.tasks:[]}async getTask($){return(await this.taskCommand("task.get",{taskId:$})).task}async updateTask($){return(await this.taskCommand("task.update",$)).task}async approveTask($,Z){return(await this.taskCommand("task.approve",{taskId:$,expectedRevision:Z})).task}async cancelTask($,Z,Q){return(await this.taskCommand("task.cancel",{taskId:$,reason:Q,expectedRevision:Z})).task}async runTask($,Z){return await this.taskCommand("task.run",{taskId:$,expectedRevision:Z})}async getTaskAutomation(){return(await this.taskCommand("task.automation.get",{})).policy}async setTaskAutomation($){return(await this.taskCommand("task.automation.set",{policy:$})).policy}}class bj{client;constructor($){this.client=new g1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}async toggleSetting($){let Z=await this.client.command("settings.toggle",$);if(!Z.ok)throw Error(Z.error?.message??"settings.toggle failed");return Z.payload}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as vn}from"@cline/llms";var sT={};f(sT,{LocalRuntimeHost:()=>G$});import{readdirSync as Pn}from"node:fs";import{homedir as fn}from"node:os";import{isAbsolute as wn,join as gG,resolve as mG}from"node:path";import{captureSdkError as x1,createSessionId as Sn,isLikelyAuthError as bn,normalizeUserInput as kn}from"@cline/shared";import{setHomeDirIfUnset as xn}from"@cline/shared/storage";var aF={};f(aF,{saveProviderOAuthCredentials:()=>W6,resolveProviderApiKeyFromSettings:()=>aj,loginAndSaveProviderOAuthCredentials:()=>B9,isOAuthProvider:()=>Y2,getProviderOAuthCredentialsFromSettings:()=>K9,getProviderAuthStorageId:()=>rj,getProviderAuthHandler:()=>C0,getPersistedProviderApiKey:()=>i8,formatProviderOAuthApiKey:()=>nj});import{decodeJwtPayload as ef,getClineEnvironmentConfig as iF}from"@cline/shared";var fF={};f(fF,{startClineDeviceAuth:()=>cj,refreshClineToken:()=>nQ,loginClineOAuth:()=>Z9,getValidClineCredentials:()=>Q9,completeClineDeviceAuth:()=>uj});import{decodeJwtPayload as Af,getClineEnvironmentConfig as yj}from"@cline/shared";var OF={};f(OF,{setSdkLogger:()=>xj,sdkDebug:()=>j0,hashSecret:()=>d0,getSdkLogger:()=>_f});import{createHash as Df}from"node:crypto";var kj;function xj($){kj=$}function _f(){return kj}function d0($){if(typeof $!=="string"||$.length===0)return"unset";return Df("sha256").update($).digest("hex").slice(0,8)}function j0($){try{kj?.debug($)}catch{}}q0();var NF={};f(NF,{startLocalOAuthServer:()=>m1});function zf(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function m1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",X=$.timeoutMs??300000,J=$.successHtml??Of,W=zf(),j=!1,Y=null,V=null,B=null,K=(U)=>{if(j)return;j=!0,W.resolve(U)},G=()=>{if(Y)clearTimeout(Y),Y=null;let U=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(U!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:U})).catch(()=>{})},H=async()=>{return Y=setTimeout(()=>{G(),K(null)},X),W.promise};for(let U of $.ports){let F=Z.createServer((D,z)=>{try{let _=new URL(D.url||"",`http://${Q}:${U}`);if(_.pathname!==$.callbackPath){z.statusCode=404,z.end("Not found");return}let O={url:_,code:_.searchParams.get("code")??void 0,state:_.searchParams.get("state")??void 0,provider:_.searchParams.get("provider")??void 0,error:_.searchParams.get("error")??void 0};if(O.error){z.statusCode=400,z.end(`Authentication failed: ${O.error}`),G(),K(O);return}if(!O.code){z.statusCode=400,z.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){z.statusCode=400,z.end("State mismatch");return}z.statusCode=200,z.setHeader("Content-Type","text/html; charset=utf-8"),z.end(J),G(),K(O)}catch{z.statusCode=500,z.end("Internal error")}}),L=await new Promise((D)=>{let z=(_)=>{F.off("error",z),D({bound:!1,error:_})};F.once("error",z),F.listen(U,Q,()=>{F.off("error",z),V=F,D({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){B=U;let D=`http://${Q}:${U}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:U,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:H,cancelWait:()=>{G(),K(null)},close:()=>{G(),K(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Of=`<!DOCTYPE html>
|
|
298
298
|
<html lang="en">
|
|
@@ -341,7 +341,7 @@ ${JSON.stringify(X,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
341
341
|
`);return`sha256:${Q.digest("hex")}`}function r8($){let Z=$.sourceMessages.at(-1),Q=tF(Z);return G9.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:eF($.sourceMessages),...Q?{source_last_message_key:Q}:{},messages:oj($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function V2($,Z){if(!($.source_message_count<=Z.length))return;let X=!!$.source_prefix_hash&&eF(Z,$.source_message_count)===$.source_prefix_hash,J=Z[$.source_message_count-1],W=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&tF(J)===$.source_last_message_key;if(!(X||W))return;return[...oj($.messages),...oj(Z.slice($.source_message_count))]}function c1($){let Z=G9.safeParse($);return Z.success?Z.data:void 0}import{createHandlerAsync as uw}from"@cline/llms";var JL={};f(JL,{resolveMessageDisplayRole:()=>sj,isUserRunMessage:()=>tj,getUserRunSpan:()=>$$,countUserRunMessages:()=>B2});import{formatDisplayUserInput as ZL}from"@cline/shared";var Hw=new Set(["auto_compaction","compaction_budget_emergency","completion_reminder","loop_detection_notice","manual_compaction","mistake_stop_notice","recovery_notice"]);function QL($){switch($){case"user":case"assistant":case"tool":case"system":case"status":case"error":return $;default:return"assistant"}}function XL($){return $.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?$.metadata:void 0}function Uw($){let Z=$?.userRunSpan;return typeof Z==="number"&&Number.isInteger(Z)&&Z>=0?Z:void 0}function Fw($){if(typeof $.content==="string")return{hasAttachment:!1,text:$.content};if(!Array.isArray($.content))return{hasAttachment:!1,text:"unknown"};let Z=!1,Q=!1,X=[];for(let J of $.content){if(!J||typeof J!=="object"||Array.isArray(J))continue;let W=J;if(W.type==="text"&&typeof W.text==="string")X.push(W.text);else if(W.type==="tool_result"||W.type==="tool-result")Q=!0;else if(W.type==="file"||W.type==="image")Z=!0}return{hasAttachment:Z&&!Q,text:X.join(`
|
|
342
342
|
`)}}function Lw($){let Z=ZL($);return Z.startsWith("[TASK RESUMPTION]")||Z==="The user approved switching to act mode. Continue with the approved plan now."}function sj($){let Z=QL($.role),Q=XL($),X=typeof Q?.displayRole==="string"?Q.displayRole.trim().toLowerCase():"";if(X==="system"||X==="status"||X==="error")return X;return Z}function $$($){if(QL($.role)!=="user")return 0;let Z=XL($),Q=typeof Z?.kind==="string"?Z.kind:void 0,X=Uw(Z);if(Q==="compaction"||Q==="compaction_summary")return X??1;if(X!==void 0)return X;if(Q&&Hw.has(Q))return 0;let J=Fw($);if(!J.hasAttachment&&!ZL(J.text))return 0;if(!J.hasAttachment&&Lw(J.text))return 0;return 1}function tj($){return $$($)>0}function B2($){let Z=0;for(let Q of $??[])Z+=$$(Q);return Z}function Dw($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function WL($){return $.map((Z)=>({...Z,content:Array.isArray(Z.content)?Z.content.map((Q)=>({...Q})):Z.content,...Z.metadata?{metadata:{...Z.metadata}}:{}}))}function Z$($){try{return JSON.stringify($).length}catch{return String($).length}}function X3($,Z){return $.reduce((Q,X)=>Q+Z(X),0)}function BL($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function J3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q.role==="user"&&!BL(Q))return Z}return-1}function _w($){for(let Z=0;Z<$.length;Z+=1){let Q=$[Z];if(Q.role==="user"&&!BL(Q))return Z}return-1}function $Y($){let Z=new Set;if(!Array.isArray($.content))return Z;for(let Q of $.content)if(Q.type==="tool_use")Z.add(Q.id);else if(Q.type==="tool_result")Z.add(Q.tool_use_id);return Z}function zw($){let Z=new Map;for(let Q=0;Q<$.length;Q+=1)for(let X of $Y($[Q])){let J=Z.get(X);if(J)J.add(Q);else Z.set(X,new Set([Q]))}return Z}function ej($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let X of Q.content)if(X.type==="tool_result")Z.add(X.tool_use_id)}for(let Q=$.length-1;Q>=0;Q-=1){let X=$[Q];if(!Array.isArray(X.content))continue;if(X.content.some((J)=>J.type==="tool_use"&&!Z.has(J.id)))return Q}return $.length}function Ow($,Z){let Q=zw($),X=new Set,J=[Z];while(J.length>0){let W=J.shift();if(W===void 0||X.has(W))continue;X.add(W);for(let j of $Y($[W]))for(let Y of Q.get(j)??[])if(!X.has(Y))J.push(Y)}return X}function Nw($){return $.type==="image"||$.type==="media"||$.type==="redacted_thinking"}function qw($){return $.type==="image"}function Aw($,Z,Q){if(Z.dropThinkingBlocks&&$.type==="thinking")return!0;return Z.dropUnsafeOutsideLiveTail&&!Q&&Nw($)}function jL($,Z,Q,X="over_budget"){let J=[],W=[];for(let j=0;j<$.length;j+=1){let Y=$[j];if(Array.isArray(Y.content)&&Y.content.length===0){Q.push({kind:"dropped_message",path:{messageIndex:Z[j]},reason:X,originalSize:Z$(Y),finalSize:0});continue}J.push(Y),W.push(Z[j])}return{messages:J,originalIndexes:W}}function Tw($,Z,Q,X,J,W){return $.map((j,Y)=>{if(!Array.isArray(j.content))return j;let V=!1,B=Y===X||Y>=J,K=j.content.flatMap((G,H)=>{if(Aw(G,W,B))return V=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:H},reason:"unsafe_to_truncate",originalSize:Z$(G),finalSize:0}),[];if(G.type==="tool_result"&&Array.isArray(G.content)){let U=G.content.filter((F)=>{if(W.dropUnsafeOutsideLiveTail&&!B&&qw(F))return!1;return!0});if(U.length!==G.content.length){V=!0;let F={...G,content:U};return Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:H},reason:"unsafe_to_truncate",originalSize:Z$(G),finalSize:Z$(F)}),[F]}}return[G]});return V?{...j,content:K}:j})}function Ew($,Z,Q){return $.map((X,J)=>{if(!Array.isArray(X.content))return X;let W=!1,j=X.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return W=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[J],blockIndex:V},reason:"unsafe_to_truncate",originalSize:Z$(Y),finalSize:0}),!1});return W?{...X,content:j}:X})}function a8($,Z){if(Z<=0)return"";if($.length<=Z)return $;if(Z<=16)return $.slice(0,Math.max(1,Z));let Q=`
|
|
343
343
|
...[truncated ${$.length-Z} chars]`,X=Math.max(1,Z-Q.length),J=`
|
|
344
|
-
...[truncated ${$.length-X} chars]`;return`${$.slice(0,X)}${J}`}function YL($,Z){if(typeof $==="string")return a8($,Z);let Q=Z;return $.map((X)=>{if(Q<=0){if(X.type==="text")return{...X,text:""};if(X.type==="file")return{...X,content:""};return X}if(X.type==="text"){let J=a8(X.text,Q);return Q-=J.length,{...X,text:J}}if(X.type==="file"){let J=a8(X.content,Q);return Q-=J.length,{...X,content:J}}return X})}function Mw($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function Rw($,Z){if(typeof $.content==="string")return{...$,content:a8($.content,Z)};let Q=Z;return{...$,content:$.content.map((X)=>{if(Q<=0){if(X.type==="text")return{...X,text:""};if(X.type==="file")return{...X,content:""};if(X.type==="tool_result")return{...X,content:YL(X.content,0)};return X}if(X.type==="text"){let J=a8(X.text,Q);return Q-=J.length,{...X,text:J}}if(X.type==="file"){let J=a8(X.content,Q);return Q-=J.length,{...X,content:J}}if(X.type==="tool_result"){let J=YL(X.content,Q);return Q-=Mw(J),{...X,content:J}}return X})}}function Cw($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function Pw($,Z,Q){return{messages:$.filter((X,J)=>!Q.has(J)),originalIndexes:Z.filter((X,J)=>!Q.has(J))}}function fw($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function VL($,Z){return Z>=0&&$.has(Z)}function H9($){let Z=[],Q=[],X=Dw($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:WL($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:X3($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=WL($.messages),W=J.map((B,K)=>K);if(X.dropThinkingBlocks){let B=jL(Ew(J,W,Z),W,Z,"unsafe_to_truncate");J=B.messages,W=B.originalIndexes}let j=X.protectLatestTypedUser?J3(J):-1,Y=X.protectLiveTailFromDrop?ej(J):J.length;if(X.dropUnsafeOutsideLiveTail){let B=jL(Tw(J,W,Z,j,Y,X),W,Z);J=B.messages,W=B.originalIndexes}let V=X3(J,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:J,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q};for(let B=J.length-1;B>=0&&V>$.targetTokens;B-=1){let K=J3(J);if(B===K)continue;if(X.protectLiveTailFromDrop&&B>=ej(J))continue;if(!Cw(J[B]))continue;let G=Z$(J[B]),H=Math.max(1,G/Math.max(1,$.estimateMessageTokens(J[B]))),U=Math.max(16,Math.floor($.targetTokens*H/Math.max(1,J.length)));J[B]=Rw(J[B],U),Z.push({kind:"truncated_text",path:{messageIndex:W[B]},reason:"over_budget",originalSize:G,finalSize:Z$(J[B])}),V=X3(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let K=_w(J),G=J3(J),H=X.protectLiveTailFromDrop?ej(J):J.length;if(B===K||B===G){Z.push({kind:"preserved",path:{messageIndex:W[B]},reason:"protected_live_tail",originalSize:Z$(J[B]),finalSize:Z$(J[B])}),B+=1;continue}let U=Ow(J,B);if(VL(U,K)){B+=1;continue}if(VL(U,G)){B+=1;continue}if(fw(U,H)){B+=1;continue}for(let L of U)Z.push({kind:"dropped_message",path:{messageIndex:W[L]},reason:U.size>1||$Y(J[L]).size>0?"tool_pair_boundary":"over_budget",originalSize:Z$(J[L]),finalSize:0});let F=Pw(J,W,U);J=F.messages,W=F.originalIndexes,V=X3(J,$.estimateMessageTokens)}if(V>$.targetTokens)return Q.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:J,actions:Z,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Q};return{status:"ok",messages:J,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q}}import{CHARS_PER_TOKEN as
|
|
344
|
+
...[truncated ${$.length-X} chars]`;return`${$.slice(0,X)}${J}`}function YL($,Z){if(typeof $==="string")return a8($,Z);let Q=Z;return $.map((X)=>{if(Q<=0){if(X.type==="text")return{...X,text:""};if(X.type==="file")return{...X,content:""};return X}if(X.type==="text"){let J=a8(X.text,Q);return Q-=J.length,{...X,text:J}}if(X.type==="file"){let J=a8(X.content,Q);return Q-=J.length,{...X,content:J}}return X})}function Mw($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function Rw($,Z){if(typeof $.content==="string")return{...$,content:a8($.content,Z)};let Q=Z;return{...$,content:$.content.map((X)=>{if(Q<=0){if(X.type==="text")return{...X,text:""};if(X.type==="file")return{...X,content:""};if(X.type==="tool_result")return{...X,content:YL(X.content,0)};return X}if(X.type==="text"){let J=a8(X.text,Q);return Q-=J.length,{...X,text:J}}if(X.type==="file"){let J=a8(X.content,Q);return Q-=J.length,{...X,content:J}}if(X.type==="tool_result"){let J=YL(X.content,Q);return Q-=Mw(J),{...X,content:J}}return X})}}function Cw($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function Pw($,Z,Q){return{messages:$.filter((X,J)=>!Q.has(J)),originalIndexes:Z.filter((X,J)=>!Q.has(J))}}function fw($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function VL($,Z){return Z>=0&&$.has(Z)}function H9($){let Z=[],Q=[],X=Dw($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:WL($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:X3($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=WL($.messages),W=J.map((B,K)=>K);if(X.dropThinkingBlocks){let B=jL(Ew(J,W,Z),W,Z,"unsafe_to_truncate");J=B.messages,W=B.originalIndexes}let j=X.protectLatestTypedUser?J3(J):-1,Y=X.protectLiveTailFromDrop?ej(J):J.length;if(X.dropUnsafeOutsideLiveTail){let B=jL(Tw(J,W,Z,j,Y,X),W,Z);J=B.messages,W=B.originalIndexes}let V=X3(J,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:J,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q};for(let B=J.length-1;B>=0&&V>$.targetTokens;B-=1){let K=J3(J);if(B===K)continue;if(X.protectLiveTailFromDrop&&B>=ej(J))continue;if(!Cw(J[B]))continue;let G=Z$(J[B]),H=Math.max(1,G/Math.max(1,$.estimateMessageTokens(J[B]))),U=Math.max(16,Math.floor($.targetTokens*H/Math.max(1,J.length)));J[B]=Rw(J[B],U),Z.push({kind:"truncated_text",path:{messageIndex:W[B]},reason:"over_budget",originalSize:G,finalSize:Z$(J[B])}),V=X3(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let K=_w(J),G=J3(J),H=X.protectLiveTailFromDrop?ej(J):J.length;if(B===K||B===G){Z.push({kind:"preserved",path:{messageIndex:W[B]},reason:"protected_live_tail",originalSize:Z$(J[B]),finalSize:Z$(J[B])}),B+=1;continue}let U=Ow(J,B);if(VL(U,K)){B+=1;continue}if(VL(U,G)){B+=1;continue}if(fw(U,H)){B+=1;continue}for(let L of U)Z.push({kind:"dropped_message",path:{messageIndex:W[L]},reason:U.size>1||$Y(J[L]).size>0?"tool_pair_boundary":"over_budget",originalSize:Z$(J[L]),finalSize:0});let F=Pw(J,W,U);J=F.messages,W=F.originalIndexes,V=X3(J,$.estimateMessageTokens)}if(V>$.targetTokens)return Q.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:J,actions:Z,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Q};return{status:"ok",messages:J,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q}}import{CHARS_PER_TOKEN as l00,estimateTokens as j3}from"@cline/shared";var UL=128000,ww=0.9,Y6=0.9,FL=0.7,LL=20000,KL=4096,GL=2000,DL=2000;function W3($){return typeof $==="number"&&Number.isFinite($)&&$>0}function D9($){let Z=W3($.contextWindow)?$.contextWindow:void 0,Q=W3($.maxInputTokens)?$.maxInputTokens:void 0;if(Q!==void 0)return Z===void 0?Q:Math.min(Q,Z);return Z===void 0?void 0:Z*ww}function L9($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
345
345
|
...[truncated ${$.length-Z} chars]`}function Sw($){let Z=bw($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
|
|
346
346
|
${Q.content}
|
|
347
347
|
</file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
|
|
@@ -397,7 +397,7 @@ ${Z.join(`
|
|
|
397
397
|
---
|
|
398
398
|
`)}`:"";return{type:"text",text:`<SYSTEM_NOTICE>
|
|
399
399
|
Earlier context was compacted. Summary of your actions after the request above:
|
|
400
|
-
${AL($)}${Q}</SYSTEM_NOTICE>`}}function Y3($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function ow($,Z){let Q=new Map;Z.forEach((B,K)=>{if(B.id)Q.set(B.id,K)});let X=(B)=>B.id?Q.get(B.id):void 0,J=new Set;for(let B=Z.length-1;B>=0&&J.size<nw;B-=1)if(PL(Z[B]))J.add(B);let W=(B,K)=>{let G=[];for(let H=B;H<K;H+=1){if(!J.has(H))continue;let U=PL(Z[H]);if(U)G.push(U)}return G},j=-1;for(let B=$.length-1;B>=0;B-=1)if(P$($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!P$($[V])){let G=X($[V]);Y.push({message:$[V],firstOriginalIndex:G,lastOriginalIndex:G,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&P$($[B+1]))B+=1;let K=$[V];if(B>V){let G=[],H=0;for(let U=V;U<=B;U+=1){if(H+=$$($[U]),U>V){let F=X($[U-1]),L=X($[U]);if(F!==void 0&&L!==void 0&&L>F+1){let D=WY(Z.slice(F+1,L)),z=W(F+1,L);if(JY(D)||z.length>0)G.push(fL(D,z))}}G.push(...Y3($[U],U===j))}K={...$[V],content:G,metadata:{...$[V].metadata,userRunSpan:H}}}else{let G=Y3(K,V===j);if(Array.isArray(K.content)&&G.length!==K.content.length)K={...K,content:G}}Y.push({message:K,firstOriginalIndex:X($[V]),lastOriginalIndex:X($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let K=Y[B];if(!K.isTypedUser||K.lastOriginalIndex===void 0)continue;let G=Y[B+1],H=G?G.firstOriginalIndex:Z.length;if(H===void 0||H<=K.lastOriginalIndex+1)continue;let U=WY(Z.slice(K.lastOriginalIndex+1,H)),F=W(K.lastOriginalIndex+1,H);if(!JY(U)&&F.length===0)continue;K.message={...K.message,content:[...Y3(K.message,!0),fL(U,F)]}}return Y.map((B)=>B.message)}function wL($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function sw($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let X of $){let J=X.metrics;if(!J)continue;Z=!0,Q.inputTokens+=J.inputTokens??0,Q.outputTokens+=J.outputTokens??0,Q.cacheReadTokens+=J.cacheReadTokens??0,Q.cacheWriteTokens+=J.cacheWriteTokens??0,Q.cost+=J.cost??0}return Z?Q:void 0}function tw($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function ew($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var SL="preserved";function bL($){return $.metadata?.compaction===SL}function $S($){if(bL($))return $;return{...$,metadata:{...$.metadata,compaction:SL}}}function ZS($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function kL($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let X=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),J=[];for(let N=0;N<Z.length;N+=1)if(P$(Z[N]))J.push(N);let W=new Map;for(let N of J){let T=rw(Z[N]);if(T)W.set(N,T)}if(W.size===0)return;let j=J[J.length-1],Y=0;for(let[N,T]of W)Y+=Q({...T,content:Y3(T,N===j)});let V=new Set;for(let N=0;N<Z.length;N+=1){if(W.has(N))continue;if(bL(Z[N]))V.add(N),Y+=Q(Z[N])}let B=new Set;{let N=Z.length,T=0;for(let C=Z.length-1;C>j;C-=1){if(V.has(C))break;let r=Q(Z[C]);if(Y+T+r>X)break;T+=r,N=C}while(N<Z.length&&Z[N].role!=="assistant")N+=1;for(let C=N;C<Z.length;C+=1)B.add(C),Y+=Q(Z[C])}let K=new Map;for(let N=J.length-2;N>=0;N-=1){let T=J[N]+1,C=J[N+1];for(let r=C-1;r>=T;r-=1){let y=Z[r];if(V.has(r))break;if(y.role!=="assistant")continue;if(Array.isArray(y.content)&&y.content.some((E)=>E.type==="tool_use"))continue;let x=ZS(y);if(x){let E=Q(x);if(Y+E<=X)K.set(r,x),Y+=E}break}}let G=[];for(let N=0;N<Z.length;N+=1){let T=W.get(N);if(T){G.push(T);continue}if(V.has(N)||B.has(N)){G.push(Z[N]);continue}let C=K.get(N);if(C)G.push(C)}let H=CL(Z,$.estimateMessageTokens),U=Math.min(Math.max(X,Y),Math.max(1,$.context.budget.messages.triggerTokens)),F=H9({messages:G,targetTokens:U,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(F.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:F.warnings.map((N)=>N.code),projectedTokens:F.estimatedTokens,targetTokens:X,maxInputTokens:$.context.budget.request.maxInputTokens});let L=ow(F.messages,Z);if(!aw(Z,L))return;let D=ew(L[0]),z=tw(D.usageBefore,sw(Z)),_={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":$.context.mode==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",displayRole:"system",messagesRemoved:D.messagesRemoved+(Z.length-L.length),...z?{usageBefore:z}:{}},O=L.map((N,T)=>{if(T===0&&P$(N))return wL({...N,metadata:{...N.metadata,..._,userRunSpan:$$(N)}});return wL(P$(N)?N:$S(N))}),A=CL(O,$.estimateMessageTokens),q=F.actions.filter((N)=>N.reason==="over_budget"||N.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:O.length,messagesRemoved:Z.length-O.length,tokensBefore:H,tokensAfter:A,budgetStatus:F.status,budgetActions:q,budgetWarnings:F.warnings.map((N)=>N.code),targetTokens:X,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:O,budget:{policyIntent:"basic_compaction_projection",actionCount:q,warningCount:F.warnings.length,liveTailHandling:F.liveTailHandling}}}var XS=0.5;function xL($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function yL($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function hL($){try{return JSON.stringify($).length}catch{return String($).length}}function JS($){let Z=0,Q=0,X=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type!=="tool_result")continue;let j=hL(W.content);Z+=1,Q+=j,X=Math.max(X,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:X}}var VY={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>kL({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:X,logger:J})=>RL({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??LL,$.budget.messages.targetTokens),estimateMessageTokens:X,logger:J})};function WS($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function jS($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*XS):Math.floor($.triggerTokens*FL),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function IL($,Z){return Math.max(1,Math.floor($-Z))}function YS($){let Z=0,Q=!1;for(let X of $)if(X.role==="user")Q=!0;else if(X.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function _9($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let X=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=OL(),W=Q?.strategy??"agentic",j=VY[W],Y=Z.mode??"auto",V=Q?.compact?"custom":W;return async(B)=>{let K=B.overflowRecovery?"overflow_recovery":Y,G=B.apiMessages.reduce((k,I)=>k+J(I),0),H=QS({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),U=B.messages.reduce((k,I)=>k+J(I),0),F=Math.max(0,H-G),L=D9({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??UL,D=L*Y6,z=IL(D,F),_=H>=D;if($.logger?.debug("Context compaction diagnostics",{mode:K,strategy:W,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:H,apiMessageTokens:G,messageInputTokens:U,requestOverheadTokens:F,maxInputTokens:L,requestTriggerTokens:D,messageTriggerTokens:z,thresholdRatio:Y6,shouldCompact:_,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:hL(B.apiMessages),...JS(B.apiMessages)}),K==="auto"&&!_)return;let O,A;if(K==="auto")O=jS({maxInputTokens:L,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:D,messagePairCount:YS(B.messages)}),A=IL(O,F);else A=WS({messageInputTokens:U,messageTriggerTokens:z,manualTargetRatio:Z.manualTargetRatio}),O=F+A;let q={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:K,abortSignal:B.abortSignal,budget:{request:{inputTokens:H,maxInputTokens:L,triggerTokens:D,targetTokens:O,overheadTokens:F,thresholdRatio:Y6,utilizationRatio:L>0?H/L:0},messages:{inputTokens:U,triggerTokens:z,targetTokens:A}}},N=K==="manual"?"manual_compaction":K==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",T=K==="manual"?"":K==="overflow_recovery"?"overflow-recovery-":"auto-";B.emitStatusNotice?.(`${T}compacting`,{kind:N,reason:N,phase:"started",iteration:B.iteration,triggerTokens:D,targetTokens:O,maxInputTokens:L,messageTargetTokens:A});let C=B.messages.length,r=Date.now(),y={context:q,providerConfig:{...X,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:J,logger:$.logger},x=V,E;if(K==="overflow_recovery"){if(Q?.compact){try{E=await Q.compact(q)}catch(k){if(xL(k,B.abortSignal))throw k;$.logger?.log("Custom compaction failed during overflow recovery; falling back to basic compaction",{severity:"warn",...yL(k)}),E=void 0}if(E?.messages){let k=E.messages.reduce((d,Z0)=>d+J(Z0),0);if(!(E.messages.length>0&&k<U&&k<=A))$.logger?.log("Custom compaction did not produce an acceptable overflow-recovery transcript; falling back to basic compaction",{severity:"warn",customMessageCount:E.messages.length,customMessageTokens:k,messageTargetTokens:A}),E=void 0}}if(!E?.messages)x="basic",E=await VY.basic(y)}else if(Q?.compact)E=await Q.compact(q);else try{E=await j(y)}catch(k){if(W!=="agentic"||xL(k,B.abortSignal))throw k;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...yL(k)}),x="basic",E=await VY.basic(y)}let g=Date.now()-r,b=$.sessionId??B.conversationId,o={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(E?.messages){let k=E.messages.reduce((d,Z0)=>d+J(Z0),0),I=F+k;if($.logger?.log("Context compaction completed",{severity:"info",strategy:x,maxInputTokens:L,messageInputTokens:U,apiInputTokens:G,requestInputTokens:H,requestOverheadTokens:F,afterMessageTokens:k,afterRequestTokens:I,tokensSaved:H-I,utilizationBefore:`${(H/L*100).toFixed(1)}%`,utilizationAfter:`${(I/L*100).toFixed(1)}%`,thresholdTrigger:`${(Y6*100).toFixed(1)}%`,messagesBefore:C,messagesAfter:E.messages.length,messagesRemoved:C-E.messages.length}),B.emitStatusNotice?.(`${T}compacted`,{kind:N,reason:N,phase:"completed",iteration:B.iteration,tokensBefore:H,tokensAfter:I,messagesBefore:C,messagesAfter:E.messages.length,maxInputTokens:L}),MQ($.telemetry,{ulid:b,strategy:x,mode:K,messagesBefore:C,messagesAfter:E.messages.length,messagesRemoved:C-E.messages.length,tokensBefore:H,tokensAfter:I,tokensSaved:H-I,triggerTokens:D,maxInputTokens:L,thresholdRatio:Y6,durationMs:g,provider:$.providerId,modelId:$.modelId,...o}),E.budget&&(E.budget.actionCount>0||E.budget.warningCount>0))tH($.telemetry,{ulid:b,strategy:x,mode:K,policyIntent:E.budget.policyIntent,actionCount:E.budget.actionCount,warningCount:E.budget.warningCount,liveTailHandling:E.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...o}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:E.budget.policyIntent,actionCount:E.budget.actionCount,warningCount:E.budget.warningCount})}else B.emitStatusNotice?.(`${T}compaction-skipped`,{kind:N,reason:N,phase:"skipped",iteration:B.iteration,maxInputTokens:L}),RQ($.telemetry,{ulid:b,strategy:x,mode:K,reason:"no_result",tokensBefore:H,triggerTokens:D,maxInputTokens:L,thresholdRatio:Y6,durationMs:g,provider:$.providerId,modelId:$.modelId,...o});return E}}function z9($){return async(Z)=>{let Q=$.getState?.(),X=Q?V2(Q,Z.messages):void 0;if(Q&&X){let W=$.compact?await $.compact({...Z,messages:X,apiMessages:X}):void 0;if(W?.messages){let j=W.systemPrompt??Q.system_prompt,Y=r8({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...W,...j!==void 0?{systemPrompt:j}:{}}}return{messages:X,...W?.systemPrompt!==void 0?{systemPrompt:W.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let J=$.compact?await $.compact(Z):void 0;if(J?.messages){let W=r8({sourceMessages:Z.messages,compactedMessages:J.messages,conversationId:Z.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(W,Z.messages)}return J}}var p_={};f(p_,{zodToJsonSchema:()=>$y,validateWithZod:()=>ex,truncateCommandOutput:()=>H6,resolveToolRoutingConfig:()=>j4,resolveToolPresetName:()=>k$,resolveToolClientType:()=>G4,resolveCoreSelectedToolIds:()=>y3,isSkillsToolAvailable:()=>k3,isCoreBuiltinToolAvailable:()=>M6,getCoreHeadlessToolNames:()=>g9,getCoreDefaultEnabledToolIds:()=>x3,getCoreBuiltinToolCatalog:()=>A2,getCoreAcpToolNames:()=>I3,createWebFetchTool:()=>qY,createWebFetchExecutor:()=>k9,createToolPoliciesWithPreset:()=>T3,createSubmitAndExitTool:()=>MY,createSkillsTool:()=>F6,createShellTool:()=>f9,createShellExecutor:()=>U6,createSearchTool:()=>NY,createSearchExecutor:()=>b9,createReadFilesTool:()=>OY,createPlanModeCommandGuardExtension:()=>F3,createFileReadExecutor:()=>w9,createEditorTool:()=>TY,createEditorExecutor:()=>_6,createDefaultToolsWithPreset:()=>E3,createDefaultTools:()=>L2,createDefaultShellExecutor:()=>x9,createDefaultExecutors:()=>J4,createBuiltinTools:()=>R6,createAskQuestionTool:()=>EY,createApplyPatchTool:()=>AY,createApplyPatchExecutor:()=>D6,computePatchChanges:()=>$4,WebFetchRequestSchema:()=>KY,ToolPresets:()=>A1,TEAM_TOOL_NAMES:()=>B4,SubmitInputSchema:()=>P9,StructuredCommandInputSchema:()=>K6,SkillsInputSchema:()=>R9,SearchCodebaseInputSchema:()=>q9,RunCommandsInputSchema:()=>A9,RunCommandExecutionController:()=>X4,ReadFilesInputSchema:()=>N9,ReadFileRequestSchema:()=>G3,PatchActionType:()=>L6,PLAN_MODE_COMMAND_GUARD_EXTENSION_NAME:()=>HY,PATCH_MARKERS:()=>e,MAX_COMMAND_OUTPUT_CHARS:()=>u1,FetchWebContentInputSchema:()=>T9,EditFileInputSchema:()=>E9,DefaultToolNames:()=>O0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>W4,CommandExitError:()=>w$,AskQuestionInputSchema:()=>C9,ApplyPatchInputSchema:()=>M9,ALL_DEFAULT_TOOL_NAMES:()=>o$});import{validateWithZod as ex,zodToJsonSchema as $y}from"@cline/shared";q0();var VS=new Set(["rm","rmdir","unlink","mv","cp","dd","touch","mkdir","ln","link","chmod","chown","chgrp","truncate","shred","install","patch","rsync","mkfifo","mknod","del","erase","move","ren","rename","md","rd","mklink","copy","xcopy","robocopy","new-item","ni","remove-item","move-item","copy-item","rename-item","set-content","add-content","clear-content","out-file","mi","ri","cpi","rni","ac","clc"]),BS=new Set(["add","am","apply","checkout","cherry-pick","clean","clone","commit","init","merge","mv","pull","push","rebase","reset","restore","revert","rm","stash","submodule","switch","worktree"]),V3=new Set(["install","i","ci","add","remove","rm","uninstall","unlink","link","update","up","upgrade","dedupe","prune","publish"]),O9=new Set(["install","uninstall","add","remove"]),KS=new Set(["add","remove","rm","install","uninstall","update","new","init","publish"]),GS=new Set(["install","uninstall","update","cleanup"]),HS=new Set(["install","require","remove","update"]),US=new Set(["install","get"]),FS=new Set(["add","remove"]),LS=new Set(["install","uninstall","upgrade"]),DS=new Set(["install","update","delete","push"]),V6=new Set(["install","reinstall","remove","purge","uninstall","upgrade","autoremove","add","del"]),_S={git:BS,npm:V3,pnpm:V3,yarn:V3,bun:V3,pip:O9,pip3:O9,pipx:O9,uv:O9,cargo:KS,apt:V6,"apt-get":V6,dnf:V6,yum:V6,apk:V6,brew:V6,snap:V6,gem:GS,composer:HS,go:US,dotnet:FS,winget:LS,nuget:DS},zS={stash:new Set(["list","show"]),worktree:new Set(["list"]),submodule:new Set(["status","summary"])},OS=new Set(["sudo","doas","env","command","builtin","nohup","time","nice","stdbuf","timeout","xargs"]),NS=new Set(["if","then","else","elif","fi","while","until","do","done","for","case","esac","!","{","}"]),gL=/^[A-Za-z_][A-Za-z0-9_]*\+?=/;function cL($){let Z=$.replace(/["']/g,"");if(/^(\/dev\/(null|stdout|stderr|tty)|nul:?)$/i.test(Z))return!0;if(Z.includes(".."))return!1;return Z.startsWith("/tmp/")||Z.startsWith("/var/tmp/")||Z.startsWith("$TMPDIR")||Z.startsWith("${TMPDIR")||/^%te?mp%/i.test(Z)||/^\$env:te?mp/i.test(Z)}function mL($){return($.replace(/["']/g,"").split(/[/\\]/).pop()??$).toLowerCase().replace(/\.exe$/,"")}function qS($){let Z=$.split(`
|
|
400
|
+
${AL($)}${Q}</SYSTEM_NOTICE>`}}function Y3($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function ow($,Z){let Q=new Map;Z.forEach((B,K)=>{if(B.id)Q.set(B.id,K)});let X=(B)=>B.id?Q.get(B.id):void 0,J=new Set;for(let B=Z.length-1;B>=0&&J.size<nw;B-=1)if(PL(Z[B]))J.add(B);let W=(B,K)=>{let G=[];for(let H=B;H<K;H+=1){if(!J.has(H))continue;let U=PL(Z[H]);if(U)G.push(U)}return G},j=-1;for(let B=$.length-1;B>=0;B-=1)if(P$($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!P$($[V])){let G=X($[V]);Y.push({message:$[V],firstOriginalIndex:G,lastOriginalIndex:G,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&P$($[B+1]))B+=1;let K=$[V];if(B>V){let G=[],H=0;for(let U=V;U<=B;U+=1){if(H+=$$($[U]),U>V){let F=X($[U-1]),L=X($[U]);if(F!==void 0&&L!==void 0&&L>F+1){let D=WY(Z.slice(F+1,L)),z=W(F+1,L);if(JY(D)||z.length>0)G.push(fL(D,z))}}G.push(...Y3($[U],U===j))}K={...$[V],content:G,metadata:{...$[V].metadata,userRunSpan:H}}}else{let G=Y3(K,V===j);if(Array.isArray(K.content)&&G.length!==K.content.length)K={...K,content:G}}Y.push({message:K,firstOriginalIndex:X($[V]),lastOriginalIndex:X($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let K=Y[B];if(!K.isTypedUser||K.lastOriginalIndex===void 0)continue;let G=Y[B+1],H=G?G.firstOriginalIndex:Z.length;if(H===void 0||H<=K.lastOriginalIndex+1)continue;let U=WY(Z.slice(K.lastOriginalIndex+1,H)),F=W(K.lastOriginalIndex+1,H);if(!JY(U)&&F.length===0)continue;K.message={...K.message,content:[...Y3(K.message,!0),fL(U,F)]}}return Y.map((B)=>B.message)}function wL($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function sw($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let X of $){let J=X.metrics;if(!J)continue;Z=!0,Q.inputTokens+=J.inputTokens??0,Q.outputTokens+=J.outputTokens??0,Q.cacheReadTokens+=J.cacheReadTokens??0,Q.cacheWriteTokens+=J.cacheWriteTokens??0,Q.cost+=J.cost??0}return Z?Q:void 0}function tw($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function ew($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var SL="preserved";function bL($){return $.metadata?.compaction===SL}function $S($){if(bL($))return $;return{...$,metadata:{...$.metadata,compaction:SL}}}function ZS($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function kL($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let X=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),J=[];for(let N=0;N<Z.length;N+=1)if(P$(Z[N]))J.push(N);let W=new Map;for(let N of J){let T=rw(Z[N]);if(T)W.set(N,T)}if(W.size===0)return;let j=J[J.length-1],Y=0;for(let[N,T]of W)Y+=Q({...T,content:Y3(T,N===j)});let V=new Set;for(let N=0;N<Z.length;N+=1){if(W.has(N))continue;if(bL(Z[N]))V.add(N),Y+=Q(Z[N])}let B=new Set;{let N=Z.length,T=0;for(let C=Z.length-1;C>j;C-=1){if(V.has(C))break;let r=Q(Z[C]);if(Y+T+r>X)break;T+=r,N=C}while(N<Z.length&&Z[N].role!=="assistant")N+=1;for(let C=N;C<Z.length;C+=1)B.add(C),Y+=Q(Z[C])}let K=new Map;for(let N=J.length-2;N>=0;N-=1){let T=J[N]+1,C=J[N+1];for(let r=C-1;r>=T;r-=1){let y=Z[r];if(V.has(r))break;if(y.role!=="assistant")continue;if(Array.isArray(y.content)&&y.content.some((E)=>E.type==="tool_use"))continue;let x=ZS(y);if(x){let E=Q(x);if(Y+E<=X)K.set(r,x),Y+=E}break}}let G=[];for(let N=0;N<Z.length;N+=1){let T=W.get(N);if(T){G.push(T);continue}if(V.has(N)||B.has(N)){G.push(Z[N]);continue}let C=K.get(N);if(C)G.push(C)}let H=CL(Z,$.estimateMessageTokens),U=Math.min(Math.max(X,Y),Math.max(1,$.context.budget.messages.triggerTokens)),F=H9({messages:G,targetTokens:U,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(F.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:F.warnings.map((N)=>N.code),projectedTokens:F.estimatedTokens,targetTokens:X,maxInputTokens:$.context.budget.request.maxInputTokens});let L=ow(F.messages,Z);if(!aw(Z,L))return;let D=ew(L[0]),z=tw(D.usageBefore,sw(Z)),_={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":$.context.mode==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",displayRole:"system",messagesRemoved:D.messagesRemoved+(Z.length-L.length),...z?{usageBefore:z}:{}},O=L.map((N,T)=>{if(T===0&&P$(N))return wL({...N,metadata:{...N.metadata,..._,userRunSpan:$$(N)}});return wL(P$(N)?N:$S(N))}),A=CL(O,$.estimateMessageTokens),q=F.actions.filter((N)=>N.reason==="over_budget"||N.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:O.length,messagesRemoved:Z.length-O.length,tokensBefore:H,tokensAfter:A,budgetStatus:F.status,budgetActions:q,budgetWarnings:F.warnings.map((N)=>N.code),targetTokens:X,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:O,budget:{policyIntent:"basic_compaction_projection",actionCount:q,warningCount:F.warnings.length,liveTailHandling:F.liveTailHandling}}}var XS=0.5;function xL($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function yL($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function hL($){try{return JSON.stringify($).length}catch{return String($).length}}function JS($){let Z=0,Q=0,X=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type!=="tool_result")continue;let j=hL(W.content);Z+=1,Q+=j,X=Math.max(X,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:X}}var VY={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>kL({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:X,logger:J})=>RL({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??LL,$.budget.messages.targetTokens),estimateMessageTokens:X,logger:J})};function WS($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function jS($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*XS):Math.floor($.triggerTokens*FL),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function IL($,Z){return Math.max(1,Math.floor($-Z))}function YS($){let Z=0,Q=!1;for(let X of $)if(X.role==="user")Q=!0;else if(X.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function _9($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let X=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=OL(),W=Q?.strategy??"agentic",j=VY[W],Y=Z.mode??"auto",V=Q?.compact?"custom":W;return async(B)=>{let K=B.overflowRecovery?"overflow_recovery":Y,G=B.apiMessages.reduce((k,I)=>k+J(I),0),H=QS({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),U=B.messages.reduce((k,I)=>k+J(I),0),F=Math.max(0,H-G),L=D9({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??UL,D=L*Y6,z=IL(D,F),_=H>=D;if($.logger?.debug("Context compaction diagnostics",{mode:K,strategy:W,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:H,apiMessageTokens:G,messageInputTokens:U,requestOverheadTokens:F,maxInputTokens:L,requestTriggerTokens:D,messageTriggerTokens:z,thresholdRatio:Y6,shouldCompact:_,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:hL(B.apiMessages),...JS(B.apiMessages)}),K==="auto"&&!_)return;let O,A;if(K==="auto")O=jS({maxInputTokens:L,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:D,messagePairCount:YS(B.messages)}),A=IL(O,F);else A=WS({messageInputTokens:U,messageTriggerTokens:z,manualTargetRatio:Z.manualTargetRatio}),O=F+A;let q={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:K,abortSignal:B.abortSignal,budget:{request:{inputTokens:H,maxInputTokens:L,triggerTokens:D,targetTokens:O,overheadTokens:F,thresholdRatio:Y6,utilizationRatio:L>0?H/L:0},messages:{inputTokens:U,triggerTokens:z,targetTokens:A}}},N=K==="manual"?"manual_compaction":K==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",T=K==="manual"?"":K==="overflow_recovery"?"overflow-recovery-":"auto-";B.emitStatusNotice?.(`${T}compacting`,{kind:N,reason:N,phase:"started",iteration:B.iteration,triggerTokens:D,targetTokens:O,maxInputTokens:L,messageTargetTokens:A});let C=B.messages.length,r=Date.now(),y={context:q,providerConfig:{...X,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:J,logger:$.logger},x=V,E;if(K==="overflow_recovery"){if(Q?.compact){try{E=await Q.compact(q)}catch(k){if(xL(k,B.abortSignal))throw k;$.logger?.log("Custom compaction failed during overflow recovery; falling back to basic compaction",{severity:"warn",...yL(k)}),E=void 0}if(E?.messages){let k=E.messages.reduce((d,Z0)=>d+J(Z0),0);if(!(E.messages.length>0&&k<U&&k<=A))$.logger?.log("Custom compaction did not produce an acceptable overflow-recovery transcript; falling back to basic compaction",{severity:"warn",customMessageCount:E.messages.length,customMessageTokens:k,messageTargetTokens:A}),E=void 0}}if(!E?.messages)x="basic",E=await VY.basic(y)}else if(Q?.compact)E=await Q.compact(q);else try{E=await j(y)}catch(k){if(W!=="agentic"||xL(k,B.abortSignal))throw k;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...yL(k)}),x="basic",E=await VY.basic(y)}let g=Date.now()-r,S=$.sessionId??B.conversationId,n={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(E?.messages){let k=E.messages.reduce((d,Z0)=>d+J(Z0),0),I=F+k;if($.logger?.log("Context compaction completed",{severity:"info",strategy:x,maxInputTokens:L,messageInputTokens:U,apiInputTokens:G,requestInputTokens:H,requestOverheadTokens:F,afterMessageTokens:k,afterRequestTokens:I,tokensSaved:H-I,utilizationBefore:`${(H/L*100).toFixed(1)}%`,utilizationAfter:`${(I/L*100).toFixed(1)}%`,thresholdTrigger:`${(Y6*100).toFixed(1)}%`,messagesBefore:C,messagesAfter:E.messages.length,messagesRemoved:C-E.messages.length}),B.emitStatusNotice?.(`${T}compacted`,{kind:N,reason:N,phase:"completed",iteration:B.iteration,tokensBefore:H,tokensAfter:I,messagesBefore:C,messagesAfter:E.messages.length,maxInputTokens:L}),MQ($.telemetry,{ulid:S,strategy:x,mode:K,messagesBefore:C,messagesAfter:E.messages.length,messagesRemoved:C-E.messages.length,tokensBefore:H,tokensAfter:I,tokensSaved:H-I,triggerTokens:D,maxInputTokens:L,thresholdRatio:Y6,durationMs:g,provider:$.providerId,modelId:$.modelId,...n}),E.budget&&(E.budget.actionCount>0||E.budget.warningCount>0))tH($.telemetry,{ulid:S,strategy:x,mode:K,policyIntent:E.budget.policyIntent,actionCount:E.budget.actionCount,warningCount:E.budget.warningCount,liveTailHandling:E.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...n}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:E.budget.policyIntent,actionCount:E.budget.actionCount,warningCount:E.budget.warningCount})}else B.emitStatusNotice?.(`${T}compaction-skipped`,{kind:N,reason:N,phase:"skipped",iteration:B.iteration,maxInputTokens:L}),RQ($.telemetry,{ulid:S,strategy:x,mode:K,reason:"no_result",tokensBefore:H,triggerTokens:D,maxInputTokens:L,thresholdRatio:Y6,durationMs:g,provider:$.providerId,modelId:$.modelId,...n});return E}}function z9($){return async(Z)=>{let Q=$.getState?.(),X=Q?V2(Q,Z.messages):void 0;if(Q&&X){let W=$.compact?await $.compact({...Z,messages:X,apiMessages:X}):void 0;if(W?.messages){let j=W.systemPrompt??Q.system_prompt,Y=r8({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...W,...j!==void 0?{systemPrompt:j}:{}}}return{messages:X,...W?.systemPrompt!==void 0?{systemPrompt:W.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let J=$.compact?await $.compact(Z):void 0;if(J?.messages){let W=r8({sourceMessages:Z.messages,compactedMessages:J.messages,conversationId:Z.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(W,Z.messages)}return J}}var p_={};f(p_,{zodToJsonSchema:()=>$y,validateWithZod:()=>ex,truncateCommandOutput:()=>H6,resolveToolRoutingConfig:()=>j4,resolveToolPresetName:()=>k$,resolveToolClientType:()=>G4,resolveCoreSelectedToolIds:()=>y3,isSkillsToolAvailable:()=>k3,isCoreBuiltinToolAvailable:()=>M6,getCoreHeadlessToolNames:()=>g9,getCoreDefaultEnabledToolIds:()=>x3,getCoreBuiltinToolCatalog:()=>A2,getCoreAcpToolNames:()=>I3,createWebFetchTool:()=>qY,createWebFetchExecutor:()=>k9,createToolPoliciesWithPreset:()=>T3,createSubmitAndExitTool:()=>MY,createSkillsTool:()=>F6,createShellTool:()=>f9,createShellExecutor:()=>U6,createSearchTool:()=>NY,createSearchExecutor:()=>b9,createReadFilesTool:()=>OY,createPlanModeCommandGuardExtension:()=>F3,createFileReadExecutor:()=>w9,createEditorTool:()=>TY,createEditorExecutor:()=>_6,createDefaultToolsWithPreset:()=>E3,createDefaultTools:()=>L2,createDefaultShellExecutor:()=>x9,createDefaultExecutors:()=>J4,createBuiltinTools:()=>R6,createAskQuestionTool:()=>EY,createApplyPatchTool:()=>AY,createApplyPatchExecutor:()=>D6,computePatchChanges:()=>$4,WebFetchRequestSchema:()=>KY,ToolPresets:()=>A1,TEAM_TOOL_NAMES:()=>B4,SubmitInputSchema:()=>P9,StructuredCommandInputSchema:()=>K6,SkillsInputSchema:()=>R9,SearchCodebaseInputSchema:()=>q9,RunCommandsInputSchema:()=>A9,RunCommandExecutionController:()=>X4,ReadFilesInputSchema:()=>N9,ReadFileRequestSchema:()=>G3,PatchActionType:()=>L6,PLAN_MODE_COMMAND_GUARD_EXTENSION_NAME:()=>HY,PATCH_MARKERS:()=>e,MAX_COMMAND_OUTPUT_CHARS:()=>u1,FetchWebContentInputSchema:()=>T9,EditFileInputSchema:()=>E9,DefaultToolNames:()=>O0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>W4,CommandExitError:()=>w$,AskQuestionInputSchema:()=>C9,ApplyPatchInputSchema:()=>M9,ALL_DEFAULT_TOOL_NAMES:()=>o$});import{validateWithZod as ex,zodToJsonSchema as $y}from"@cline/shared";q0();var VS=new Set(["rm","rmdir","unlink","mv","cp","dd","touch","mkdir","ln","link","chmod","chown","chgrp","truncate","shred","install","patch","rsync","mkfifo","mknod","del","erase","move","ren","rename","md","rd","mklink","copy","xcopy","robocopy","new-item","ni","remove-item","move-item","copy-item","rename-item","set-content","add-content","clear-content","out-file","mi","ri","cpi","rni","ac","clc"]),BS=new Set(["add","am","apply","checkout","cherry-pick","clean","clone","commit","init","merge","mv","pull","push","rebase","reset","restore","revert","rm","stash","submodule","switch","worktree"]),V3=new Set(["install","i","ci","add","remove","rm","uninstall","unlink","link","update","up","upgrade","dedupe","prune","publish"]),O9=new Set(["install","uninstall","add","remove"]),KS=new Set(["add","remove","rm","install","uninstall","update","new","init","publish"]),GS=new Set(["install","uninstall","update","cleanup"]),HS=new Set(["install","require","remove","update"]),US=new Set(["install","get"]),FS=new Set(["add","remove"]),LS=new Set(["install","uninstall","upgrade"]),DS=new Set(["install","update","delete","push"]),V6=new Set(["install","reinstall","remove","purge","uninstall","upgrade","autoremove","add","del"]),_S={git:BS,npm:V3,pnpm:V3,yarn:V3,bun:V3,pip:O9,pip3:O9,pipx:O9,uv:O9,cargo:KS,apt:V6,"apt-get":V6,dnf:V6,yum:V6,apk:V6,brew:V6,snap:V6,gem:GS,composer:HS,go:US,dotnet:FS,winget:LS,nuget:DS},zS={stash:new Set(["list","show"]),worktree:new Set(["list"]),submodule:new Set(["status","summary"])},OS=new Set(["sudo","doas","env","command","builtin","nohup","time","nice","stdbuf","timeout","xargs"]),NS=new Set(["if","then","else","elif","fi","while","until","do","done","for","case","esac","!","{","}"]),gL=/^[A-Za-z_][A-Za-z0-9_]*\+?=/;function cL($){let Z=$.replace(/["']/g,"");if(/^(\/dev\/(null|stdout|stderr|tty)|nul:?)$/i.test(Z))return!0;if(Z.includes(".."))return!1;return Z.startsWith("/tmp/")||Z.startsWith("/var/tmp/")||Z.startsWith("$TMPDIR")||Z.startsWith("${TMPDIR")||/^%te?mp%/i.test(Z)||/^\$env:te?mp/i.test(Z)}function mL($){return($.replace(/["']/g,"").split(/[/\\]/).pop()??$).toLowerCase().replace(/\.exe$/,"")}function qS($){let Z=$.split(`
|
|
401
401
|
`),Q=[],X;for(let J of Z){if(X!==void 0){if(J.replace(/^\t+/,"")===X)X=void 0;continue}Q.push(J);let W=J.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);if(W)X=W[1]??W[2]??W[3]}return Q.join(`
|
|
402
402
|
`).replace(/\$\(\([\s\S]*?\)\)/g,"_").replace(/\\./g,"_").replace(/"[^"]*"|'[^']*'/g,(J)=>J.replace(/[\s<>|;&$()`#\\]/g,"_")).replace(/(?:^|\s)#.*$/gm," ")}function BY($){let Z=0;while(Z<$.length&&(gL.test($[Z])||NS.has($[Z])))Z+=1;while(Z<$.length&&OS.has(mL($[Z]))){Z+=1;while(Z<$.length&&($[Z].startsWith("-")||$[Z]==="{}"||gL.test($[Z])||/^\d+[smhd]?$/.test($[Z])))Z+=1}if(Z>=$.length)return;let Q=mL($[Z]),X=$.slice(Z+1);if(Q==="tee")return X.filter((Y)=>!Y.startsWith("-")).some((Y)=>!cL(Y))?"`tee`":void 0;if(VS.has(Q))return`\`${Q}\``;let J=_S[Q];if(J){if(Q==="git"&&X.some((V)=>V==="--help"||V==="-h"))return;let j=0;while(j<X.length&&X[j].startsWith("-"))j+=Q==="git"&&/^-[cC]$/.test(X[j])?2:1;let Y=X[j]?.toLowerCase();if(Y&&J.has(Y)){let V=X[j+1]?.toLowerCase();if(Q==="git"&&V!==void 0&&zS[Y]?.has(V))return;return`\`${Q} ${Y}\``}if(Q==="yarn"&&X.length===0)return"`yarn` (install)";return}if(/^python[\d.]*$/.test(Q)){let j=X.indexOf("-m"),Y=j===-1?void 0:X[j+1]?.toLowerCase();if(Y==="pip"||Y==="pip3"){let V=X.slice(j+2).find((B)=>!B.startsWith("-"))?.toLowerCase();if(V&&O9.has(V))return`\`pip ${V}\``}return}let W=/^-[A-Za-z]*i(\..*)?$/;if((Q==="sed"||Q==="gsed")&&X.some((j)=>W.test(j)||j.startsWith("--in-place")))return"`sed -i` (in-place edit)";if(Q==="perl"&&X.some((j)=>W.test(j)))return"`perl -i` (in-place edit)";if(/^[gnm]?awk$/.test(Q)){if(X.some((Y,V)=>(Y==="-i"||Y==="--include")&&X[V+1]?.startsWith("inplace")||Y.startsWith("-i")&&Y.slice(2).startsWith("inplace")||Y.startsWith("--include=inplace")))return"`awk -i inplace` (in-place edit)";return}if(Q==="sort"&&X.some((j)=>j.startsWith("-o")||j.startsWith("--output")))return"`sort -o` (writes a file)";if(Q==="curl")return X.some((Y)=>!Y.startsWith("--")&&/^-[A-Za-z]*[oO]/.test(Y)||Y.startsWith("--output")||Y.startsWith("--remote-name"))?"`curl -o` (writes a file)":void 0;if(Q==="wget")return X.some((Y,V)=>Y==="--spider"||/^-[A-Za-z]*O-$/.test(Y)||Y==="--output-document=-"||Y==="-O"&&X[V+1]==="-")?void 0:"`wget` (downloads files)";if(Q==="find"){if(X.includes("-delete"))return"`find -delete`";for(let j=0;j<X.length;j+=1){if(!["-exec","-execdir","-ok","-okdir"].includes(X[j]))continue;let Y=[];for(let B=j+1;B<X.length&&X[B]!==";"&&X[B]!=="+";B+=1)Y.push(X[B]);let V=BY(Y);if(V)return V}return}return}function uL($){if(typeof $!=="string")return BY([$.command,...$.args??[]]);let Z=qS($),Q=Z.matchAll(/(?:^|[^<>])(?:>{1,2}|&>{1,2})\s*([^\s;&|<>()]+)/g);for(let X of Q)if(!cL(X[1]))return`output redirection (\`> ${X[1]}\`)`;for(let X of Z.split(/[\n;|&()`]+/)){let J=BY(X.trim().split(/\s+/).filter(Boolean));if(J)return J}return}function dL($){return`Command not executed: ${$} can modify files, and file modifications are blocked in plan mode. `+"You are in PLAN MODE — explore, analyze, and present a plan; do not make changes. "+"Use read-only commands to inspect the project (redirecting output to /tmp, or %TEMP% on Windows, is allowed), and if this change is part of the task, put it in your plan so it can run after the user approves switching to act mode."}import{validateWithZod as TS}from"@cline/shared";import{z as P}from"zod";var K2=6000,B6=P.string().describe("The absolute path of a text file to read content from"),B3=P.object({start_line:P.coerce.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:P.coerce.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),G3=P.object({path:B6,start_line:B3.shape.start_line,end_line:B3.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),N9=P.object({files:P.array(G3).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),lL={start_line:B3.shape.start_line,end_line:B3.shape.end_line},n8=P.union([G3,P.object({file_path:B6,...lL}).transform(({file_path:$,...Z})=>({path:$,...Z})),P.object({filePath:B6,...lL}).transform(({filePath:$,...Z})=>({path:$,...Z}))]),pL=P.union([N9,n8,P.array(n8),P.array(P.string()),P.string(),P.object({files:P.array(P.union([B6,n8]))}),P.object({files:n8}),P.object({files:B6}),P.object({file_paths:P.array(B6)}),P.object({file_paths:P.string()}),P.object({paths:P.array(P.union([B6,n8]))}),P.object({paths:n8}),P.object({paths:P.string()})]),q9=P.object({queries:P.array(P.string()).describe("Array of regex search queries to execute")}),iL=P.union([q9,P.array(P.string()),P.string(),P.object({queries:P.string()})]),K3=P.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${K2*2} characters) to avoid timeouts.`),K6=P.object({command:P.string().min(1).describe("The executable to run directly without shell parsing."),args:P.array(P.string()).optional().describe("Optional argv list passed directly to the executable.")}),rL=P.union([K3,K6]),A9=P.object({commands:P.array(K3).describe("Array of complete shell command strings to execute.")}),AS=P.object({commands:P.array(rL)}),aL=P.union([A9,AS,P.object({commands:rL}),P.array(K6),K6,P.object({command:K3}),P.object({cmd:K3}),P.array(P.string()),P.string()]),KY=P.object({url:P.string().describe("The URL to fetch"),prompt:P.string().min(2).describe("Analysis prompt for the fetched content")}),T9=P.object({requests:P.array(KY).describe("Array of the URLs for the web fetch requests")}),E9=P.object({path:P.string().min(1).describe("The absolute path for the action to be performed on"),old_text:P.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 ${K2} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:P.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 ${K2} 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:P.coerce.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),M9=P.object({input:P.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."),nL=P.union([M9,P.string()]),R9=P.object({skill:P.string().min(1).describe("Name of the skill to execute."),args:P.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),C9=P.object({question:P.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:P.array(P.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),P9=P.object({summary:P.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:P.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.
|
|
403
403
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
@@ -405,12 +405,12 @@ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or t
|
|
|
405
405
|
[... output truncated: ${X} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
|
|
406
406
|
`+$.slice(-W)}var t8=2000,_Y=2000,D3=48000,e8=48000;var KD=10485760,mS=86400000,cS=60000,DD="cline-command-",_D="output.log",zD="active-command.json",OD="completed-at",uS=48;function ND($){return typeof $==="number"&&Number.isFinite($)?Math.max(0,$):mS}function dS($){return typeof $==="number"&&Number.isFinite($)?Math.max(1,$):cS}function lS($){try{let Z=JSON.parse($);if(Z.version!==1||typeof Z.executionId!=="string"||Z.executionId.length===0||!Number.isSafeInteger(Z.pid)||(Z.pid??0)<=0||typeof Z.processStartToken!=="string"||Z.processStartToken.length===0||typeof Z.detachedAtMs!=="number"||!Number.isFinite(Z.detachedAtMs)||Z.detachedAtMs<0)return;return Z}catch{return}}function zY($,Z){let Q=`${$}.${FD()}.tmp`;try{xS(Q,Z,"utf8");try{VD(Q,$)}catch(X){if(X instanceof Error&&"code"in X&&["EEXIST","EPERM"].includes(String(X.code)))z3($,{force:!0}),VD(Q,$);else throw X}}finally{z3(Q,{force:!0})}}function pS($,Z){let Q=$?.trim();if(!Q)return;let X=Number(Q);if(!Number.isFinite(X)||X<0)return;return Math.min(X,Z)}async function GD($){try{return await IS($,"utf8")}catch(Z){if(Z instanceof Error&&"code"in Z&&Z.code==="ENOENT")return;throw Z}}async function qD($,Z){let Q=H2($,zD),X=H2($,OD),J=await GD(X),W=pS(J,Z.nowMs),j=await GD(Q);if(W!==void 0){if(j!==void 0)await _3(Q,{force:!0})}else if(j!==void 0){let V=lS(j);if(V){let B;try{B=await Z.probeProcessStartToken(V.pid)}catch{B={status:"unavailable"}}if(B.status==="found"&&B.token===V.processStartToken)return HD($,Z),!1;if(B.status==="unavailable")return HD($,Z),!1}zY(X,String(Z.nowMs)),await _3(Q,{force:!0}),W=Z.nowMs}if(W===void 0)try{W=(await BD(H2($,_D))).mtimeMs}catch{W=(await BD($)).mtimeMs}let Y=Z.nowMs-Z.retentionMs;if(W>Y)return TD($,Math.max(0,W+Z.retentionMs-Z.nowMs)),!1;return await _3($,{recursive:!0,force:!0}),!0}function HD($,Z,Q=Z.activeCommandPollIntervalMs){setTimeout(()=>{qD($,{...Z,nowMs:Date.now()}).catch(()=>{return})},Q).unref()}async function AD($={}){let Z=$.tempDirectory??LD(),Q=ND($.retentionMs),X=$.nowMs??Date.now(),J=$.processStartTokenProbe??G2,W=dS($.activeCommandPollIntervalMs),j;try{j=await yS(Z,{withFileTypes:!0})}catch{return 0}let Y=0;for(let V of j){if(!V.isDirectory()||!V.name.startsWith(DD))continue;let B=H2(Z,V.name);try{if(await qD(B,{retentionMs:Q,nowMs:X,probeProcessStartToken:J,activeCommandPollIntervalMs:W}))Y+=1}catch{}}return Y}class w$ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function UD($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),X=new hS("utf8"),J="",W="",j=0,Y=(V)=>{if(!V)return;j+=V.length;let B=Z-J.length;if(B>0){J+=V.slice(0,B),W=(W+V.slice(B)).slice(-Q);return}W=(W+V).slice(-Q)};return{append(V){let B=X.write(V);return Y(B),B},current(){return{text:J+W,totalChars:j,dropped:j>J.length+W.length}},snapshot(){let V=X.end();return Y(V),{text:J+W,totalChars:j,dropped:j>J.length+W.length,finalChunk:V}}}}function iS($,Z,Q,X){let J=$.emitUpdate,W=typeof X==="number"&&Number.isFinite(X)?Math.max(1,Math.floor(Math.min(u1,X))):u1,j={},Y=[],V,B=!1,K=()=>{if(!V)return;clearTimeout(V),V=void 0},G=()=>{if(K(),!J){j={},Y=[];return}let U=j,F=Y;j={},Y=[];for(let L of F){let D=U[L];if(!D?.chunk)continue;let z=D.droppedChars>0?`\x1B[0m[${D.droppedChars} command-output characters skipped while streaming]
|
|
407
407
|
`:"",O=z.length<W?z+D.chunk.slice(-(W-z.length)):D.chunk.slice(-W);J({stream:L,chunk:O,executionId:Z,detachable:Q(),...D.droppedChars>0?{truncated:!0,droppedChars:D.droppedChars}:{}})}},H=()=>{if(!J||V||B)return;V=setTimeout(G,uS),V.unref()};return{append(U,F){if(!J||B||!F)return;let L=j[U];if(!L)L={chunk:"",droppedChars:0},j[U]=L,Y.push(U);if(F.length>=W)L.droppedChars+=L.chunk.length+F.length-W,L.chunk=F.slice(-W);else{let D=L.chunk.length+F.length-W;if(D>0)L.droppedChars+=D,L.chunk=L.chunk.slice(D);L.chunk+=F}H()},flush:G,stop(U={}){if(B)return;if(U.flush)G();else K(),j={},Y=[];B=!0}}}function TD($,Z){setTimeout(()=>{_3($,{recursive:!0,force:!0}).catch(()=>{return})},Z).unref()}function rS($,Z){let Q=kS(H2(LD(),DD)),X=H2(Q,_D),J=H2(Q,zD),W=H2(Q,OD);try{zY(J,`${JSON.stringify(Z)}
|
|
408
|
-
`)}catch(L){throw z3(Q,{recursive:!0,force:!0}),L}let j=bS(X,{encoding:"utf8"}),Y=0,V=!1,B=!0,K=!1,G=!1,H=!1,U=()=>{if(H)return;H=!0,TD(Q,$)};return j.on("error",()=>{B=!1}),j.once("close",()=>{if(B=!1,K=!0,G)U()}),{path:X,write(L){if(!L||V||!B)return;let D=KD-Y;if(D<=0){V=!0,B=!1,j.end();return}let z=Buffer.from(L,"utf8"),_=z.length<=D?z:z.subarray(0,D);if(j.write(_),Y+=_.length,_.length<z.length||Y>=KD)V=!0,B=!1,j.end()},complete:()=>{if(G)return;G=!0;try{zY(W,String(Date.now()))}catch{}try{z3(J,{force:!0})}catch{}if(K){U();return}B=!1,j.end()}}}function aS($,Z,Q,X,J,W,j,Y=G2){if(Z.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((V,B)=>{let K=process.platform==="win32",G=YD($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!K,windowsHide:!0}),H=G.pid,U=UD(X),F=UD(X),L=FD(),D=Boolean(j&&Z.sessionId),z=!1,_,O=!1,A=!1,q=!1,N,T=()=>{},C=iS(Z,L,()=>z,X),r=(k)=>{if(A)return;A=!0,k()},y=async()=>{if(!H)return;if(K){await new Promise((k)=>{let I=!1,d,Z0=()=>{if(I)return;I=!0,clearTimeout(m0),k()};try{d=YD("taskkill.exe",["/PID",String(H),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{G.kill(),k();return}let m0=setTimeout(()=>{d.kill(),G.kill(),Z0()},5000);d.once("error",()=>{G.kill(),Z0()}),d.once("close",(G0)=>{if(G0!==0)G.kill();Z0()})});return}try{process.kill(-H,"SIGKILL")}catch{G.kill("SIGKILL")}},x,E=()=>
|
|
408
|
+
`)}catch(L){throw z3(Q,{recursive:!0,force:!0}),L}let j=bS(X,{encoding:"utf8"}),Y=0,V=!1,B=!0,K=!1,G=!1,H=!1,U=()=>{if(H)return;H=!0,TD(Q,$)};return j.on("error",()=>{B=!1}),j.once("close",()=>{if(B=!1,K=!0,G)U()}),{path:X,write(L){if(!L||V||!B)return;let D=KD-Y;if(D<=0){V=!0,B=!1,j.end();return}let z=Buffer.from(L,"utf8"),_=z.length<=D?z:z.subarray(0,D);if(j.write(_),Y+=_.length,_.length<z.length||Y>=KD)V=!0,B=!1,j.end()},complete:()=>{if(G)return;G=!0;try{zY(W,String(Date.now()))}catch{}try{z3(J,{force:!0})}catch{}if(K){U();return}B=!1,j.end()}}}function aS($,Z,Q,X,J,W,j,Y=G2){if(Z.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((V,B)=>{let K=process.platform==="win32",G=YD($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!K,windowsHide:!0}),H=G.pid,U=UD(X),F=UD(X),L=FD(),D=Boolean(j&&Z.sessionId),z=!1,_,O=!1,A=!1,q=!1,N,T=()=>{},C=iS(Z,L,()=>z,X),r=(k)=>{if(A)return;A=!0,k()},y=async()=>{if(!H)return;if(K){await new Promise((k)=>{let I=!1,d,Z0=()=>{if(I)return;I=!0,clearTimeout(m0),k()};try{d=YD("taskkill.exe",["/PID",String(H),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{G.kill(),k();return}let m0=setTimeout(()=>{d.kill(),G.kill(),Z0()},5000);d.once("error",()=>{G.kill(),Z0()}),d.once("close",(G0)=>{if(G0!==0)G.kill();Z0()})});return}try{process.kill(-H,"SIGKILL")}catch{G.kill("SIGKILL")}},x,E=()=>S(Error("Command was aborted")),g=()=>{clearTimeout(x),Z.signal?.removeEventListener("abort",E),T()},S=(k)=>{if(O||A)return;O=!0,C.stop({flush:!0}),g(),y().finally(()=>r(()=>B(k)))};if(x=setTimeout(()=>S(new o8(`Command timed out after ${Q}ms`,Q)),Q),Z.signal){if(Z.signal.addEventListener("abort",E,{once:!0}),Z.signal.aborted)E()}let n=()=>{if(!z||O||A||!H||G.exitCode!==null||G.signalCode!==null)return!1;if(!_)return!1;let k=rS(W,{version:1,executionId:L,pid:H,processStartToken:_,detachedAtMs:Date.now()});C.stop({flush:!0}),q=!0,N=k;let I=U.current(),d=F.current();if(N.write(I.text),d.text)N.write(`
|
|
409
409
|
[stderr]
|
|
410
410
|
${d.text}`);g(),G.unref(),G.stdout?.unref?.(),G.stderr?.unref?.();let Z0=[`[Command is still running. Output will continue in ${N.path}]`,J?I.text+(d.text?`
|
|
411
411
|
[stderr]
|
|
412
412
|
${d.text}`:""):I.text].filter(Boolean).join(`
|
|
413
|
-
`);return r(()=>V(Z0)),!0};G.once("spawn",()=>{if(O)return;Z.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!1});let k=Z.sessionId;if(!D||!H||!k||!j)return;(async()=>{let I=await Y(H);if(I.status!=="found"||O||A||G.exitCode!==null||G.signalCode!==null)return;_=I.token,z=!0,T=j.register({executionId:L,sessionId:k,toolCallId:Z.toolCallId,detach:
|
|
413
|
+
`);return r(()=>V(Z0)),!0};G.once("spawn",()=>{if(O)return;Z.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!1});let k=Z.sessionId;if(!D||!H||!k||!j)return;(async()=>{let I=await Y(H);if(I.status!=="found"||O||A||G.exitCode!==null||G.signalCode!==null)return;_=I.token,z=!0,T=j.register({executionId:L,sessionId:k,toolCallId:Z.toolCallId,detach:n}),Z.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!0})})().catch(()=>{return})}),G.stdout?.on("data",(k)=>{let I=U.append(k);if(!I)return;if(q){N?.write(I);return}C.append("stdout",I)}),G.stderr?.on("data",(k)=>{let I=F.append(k);if(!I)return;if(q){N?.write(I);return}C.append("stderr",I)}),G.on("close",(k)=>{if(O)return;let I=U.snapshot(),d=F.snapshot();if(q){N?.write(I.finalChunk),N?.write(d.finalChunk),N?.write(`
|
|
414
414
|
[Command exited with code ${k??1}]
|
|
415
415
|
`),N?.complete();return}if(I.finalChunk)C.append("stdout",I.finalChunk);if(d.finalChunk)C.append("stderr",d.finalChunk);if(C.stop({flush:!0}),g(),k!==0){let Z0=k??1,m0=J?I.text+(d.text?`
|
|
416
416
|
[stderr]
|
|
@@ -419,7 +419,7 @@ ${m0}`:`[Command exited with code ${Z0}]`;r(()=>B(new w$(Z0,r0)))}else{let Z0=J?
|
|
|
419
419
|
[stderr]
|
|
420
420
|
${d.text}`:""):I.text;if(I.dropped||J&&d.dropped||Z0.length>X){let G0=J?I.totalChars+d.totalChars:I.totalChars;Z0=H6(Z0,{maxChars:X,totalChars:G0})}r(()=>V(Z0))}}),G.on("error",(k)=>{if(O)return;if(q){N?.write(`
|
|
421
421
|
[Command failed: ${k.message}]
|
|
422
|
-
`),N?.complete();return}C.stop({flush:!0}),g(),r(()=>B(Error(`Failed to execute command: ${k.message}`)))}),G.stdin?.on("error",(k)=>{if(O||A)return;
|
|
422
|
+
`),N?.complete();return}C.stop({flush:!0}),g(),r(()=>B(Error(`Failed to execute command: ${k.message}`)))}),G.stdin?.on("error",(k)=>{if(O||A)return;S(Error(`Failed to write command input: ${k.message}`))}),G.stdin?.end($.input,"utf8")})}function U6($={}){let{shell:Z=vS(process.platform),timeoutMs:Q=30000,env:X={},combineOutput:J=!0,executionController:W,processStartTokenProbe:j=G2}=$,Y=ND($.detachedLogRetentionMs),V=$.maxOutputChars??$.maxOutputBytes??u1;return(B,K,G)=>{let H=typeof B!=="string"&&"args"in B,U=H?{args:B.args??[]}:gS(Z,typeof B==="string"?B:B.command);return aS({executable:H?B.command:Z,args:U.args,cwd:K,env:X,input:U.input},G,Q,V,J,Y,W,j)}}function ED($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function sS($,Z,Q){nH($,{tool_name:"run_commands",effective_timeout_ms:Q.effectiveTimeoutMs,timeout_source:Q.timeoutSource,command_count:Q.commandCount,duration_ms:Q.durationMs,ulid:Z.sessionId,mode:ED(Z,"mode"),source:ED(Z,"source"),session_id:Z.sessionId,agent_id:Z.agentId,conversation_id:Z.conversationId,run_id:Z.runId,iteration:Z.iteration,tool_call_id:Z.toolCallId})}function tS($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function eS($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let X=$[Q],J=tS(X);if(!J){Z.push(X);continue}let W=$.findIndex((Y,V)=>V>Q&&Y.trim()===J);if(W===-1){Z.push(X);continue}let j=[X];while(Q<W){Q+=1;let Y=$[Q];j.push(Y)}Z.push(j.join(`
|
|
423
423
|
`))}return Z}function $b($){let Z=[],Q=[],X=()=>{if(Q.length>0)Z.push(...eS(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}X(),Z.push(J)}return X(),Z}async function Zb($,Z){let{executor:Q,cwd:X,context:J,timeoutMs:W,timeoutSource:j,telemetry:Y}=Z;return Promise.all($.map(async(V,B)=>{let K=Date.now(),G=$D(V),H=J.emitUpdate?{...J,emitUpdate:(U)=>{let F=U&&typeof U==="object"&&!Array.isArray(U)?U:{update:U};J.emitUpdate?.({...F,commandIndex:B,query:G})}}:J;try{let U=await f$(Q(V,X,H),W,`Command timed out after ${W}ms`);return{query:G,result:U,success:!0}}catch(U){if(U instanceof o8)sS(Y,J,{effectiveTimeoutMs:U.timeoutMs,timeoutSource:j,commandCount:$.length,durationMs:Date.now()-K});if(U instanceof w$)return{query:G,result:U.output,error:U.message,success:!1};let F=G6(U);return{query:G,result:"",error:`Command failed: ${F}`,success:!1}}}))}function OY($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return U2({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${t8} lines / ~${Math.round(D3/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:S$(N9),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(X,J)=>{let W=F2(pL,eL(X)),j;if(typeof W==="string")j=[{path:W}];else if(Array.isArray(W))j=W.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in W)j=(Array.isArray(W.files)?W.files:[W.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in W)j=(Array.isArray(W.file_paths)?W.file_paths:[W.file_paths]).map((V)=>({path:V}));else if("paths"in W)j=(Array.isArray(W.paths)?W.paths:[W.paths]).map((V)=>typeof V==="string"?{path:V}:V);else j=[W];return Promise.all(j.map(async(Y)=>{let V=tL(Y);if(V)return{query:H3(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await f$($(Y,J),Q,`File read timed out after ${Q}ms`);return{query:H3(Y),result:B,success:!0}}catch(B){let K=G6(B);return{query:H3(Y),result:"",error:`Error reading file: ${K}`,success:!1}}}))}})}function NY($,Z={}){let Q=Z.searchTimeoutMs??30000,X=Z.cwd??process.cwd();return U2({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(e8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:S$(q9),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,W)=>{let j=F2(iL,J),Y=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(Y.map(async(V)=>{try{let B=await f$($(V,X,W),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let K=G6(B);return{query:V,result:"",error:`Search failed: ${K}`,success:!1}}}))}})}var MD="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function Qb($,Z){if($==="powershell"||$==="cmd"){let X=$==="powershell"?"PowerShell":"cmd.exe",J=$==="powershell"?"';'":"'&&'";return"Run non-interactive shell commands from the root of the workspace in Windows environment. "+MD+`Output beyond ~${Math.round(u1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${X}; quote paths and arguments for ${X} and use ${J} to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`}let Q=$==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":Z?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+MD+Q+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(u1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function f9($,Z={}){let Q=Z.bashTimeoutMs??30000,X=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),W=process.platform==="win32",j=Z.shell,Y=typeof j==="function"?j:()=>j??nS(process.platform),V=()=>Qb(oS(Y()),W),B=U2({name:"run_commands",description:V(),inputSchema:S$(A9),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(K,G)=>{let H=$b(U3(K));return Zb(H,{executor:$,cwd:J,context:G,timeoutMs:Q,timeoutSource:X,telemetry:Z.telemetry})}});if(typeof j==="function")Object.defineProperty(B,"description",{get:V,enumerable:!0});return B}function qY($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return U2({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:S$(T9),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(X,J)=>{let W=F2(T9,X);return Promise.all(W.requests.map(async(j)=>{try{let Y=await f$($(j.url,j.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:j.url,result:Y,success:!0}}catch(Y){let V=G6(Y);return{query:j.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var Xb=`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:
|
|
424
424
|
|
|
425
425
|
*** Begin Patch
|
|
@@ -549,7 +549,7 @@ ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function __($,Z){l
|
|
|
549
549
|
`),J=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,cancelReason:X||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:J.length>0?J:void 0}}function Xh($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:void 0,X=typeof Z.errorMessage==="string"&&Z.errorMessage.trim().length>0?Z.errorMessage:void 0,J=typeof Z.cancel==="boolean"?Z.cancel:void 0;return{cancel:J,review:typeof Z.review==="boolean"?Z.review:void 0,context:J===!0?void 0:qV(Q??X),cancelReason:J===!0?X??Q:void 0,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function AV($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function p0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",X={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:X,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}async function TV($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await v$($,Z)}catch(Q){let X=jh(Z.command,process.platform,Q);if(!X)throw Q;return await v$($,{...Z,command:X})}}function Jh($){try{let Q=eI($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let X=Q.slice(2).trim();if(!X)return;let J=X.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function Wh($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function jh($,Z=process.platform,Q){if(Z!=="win32"||!Wh(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function cz($){if($.length===0)return;let[Z,...Q]=$,X=Z.replace(/\\/g,"/").toLowerCase(),J=X.split("/").at(-1)??X;if(J==="env")return cz(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function Yh($){let Z=Jh($);if(Z&&Z.length>0)return[...cz(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return Zh(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function Vh($){let Z={};for(let Q of M2($)){if(!Q.hookEventName)continue;let X=Q.hookEventName,J=Z[X]??[];J.push(Yh(Q.path)),Z[X]=J}return Z}async function mz($){let Z;for(let Q of $.commands){let X=Q.join(" ");try{let J=await TV($.payload,{command:Q,cwd:$.cwd,env:process.env,detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){Z7($.logger,`hook command timed out: ${X}`);continue}if(J?.parseError){Z7($.logger,`hook command returned invalid JSON control output: ${X} (${J.parseError})`);continue}Z=Qh(Z,Xh(J?.parsedJson))}catch(J){Z7($.logger,`hook command failed: ${X}`,J)}}return Z}async function P4($){if($.detached){for(let Z of $.commands){let Q=Z.join(" ");TV($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:!0}).catch((X)=>{Z7($.logger,`hook command failed: ${Q}`,X)})}return}await Promise.all($.commands.map(async(Z)=>{let Q=Z.join(" ");try{await TV($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:$.detached})}catch(X){Z7($.logger,`hook command failed: ${Q}`,X)}}))}function R2($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function EV($,Z){return{...R2($.snapshot),userMessage:Z}}function uz($){return{...R2($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function dz($){return{...R2($.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 lz($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Bh($){if(!$)return;let Z={};if($.cancel===!0){if(Z.stop=!0,$.cancelReason?.trim())Z.reason=$.cancelReason}else if($.context?.trim())Z.appendContext=$.context;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function Kh($){if(!$)return;let Z={};if($.cancel===!0){if(Z.stop=!0,$.cancelReason?.trim())Z.reason=$.cancelReason}else if($.context?.trim())Z.appendContext=$.context;return Object.keys(Z).length>0?Z:void 0}function f4($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(X)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...X})}
|
|
550
550
|
`,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??$h(gz(),"hooks.jsonl");gz(j),tI(j,J,"utf8")};return{beforeRun:async(X)=>{let J=EV(X,"");Q({...p0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(X)=>{let J=uz(X);Q({...p0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:QX(J.call.input)}});return},afterTool:async(X)=>{let J=dz(X);Q({...p0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:QX(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:X,result:J})=>{let W=R2(X);if(J.status==="completed"){Q({...p0(W,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||AV(J.error?.message)){Q({...p0(W,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...p0(W,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let J=EV({snapshot:X.snapshot},lz(X.message.content));Q({...p0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function Q7($){let Z=Vh($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let X=async(G,H)=>{let U=Z[H]??[];if(U.length===0)return;await P4({commands:U,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:H==="agent_resume"?{...p0(G,$),hookName:H,taskResume:{taskMetadata:{},previousState:{}}}:{...p0(G,$),hookName:H,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let H=Z.prompt_submit??[];if(H.length>0)await P4({commands:H,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...p0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},W=async(G)=>{let H=Z.tool_call??[];if(H.length===0)return;return mz({commands:H,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...p0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:QX(G.call.input)}}})},j=async(G)=>{let H=Z.tool_result??[];if(H.length===0)return;return mz({commands:H,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...p0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:QX(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},Y=async(G)=>{let H=Z.agent_end??[];if(H.length===0)return;await P4({commands:H,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...p0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let H=Z.agent_error??[];if(H.length===0)return;await P4({commands:H,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...p0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(AV(G.reason)){let U=Z.agent_abort??[];if(U.length>0)await P4({commands:U,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...p0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let H=Z.session_shutdown??[];if(H.length===0)return;await P4({commands:H,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...p0(G,$),hookName:"session_shutdown",reason:G.reason}})},K={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)K.beforeRun=async(G)=>{let H=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await X(R2(G.snapshot),H);return};if((Z.prompt_submit?.length??0)>0)K.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(EV({snapshot:G.snapshot},lz(G.message.content)))}}if((Z.tool_call?.length??0)>0)K.beforeTool=async(G)=>{let H=await W(uz(G));return Bh(H)};if((Z.tool_result?.length??0)>0)K.afterTool=async(G)=>{let H=await j(dz(G));return Kh(H)};if((Z.agent_end?.length??0)>0)K.afterRun=async({snapshot:G,result:H})=>{if(H.status!=="completed")return;await Y({...R2(G),iteration:H.iterations,turn:{outputText:H.outputText,status:H.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=K.afterRun;K.afterRun=async(H)=>{await G?.(H);let{snapshot:U,result:F}=H;if(F.status==="aborted"||AV(F.error?.message)){await B({...R2(U),reason:F.error?.message});return}if(F.error)await V({...R2(U),iteration:F.iterations,error:F.error})}}return K}function w4($){return E4("core.hook_config_files",Q7($))}function y6($,Z){let Q=$.map((X)=>X[Z]).filter((X)=>typeof X==="function");if(Q.length===0)return;return async(X)=>{let J;for(let W of Q){let j=await W(X);if(!j||typeof j!=="object")continue;let Y=j,V=[J?.appendContext,Y.appendContext].filter((B)=>typeof B==="string"&&B.length>0).join(`
|
|
551
551
|
|
|
552
|
-
`);J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,appendContext:V||void 0,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function I6($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:y6(Z,"beforeRun"),afterRun:y6(Z,"afterRun"),beforeModel:y6(Z,"beforeModel"),afterModel:y6(Z,"afterModel"),beforeTool:y6(Z,"beforeTool"),afterTool:y6(Z,"afterTool"),onEvent:y6(Z,"onEvent")}}var pz={};f(pz,{normalizeRuntimeCapabilities:()=>i0});function i0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let X=Z&&Object.keys(Z).length>0;if(!X&&!Q)return;return{...X?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var ez={};f(ez,{toProviderConfig:()=>T1,emptyStoredProviderSettings:()=>f2,VoiceInputSettingsSchema:()=>MX,StoredProviderSettingsSchema:()=>k4,StoredProviderSettingsEntrySchema:()=>CX,StoredProviderModesSchema:()=>RX,ProviderSettingsSchemaTyped:()=>b4});import{z as E1}from"zod";var tz={};f(tz,{toProviderConfig:()=>T1,safeParseSettings:()=>EX,safeCreateProviderConfig:()=>IV,parseSettings:()=>TX,normalizeProviderId:()=>S4,isBuiltInProviderId:()=>xV,createProviderConfig:()=>yV,SapSettingsSchema:()=>NX,ReasoningSettingsSchema:()=>DX,ProviderSettingsSchema:()=>P2,ProviderProtocolSchema:()=>UX,ProviderIdSchema:()=>Y7,ProviderClientSchema:()=>FX,OcaSettingsSchema:()=>qX,ModelCatalogSettingsSchema:()=>AX,GcpSettingsSchema:()=>zX,BUILT_IN_PROVIDER_IDS:()=>kV,BUILT_IN_PROVIDER:()=>j7,AzureSettingsSchema:()=>OX,AwsSettingsSchema:()=>_X,AuthSettingsSchema:()=>LX});import*as Z1 from"@cline/llms";import{ReasoningLevelSchema as gh}from"@cline/shared";import{z as S}from"zod";var sz={};f(sz,{resolveProviderConfig:()=>W7,isPrivateModelCatalogProvider:()=>wV,getProviderConfig:()=>HX,getLiveModelsCatalog:()=>C2,clearPublicModelsCatalogCache:()=>kh,clearPrivateModelsCatalogCache:()=>bV,clearLiveModelsCatalogCache:()=>SV,OPENAI_COMPATIBLE_PROVIDERS:()=>J7,DEFAULT_MODELS_CATALOG_URL:()=>VX});import*as B0 from"@cline/llms";function MV($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let X of[Q.id,Q.name,Q.model])if(typeof X==="string"&&X.trim())return X.trim()}return""}).filter((Z)=>Z.length>0)}function Gh($,Z){let Q=MV($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let X=$,J=MV(X.data??X.models);if(J.length>0)return J;if(X.models&&typeof X.models==="object"&&!Array.isArray(X.models)){let j=Object.keys(X.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let W=X.providers?.[Z];if(W&&typeof W==="object"){let Y=MV(W.models??W);if(Y.length>0)return Y}return[]}async function XX($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return Gh(await Q.json(),Z)}function iz($){return $.replace(/\/+$/,"")}function JX($,Z,Q){let X=Q?.trim();if(!X)return;let J=$?.trim();if(!J||!Z?.trim())return X;try{let W=new URL(X),j=new URL(Z),Y=new URL(J);if(W.origin!==j.origin)return X;let V=iz(j.pathname),B=iz(Y.pathname);if(V&&W.pathname.startsWith(`${V}/`)){let K=W.pathname.slice(V.length);Y.pathname=`${B}${K}`}else Y.pathname=W.pathname;return Y.search=W.search,Y.hash=W.hash,Y.toString()}catch{return X}}function Hh($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function Uh($){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 Fh=Object.values(B0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:Hh($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),az=Object.fromEntries(Fh.map(($)=>[$.id,$]));function Lh($){return az[$]}function Dh(){return Object.fromEntries(Object.entries(az).filter(([,$])=>Uh($)))}function nz($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var VX="https://models.dev/api.json",_h=600000,oz=300000,zh=5000,YX=new Map,X7=new Map,RV=new Map,WX=new Map;async function Oh(){return B0.getGeneratedProviderModels()}async function Nh($,Z={},Q={},X={},J={},W={}){if($==="litellm")return B0.sortModelsByReleaseDate(X);let j=await Oh(),Y=B0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((G)=>j[G]??{}));if(Boolean(B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return B0.sortModelsByReleaseDate({...J,...W});if($==="openai-codex")return B0.sortModelsByReleaseDate({...Z,...B0.filterOpenAICodexModels(Q),...J,...W});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...W};let K=B0.sortModelsByReleaseDate({...V,...Z,...Q,...X,...J});if($==="cline")return B0.sortModelsByReleaseDate(B0.filterImageOutputModels({...B0.preferCanonicalModelIds(K,B0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...W}));return B0.sortModelsByReleaseDate({...K,...W})}function qh($,Z){let Q=B0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((X)=>Z[X]??{}))}function BX($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function PV($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function Ah($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function Th($,Z){return`${$}:${BX(Z.baseUrl)}:${Ah(PV(Z)??"")}`}async function KX($,Z,Q=zh){let X=new AbortController,J=setTimeout(()=>X.abort(),Q);try{return await fetch($,{...Z,signal:X.signal})}finally{clearTimeout(J)}}function h6($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function GX($,Z){let Q=["streaming","tools"];return h6(Q,"images",Boolean(Z.supportsImages)),h6(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),h6(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function Eh($,Z){let Q=await KX("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],W={};for(let j of J){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];W[Y]=GX(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return W}function rz($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function Mh($,Z){let Q=await KX("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],W={};for(let j of J){let Y=j.id?.trim();if(!Y)continue;W[Y]=GX(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}async function Rh($,Z){let X=`${(BX($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await KX(X,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let j=(await J.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let K=V.supported_features??[],G=V.supported_sampling_parameters??[],H=V.input_modalities??[],U=["streaming"];h6(U,"tools",K.includes("tools")),h6(U,"reasoning",K.includes("reasoning")),h6(U,"temperature",G.includes("temperature")),h6(U,"images",H.includes("image"));let F={input:rz(V.pricing?.prompt),output:rz(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:U,pricing:F.input!==void 0||F.output!==void 0?F:void 0,status:"active"}}return Y}function Ch($){let Z=BX($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function Ph($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function fh($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,X=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${X}`}async function wh($,Z){let Q=Ch($.baseUrl),X=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let W of Ph(Q))for(let[j,Y]of J)try{let V=await KX(W,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let K=(await V.json())?.data??[],G={};for(let H of K){let U=H.model_name?.trim(),L=H.litellm_params?.model?.trim()||U;if(!L)continue;let D=H.model_info,z=GX(L,{name:U??L,maxTokens:D?.max_output_tokens??D?.max_tokens,maxInputTokens:D?.max_input_tokens??D?.max_tokens,supportsImages:D?.supports_vision,supportsPromptCache:D?.supports_prompt_caching,supportsReasoning:D?.supports_reasoning});if(G[L]=z,U)G[U]={...z,id:U,name:U}}return G}X.push(`${new URL(W).pathname} (${j}): ${await fh(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);X.push(`${new URL(W).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${X.join("; ")}`)}var fV={baseten:Eh,hicap:Mh,litellm:wh,poolside:Rh};function wV($){return Object.hasOwn(fV,$)}var CV=new Map,jX=new Map;function Sh($,Z){return`${$}:${BX(Z.baseUrl)}`}async function bh($,Z,Q){let X=B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=JX(Q.baseUrl,X?.provider.baseUrl,X?.provider.modelsSourceUrl);if(!J)return{};let W=Z?.cacheTtlMs??oz,j=Sh($,Q),Y=Date.now(),V=CV.get(j);if(V&&V.expiresAt>Y)return V.data;let B=jX.get(j);if(B)return B;let K=XX(J,$).then((G)=>{let H=Object.fromEntries(G.map((U)=>[U,GX(U,{name:U})]));return CV.set(j,{data:H,expiresAt:Y+W}),H}).finally(()=>{jX.delete(j)});return jX.set(j,K),K}function kh(){CV.clear(),jX.clear()}async function xh($,Z){let Q=PV(Z);if(!Q)return{};let X=fV[$];if(!X)return{};return X(Z,Q)}function yh($,Z,Q){if(!Q)return!1;if(!fV[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(PV(Q))}async function Ih($,Z,Q){let X=Z?.cacheTtlMs??oz,J=Th($,Q),W=Date.now(),j=RV.get(J);if(j&&j.expiresAt>W)return j.data;let Y=WX.get(J);if(Y)return Y;let V=xh($,Q).then((B)=>{return RV.set(J,{data:B,expiresAt:W+X}),B}).finally(()=>{WX.delete(J)});return WX.set(J,V),V}async function hh($){return B0.fetchLiveProviderModels($,globalThis.fetch)}async function C2($={}){let Z=$.url??VX,Q=$.cacheTtlMs??_h,X=Date.now(),J=YX.get(Z);if(J&&J.expiresAt>X)return J.data;let W=X7.get(Z);if(W)return W;let j=hh(Z).then((Y)=>{return YX.set(Z,{data:Y,expiresAt:X+Q}),Y}).finally(()=>{X7.delete(Z)});return X7.set(Z,j),j}function SV($){if($){YX.delete($),X7.delete($);return}YX.clear(),X7.clear()}function bV(){RV.clear(),WX.clear()}function vh($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:nz(Q.capabilities)}]))}var J7=vh(Dh());function HX($){let Z=Lh($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:nz(Z.capabilities)}}async function W7($,Z,Q){let X=HX($);if(!X)return;try{let J=Z?.loadLatestOnInit?await C2(Z):void 0,W=J?qh($,J):{},j=Q&&yh($,Z,Q)?await Ih($,Z,Q):{},V=Boolean(B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:X.modelId,baseUrl:X.baseUrl}:Q,B=V?await bh($,Z,V).catch(()=>({})):{},K=await Nh($,X.knownModels,W,j,B,Q?.knownModels);return{...X,knownModels:K}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...X,knownModels:{}};return X}}var j7=Z1.BUILT_IN_PROVIDER,kV=Z1.BUILT_IN_PROVIDER_IDS,xV=Z1.isBuiltInProviderId,S4=Z1.normalizeProviderId,Y7=S.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),UX=S.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),FX=S.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),LX=S.object({apiKey:S.string().optional(),accessToken:S.string().optional(),refreshToken:S.string().optional(),expiresAt:S.number().int().positive().optional(),accountId:S.string().optional(),organizationId:S.string().optional(),organizationName:S.string().optional(),memberId:S.string().optional(),metadata:S.record(S.string(),S.unknown()).optional()}),DX=S.object({enabled:S.boolean().optional(),effort:gh.optional(),budgetTokens:S.number().int().positive().optional()}),_X=S.object({accessKey:S.string().optional(),secretKey:S.string().optional(),sessionToken:S.string().optional(),region:S.string().optional(),profile:S.string().optional(),authentication:S.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:S.boolean().optional(),useCrossRegionInference:S.boolean().optional(),useGlobalInference:S.boolean().optional(),endpoint:S.string().url().optional(),customModelBaseId:S.string().optional()}),zX=S.object({projectId:S.string().optional(),region:S.string().optional()}),OX=S.object({apiVersion:S.string().optional(),useIdentity:S.boolean().optional()}),NX=S.object({clientId:S.string().optional(),clientSecret:S.string().optional(),tokenUrl:S.string().url().optional(),resourceGroup:S.string().optional(),deploymentId:S.string().optional(),useOrchestrationMode:S.boolean().optional(),api:S.enum(["orchestration","foundation-models"]).optional(),defaultSettings:S.record(S.string(),S.unknown()).optional()}),qX=S.object({mode:S.enum(["internal","external"]).optional(),usePromptCache:S.boolean().optional()}),AX=S.object({loadLatestOnInit:S.boolean().optional(),loadPrivateOnAuth:S.boolean().optional(),url:S.string().url().optional(),cacheTtlMs:S.number().int().positive().optional(),failOnError:S.boolean().optional()}),P2=S.object({provider:Y7,apiKey:S.string().optional(),auth:LX.optional(),model:S.string().optional(),protocol:UX.optional(),client:FX.optional(),routingProviderId:Y7.optional(),maxTokens:S.number().int().positive().optional(),contextWindow:S.number().int().positive().optional(),baseUrl:S.string().url().optional(),headers:S.record(S.string(),S.string()).optional(),timeout:S.number().int().positive().optional(),reasoning:DX.optional(),aws:_X.optional(),gcp:zX.optional(),azure:OX.optional(),sap:NX.optional(),oca:qX.optional(),region:S.string().optional(),apiLine:S.enum(["china","international"]).optional(),capabilities:S.array(S.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:AX.optional()});function TX($){return P2.parse($)}function EX($){return P2.safeParse($)}function mh($){return $.protocol==="openai-responses"||$.client==="openai"}function T1($,Z={}){let Q=$.provider,X=S4(Q),J=Z.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,Y=J7[X],V=Object.assign({},...Z1.resolveProviderModelCatalogKeys(X).map((L)=>Z1.getGeneratedModelsForProvider(L))),B=Object.keys(V)[0],K=i8(X,$),G=$.baseUrl??Z1.resolveProviderApiLineBaseUrl(X,$.apiLine)??(X==="oca"?$.oca?.mode==="internal"?tQ:eQ:Y?.baseUrl),H=$.routingProviderId??(mh($)&&X!==j7.OPENAI_NATIVE?j7.OPENAI_NATIVE:void 0),U=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,F={providerId:Q,clientType:$.client,routingProviderId:H,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:U}:{},apiKey:K,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(F).filter(([L,D])=>D!==void 0))}function yV($){let Z=TX($);return T1(Z)}function IV($){let Z=EX($);if(Z.success)return{success:!0,config:T1(Z.data)};return{success:!1,error:Z.error}}var b4=P2;var MX=E1.object({providerId:E1.string().min(1),modelId:E1.string().min(1)}),RX=E1.object({voiceInput:MX.optional()}),CX=E1.object({settings:P2,updatedAt:E1.string().datetime(),tokenSource:E1.enum(["manual","oauth","migration"]).default("manual")}),k4=E1.object({version:E1.literal(1),lastUsedProvider:E1.string().min(1).optional(),modes:RX.default({}),providers:E1.record(E1.string(),CX)});function f2(){return{version:1,modes:{},providers:{}}}y1();var $O={};f($O,{InMemoryWorkspaceManager:()=>x4});import{upsertWorkspaceInfo as ch,WorkspaceManifestSchema as hV}from"@cline/shared";class x4{manifest;listeners=new Set;constructor($){this.manifest=hV.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await O8($);return this.manifest=ch(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=n1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=hV.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let X=await this.addWorkspacePath(Z);return this.manifest=hV.parse({...this.manifest,currentWorkspacePath:X.rootPath}),this.emit({type:"workspace_switched",workspace:X}),X}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=n1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}q0();import{createHash as uh}from"node:crypto";var ZO=new Set,QO=new Set;function dh($){return uh("sha256").update($).digest("hex")}function lh($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function XO($){if(!$.telemetry)return;let Z=dh($.rootPath),Q=$.rootCount??1;if(!ZO.has(Z))ZO.add(Z),GQ($.telemetry,{root_count:Q,vcs_types:lh($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!QO.has(Z)){QO.add(Z);let X=Error($.initError.message);X.name=$.initError.errorType||"Error",HQ($.telemetry,X,{fallback_to_single_root:!0,workspace_count:Q})}}function rh($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function ah($,Z,Q){if(Z.length>0)for(let W of Z)Q?.log(W.message,{severity:"warn"});if($.length===0)return;let X=$.slice(0,3).map(rh).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${X}${J}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)Q?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function nh($){let Z=$?.["X-CLIENT-TYPE"]?.trim();if(!Z)return;let Q=$?.["X-CLIENT-VERSION"]?.trim();return{name:Z,...Q?{version:Q}:{}}}function oh($,Z){let Q=typeof $.thinking==="boolean",X=typeof $.reasoningEffort==="string";if(!Q&&!X)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...X?{effort:$.reasoningEffort}:{}}}function vV($,Z){return ih($,Z)}function sh($,Z,Q,X,J,W){let j=X.getProviderSettings($.providerId),Y=J||j?.modelCatalog?{...J??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=ph({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:X0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:Q2,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),K={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:oh($,j?.reasoning),modelCatalog:Y},G={...T1(K),...V??{}};if(B)G.headers=B;if($.knownModels)G.knownModels=$.knownModels;if($.extensionContext)G.extensionContext=$.extensionContext;let U=$.fetch??G.fetch??W;if(U)G.fetch=U;return G}async function JO($){let{input:Z,sessionId:Q,providerSettingsManager:X,defaultTelemetry:J,defaultLogger:W,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:K,createSubAgentLifecycleCallbacks:G,createSpawnTool:H,localRuntime:U,readSessionMetadata:F,writeSessionMetadata:L}=$,D=I$(Z.config),{modelCatalogDefaults:z,userInstructionService:_,configExtensions:O,onTeamRestored:A,...q}=U??{},N=Object.keys(q).length>0?q:void 0,{workspaceInfo:T,workspaceMetadata:C,gitState:r,durationMs:y,vcsType:x,initError:E}=await kW(D),g=N?.extensionContext,b=g?.client?void 0:nh(Z.config.headers),o={...g??{},...b?{client:b}:{},workspace:{...T,...g?.workspace??{}},session:{...g?.session??{},sessionId:Q},logger:g?.logger??N?.logger??W,telemetry:g?.telemetry??N?.telemetry??J};XO({telemetry:o.telemetry,rootPath:T.rootPath,workspaceInfo:T,rootCount:1,vcsType:x,durationMs:y,initError:E,featureFlagEnabled:!0});let k=vV(O,"hooks")?w4({cwd:Z.config.cwd,workspacePath:D,rootSessionId:Q,logger:N?.logger,workspaceInfo:T}):void 0,I=s_(N?.hooks)?void 0:f4({rootSessionId:Q,workspacePath:D,workspaceInfo:T}),d=I6([N?.hooks,I]),Z0;if(vV(O,"plugins"))try{Z0=await T4({pluginPaths:N?.pluginPaths,workspacePath:D,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:T,session:o.session,client:o.client,user:o.user,logger:o.logger,telemetry:o.telemetry,automation:o.automation}),ah(Z0.failures,Z0.warnings,N?.logger)}catch(a0){let p2=a0 instanceof Error?a0.message:String(a0);N?.logger?.log?.(`plugin loading failed; continuing without plugins (${p2})`)}let G0=rY(k?[k]:void 0,rY(N?.extensions,kQ(Z0?.extensions))),G1=vV(O,"plugins")?Q$(Z0?.pluginPaths??[]):void 0,r0={...Z.config,...N??{},sessionId:Q,hooks:d,extensions:G0,extensionContext:o,telemetry:o.telemetry,logger:o.logger},_$=sh(r0,Q,Z.source,X,z,V),H1=I6([r0.hooks,r0.checkpoint?.enabled===!0?xz({cwd:r0.cwd,sessionId:Q,logger:r0.logger,createCheckpoint:r0.checkpoint?.createCheckpoint,readSessionMetadata:F,writeSessionMetadata:L}):void 0]),c0={...r0,providerConfig:_$,workspaceMetadata:C,hooks:H1},t0=Z.toolPolicies??r0.toolPolicies??Y,n=i0(j,Z.capabilities),U1=n?.requestToolApproval,u=n?.toolExecutors,F0=G?.(c0),k0=new x4({currentWorkspacePath:T.rootPath,workspaces:{[T.rootPath]:T}});return{effectiveInput:Z,config:c0,providerConfig:_$,workspaceMetadata:C,workspaceInfo:T,gitState:r,extensions:G0,hooks:H1,toolPolicies:t0,requestToolApproval:U1,pluginSandboxShutdown:Z0?.shutdown,runtimeBuilderInput:{config:c0,hooks:H1,extensions:G0,onTeamEvent:K,createSpawnTool:H,onTeamRestored:A,onSubAgentEvent:F0?.onSubAgentEvent,onSubAgentStart:F0?.onSubAgentStart,onSubAgentEnd:F0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:G1,configExtensions:O,toolExecutors:u,toolPolicies:t0,workspaceManager:k0,logger:c0.logger,telemetry:c0.telemetry,requestToolApproval:U1}}}import{existsSync as PX,mkdirSync as th,readdirSync as eh,rmdirSync as $v,rmSync as Zv,unlinkSync as Qv}from"node:fs";import{dirname as WO,join as V7}from"node:path";function D0(){return new Date().toISOString()}function B7($){if(!$||!PX($))return;try{Qv($)}catch{}}function Xv($){let Z=L4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=u9($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class gV{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return V7(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!PX(Z))th(Z,{recursive:!0});return Z}sessionMessagesPath($){return V7(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return V7(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return V7(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!PX(Z)){Z=WO(Z);continue}try{if(eh(Z).length>0)break;$v(Z)}catch{break}Z=WO(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!PX($))return;try{Zv($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:X,fileStem:J}=Xv($),W=this.sessionArtifactsDir(X);return{messagesPath:V7(W,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as Jv}from"@cline/shared/storage";q0();function jO($,Z,Q,X,J){if(Q)FQ($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else UQ($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});Wv($.telemetry,{workspacePath:X})}function Wv($,Z){let Q=Jv("Hooks"),X=M2(Z.workspacePath),J=new Map;for(let W of X){let j=W.hookEventName??"unknown",Y=J.get(j)??{global:0,workspace:0};if(W.path===Q||W.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;J.set(j,Y)}for(let[W,j]of J.entries())EQ($,W,j.global,j.workspace)}function YO($,Z){for(let Q of Z.mentions)AQ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)NQ($,"file",Q.length);for(let Q of Z.ignoredMentions)qQ($,"file","not_found",Q)}var oT={};f(oT,{ProviderSettingsManager:()=>H$});import{chmodSync as XE,existsSync as SG,mkdirSync as Gn,readFileSync as Hn,renameSync as Un,rmSync as Fn,writeFileSync as Ln}from"node:fs";import{basename as JE,dirname as bG}from"node:path";import{resolveProviderSettingsPath as Dn}from"@cline/shared/storage";var M={};f(M,{writeModelsFileSync:()=>zZ,writeHubDiscovery:()=>I8,writeGlobalSettings:()=>u0,withHubStartupLock:()=>h8,watchManagedHubBuildMismatch:()=>DF,verifyHubConnection:()=>e0,updateMcpSettingsFileSync:()=>M1,updateMcpSettingsFile:()=>m4,updateMcpServerOAuthStateAsync:()=>u6,updateMcpServerOAuthState:()=>P7,updateLocalProvider:()=>nJ,uninstallPlugin:()=>KZ,uninstallMcpServer:()=>HK,uninstallMarketplaceSkill:()=>SJ,uninstallMarketplacePlugin:()=>bJ,uninstallMarketplaceMcpServerFromSettings:()=>fJ,uninstallMarketplaceEntry:()=>CK,truncateNotificationBody:()=>vZ,truncateCommandOutput:()=>H6,trimMessagesBeforeUserRun:()=>t7,transcribeLocalAudio:()=>sJ,transcribeConfiguredVoiceInput:()=>sK,toggleDisabledTool:()=>wQ,toTeamProgressLifecycleEvent:()=>$5,toProviderConfig:()=>T1,toHubStatusUrl:()=>jj,toHubHealthUrl:()=>gQ,toHookConfigFileName:()=>$7,syncStoredProviderRegistration:()=>mK,syncPluginMcpServersToSettings:()=>VZ,summarizeUsageFromMessages:()=>_4,stripUtf8Bom:()=>Vn,stopLocalHubServerGracefully:()=>Cj,startLocalOAuthServer:()=>m1,startHubWebSocketServer:()=>lZ,startHubServer:()=>$E,startClineDeviceAuth:()=>cj,splitCoreSessionConfig:()=>p5,spawnDetachedHubServerWithRetry:()=>_j,spawnDetachedHubServer:()=>Dj,setTuiThemeGlobally:()=>AU,setToolAutoApproveGlobally:()=>TU,setTelemetryOptOutGlobally:()=>GU,setSdkLogger:()=>xj,setPlanActModeGlobally:()=>OU,setModelToolEnabledGlobally:()=>nW,setMcpServerDisabled:()=>m6,setDisabledTools:()=>oW,setDisabledPlugin:()=>SQ,setCompactionStrategyGlobally:()=>LU,setCompactionModeGlobally:()=>_U,setAutoUpdateEnabledGlobally:()=>UU,setActiveConnectorSupervisor:()=>KK,serializeAgendaTaskSpec:()=>JW,sendHubCommand:()=>LF,sdkDebug:()=>j0,saveVoiceInputSettings:()=>oK,saveProviderOAuthCredentials:()=>W6,saveLocalProviderSettings:()=>eK,saveLocalProviderOAuthCredentials:()=>XG,sanitizeSessionToken:()=>C6,safeParseSettings:()=>EX,safeCreateProviderConfig:()=>IV,runSubprocessEvent:()=>v$,runHook:()=>x6,reviveTeamStateDates:()=>b3,retireDiscoveredHub:()=>Q6,restartLocalHubIfIdleAfterStartupTimeout:()=>dQ,resolveWorkspaceHubOwnerContext:()=>$F,resolveWorkflowsConfigSearchPaths:()=>N7,resolveToolClientType:()=>G4,resolveSkillsConfigSearchPaths:()=>z7,resolveSharedHubOwnerContext:()=>j1,resolveSessionBackend:()=>dB,resolveRulesConfigSearchPaths:()=>O7,resolveProviderConfig:()=>W7,resolveProviderApiKeyFromSettings:()=>aj,resolveProductionHubOwnerContext:()=>z1,resolvePluginSkillDirectoriesFromPaths:()=>Q$,resolvePluginConfigSearchPaths:()=>S6,resolveModelsRegistryPath:()=>F$,resolveModelToolSettings:()=>aW,resolveMessageDisplayRole:()=>sj,resolveMcpServerRegistrations:()=>R1,resolveMcpServerRegistration:()=>C7,resolveMarketplaceMcpServerName:()=>HZ,resolveLocalClineAuthToken:()=>WG,resolveHubUrl:()=>Pj,resolveHubRunQueuePath:()=>PG,resolveHubOwnerContext:()=>R$,resolveHubInstanceLockPath:()=>DW,resolveHubEventLogPath:()=>fG,resolveHubEndpointOptions:()=>C$,resolveHubBuildIdentity:()=>a5,resolveHubBuildId:()=>_1,resolveHubBuildEpochMs:()=>i5,resolveHooksConfigSearchPaths:()=>t9,resolveDisabledToolNames:()=>s1,resolveDisabledPluginPaths:()=>g5,resolveDefaultMcpSettingsPath:()=>K0,resolveDefaultHubPort:()=>v8,resolveDefaultHubPathname:()=>Gj,resolveDefaultHubHost:()=>Kj,resolveCoreSelectedToolIds:()=>y3,resolveCoreDistinctId:()=>W1,resolveCoreDeviceId:()=>C8,resolveCompatibleLocalHubUrl:()=>$9,resolveClineDir:()=>nU,resolveClineDataDir:()=>$6,resolveAndLoadAgentPlugins:()=>T4,resolveAgentPluginPaths:()=>h$,resetClineRecommendedModelsCacheForTests:()=>dK,requestHubShutdown:()=>e5,requestHubDrain:()=>cQ,requestDesktopToolApproval:()=>WK,removePluginMcpServersFromSettings:()=>BZ,removePersistedConnectorConnection:()=>YK,rememberRecoverableLocalHubUrl:()=>J2,registerRemoteConfigSessionBlobUpload:()=>UJ,registerMcpServersFromSettingsFile:()=>d6,registerDisposable:()=>jn,refreshProviderModelsFromSource:()=>$G,refreshOpenAICodexToken:()=>sQ,refreshOcaToken:()=>Z3,refreshClineToken:()=>nQ,reconnectPersistedConnectors:()=>VK,readTuiThemeGlobally:()=>qU,readToolAutoApproveGlobally:()=>NU,readSupersededHubDiscovery:()=>Lj,readSessionCheckpointHistory:()=>$8,readRemoteConfigSessionBlobUploadMetadata:()=>oB,readPlanActModeGlobally:()=>zU,readModelsFileSync:()=>D5,readHubDiscovery:()=>R0,readGlobalSettings:()=>W0,readCompactionStrategyGlobally:()=>FU,readCompactionModeGlobally:()=>DU,readBearerToken:()=>dZ,projectSessionMessagesForDisplay:()=>$Z,projectSessionCompactionState:()=>V2,probeProcessStartTokenAsync:()=>G2,probeProcessStartToken:()=>L3,probeMcpServerConnection:()=>rX,probeHubServer:()=>h1,probeHubConnection:()=>FF,prewarmFileIndex:()=>q3,prewarmDetachedHubServer:()=>mQ,prepareRemoteConfigCoreIntegration:()=>tB,persistConnectorConnection:()=>jK,peekClineRecommendedModels:()=>RZ,parseWorkflowConfigFromMarkdown:()=>_7,parseUserCommandEnvelope:()=>Wn,parseSkillConfigFromMarkdown:()=>L7,parseSettings:()=>TX,parseSessionCompactionState:()=>c1,parseRuleConfigFromMarkdown:()=>D7,parsePluginSource:()=>cJ,parseMcpServerRegistration:()=>u4,parseMcpInstallArgs:()=>YZ,parseHookEventPayload:()=>C4,parseConfiguredAgentConfig:()=>l7,parseAgendaTaskSpec:()=>fZ,normalizeWorkspacePath:()=>n1,normalizeUserInput:()=>Jn,normalizeSdkError:()=>Xn,normalizeRuntimeCapabilities:()=>i0,normalizeProviderId:()=>S4,normalizeOAuthProvider:()=>ZG,normalizeHubWebSocketUrl:()=>W2,normalizeAgendaTaskLocation:()=>L$,noopBasicLogger:()=>Qn,migrateLegacyProviderSettings:()=>PZ,mergeRulesForSystemPrompt:()=>z8,mergeAgentHooks:()=>I6,marketplaceEntryKey:()=>RK,markLocalProviderEnabled:()=>aK,makeTeamTaskSubSessionId:()=>c9,makeSubSessionId:()=>F4,loginOpenAICodex:()=>X9,loginOcaOAuth:()=>Y9,loginLocalProvider:()=>QG,loginClineOAuth:()=>Z9,loginAndSaveProviderOAuthCredentials:()=>B9,loginAndSaveLocalProviderOAuthCredentials:()=>JG,localHubHasNoActiveSessions:()=>g8,loadOpenTelemetryAdapter:()=>Ea,loadMcpSettingsFile:()=>g6,loadLlmsConfigFromFile:()=>MG,loadConfiguredAgentConfigs:()=>s4,loadAgentPluginsFromPathsWithDiagnostics:()=>w6,loadAgentPluginsFromPaths:()=>u3,loadAgentPluginFromPath:()=>n9,listSessionHistoryFromBackend:()=>TB,listPluginToolsWithDiagnostics:()=>r4,listPluginTools:()=>WB,listMcpServerOAuthStatuses:()=>f7,listLocalProviders:()=>nK,listHookConfigFiles:()=>M2,listActiveConnectors:()=>X8,isUserRunMessage:()=>tj,isUnusableSessionError:()=>Zj,isToolDisabledGlobally:()=>EU,isTelemetryOptedOutGlobally:()=>fQ,isSkillsToolAvailable:()=>k3,isSessionNotFoundError:()=>t1,isRuleEnabled:()=>QQ,isPrivateModelCatalogProvider:()=>wV,isPluginDisabledGlobally:()=>RU,isOfficialPluginSlug:()=>mJ,isOAuthProvider:()=>Y2,isModelToolEnabledGlobally:()=>R8,isMarketplaceSkillInstalled:()=>wJ,isManagedHubReusable:()=>X2,isLocalHubOrigin:()=>wG,isLocalHubHostName:()=>_W,isHubReconnectableTransportError:()=>Tj,isHubLockHeldError:()=>LW,isHubCommandTimeoutError:()=>uQ,isDiscoveryFilePresent:()=>tU,isDedicatedTranscriptionModel:()=>K8,isCoreBuiltinToolAvailable:()=>M6,isClinePassLimitMessage:()=>da,isClinePassLimitError:()=>ua,isClineOrgIndividualInferenceSubscriptionMessage:()=>ca,isClineOrgIndividualInferenceSubscriptionError:()=>ma,isClineNotSubscribedMessage:()=>ga,isClineNotSubscribedError:()=>va,isClineModelNotFoundMessage:()=>ha,isClineFreeModelLimitMessage:()=>Ia,isClineFreeModelLimitError:()=>ya,isClineAccountActionRequest:()=>fX,isBuiltInProviderId:()=>xV,isAutoUpdateEnabledGlobally:()=>HU,installPlugin:()=>kK,installMcpServer:()=>GK,identifyAccount:()=>A$,hubHasLiveSessions:()=>s5,hashSecret:()=>d0,hasMcpSettingsFile:()=>c$,hasActiveHubSessions:()=>Rj,getValidOpenAICodexCredentials:()=>J9,getValidOcaCredentials:()=>V9,getValidClineCredentials:()=>Q9,getUserRunSpan:()=>$$,getProviderOAuthCredentialsFromSettings:()=>K9,getProviderConfigFields:()=>jG,getProviderConfig:()=>HX,getProviderAuthStorageId:()=>rj,getProviderAuthHandler:()=>C0,getProcessStartTokenAsync:()=>DY,getProcessStartToken:()=>LY,getPluginDisplayName:()=>s3,getPersistedProviderApiKey:()=>i8,getPersistedConnectorConnection:()=>G5,getMcpServerOAuthStatus:()=>d4,getMcpServerOAuthState:()=>c6,getMarketplaceSkillCandidates:()=>UZ,getManagedHubCompatibility:()=>Z6,getLocalProviderModels:()=>z5,getLiveModelsCatalog:()=>C2,getGlobalMarketplaceSkillPaths:()=>FZ,getFileIndex:()=>b$,getCurrentContextSize:()=>sY,getCoreHeadlessToolNames:()=>g9,getCoreDefaultEnabledToolIds:()=>x3,getCoreBuiltinToolCatalog:()=>A2,getCoreAcpToolNames:()=>I3,getClinePassSubscriptionUrl:()=>xa,getClineOrgIndividualInferenceSubscriptionMessage:()=>ka,getClineNotSubscribedMessage:()=>ba,getClineDefaultSystemPrompt:()=>la,getCachedClineRecommendedModels:()=>MZ,getActiveConnectorSupervisor:()=>jZ,generateWorkspaceInfoWithDiagnostics:()=>E5,generateWorkspaceInfo:()=>O8,formatRulesForSystemPrompt:()=>_8,formatProviderOAuthApiKey:()=>nj,formatDisplayUserInput:()=>Zn,findInstalledGlobalMarketplaceSkillName:()=>LZ,findCheckpointForRun:()=>J5,filterExtensionToolRegistrations:()=>kQ,filterDisabledTools:()=>T$,filterDisabledPluginPaths:()=>bQ,fetchClineRecommendedModels:()=>iJ,extractClinePassLimitMessage:()=>Sa,extractClineFreeModelLimitResetTime:()=>wa,executeTodoTaskOperation:()=>yQ,executeScheduleOperation:()=>h5,executeClineAccountAction:()=>wX,ensureHubWebSocketServer:()=>zW,ensureHubServer:()=>ZE,ensureDetachedHubServer:()=>t5,ensureCustomProvidersLoadedSync:()=>qZ,ensureCustomProvidersLoaded:()=>AZ,ensureCompatibleLocalHubUrl:()=>X6,ensureChatWorkspace:()=>S9,ensureAgendaTaskSchema:()=>jW,enrichPromptWithMentions:()=>Q4,emptyWorkspaceManifest:()=>ta,emptyStoredProviderSettings:()=>f2,discoverPluginModulePaths:()=>b6,disablePluginMcpServersInSettings:()=>DK,disableConnectorAutostart:()=>JZ,deriveSubsessionStatus:()=>d9,deleteLocalProvider:()=>oJ,defineLlmsConfig:()=>EG,createWorkflowsConfigDefinition:()=>T7,createUserInstructionConfigService:()=>w2,createToolPoliciesWithPreset:()=>T3,createTool:()=>sa,createTeamName:()=>DJ,createTasksTool:()=>x8,createTasksPromptExtension:()=>y8,createSubprocessHooks:()=>ZX,createSpawnAgentTool:()=>q2,createSkillsConfigDefinition:()=>q7,createShellTool:()=>f9,createShellExecutor:()=>U6,createSessionHost:()=>X5,createSessionCompactionState:()=>r8,createRuntimeHost:()=>X5,createRulesConfigDefinition:()=>A7,createRestoredCheckpointMetadata:()=>s7,createRemoteConfigSessionMessagesArtifactUploader:()=>sB,createProviderConfig:()=>yV,createOpenTelemetryTelemetryService:()=>u5,createOAuthClientCallbacks:()=>y4,createMcpTools:()=>p4,createLocalHubScheduleRuntimeHandlers:()=>tT,createLlmsSdk:()=>CG,createInitialAccumulatedUsage:()=>g0,createInMemoryHubOwnerContext:()=>oU,createHubServerUrl:()=>v1,createHubAuthToken:()=>hQ,createHookConfigFileHooks:()=>Q7,createHookConfigFileExtension:()=>w4,createHookAuditHooks:()=>f4,createEditorExecutor:()=>_6,createDisabledMcpToolPolicy:()=>x7,createDisabledMcpToolPolicies:()=>oX,createDelegatedAgentConfigProvider:()=>O2,createDelegatedAgent:()=>N2,createDefaultToolsWithPreset:()=>E3,createDefaultTools:()=>L2,createDefaultShellExecutor:()=>x9,createDefaultMcpServerClientFactory:()=>p6,createDefaultExecutors:()=>J4,createCoreSettingsService:()=>a6,createCoreSessionSnapshot:()=>W$,createContributionRegistry:()=>oa,createContextCompactionPrepareTurn:()=>_9,createConfiguredTelemetryService:()=>E$,createConfiguredTelemetryHandle:()=>w8,createConfiguredStreamingTranscriptionSession:()=>tK,createConfiguredAgentTools:()=>t4,createCompactionStateAwarePrepareTurn:()=>z9,createClineTelemetryServiceMetadata:()=>na,createClineTelemetryServiceConfig:()=>aa,createCheckpointComparePlan:()=>YJ,createBuiltinTools:()=>R6,createApplyPatchExecutor:()=>D6,createAgentTeamsTools:()=>E6,createAgentRuntime:()=>Kn,createAgentHooksExtension:()=>E4,countUserRunMessages:()=>B2,connectToHub:()=>lQ,computePatchChanges:()=>$4,completeClineDeviceAuth:()=>uj,compareHubBuilds:()=>r5,compareCheckpointToWorkspace:()=>e7,collectPluginMcpOAuthCandidates:()=>uJ,clearPrivateModelsCatalogCache:()=>bV,clearLiveModelsCatalogCache:()=>SV,clearHubDiscoveryIfOwned:()=>vQ,clearHubDiscovery:()=>I1,cleanupConnectorInstanceViaCli:()=>BK,checkManagedHubBuildMismatch:()=>fj,captureWorkspacePathResolved:()=>lH,captureWorkspaceInitialized:()=>GQ,captureWorkspaceInitError:()=>HQ,captureToolUsage:()=>o1,captureTokenUsage:()=>LQ,captureTaskRestarted:()=>FQ,captureTaskCreated:()=>UQ,captureTaskCompleted:()=>x5,captureSubagentExecution:()=>y5,captureSkillUsed:()=>_Q,captureSdkError:()=>ra,captureProviderConfigured:()=>iH,captureProviderApiError:()=>aH,captureModeSwitch:()=>DQ,captureMistakeLimitReached:()=>OQ,captureMentionUsed:()=>NQ,captureMentionSearchResults:()=>AQ,captureMentionFailed:()=>qQ,captureHookDiscovery:()=>EQ,captureExtensionActivated:()=>dH,captureDiffEditFailure:()=>zQ,captureConversationTurnEvent:()=>A8,captureCompactionSkipped:()=>RQ,captureCompactionExecuted:()=>MQ,captureAuthSucceeded:()=>N$,captureAuthStarted:()=>O$,captureAuthRefreshSoftFailure:()=>k5,captureAuthLoggedOut:()=>e$,captureAuthFailed:()=>q$,captureAgentUnexpectedReasoningTokens:()=>uH,captureAgentTeamCreated:()=>TQ,captureAgentCreated:()=>$2,buildWorkspaceMetadata:()=>M5,buildTeamProgressSummary:()=>e4,buildSdkErrorProperties:()=>pa,buildRemoteConfigSessionBlobUploadMetadata:()=>GJ,buildMcpInstallTransport:()=>EJ,buildDelegatedAgentConfig:()=>A6,buildConnectorChildEnv:()=>J8,buildConnectionUpdate:()=>hY,buildConfiguredAgentToolName:()=>p7,buildConfiguredAgentToolDescriptors:()=>i7,buildCheckpointWorkspaceDiff:()=>VJ,bootstrapAgentTeams:()=>K4,authorizeMcpServerOAuth:()=>iX,augmentMcpTimeoutError:()=>u$,applyClineFeaturedModels:()=>_5,agendaTaskSpecToCreateInput:()=>WW,addLocalProvider:()=>rK,accumulateUsageTotals:()=>h0,__test__:()=>jF,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>F7,UnifiedConfigFileWatcher:()=>v6,ToolPresets:()=>A1,TodoTaskInputSchema:()=>b8,TelemetryService:()=>P8,TelemetryLoggerSink:()=>c5,TasksToolInputSchema:()=>l5,TEAM_TOOL_NAMES:()=>B4,TASKS_TOOL_NAME:()=>Z2,TASKS_SYSTEM_PROMPT_RULE:()=>d5,SubprocessSandbox:()=>N4,StructuredCommandInputSchema:()=>K6,StoredProviderSettingsSchema:()=>k4,StoredProviderSettingsEntrySchema:()=>CX,StoredProviderModesSchema:()=>RX,SqliteTeamStore:()=>Z8,SqliteSessionStore:()=>V$,SqliteAgendaTaskStore:()=>kZ,SessionVersioningService:()=>m2,SessionVersioningError:()=>X1,SessionSource:()=>X0,SessionNotFoundError:()=>M$,ScheduledTaskInputSchema:()=>n2,SapSettingsSchema:()=>NX,STOP_SIGTERM_TIMEOUT_MS:()=>qJ,STOP_SIGKILL_TIMEOUT_MS:()=>AJ,SKILLS_CONFIG_DIRECTORY_NAME:()=>U7,SESSION_STATUSES:()=>m9,SESSION_NOT_FOUND_ERROR_CODE:()=>t2,SDK_ERROR_TELEMETRY_EVENT:()=>Yn,RuntimeOAuthTokenManager:()=>K5,RpcClineAccountService:()=>G7,RemoteRuntimeHost:()=>o4,ReasoningSettingsSchema:()=>DX,RULES_CONFIG_DIRECTORY_NAME:()=>hX,RESTART_MAX_DELAY_MS:()=>zJ,RESTART_GIVE_UP_AFTER:()=>OJ,RESTART_COUNTER_RESET_MS:()=>NJ,RESTART_BASE_DELAY_MS:()=>_J,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>HJ,ProviderSettingsSchema:()=>P2,ProviderSettingsManager:()=>H$,ProviderProtocolSchema:()=>UX,ProviderIdSchema:()=>Y7,ProviderClientSchema:()=>FX,PatchActionType:()=>L6,PATCH_MARKERS:()=>e,OpenTelemetryProvider:()=>f8,OcaSettingsSchema:()=>qX,OPENAI_COMPATIBLE_PROVIDERS:()=>J7,OAuthReauthRequiredError:()=>Q8,NodeHubClient:()=>g1,NoOpFeatureFlagsProvider:()=>e6,NativeHubTransportAdapter:()=>uZ,ModelCatalogSettingsSchema:()=>AX,McpSettingsUpdateSkippedError:()=>g4,McpSettingsMutatorPurityError:()=>S2,McpSettingsLockTimeoutError:()=>b2,McpOAuthClientChangedError:()=>X$,MAX_COMMAND_OUTPUT_CHARS:()=>u1,LocalRuntimeHost:()=>G$,Llms:()=>Ma,InMemoryWorkspaceManager:()=>x4,InMemoryMcpManager:()=>i6,HubUIClient:()=>bj,HubTransportError:()=>$1,HubSessionClient:()=>Sj,HubServerTransport:()=>A5,HubScheduleService:()=>q8,HubScheduleCommandService:()=>D8,HubRuntimeHost:()=>d$,HubRunQueue:()=>gZ,HubRunAdmissionRejectedError:()=>q5,HubLockHeldError:()=>FW,HubInstanceLock:()=>u2,HubEventLogStore:()=>mZ,HubCommandError:()=>m8,HookEventPayloadSchema:()=>$X,HookEventNameSchema:()=>e3,HookConfigFileName:()=>M4,HUB_LOCK_HELD_EXIT_CODE:()=>eT,HOOK_CONFIG_FILE_EVENT_MAP:()=>e9,HOOKS_CONFIG_DIRECTORY_NAME:()=>t3,GlobalSettingsSchema:()=>v5,GcpSettingsSchema:()=>zX,FileTeamPersistenceStore:()=>ZW,FeatureFlagsService:()=>t6,FeatureFlagDefaultValue:()=>$n,FEATURE_FLAGS:()=>ea,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>EZ,DefaultToolNames:()=>O0,DefaultRuntimeBuilder:()=>B5,DefaultLlmsSdk:()=>hZ,DEFAULT_MODELS_CATALOG_URL:()=>VX,DEFAULT_MCP_CONNECT_TIMEOUT_MS:()=>k7,DEFAULT_HUB_PORT:()=>Vj,DEFAULT_HUB_PATHNAME:()=>Bj,DEFAULT_HUB_HOST:()=>Yj,CoreSettingsService:()=>k2,CoreSessionService:()=>K$,ContributionRegistry:()=>ia,ConnectorSupervisor:()=>TJ,CommandExitError:()=>w$,ClinePassLimitError:()=>fa,ClineOrgIndividualInferenceSubscriptionError:()=>Pa,ClineNotSubscribedError:()=>Ca,ClineFreeModelLimitError:()=>Ra,ClineCore:()=>ZZ,ClineAccountService:()=>K7,ChatViewStateSchema:()=>AG,ChatSummarySchema:()=>UW,ChatSessionStatusSchema:()=>BW,ChatSessionConfigSchema:()=>VW,ChatMessageSchema:()=>HW,ChatMessageRoleSchema:()=>KW,ChatMessageImageSchema:()=>GW,CORE_TELEMETRY_EVENTS:()=>p,CORE_BUILD_VERSION:()=>TG,BrowserWebSocketHubAdapter:()=>cZ,BUILT_IN_PROVIDER_IDS:()=>kV,BUILT_IN_PROVIDER:()=>j7,AzureSettingsSchema:()=>OX,AwsSettingsSchema:()=>_X,AuthSettingsSchema:()=>LX,AgentTeamsRuntime:()=>s6,AgentTeam:()=>Q5,Agent:()=>Bn,AgendaTaskSpecFileStore:()=>wZ,AgendaTaskRevisionConflictError:()=>O5,AgendaTaskManager:()=>IZ,ALL_DEFAULT_TOOL_NAMES:()=>o$,ADOPTED_POLL_INTERVAL_MS:()=>WZ});R(M,FJ0);import*as Ma from"@cline/llms";import{ClineFreeModelLimitError as Ra,ClineNotSubscribedError as Ca,ClineOrgIndividualInferenceSubscriptionError as Pa,ClinePassLimitError as fa,extractClineFreeModelLimitResetTime as wa,extractClinePassLimitMessage as Sa,getClineNotSubscribedMessage as ba,getClineOrgIndividualInferenceSubscriptionMessage as ka,getClinePassSubscriptionUrl as xa,isClineFreeModelLimitError as ya,isClineFreeModelLimitMessage as Ia,isClineModelNotFoundMessage as ha,isClineNotSubscribedError as va,isClineNotSubscribedMessage as ga,isClineOrgIndividualInferenceSubscriptionError as ma,isClineOrgIndividualInferenceSubscriptionMessage as ca,isClinePassLimitError as ua,isClinePassLimitMessage as da}from"@cline/llms";import{buildClineSystemPrompt as la,buildSdkErrorProperties as pa,ContributionRegistry as ia,captureSdkError as ra,createClineTelemetryServiceConfig as aa,createClineTelemetryServiceMetadata as na,createContributionRegistry as oa,createTool as sa,emptyWorkspaceManifest as ta,FEATURE_FLAGS as ea,FeatureFlagDefaultValue as $n,formatDisplayUserInput as Zn,noopBasicLogger as Qn,normalizeSdkError as Xn,normalizeUserInput as Jn,parseUserCommandEnvelope as Wn,registerDisposable as jn,SDK_ERROR_TELEMETRY_EVENT as Yn,stripUtf8Bom as Vn}from"@cline/shared";import"@cline/shared/storage";var BO={};f(BO,{isClineAccountActionRequest:()=>fX,executeClineAccountAction:()=>wX,RpcClineAccountService:()=>G7,ClineAccountService:()=>K7});function jv($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function VO($,Z,Q){let X=jv(Q);if(X)return X;let J=Z.trim();if(J){let W=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class K7{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let X=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(X)return X;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let X=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,W=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...X??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(VO(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(VO(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(W)}}}function fX($){return $.action==="clineAccount"}async function wX($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class G7{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var KO={};f(KO,{createOAuthClientCallbacks:()=>y4});function y4($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((X)=>{$.onOpenUrlError?.({url:Z,error:X})})}catch(X){$.onOpenUrlError?.({url:Z,error:X})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var lq={};f(lq,{ClineCore:()=>ZZ});function GO($){if($===!0)return{};if(!$)return;return $}function HO($){if($==="user")return"global";return $}class mV{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function UO($){let{host:Z}=$;return{async startSession(Q){let X=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=$.getExtensionContext(),W=await Z.startSession({source:h3(J?.client)??X0.CORE,mode:"automation",sessionMetadata:v0(void 0,{mode:"automation",trigger:Q.source}),interactive:!1,config:{providerId:S4(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:X,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Bv(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:J,configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,X){let J=await Z.runTurn({sessionId:Q,prompt:X.prompt,userImages:X.attachments?.userImages,userFiles:X.attachments?.userFiles?.map((W)=>W.content),delivery:X.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:Vv(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function SX($){let Z=Yv($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),X=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!X&&!J&&!W)return $.context;return{...$.context??{},...Q?{client:Q}:{},...X?{user:X}:{},...J?{logger:J}:{},...W?{telemetry:W}:{},...Z?{automation:Z}:{}}}function Yv($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function Vv($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Bv($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var AN={};f(AN,{createCoreSettingsService:()=>a6,CoreSettingsService:()=>k2});import{existsSync as a4,readdirSync as Wm,readFileSync as jm}from"node:fs";import{basename as I7,dirname as jB,extname as YB,isAbsolute as LN,join as DN,relative as _N,resolve as VB}from"node:path";var RO={};f(RO,{resolveWorkflowsConfigSearchPaths:()=>N7,resolveSkillsConfigSearchPaths:()=>z7,resolveRulesConfigSearchPaths:()=>O7,parseWorkflowConfigFromMarkdown:()=>_7,parseSkillConfigFromMarkdown:()=>L7,parseRuleConfigFromMarkdown:()=>D7,createWorkflowsConfigDefinition:()=>T7,createUserInstructionConfigService:()=>w2,createSkillsConfigDefinition:()=>q7,createRulesConfigDefinition:()=>A7,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>F7,UnifiedConfigFileWatcher:()=>v6,SKILLS_CONFIG_DIRECTORY_NAME:()=>U7,RULES_CONFIG_DIRECTORY_NAME:()=>hX});import{createHash as Kv}from"node:crypto";import{watch as Gv}from"node:fs";import{readdir as Hv,readFile as Uv}from"node:fs/promises";import{join as Fv}from"node:path";function Lv($){return Kv("sha1").update($).digest("hex")}function DO($){return Boolean($&&typeof $==="object"&&"code"in $)}function FO($){return DO($)&&$.code==="ENOENT"}function LO($){return DO($)&&($.code==="EACCES"||$.code==="EPERM")}class v6{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let X of Q.directories){let J=this.baseTypesByDirectory.get(X);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(X,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,X])=>[Q,{...X}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([X,J])=>[X,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=Gv(Z,()=>{let X=this.watchedTypesByDirectory.get(Z);if(!X)return;for(let J of X)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(X)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.emit({kind:"error",type:W,error:X,filePath:Z})})}catch(Q){if(!FO(Q)&&!LO(Q)){let X=$.get(Z);if(!X)continue;for(let J of X)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),X=this.recordsByType.get($.type)??new Map;for(let[J,W]of X.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:W.filePath})}for(let[J,W]of Z.entries()){let j=X.get(J);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:J,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let X of $.directories){Q.add(X);let J=$.discoverFiles?await $.discoverFiles(X):await this.readDirectoryFileCandidates(X);for(let W of J){let{fileName:j,filePath:Y}=W;if(Q.add(W.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await Uv(Y,"utf8"),B={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:Y,content:V},K=$.parseFile(B),G=$.resolveId(K,B).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:K,filePath:Y,fingerprint:Lv(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let X of Q){let J=$.get(X);if(J)J.add(Z);else $.set(X,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await Hv($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:Fv($,Q.name)})).sort((Q,X)=>Q.fileName.localeCompare(X.fileName))}catch(Z){if(FO(Z)||LO(Z))return[];throw Z}}}import{readdir as uV,readFile as Dv,stat as cV}from"node:fs/promises";import{basename as m$,dirname as _v,extname as kX,join as B1,resolve as H7}from"node:path";import{stripUtf8Bom as zv}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as _O,RULES_CONFIG_DIRECTORY_NAME as hX,resolveGlobalAgentsRulesPath as Ov,resolveRulesConfigSearchPaths as Nv,resolveSkillsConfigSearchPaths as qv,resolveWorkflowsConfigSearchPaths as Av,SKILLS_CONFIG_DIRECTORY_NAME as U7,WORKFLOWS_CONFIG_DIRECTORY_NAME as F7}from"@cline/shared/storage";import Tv from"yaml";var bX="SKILL.md",Ev="managed.json",Mv=new Set([".md",".markdown",".txt"]);function dV($){return $.trim().toLowerCase()}function I4($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function xX($){return Mv.has(kX($).toLowerCase())}function zO($){let Z=[],Q=new Set;for(let X of $){let J=H7(X);if(Q.has(J))continue;Q.add(J),Z.push(X)}return Z}function Rv($){let Z=[...$?.directories??z7($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...wz({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return zO(Z)}async function lV($){try{let Z=await uV($,{withFileTypes:!0}),Q=[];for(let X of Z){if(!X.isDirectory())continue;let J=B1($,X.name),W=B1(J,Ev);try{let j=await Dv(W,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(J)}catch(j){if(I4(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((X,J)=>X.localeCompare(J))}catch(Z){if(I4(Z))return[];throw Z}}function pV($){let Z=zv($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,X=Z.match(Q);if(!X)return{data:{},body:Z,hadFrontmatter:!1};let[,J,W]=X;try{let j=Tv.parse(J);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function yX($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let X=$.trim();if(!X&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return X||void 0}function h4($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function Cv($,Z){if(m$($.filePath).toLowerCase()!==_O.toLowerCase())return m$($.filePath,kX($.filePath));if(Z&&H7($.filePath)===H7(Z,_O))return"Workspace AGENTS.md";if(H7($.filePath)===H7(Ov()))return"Global AGENTS.md";return m$($.filePath,kX($.filePath))}function L7($,Z){let{data:Q,body:X,parseError:J}=pV($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in skill file.");let Y=yX(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:yX(Q.description,"description",!1),disabled:h4(Q.disabled,"disabled")??(h4(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function D7($,Z){let{data:Q,body:X,parseError:J}=pV($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=yX(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:h4(Q.disabled,"disabled")??(h4(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function _7($,Z){let{data:Q,body:X,parseError:J}=pV($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=yX(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:h4(Q.disabled,"disabled")??(h4(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function z7($){return qv($)}function O7($){return Nv($)}function N7($){return Av($)}async function OO($){if(m$($)===".cline"){let Z=await lV($);return(await Promise.all(Z.map((X)=>OO(B1(X,U7))))).flat()}try{let Z=await uV($,{withFileTypes:!0}),Q=[];for(let X of Z){if(X.isFile()&&X.name===bX){Q.push({directoryPath:$,fileName:X.name,filePath:B1($,X.name)});continue}let J=B1($,X.name);if(X.isDirectory()||X.isSymbolicLink()&&await cV(J).then((j)=>j.isDirectory()).catch((j)=>{if(I4(j))return!1;throw j}))Q.push({directoryPath:J,fileName:bX,filePath:B1(J,bX)})}return Q}catch(Z){if(I4(Z))return[];throw Z}}async function IX($){if(m$($)===".cline"){let Z=await lV($);return(await Promise.all(Z.map((X)=>IX(B1(X,"rules.md"))))).flat()}try{if((await cV($)).isFile())return[{directoryPath:_v($),fileName:m$($),filePath:$}]}catch(Z){if(!I4(Z))throw Z}try{let Q=(await uV($,{withFileTypes:!0})).filter((J)=>J.isFile()&&xX(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:B1($,J.name)})),X=B1($,"AGENTS.md");try{if((await cV(X)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:X})}}catch{}return Q}catch(Z){if(I4(Z))return[];throw Z}}async function Pv($){if(m$($)===".cline"){let Z=await lV($);return(await Promise.all(Z.map((X)=>IX(B1(X,F7))))).flat()}return IX($)}function q7($){let Z=Rv($),Q=$?.workspacePath?B1($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?zO([...Z,Q]):Z,discoverFiles:OO,includeFile:(X)=>X===bX,parseFile:(X)=>L7(X.content,m$(X.directoryPath)),resolveId:(X)=>dV(X.name)}}function A7($){let Z=$?.directories??O7($?.workspacePath),Q=$?.workspacePath?B1($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:IX,includeFile:(X,J)=>X===".clinerules"||xX(X)||xX(J),parseFile:(X)=>D7(X.content,Cv(X,$?.workspacePath)),resolveId:(X)=>dV(X.name)}}function T7($){let Z=$?.directories??N7($?.workspacePath),Q=$?.workspacePath?B1($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:Pv,includeFile:(X)=>xX(X),parseFile:(X)=>_7(X.content,m$(X.filePath,kX(X.filePath))),resolveId:(X)=>dV(X.name)}}function NO($){let Z=[q7($?.skills),A7($?.rules),T7($?.workflows)];return new v6(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{createHash as fv}from"node:crypto";import{truncateSplit as qO}from"@cline/shared";function v4($){return $.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^\p{L}\p{N}_.:@-]+/gu,"-").replace(/-+/g,"-").replace(/^-/,"").replace(/-$/,"")}function wv($){let Z=v4($).replace(/[^a-z0-9_-]+/g,"-").replace(/^-/,"").replace(/-$/,""),Q=fv("sha256").update($).digest("hex").slice(0,12);return`${Z||"command"}-${Q}`}function Sv($,Z){if($.description?.trim())return qO($.description,".");if(Z==="workflow")return;return qO($.instructions,".")}function bv($){return $.disabled!==!0}function AO($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,X])=>({id:Q,record:X})).filter(({record:Q})=>bv(Q.item)).map(({id:Q,record:X})=>({id:Q,name:v4(X.item.name)||`${Z}-${wv(Q)}`,instructions:X.item.instructions,description:Sv(X.item,Z),kind:Z})).sort((Q,X)=>Q.name.localeCompare(X.name)||Q.id.localeCompare(X.id))}function E7($){let Z=new Map;for(let Q of[...AO($,"skill"),...AO($,"workflow")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,X)=>Q.name.localeCompare(X.name))}function TO($,Z,Q){if(!$.startsWith("/")||$.length<2)return $;let X=$.match(/^\/(\S+)/);if(!X)return $;let J=X[1],W=v4(J);if(!W)return $;let j=J.length+1,Y=$.slice(j),V=E7(Z).find((B)=>B.name===W);if(!V)return $;if(V.kind==="skill"&&Q?.expandSkillCommands===!1)return $;return`${V.instructions}${Y}`}function vX($){return $.trim().replace(/^\/+/,"").toLowerCase()}function kv($){if(!$||$.length===0)return;let Z=$.map(vX).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function xv($,Z,Q){if(!Q)return!0;let X=vX($),J=vX(Z),W=X.includes(":")?X.split(":").at(-1)??X:X,j=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(X)||Q.has(J)||Q.has(W)||Q.has(j)}function M7($,Z){let Q=kv(Z);return[...$.getSnapshot("skill").entries()].map(([J,W])=>{let j=W.item;return{id:J,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((J)=>xv(J.id,J.name,Q))}function yv($,Z){return M7($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,X)=>Q.localeCompare(X))}function Iv($,Z,Q){let X=vX(Z);if(!X)return{error:"Missing skill name."};let J=M7($,Q),W=J.find((K)=>K.id===X);if(W){let{skill:K}=W;if(K.disabled===!0)return{error:`Skill "${K.name}" is configured but disabled.`};return{id:W.id,skill:K}}let j=X.includes(":")?X.split(":").at(-1)??X:X,Y=J.filter(({id:K})=>{if(K===j)return!0;return K.endsWith(`:${j}`)}),V=Y.filter(({skill:K})=>K.disabled!==!0);if(V.length===1){let{id:K,skill:G}=V[0];return{id:K,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:K})=>K).join(", ")}`};if(Y.length===1){let{skill:K}=Y[0];return{error:`Skill "${K.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${Y.map(({id:K})=>K).join(", ")}`};let B=yv($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function iV($,Z=Promise.resolve(),Q){let X=new Set,J=async(W,j)=>{await Z;let Y=Iv($,W,Q);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(X.has(V))return`Skill "${B.name}" is already running.`;X.add(V);try{let K=j?.trim(),G=K?`
|
|
552
|
+
`);J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,appendContext:V||void 0,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function I6($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:y6(Z,"beforeRun"),afterRun:y6(Z,"afterRun"),beforeModel:y6(Z,"beforeModel"),afterModel:y6(Z,"afterModel"),beforeTool:y6(Z,"beforeTool"),afterTool:y6(Z,"afterTool"),onEvent:y6(Z,"onEvent")}}var pz={};f(pz,{normalizeRuntimeCapabilities:()=>i0});function i0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let X=Z&&Object.keys(Z).length>0;if(!X&&!Q)return;return{...X?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var ez={};f(ez,{toProviderConfig:()=>T1,emptyStoredProviderSettings:()=>f2,VoiceInputSettingsSchema:()=>MX,StoredProviderSettingsSchema:()=>k4,StoredProviderSettingsEntrySchema:()=>CX,StoredProviderModesSchema:()=>RX,ProviderSettingsSchemaTyped:()=>b4});import{z as E1}from"zod";var tz={};f(tz,{toProviderConfig:()=>T1,safeParseSettings:()=>EX,safeCreateProviderConfig:()=>IV,parseSettings:()=>TX,normalizeProviderId:()=>S4,isBuiltInProviderId:()=>xV,createProviderConfig:()=>yV,SapSettingsSchema:()=>NX,ReasoningSettingsSchema:()=>DX,ProviderSettingsSchema:()=>P2,ProviderProtocolSchema:()=>UX,ProviderIdSchema:()=>Y7,ProviderClientSchema:()=>FX,OcaSettingsSchema:()=>qX,ModelCatalogSettingsSchema:()=>AX,GcpSettingsSchema:()=>zX,BUILT_IN_PROVIDER_IDS:()=>kV,BUILT_IN_PROVIDER:()=>j7,AzureSettingsSchema:()=>OX,AwsSettingsSchema:()=>_X,AuthSettingsSchema:()=>LX});import*as Z1 from"@cline/llms";import{ReasoningLevelSchema as gh}from"@cline/shared";import{z as b}from"zod";var sz={};f(sz,{resolveProviderConfig:()=>W7,isPrivateModelCatalogProvider:()=>wV,getProviderConfig:()=>HX,getLiveModelsCatalog:()=>C2,clearPublicModelsCatalogCache:()=>kh,clearPrivateModelsCatalogCache:()=>bV,clearLiveModelsCatalogCache:()=>SV,OPENAI_COMPATIBLE_PROVIDERS:()=>J7,DEFAULT_MODELS_CATALOG_URL:()=>VX});import*as B0 from"@cline/llms";function MV($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let X of[Q.id,Q.name,Q.model])if(typeof X==="string"&&X.trim())return X.trim()}return""}).filter((Z)=>Z.length>0)}function Gh($,Z){let Q=MV($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let X=$,J=MV(X.data??X.models);if(J.length>0)return J;if(X.models&&typeof X.models==="object"&&!Array.isArray(X.models)){let j=Object.keys(X.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let W=X.providers?.[Z];if(W&&typeof W==="object"){let Y=MV(W.models??W);if(Y.length>0)return Y}return[]}async function XX($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return Gh(await Q.json(),Z)}function iz($){return $.replace(/\/+$/,"")}function JX($,Z,Q){let X=Q?.trim();if(!X)return;let J=$?.trim();if(!J||!Z?.trim())return X;try{let W=new URL(X),j=new URL(Z),Y=new URL(J);if(W.origin!==j.origin)return X;let V=iz(j.pathname),B=iz(Y.pathname);if(V&&W.pathname.startsWith(`${V}/`)){let K=W.pathname.slice(V.length);Y.pathname=`${B}${K}`}else Y.pathname=W.pathname;return Y.search=W.search,Y.hash=W.hash,Y.toString()}catch{return X}}function Hh($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function Uh($){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 Fh=Object.values(B0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:Hh($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),az=Object.fromEntries(Fh.map(($)=>[$.id,$]));function Lh($){return az[$]}function Dh(){return Object.fromEntries(Object.entries(az).filter(([,$])=>Uh($)))}function nz($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var VX="https://models.dev/api.json",_h=600000,oz=300000,zh=5000,YX=new Map,X7=new Map,RV=new Map,WX=new Map;async function Oh(){return B0.getGeneratedProviderModels()}async function Nh($,Z={},Q={},X={},J={},W={}){if($==="litellm")return B0.sortModelsByReleaseDate(X);let j=await Oh(),Y=B0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((G)=>j[G]??{}));if(Boolean(B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return B0.sortModelsByReleaseDate({...J,...W});if($==="openai-codex")return B0.sortModelsByReleaseDate({...Z,...B0.filterOpenAICodexModels(Q),...J,...W});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...W};let K=B0.sortModelsByReleaseDate({...V,...Z,...Q,...X,...J});if($==="cline")return B0.sortModelsByReleaseDate(B0.filterImageOutputModels({...B0.preferCanonicalModelIds(K,B0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...W}));return B0.sortModelsByReleaseDate({...K,...W})}function qh($,Z){let Q=B0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((X)=>Z[X]??{}))}function BX($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function PV($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function Ah($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function Th($,Z){return`${$}:${BX(Z.baseUrl)}:${Ah(PV(Z)??"")}`}async function KX($,Z,Q=zh){let X=new AbortController,J=setTimeout(()=>X.abort(),Q);try{return await fetch($,{...Z,signal:X.signal})}finally{clearTimeout(J)}}function h6($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function GX($,Z){let Q=["streaming","tools"];return h6(Q,"images",Boolean(Z.supportsImages)),h6(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),h6(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function Eh($,Z){let Q=await KX("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],W={};for(let j of J){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];W[Y]=GX(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return W}function rz($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function Mh($,Z){let Q=await KX("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],W={};for(let j of J){let Y=j.id?.trim();if(!Y)continue;W[Y]=GX(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}async function Rh($,Z){let X=`${(BX($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await KX(X,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let j=(await J.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let K=V.supported_features??[],G=V.supported_sampling_parameters??[],H=V.input_modalities??[],U=["streaming"];h6(U,"tools",K.includes("tools")),h6(U,"reasoning",K.includes("reasoning")),h6(U,"temperature",G.includes("temperature")),h6(U,"images",H.includes("image"));let F={input:rz(V.pricing?.prompt),output:rz(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:U,pricing:F.input!==void 0||F.output!==void 0?F:void 0,status:"active"}}return Y}function Ch($){let Z=BX($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function Ph($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function fh($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,X=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${X}`}async function wh($,Z){let Q=Ch($.baseUrl),X=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let W of Ph(Q))for(let[j,Y]of J)try{let V=await KX(W,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let K=(await V.json())?.data??[],G={};for(let H of K){let U=H.model_name?.trim(),L=H.litellm_params?.model?.trim()||U;if(!L)continue;let D=H.model_info,z=GX(L,{name:U??L,maxTokens:D?.max_output_tokens??D?.max_tokens,maxInputTokens:D?.max_input_tokens??D?.max_tokens,supportsImages:D?.supports_vision,supportsPromptCache:D?.supports_prompt_caching,supportsReasoning:D?.supports_reasoning});if(G[L]=z,U)G[U]={...z,id:U,name:U}}return G}X.push(`${new URL(W).pathname} (${j}): ${await fh(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);X.push(`${new URL(W).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${X.join("; ")}`)}var fV={baseten:Eh,hicap:Mh,litellm:wh,poolside:Rh};function wV($){return Object.hasOwn(fV,$)}var CV=new Map,jX=new Map;function Sh($,Z){return`${$}:${BX(Z.baseUrl)}`}async function bh($,Z,Q){let X=B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=JX(Q.baseUrl,X?.provider.baseUrl,X?.provider.modelsSourceUrl);if(!J)return{};let W=Z?.cacheTtlMs??oz,j=Sh($,Q),Y=Date.now(),V=CV.get(j);if(V&&V.expiresAt>Y)return V.data;let B=jX.get(j);if(B)return B;let K=XX(J,$).then((G)=>{let H=Object.fromEntries(G.map((U)=>[U,GX(U,{name:U})]));return CV.set(j,{data:H,expiresAt:Y+W}),H}).finally(()=>{jX.delete(j)});return jX.set(j,K),K}function kh(){CV.clear(),jX.clear()}async function xh($,Z){let Q=PV(Z);if(!Q)return{};let X=fV[$];if(!X)return{};return X(Z,Q)}function yh($,Z,Q){if(!Q)return!1;if(!fV[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(PV(Q))}async function Ih($,Z,Q){let X=Z?.cacheTtlMs??oz,J=Th($,Q),W=Date.now(),j=RV.get(J);if(j&&j.expiresAt>W)return j.data;let Y=WX.get(J);if(Y)return Y;let V=xh($,Q).then((B)=>{return RV.set(J,{data:B,expiresAt:W+X}),B}).finally(()=>{WX.delete(J)});return WX.set(J,V),V}async function hh($){return B0.fetchLiveProviderModels($,globalThis.fetch)}async function C2($={}){let Z=$.url??VX,Q=$.cacheTtlMs??_h,X=Date.now(),J=YX.get(Z);if(J&&J.expiresAt>X)return J.data;let W=X7.get(Z);if(W)return W;let j=hh(Z).then((Y)=>{return YX.set(Z,{data:Y,expiresAt:X+Q}),Y}).finally(()=>{X7.delete(Z)});return X7.set(Z,j),j}function SV($){if($){YX.delete($),X7.delete($);return}YX.clear(),X7.clear()}function bV(){RV.clear(),WX.clear()}function vh($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:nz(Q.capabilities)}]))}var J7=vh(Dh());function HX($){let Z=Lh($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:nz(Z.capabilities)}}async function W7($,Z,Q){let X=HX($);if(!X)return;try{let J=Z?.loadLatestOnInit?await C2(Z):void 0,W=J?qh($,J):{},j=Q&&yh($,Z,Q)?await Ih($,Z,Q):{},V=Boolean(B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:X.modelId,baseUrl:X.baseUrl}:Q,B=V?await bh($,Z,V).catch(()=>({})):{},K=await Nh($,X.knownModels,W,j,B,Q?.knownModels);return{...X,knownModels:K}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...X,knownModels:{}};return X}}var j7=Z1.BUILT_IN_PROVIDER,kV=Z1.BUILT_IN_PROVIDER_IDS,xV=Z1.isBuiltInProviderId,S4=Z1.normalizeProviderId,Y7=b.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),UX=b.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),FX=b.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),LX=b.object({apiKey:b.string().optional(),accessToken:b.string().optional(),refreshToken:b.string().optional(),expiresAt:b.number().int().positive().optional(),accountId:b.string().optional(),organizationId:b.string().optional(),organizationName:b.string().optional(),memberId:b.string().optional(),metadata:b.record(b.string(),b.unknown()).optional()}),DX=b.object({enabled:b.boolean().optional(),effort:gh.optional(),budgetTokens:b.number().int().positive().optional()}),_X=b.object({accessKey:b.string().optional(),secretKey:b.string().optional(),sessionToken:b.string().optional(),region:b.string().optional(),profile:b.string().optional(),authentication:b.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:b.boolean().optional(),useCrossRegionInference:b.boolean().optional(),useGlobalInference:b.boolean().optional(),endpoint:b.string().url().optional(),customModelBaseId:b.string().optional()}),zX=b.object({projectId:b.string().optional(),region:b.string().optional()}),OX=b.object({apiVersion:b.string().optional(),useIdentity:b.boolean().optional()}),NX=b.object({clientId:b.string().optional(),clientSecret:b.string().optional(),tokenUrl:b.string().url().optional(),resourceGroup:b.string().optional(),deploymentId:b.string().optional(),useOrchestrationMode:b.boolean().optional(),api:b.enum(["orchestration","foundation-models"]).optional(),defaultSettings:b.record(b.string(),b.unknown()).optional()}),qX=b.object({mode:b.enum(["internal","external"]).optional(),usePromptCache:b.boolean().optional()}),AX=b.object({loadLatestOnInit:b.boolean().optional(),loadPrivateOnAuth:b.boolean().optional(),url:b.string().url().optional(),cacheTtlMs:b.number().int().positive().optional(),failOnError:b.boolean().optional()}),P2=b.object({provider:Y7,apiKey:b.string().optional(),auth:LX.optional(),model:b.string().optional(),protocol:UX.optional(),client:FX.optional(),routingProviderId:Y7.optional(),maxTokens:b.number().int().positive().optional(),contextWindow:b.number().int().positive().optional(),baseUrl:b.string().url().optional(),headers:b.record(b.string(),b.string()).optional(),timeout:b.number().int().positive().optional(),reasoning:DX.optional(),aws:_X.optional(),gcp:zX.optional(),azure:OX.optional(),sap:NX.optional(),oca:qX.optional(),region:b.string().optional(),apiLine:b.enum(["china","international"]).optional(),capabilities:b.array(b.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:AX.optional()});function TX($){return P2.parse($)}function EX($){return P2.safeParse($)}function mh($){return $.protocol==="openai-responses"||$.client==="openai"}function T1($,Z={}){let Q=$.provider,X=S4(Q),J=Z.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,Y=J7[X],V=Object.assign({},...Z1.resolveProviderModelCatalogKeys(X).map((L)=>Z1.getGeneratedModelsForProvider(L))),B=Object.keys(V)[0],K=i8(X,$),G=$.baseUrl??Z1.resolveProviderApiLineBaseUrl(X,$.apiLine)??(X==="oca"?$.oca?.mode==="internal"?tQ:eQ:Y?.baseUrl),H=$.routingProviderId??(mh($)&&X!==j7.OPENAI_NATIVE?j7.OPENAI_NATIVE:void 0),U=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,F={providerId:Q,clientType:$.client,routingProviderId:H,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:U}:{},apiKey:K,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(F).filter(([L,D])=>D!==void 0))}function yV($){let Z=TX($);return T1(Z)}function IV($){let Z=EX($);if(Z.success)return{success:!0,config:T1(Z.data)};return{success:!1,error:Z.error}}var b4=P2;var MX=E1.object({providerId:E1.string().min(1),modelId:E1.string().min(1)}),RX=E1.object({voiceInput:MX.optional()}),CX=E1.object({settings:P2,updatedAt:E1.string().datetime(),tokenSource:E1.enum(["manual","oauth","migration"]).default("manual")}),k4=E1.object({version:E1.literal(1),lastUsedProvider:E1.string().min(1).optional(),modes:RX.default({}),providers:E1.record(E1.string(),CX)});function f2(){return{version:1,modes:{},providers:{}}}y1();var $O={};f($O,{InMemoryWorkspaceManager:()=>x4});import{upsertWorkspaceInfo as ch,WorkspaceManifestSchema as hV}from"@cline/shared";class x4{manifest;listeners=new Set;constructor($){this.manifest=hV.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await O8($);return this.manifest=ch(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=n1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=hV.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let X=await this.addWorkspacePath(Z);return this.manifest=hV.parse({...this.manifest,currentWorkspacePath:X.rootPath}),this.emit({type:"workspace_switched",workspace:X}),X}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=n1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}q0();import{createHash as uh}from"node:crypto";var ZO=new Set,QO=new Set;function dh($){return uh("sha256").update($).digest("hex")}function lh($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function XO($){if(!$.telemetry)return;let Z=dh($.rootPath),Q=$.rootCount??1;if(!ZO.has(Z))ZO.add(Z),GQ($.telemetry,{root_count:Q,vcs_types:lh($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!QO.has(Z)){QO.add(Z);let X=Error($.initError.message);X.name=$.initError.errorType||"Error",HQ($.telemetry,X,{fallback_to_single_root:!0,workspace_count:Q})}}function rh($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function ah($,Z,Q){if(Z.length>0)for(let W of Z)Q?.log(W.message,{severity:"warn"});if($.length===0)return;let X=$.slice(0,3).map(rh).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${X}${J}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)Q?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function nh($){let Z=$?.["X-CLIENT-TYPE"]?.trim();if(!Z)return;let Q=$?.["X-CLIENT-VERSION"]?.trim();return{name:Z,...Q?{version:Q}:{}}}function oh($,Z){let Q=typeof $.thinking==="boolean",X=typeof $.reasoningEffort==="string";if(!Q&&!X)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...X?{effort:$.reasoningEffort}:{}}}function vV($,Z){return ih($,Z)}function sh($,Z,Q,X,J,W){let j=X.getProviderSettings($.providerId),Y=J||j?.modelCatalog?{...J??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=ph({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:X0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:Q2,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),K={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:oh($,j?.reasoning),modelCatalog:Y},G={...T1(K),...V??{}};if(B)G.headers=B;if($.knownModels)G.knownModels=$.knownModels;if($.extensionContext)G.extensionContext=$.extensionContext;let U=$.fetch??G.fetch??W;if(U)G.fetch=U;return G}async function JO($){let{input:Z,sessionId:Q,providerSettingsManager:X,defaultTelemetry:J,defaultLogger:W,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:K,createSubAgentLifecycleCallbacks:G,createSpawnTool:H,localRuntime:U,readSessionMetadata:F,writeSessionMetadata:L}=$,D=I$(Z.config),{modelCatalogDefaults:z,userInstructionService:_,configExtensions:O,onTeamRestored:A,...q}=U??{},N=Object.keys(q).length>0?q:void 0,{workspaceInfo:T,workspaceMetadata:C,gitState:r,durationMs:y,vcsType:x,initError:E}=await kW(D),g=N?.extensionContext,S=g?.client?void 0:nh(Z.config.headers),n={...g??{},...S?{client:S}:{},workspace:{...T,...g?.workspace??{}},session:{...g?.session??{},sessionId:Q},logger:g?.logger??N?.logger??W,telemetry:g?.telemetry??N?.telemetry??J};XO({telemetry:n.telemetry,rootPath:T.rootPath,workspaceInfo:T,rootCount:1,vcsType:x,durationMs:y,initError:E,featureFlagEnabled:!0});let k=vV(O,"hooks")?w4({cwd:Z.config.cwd,workspacePath:D,rootSessionId:Q,logger:N?.logger,workspaceInfo:T}):void 0,I=s_(N?.hooks)?void 0:f4({rootSessionId:Q,workspacePath:D,workspaceInfo:T}),d=I6([N?.hooks,I]),Z0;if(vV(O,"plugins"))try{Z0=await T4({pluginPaths:N?.pluginPaths,workspacePath:D,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:T,session:n.session,client:n.client,user:n.user,logger:n.logger,telemetry:n.telemetry,automation:n.automation}),ah(Z0.failures,Z0.warnings,N?.logger)}catch(a0){let p2=a0 instanceof Error?a0.message:String(a0);N?.logger?.log?.(`plugin loading failed; continuing without plugins (${p2})`)}let G0=rY(k?[k]:void 0,rY(N?.extensions,kQ(Z0?.extensions))),G1=vV(O,"plugins")?Q$(Z0?.pluginPaths??[]):void 0,r0={...Z.config,...N??{},sessionId:Q,hooks:d,extensions:G0,extensionContext:n,telemetry:n.telemetry,logger:n.logger},_$=sh(r0,Q,Z.source,X,z,V),H1=I6([r0.hooks,r0.checkpoint?.enabled===!0?xz({cwd:r0.cwd,sessionId:Q,logger:r0.logger,createCheckpoint:r0.checkpoint?.createCheckpoint,readSessionMetadata:F,writeSessionMetadata:L}):void 0]),c0={...r0,providerConfig:_$,workspaceMetadata:C,hooks:H1},t0=Z.toolPolicies??r0.toolPolicies??Y,o=i0(j,Z.capabilities),U1=o?.requestToolApproval,u=o?.toolExecutors,F0=G?.(c0),k0=new x4({currentWorkspacePath:T.rootPath,workspaces:{[T.rootPath]:T}});return{effectiveInput:Z,config:c0,providerConfig:_$,workspaceMetadata:C,workspaceInfo:T,gitState:r,extensions:G0,hooks:H1,toolPolicies:t0,requestToolApproval:U1,pluginSandboxShutdown:Z0?.shutdown,runtimeBuilderInput:{config:c0,hooks:H1,extensions:G0,onTeamEvent:K,createSpawnTool:H,onTeamRestored:A,onSubAgentEvent:F0?.onSubAgentEvent,onSubAgentStart:F0?.onSubAgentStart,onSubAgentEnd:F0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:G1,configExtensions:O,toolExecutors:u,toolPolicies:t0,workspaceManager:k0,logger:c0.logger,telemetry:c0.telemetry,requestToolApproval:U1}}}import{existsSync as PX,mkdirSync as th,readdirSync as eh,rmdirSync as $v,rmSync as Zv,unlinkSync as Qv}from"node:fs";import{dirname as WO,join as V7}from"node:path";function D0(){return new Date().toISOString()}function B7($){if(!$||!PX($))return;try{Qv($)}catch{}}function Xv($){let Z=L4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=u9($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class gV{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return V7(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!PX(Z))th(Z,{recursive:!0});return Z}sessionMessagesPath($){return V7(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return V7(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return V7(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!PX(Z)){Z=WO(Z);continue}try{if(eh(Z).length>0)break;$v(Z)}catch{break}Z=WO(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!PX($))return;try{Zv($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:X,fileStem:J}=Xv($),W=this.sessionArtifactsDir(X);return{messagesPath:V7(W,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as Jv}from"@cline/shared/storage";q0();function jO($,Z,Q,X,J){if(Q)FQ($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else UQ($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});Wv($.telemetry,{workspacePath:X})}function Wv($,Z){let Q=Jv("Hooks"),X=M2(Z.workspacePath),J=new Map;for(let W of X){let j=W.hookEventName??"unknown",Y=J.get(j)??{global:0,workspace:0};if(W.path===Q||W.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;J.set(j,Y)}for(let[W,j]of J.entries())EQ($,W,j.global,j.workspace)}function YO($,Z){for(let Q of Z.mentions)AQ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)NQ($,"file",Q.length);for(let Q of Z.ignoredMentions)qQ($,"file","not_found",Q)}var oT={};f(oT,{ProviderSettingsManager:()=>H$});import{chmodSync as XE,existsSync as SG,mkdirSync as Gn,readFileSync as Hn,renameSync as Un,rmSync as Fn,writeFileSync as Ln}from"node:fs";import{basename as JE,dirname as bG}from"node:path";import{resolveProviderSettingsPath as Dn}from"@cline/shared/storage";var M={};f(M,{writeModelsFileSync:()=>zZ,writeHubDiscovery:()=>I8,writeGlobalSettings:()=>u0,withHubStartupLock:()=>h8,watchManagedHubBuildMismatch:()=>DF,verifyHubConnection:()=>e0,updateMcpSettingsFileSync:()=>M1,updateMcpSettingsFile:()=>m4,updateMcpServerOAuthStateAsync:()=>u6,updateMcpServerOAuthState:()=>P7,updateLocalProvider:()=>nJ,uninstallPlugin:()=>KZ,uninstallMcpServer:()=>HK,uninstallMarketplaceSkill:()=>SJ,uninstallMarketplacePlugin:()=>bJ,uninstallMarketplaceMcpServerFromSettings:()=>fJ,uninstallMarketplaceEntry:()=>CK,truncateNotificationBody:()=>vZ,truncateCommandOutput:()=>H6,trimMessagesBeforeUserRun:()=>t7,transcribeLocalAudio:()=>sJ,transcribeConfiguredVoiceInput:()=>sK,toggleDisabledTool:()=>wQ,toTeamProgressLifecycleEvent:()=>$5,toProviderConfig:()=>T1,toHubStatusUrl:()=>jj,toHubHealthUrl:()=>gQ,toHookConfigFileName:()=>$7,syncStoredProviderRegistration:()=>mK,syncPluginMcpServersToSettings:()=>VZ,summarizeUsageFromMessages:()=>_4,stripUtf8Bom:()=>Vn,stopLocalHubServerGracefully:()=>Cj,startLocalOAuthServer:()=>m1,startHubWebSocketServer:()=>lZ,startHubServer:()=>$E,startClineDeviceAuth:()=>cj,splitCoreSessionConfig:()=>p5,spawnDetachedHubServerWithRetry:()=>_j,spawnDetachedHubServer:()=>Dj,setTuiThemeGlobally:()=>AU,setToolAutoApproveGlobally:()=>TU,setTelemetryOptOutGlobally:()=>GU,setSdkLogger:()=>xj,setPlanActModeGlobally:()=>OU,setModelToolEnabledGlobally:()=>nW,setMcpServerDisabled:()=>m6,setDisabledTools:()=>oW,setDisabledPlugin:()=>SQ,setCompactionStrategyGlobally:()=>LU,setCompactionModeGlobally:()=>_U,setAutoUpdateEnabledGlobally:()=>UU,setActiveConnectorSupervisor:()=>KK,serializeAgendaTaskSpec:()=>JW,sendHubCommand:()=>LF,sdkDebug:()=>j0,saveVoiceInputSettings:()=>oK,saveProviderOAuthCredentials:()=>W6,saveLocalProviderSettings:()=>eK,saveLocalProviderOAuthCredentials:()=>XG,sanitizeSessionToken:()=>C6,safeParseSettings:()=>EX,safeCreateProviderConfig:()=>IV,runSubprocessEvent:()=>v$,runHook:()=>x6,reviveTeamStateDates:()=>b3,retireDiscoveredHub:()=>Q6,restartLocalHubIfIdleAfterStartupTimeout:()=>dQ,resolveWorkspaceHubOwnerContext:()=>$F,resolveWorkflowsConfigSearchPaths:()=>N7,resolveToolClientType:()=>G4,resolveSkillsConfigSearchPaths:()=>z7,resolveSharedHubOwnerContext:()=>j1,resolveSessionBackend:()=>dB,resolveRulesConfigSearchPaths:()=>O7,resolveProviderConfig:()=>W7,resolveProviderApiKeyFromSettings:()=>aj,resolveProductionHubOwnerContext:()=>z1,resolvePluginSkillDirectoriesFromPaths:()=>Q$,resolvePluginConfigSearchPaths:()=>S6,resolveModelsRegistryPath:()=>F$,resolveModelToolSettings:()=>aW,resolveMessageDisplayRole:()=>sj,resolveMcpServerRegistrations:()=>R1,resolveMcpServerRegistration:()=>C7,resolveMarketplaceMcpServerName:()=>HZ,resolveLocalClineAuthToken:()=>WG,resolveHubUrl:()=>Pj,resolveHubRunQueuePath:()=>PG,resolveHubOwnerContext:()=>R$,resolveHubInstanceLockPath:()=>DW,resolveHubEventLogPath:()=>fG,resolveHubEndpointOptions:()=>C$,resolveHubBuildIdentity:()=>a5,resolveHubBuildId:()=>_1,resolveHubBuildEpochMs:()=>i5,resolveHooksConfigSearchPaths:()=>t9,resolveDisabledToolNames:()=>s1,resolveDisabledPluginPaths:()=>g5,resolveDefaultMcpSettingsPath:()=>K0,resolveDefaultHubPort:()=>v8,resolveDefaultHubPathname:()=>Gj,resolveDefaultHubHost:()=>Kj,resolveCoreSelectedToolIds:()=>y3,resolveCoreDistinctId:()=>W1,resolveCoreDeviceId:()=>C8,resolveCompatibleLocalHubUrl:()=>$9,resolveClineDir:()=>nU,resolveClineDataDir:()=>$6,resolveAndLoadAgentPlugins:()=>T4,resolveAgentPluginPaths:()=>h$,resetClineRecommendedModelsCacheForTests:()=>dK,requestHubShutdown:()=>e5,requestHubDrain:()=>cQ,requestDesktopToolApproval:()=>WK,removePluginMcpServersFromSettings:()=>BZ,removePersistedConnectorConnection:()=>YK,rememberRecoverableLocalHubUrl:()=>J2,registerRemoteConfigSessionBlobUpload:()=>UJ,registerMcpServersFromSettingsFile:()=>d6,registerDisposable:()=>jn,refreshProviderModelsFromSource:()=>$G,refreshOpenAICodexToken:()=>sQ,refreshOcaToken:()=>Z3,refreshClineToken:()=>nQ,reconnectPersistedConnectors:()=>VK,readTuiThemeGlobally:()=>qU,readToolAutoApproveGlobally:()=>NU,readSupersededHubDiscovery:()=>Lj,readSessionCheckpointHistory:()=>$8,readRemoteConfigSessionBlobUploadMetadata:()=>oB,readPlanActModeGlobally:()=>zU,readModelsFileSync:()=>D5,readHubDiscovery:()=>R0,readGlobalSettings:()=>W0,readCompactionStrategyGlobally:()=>FU,readCompactionModeGlobally:()=>DU,readBearerToken:()=>dZ,projectSessionMessagesForDisplay:()=>$Z,projectSessionCompactionState:()=>V2,probeProcessStartTokenAsync:()=>G2,probeProcessStartToken:()=>L3,probeMcpServerConnection:()=>rX,probeHubServer:()=>h1,probeHubConnection:()=>FF,prewarmFileIndex:()=>q3,prewarmDetachedHubServer:()=>mQ,prepareRemoteConfigCoreIntegration:()=>tB,persistConnectorConnection:()=>jK,peekClineRecommendedModels:()=>RZ,parseWorkflowConfigFromMarkdown:()=>_7,parseUserCommandEnvelope:()=>Wn,parseSkillConfigFromMarkdown:()=>L7,parseSettings:()=>TX,parseSessionCompactionState:()=>c1,parseRuleConfigFromMarkdown:()=>D7,parsePluginSource:()=>cJ,parseMcpServerRegistration:()=>u4,parseMcpInstallArgs:()=>YZ,parseHookEventPayload:()=>C4,parseConfiguredAgentConfig:()=>l7,parseAgendaTaskSpec:()=>fZ,normalizeWorkspacePath:()=>n1,normalizeUserInput:()=>Jn,normalizeSdkError:()=>Xn,normalizeRuntimeCapabilities:()=>i0,normalizeProviderId:()=>S4,normalizeOAuthProvider:()=>ZG,normalizeHubWebSocketUrl:()=>W2,normalizeAgendaTaskLocation:()=>L$,noopBasicLogger:()=>Qn,migrateLegacyProviderSettings:()=>PZ,mergeRulesForSystemPrompt:()=>z8,mergeAgentHooks:()=>I6,marketplaceEntryKey:()=>RK,markLocalProviderEnabled:()=>aK,makeTeamTaskSubSessionId:()=>c9,makeSubSessionId:()=>F4,loginOpenAICodex:()=>X9,loginOcaOAuth:()=>Y9,loginLocalProvider:()=>QG,loginClineOAuth:()=>Z9,loginAndSaveProviderOAuthCredentials:()=>B9,loginAndSaveLocalProviderOAuthCredentials:()=>JG,localHubHasNoActiveSessions:()=>g8,loadOpenTelemetryAdapter:()=>Ea,loadMcpSettingsFile:()=>g6,loadLlmsConfigFromFile:()=>MG,loadConfiguredAgentConfigs:()=>s4,loadAgentPluginsFromPathsWithDiagnostics:()=>w6,loadAgentPluginsFromPaths:()=>u3,loadAgentPluginFromPath:()=>n9,listSessionHistoryFromBackend:()=>TB,listPluginToolsWithDiagnostics:()=>r4,listPluginTools:()=>WB,listMcpServerOAuthStatuses:()=>f7,listLocalProviders:()=>nK,listHookConfigFiles:()=>M2,listActiveConnectors:()=>X8,isUserRunMessage:()=>tj,isUnusableSessionError:()=>Zj,isToolDisabledGlobally:()=>EU,isTelemetryOptedOutGlobally:()=>fQ,isSkillsToolAvailable:()=>k3,isSessionNotFoundError:()=>t1,isRuleEnabled:()=>QQ,isPrivateModelCatalogProvider:()=>wV,isPluginDisabledGlobally:()=>RU,isOfficialPluginSlug:()=>mJ,isOAuthProvider:()=>Y2,isModelToolEnabledGlobally:()=>R8,isMarketplaceSkillInstalled:()=>wJ,isManagedHubReusable:()=>X2,isLocalHubOrigin:()=>wG,isLocalHubHostName:()=>_W,isHubReconnectableTransportError:()=>Tj,isHubLockHeldError:()=>LW,isHubCommandTimeoutError:()=>uQ,isDiscoveryFilePresent:()=>tU,isDedicatedTranscriptionModel:()=>K8,isCoreBuiltinToolAvailable:()=>M6,isClinePassLimitMessage:()=>da,isClinePassLimitError:()=>ua,isClineOrgIndividualInferenceSubscriptionMessage:()=>ca,isClineOrgIndividualInferenceSubscriptionError:()=>ma,isClineNotSubscribedMessage:()=>ga,isClineNotSubscribedError:()=>va,isClineModelNotFoundMessage:()=>ha,isClineFreeModelLimitMessage:()=>Ia,isClineFreeModelLimitError:()=>ya,isClineAccountActionRequest:()=>fX,isBuiltInProviderId:()=>xV,isAutoUpdateEnabledGlobally:()=>HU,installPlugin:()=>kK,installMcpServer:()=>GK,identifyAccount:()=>A$,hubHasLiveSessions:()=>s5,hashSecret:()=>d0,hasMcpSettingsFile:()=>c$,hasActiveHubSessions:()=>Rj,getValidOpenAICodexCredentials:()=>J9,getValidOcaCredentials:()=>V9,getValidClineCredentials:()=>Q9,getUserRunSpan:()=>$$,getProviderOAuthCredentialsFromSettings:()=>K9,getProviderConfigFields:()=>jG,getProviderConfig:()=>HX,getProviderAuthStorageId:()=>rj,getProviderAuthHandler:()=>C0,getProcessStartTokenAsync:()=>DY,getProcessStartToken:()=>LY,getPluginDisplayName:()=>s3,getPersistedProviderApiKey:()=>i8,getPersistedConnectorConnection:()=>G5,getMcpServerOAuthStatus:()=>d4,getMcpServerOAuthState:()=>c6,getMarketplaceSkillCandidates:()=>UZ,getManagedHubCompatibility:()=>Z6,getLocalProviderModels:()=>z5,getLiveModelsCatalog:()=>C2,getGlobalMarketplaceSkillPaths:()=>FZ,getFileIndex:()=>b$,getCurrentContextSize:()=>sY,getCoreHeadlessToolNames:()=>g9,getCoreDefaultEnabledToolIds:()=>x3,getCoreBuiltinToolCatalog:()=>A2,getCoreAcpToolNames:()=>I3,getClinePassSubscriptionUrl:()=>xa,getClineOrgIndividualInferenceSubscriptionMessage:()=>ka,getClineNotSubscribedMessage:()=>ba,getClineDefaultSystemPrompt:()=>la,getCachedClineRecommendedModels:()=>MZ,getActiveConnectorSupervisor:()=>jZ,generateWorkspaceInfoWithDiagnostics:()=>E5,generateWorkspaceInfo:()=>O8,formatRulesForSystemPrompt:()=>_8,formatProviderOAuthApiKey:()=>nj,formatDisplayUserInput:()=>Zn,findInstalledGlobalMarketplaceSkillName:()=>LZ,findCheckpointForRun:()=>J5,filterExtensionToolRegistrations:()=>kQ,filterDisabledTools:()=>T$,filterDisabledPluginPaths:()=>bQ,fetchClineRecommendedModels:()=>iJ,extractClinePassLimitMessage:()=>Sa,extractClineFreeModelLimitResetTime:()=>wa,executeTodoTaskOperation:()=>yQ,executeScheduleOperation:()=>h5,executeClineAccountAction:()=>wX,ensureHubWebSocketServer:()=>zW,ensureHubServer:()=>ZE,ensureDetachedHubServer:()=>t5,ensureCustomProvidersLoadedSync:()=>qZ,ensureCustomProvidersLoaded:()=>AZ,ensureCompatibleLocalHubUrl:()=>X6,ensureChatWorkspace:()=>S9,ensureAgendaTaskSchema:()=>jW,enrichPromptWithMentions:()=>Q4,emptyWorkspaceManifest:()=>ta,emptyStoredProviderSettings:()=>f2,discoverPluginModulePaths:()=>b6,disablePluginMcpServersInSettings:()=>DK,disableConnectorAutostart:()=>JZ,deriveSubsessionStatus:()=>d9,deleteLocalProvider:()=>oJ,defineLlmsConfig:()=>EG,createWorkflowsConfigDefinition:()=>T7,createUserInstructionConfigService:()=>w2,createToolPoliciesWithPreset:()=>T3,createTool:()=>sa,createTeamName:()=>DJ,createTasksTool:()=>x8,createTasksPromptExtension:()=>y8,createSubprocessHooks:()=>ZX,createSpawnAgentTool:()=>q2,createSkillsConfigDefinition:()=>q7,createShellTool:()=>f9,createShellExecutor:()=>U6,createSessionHost:()=>X5,createSessionCompactionState:()=>r8,createRuntimeHost:()=>X5,createRulesConfigDefinition:()=>A7,createRestoredCheckpointMetadata:()=>s7,createRemoteConfigSessionMessagesArtifactUploader:()=>sB,createProviderConfig:()=>yV,createOpenTelemetryTelemetryService:()=>u5,createOAuthClientCallbacks:()=>y4,createMcpTools:()=>p4,createLocalHubScheduleRuntimeHandlers:()=>tT,createLlmsSdk:()=>CG,createInitialAccumulatedUsage:()=>g0,createInMemoryHubOwnerContext:()=>oU,createHubServerUrl:()=>v1,createHubAuthToken:()=>hQ,createHookConfigFileHooks:()=>Q7,createHookConfigFileExtension:()=>w4,createHookAuditHooks:()=>f4,createEditorExecutor:()=>_6,createDisabledMcpToolPolicy:()=>x7,createDisabledMcpToolPolicies:()=>oX,createDelegatedAgentConfigProvider:()=>O2,createDelegatedAgent:()=>N2,createDefaultToolsWithPreset:()=>E3,createDefaultTools:()=>L2,createDefaultShellExecutor:()=>x9,createDefaultMcpServerClientFactory:()=>p6,createDefaultExecutors:()=>J4,createCoreSettingsService:()=>a6,createCoreSessionSnapshot:()=>W$,createContributionRegistry:()=>oa,createContextCompactionPrepareTurn:()=>_9,createConfiguredTelemetryService:()=>E$,createConfiguredTelemetryHandle:()=>w8,createConfiguredStreamingTranscriptionSession:()=>tK,createConfiguredAgentTools:()=>t4,createCompactionStateAwarePrepareTurn:()=>z9,createClineTelemetryServiceMetadata:()=>na,createClineTelemetryServiceConfig:()=>aa,createCheckpointComparePlan:()=>YJ,createBuiltinTools:()=>R6,createApplyPatchExecutor:()=>D6,createAgentTeamsTools:()=>E6,createAgentRuntime:()=>Kn,createAgentHooksExtension:()=>E4,countUserRunMessages:()=>B2,connectToHub:()=>lQ,computePatchChanges:()=>$4,completeClineDeviceAuth:()=>uj,compareHubBuilds:()=>r5,compareCheckpointToWorkspace:()=>e7,collectPluginMcpOAuthCandidates:()=>uJ,clearPrivateModelsCatalogCache:()=>bV,clearLiveModelsCatalogCache:()=>SV,clearHubDiscoveryIfOwned:()=>vQ,clearHubDiscovery:()=>I1,cleanupConnectorInstanceViaCli:()=>BK,checkManagedHubBuildMismatch:()=>fj,captureWorkspacePathResolved:()=>lH,captureWorkspaceInitialized:()=>GQ,captureWorkspaceInitError:()=>HQ,captureToolUsage:()=>o1,captureTokenUsage:()=>LQ,captureTaskRestarted:()=>FQ,captureTaskCreated:()=>UQ,captureTaskCompleted:()=>x5,captureSubagentExecution:()=>y5,captureSkillUsed:()=>_Q,captureSdkError:()=>ra,captureProviderConfigured:()=>iH,captureProviderApiError:()=>aH,captureModeSwitch:()=>DQ,captureMistakeLimitReached:()=>OQ,captureMentionUsed:()=>NQ,captureMentionSearchResults:()=>AQ,captureMentionFailed:()=>qQ,captureHookDiscovery:()=>EQ,captureExtensionActivated:()=>dH,captureDiffEditFailure:()=>zQ,captureConversationTurnEvent:()=>A8,captureCompactionSkipped:()=>RQ,captureCompactionExecuted:()=>MQ,captureAuthSucceeded:()=>N$,captureAuthStarted:()=>O$,captureAuthRefreshSoftFailure:()=>k5,captureAuthLoggedOut:()=>e$,captureAuthFailed:()=>q$,captureAgentUnexpectedReasoningTokens:()=>uH,captureAgentTeamCreated:()=>TQ,captureAgentCreated:()=>$2,buildWorkspaceMetadata:()=>M5,buildTeamProgressSummary:()=>e4,buildSdkErrorProperties:()=>pa,buildRemoteConfigSessionBlobUploadMetadata:()=>GJ,buildMcpInstallTransport:()=>EJ,buildDelegatedAgentConfig:()=>A6,buildConnectorChildEnv:()=>J8,buildConnectionUpdate:()=>hY,buildConfiguredAgentToolName:()=>p7,buildConfiguredAgentToolDescriptors:()=>i7,buildCheckpointWorkspaceDiff:()=>VJ,bootstrapAgentTeams:()=>K4,authorizeMcpServerOAuth:()=>iX,augmentMcpTimeoutError:()=>u$,applyClineFeaturedModels:()=>_5,agendaTaskSpecToCreateInput:()=>WW,addLocalProvider:()=>rK,accumulateUsageTotals:()=>h0,__test__:()=>jF,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>F7,UnifiedConfigFileWatcher:()=>v6,ToolPresets:()=>A1,TodoTaskInputSchema:()=>b8,TelemetryService:()=>P8,TelemetryLoggerSink:()=>c5,TasksToolInputSchema:()=>l5,TEAM_TOOL_NAMES:()=>B4,TASKS_TOOL_NAME:()=>Z2,TASKS_SYSTEM_PROMPT_RULE:()=>d5,SubprocessSandbox:()=>N4,StructuredCommandInputSchema:()=>K6,StoredProviderSettingsSchema:()=>k4,StoredProviderSettingsEntrySchema:()=>CX,StoredProviderModesSchema:()=>RX,SqliteTeamStore:()=>Z8,SqliteSessionStore:()=>V$,SqliteAgendaTaskStore:()=>kZ,SessionVersioningService:()=>m2,SessionVersioningError:()=>X1,SessionSource:()=>X0,SessionNotFoundError:()=>M$,ScheduledTaskInputSchema:()=>n2,SapSettingsSchema:()=>NX,STOP_SIGTERM_TIMEOUT_MS:()=>qJ,STOP_SIGKILL_TIMEOUT_MS:()=>AJ,SKILLS_CONFIG_DIRECTORY_NAME:()=>U7,SESSION_STATUSES:()=>m9,SESSION_NOT_FOUND_ERROR_CODE:()=>t2,SDK_ERROR_TELEMETRY_EVENT:()=>Yn,RuntimeOAuthTokenManager:()=>K5,RpcClineAccountService:()=>G7,RemoteRuntimeHost:()=>o4,ReasoningSettingsSchema:()=>DX,RULES_CONFIG_DIRECTORY_NAME:()=>hX,RESTART_MAX_DELAY_MS:()=>zJ,RESTART_GIVE_UP_AFTER:()=>OJ,RESTART_COUNTER_RESET_MS:()=>NJ,RESTART_BASE_DELAY_MS:()=>_J,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>HJ,ProviderSettingsSchema:()=>P2,ProviderSettingsManager:()=>H$,ProviderProtocolSchema:()=>UX,ProviderIdSchema:()=>Y7,ProviderClientSchema:()=>FX,PatchActionType:()=>L6,PATCH_MARKERS:()=>e,OpenTelemetryProvider:()=>f8,OcaSettingsSchema:()=>qX,OPENAI_COMPATIBLE_PROVIDERS:()=>J7,OAuthReauthRequiredError:()=>Q8,NodeHubClient:()=>g1,NoOpFeatureFlagsProvider:()=>e6,NativeHubTransportAdapter:()=>uZ,ModelCatalogSettingsSchema:()=>AX,McpSettingsUpdateSkippedError:()=>g4,McpSettingsMutatorPurityError:()=>S2,McpSettingsLockTimeoutError:()=>b2,McpOAuthClientChangedError:()=>X$,MAX_COMMAND_OUTPUT_CHARS:()=>u1,LocalRuntimeHost:()=>G$,Llms:()=>Ma,InMemoryWorkspaceManager:()=>x4,InMemoryMcpManager:()=>i6,HubUIClient:()=>bj,HubTransportError:()=>$1,HubSessionClient:()=>Sj,HubServerTransport:()=>A5,HubScheduleService:()=>q8,HubScheduleCommandService:()=>D8,HubRuntimeHost:()=>d$,HubRunQueue:()=>gZ,HubRunAdmissionRejectedError:()=>q5,HubLockHeldError:()=>FW,HubInstanceLock:()=>u2,HubEventLogStore:()=>mZ,HubCommandError:()=>m8,HookEventPayloadSchema:()=>$X,HookEventNameSchema:()=>e3,HookConfigFileName:()=>M4,HUB_LOCK_HELD_EXIT_CODE:()=>eT,HOOK_CONFIG_FILE_EVENT_MAP:()=>e9,HOOKS_CONFIG_DIRECTORY_NAME:()=>t3,GlobalSettingsSchema:()=>v5,GcpSettingsSchema:()=>zX,FileTeamPersistenceStore:()=>ZW,FeatureFlagsService:()=>t6,FeatureFlagDefaultValue:()=>$n,FEATURE_FLAGS:()=>ea,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>EZ,DefaultToolNames:()=>O0,DefaultRuntimeBuilder:()=>B5,DefaultLlmsSdk:()=>hZ,DEFAULT_MODELS_CATALOG_URL:()=>VX,DEFAULT_MCP_CONNECT_TIMEOUT_MS:()=>k7,DEFAULT_HUB_PORT:()=>Vj,DEFAULT_HUB_PATHNAME:()=>Bj,DEFAULT_HUB_HOST:()=>Yj,CoreSettingsService:()=>k2,CoreSessionService:()=>K$,ContributionRegistry:()=>ia,ConnectorSupervisor:()=>TJ,CommandExitError:()=>w$,ClinePassLimitError:()=>fa,ClineOrgIndividualInferenceSubscriptionError:()=>Pa,ClineNotSubscribedError:()=>Ca,ClineFreeModelLimitError:()=>Ra,ClineCore:()=>ZZ,ClineAccountService:()=>K7,ChatViewStateSchema:()=>AG,ChatSummarySchema:()=>UW,ChatSessionStatusSchema:()=>BW,ChatSessionConfigSchema:()=>VW,ChatMessageSchema:()=>HW,ChatMessageRoleSchema:()=>KW,ChatMessageImageSchema:()=>GW,CORE_TELEMETRY_EVENTS:()=>p,CORE_BUILD_VERSION:()=>TG,BrowserWebSocketHubAdapter:()=>cZ,BUILT_IN_PROVIDER_IDS:()=>kV,BUILT_IN_PROVIDER:()=>j7,AzureSettingsSchema:()=>OX,AwsSettingsSchema:()=>_X,AuthSettingsSchema:()=>LX,AgentTeamsRuntime:()=>s6,AgentTeam:()=>Q5,Agent:()=>Bn,AgendaTaskSpecFileStore:()=>wZ,AgendaTaskRevisionConflictError:()=>O5,AgendaTaskManager:()=>IZ,ALL_DEFAULT_TOOL_NAMES:()=>o$,ADOPTED_POLL_INTERVAL_MS:()=>WZ});R(M,DJ0);import*as Ma from"@cline/llms";import{ClineFreeModelLimitError as Ra,ClineNotSubscribedError as Ca,ClineOrgIndividualInferenceSubscriptionError as Pa,ClinePassLimitError as fa,extractClineFreeModelLimitResetTime as wa,extractClinePassLimitMessage as Sa,getClineNotSubscribedMessage as ba,getClineOrgIndividualInferenceSubscriptionMessage as ka,getClinePassSubscriptionUrl as xa,isClineFreeModelLimitError as ya,isClineFreeModelLimitMessage as Ia,isClineModelNotFoundMessage as ha,isClineNotSubscribedError as va,isClineNotSubscribedMessage as ga,isClineOrgIndividualInferenceSubscriptionError as ma,isClineOrgIndividualInferenceSubscriptionMessage as ca,isClinePassLimitError as ua,isClinePassLimitMessage as da}from"@cline/llms";import{buildClineSystemPrompt as la,buildSdkErrorProperties as pa,ContributionRegistry as ia,captureSdkError as ra,createClineTelemetryServiceConfig as aa,createClineTelemetryServiceMetadata as na,createContributionRegistry as oa,createTool as sa,emptyWorkspaceManifest as ta,FEATURE_FLAGS as ea,FeatureFlagDefaultValue as $n,formatDisplayUserInput as Zn,noopBasicLogger as Qn,normalizeSdkError as Xn,normalizeUserInput as Jn,parseUserCommandEnvelope as Wn,registerDisposable as jn,SDK_ERROR_TELEMETRY_EVENT as Yn,stripUtf8Bom as Vn}from"@cline/shared";import"@cline/shared/storage";var BO={};f(BO,{isClineAccountActionRequest:()=>fX,executeClineAccountAction:()=>wX,RpcClineAccountService:()=>G7,ClineAccountService:()=>K7});function jv($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function VO($,Z,Q){let X=jv(Q);if(X)return X;let J=Z.trim();if(J){let W=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class K7{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let X=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(X)return X;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let X=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,W=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...X??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(VO(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(VO(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(W)}}}function fX($){return $.action==="clineAccount"}async function wX($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class G7{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var KO={};f(KO,{createOAuthClientCallbacks:()=>y4});function y4($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((X)=>{$.onOpenUrlError?.({url:Z,error:X})})}catch(X){$.onOpenUrlError?.({url:Z,error:X})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var lq={};f(lq,{ClineCore:()=>ZZ});function GO($){if($===!0)return{};if(!$)return;return $}function HO($){if($==="user")return"global";return $}class mV{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function UO($){let{host:Z}=$;return{async startSession(Q){let X=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=$.getExtensionContext(),W=await Z.startSession({source:h3(J?.client)??X0.CORE,mode:"automation",sessionMetadata:v0(void 0,{mode:"automation",trigger:Q.source}),interactive:!1,config:{providerId:S4(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:X,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Bv(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:J,configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,X){let J=await Z.runTurn({sessionId:Q,prompt:X.prompt,userImages:X.attachments?.userImages,userFiles:X.attachments?.userFiles?.map((W)=>W.content),delivery:X.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:Vv(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function SX($){let Z=Yv($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),X=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!X&&!J&&!W)return $.context;return{...$.context??{},...Q?{client:Q}:{},...X?{user:X}:{},...J?{logger:J}:{},...W?{telemetry:W}:{},...Z?{automation:Z}:{}}}function Yv($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function Vv($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Bv($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var AN={};f(AN,{createCoreSettingsService:()=>a6,CoreSettingsService:()=>k2});import{existsSync as a4,readdirSync as Wm,readFileSync as jm}from"node:fs";import{basename as I7,dirname as jB,extname as YB,isAbsolute as LN,join as DN,relative as _N,resolve as VB}from"node:path";var RO={};f(RO,{resolveWorkflowsConfigSearchPaths:()=>N7,resolveSkillsConfigSearchPaths:()=>z7,resolveRulesConfigSearchPaths:()=>O7,parseWorkflowConfigFromMarkdown:()=>_7,parseSkillConfigFromMarkdown:()=>L7,parseRuleConfigFromMarkdown:()=>D7,createWorkflowsConfigDefinition:()=>T7,createUserInstructionConfigService:()=>w2,createSkillsConfigDefinition:()=>q7,createRulesConfigDefinition:()=>A7,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>F7,UnifiedConfigFileWatcher:()=>v6,SKILLS_CONFIG_DIRECTORY_NAME:()=>U7,RULES_CONFIG_DIRECTORY_NAME:()=>hX});import{createHash as Kv}from"node:crypto";import{watch as Gv}from"node:fs";import{readdir as Hv,readFile as Uv}from"node:fs/promises";import{join as Fv}from"node:path";function Lv($){return Kv("sha1").update($).digest("hex")}function DO($){return Boolean($&&typeof $==="object"&&"code"in $)}function FO($){return DO($)&&$.code==="ENOENT"}function LO($){return DO($)&&($.code==="EACCES"||$.code==="EPERM")}class v6{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let X of Q.directories){let J=this.baseTypesByDirectory.get(X);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(X,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,X])=>[Q,{...X}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([X,J])=>[X,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=Gv(Z,()=>{let X=this.watchedTypesByDirectory.get(Z);if(!X)return;for(let J of X)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(X)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.emit({kind:"error",type:W,error:X,filePath:Z})})}catch(Q){if(!FO(Q)&&!LO(Q)){let X=$.get(Z);if(!X)continue;for(let J of X)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),X=this.recordsByType.get($.type)??new Map;for(let[J,W]of X.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:W.filePath})}for(let[J,W]of Z.entries()){let j=X.get(J);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:J,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let X of $.directories){Q.add(X);let J=$.discoverFiles?await $.discoverFiles(X):await this.readDirectoryFileCandidates(X);for(let W of J){let{fileName:j,filePath:Y}=W;if(Q.add(W.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await Uv(Y,"utf8"),B={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:Y,content:V},K=$.parseFile(B),G=$.resolveId(K,B).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:K,filePath:Y,fingerprint:Lv(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let X of Q){let J=$.get(X);if(J)J.add(Z);else $.set(X,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await Hv($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:Fv($,Q.name)})).sort((Q,X)=>Q.fileName.localeCompare(X.fileName))}catch(Z){if(FO(Z)||LO(Z))return[];throw Z}}}import{readdir as uV,readFile as Dv,stat as cV}from"node:fs/promises";import{basename as m$,dirname as _v,extname as kX,join as B1,resolve as H7}from"node:path";import{stripUtf8Bom as zv}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as _O,RULES_CONFIG_DIRECTORY_NAME as hX,resolveGlobalAgentsRulesPath as Ov,resolveRulesConfigSearchPaths as Nv,resolveSkillsConfigSearchPaths as qv,resolveWorkflowsConfigSearchPaths as Av,SKILLS_CONFIG_DIRECTORY_NAME as U7,WORKFLOWS_CONFIG_DIRECTORY_NAME as F7}from"@cline/shared/storage";import Tv from"yaml";var bX="SKILL.md",Ev="managed.json",Mv=new Set([".md",".markdown",".txt"]);function dV($){return $.trim().toLowerCase()}function I4($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function xX($){return Mv.has(kX($).toLowerCase())}function zO($){let Z=[],Q=new Set;for(let X of $){let J=H7(X);if(Q.has(J))continue;Q.add(J),Z.push(X)}return Z}function Rv($){let Z=[...$?.directories??z7($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...wz({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return zO(Z)}async function lV($){try{let Z=await uV($,{withFileTypes:!0}),Q=[];for(let X of Z){if(!X.isDirectory())continue;let J=B1($,X.name),W=B1(J,Ev);try{let j=await Dv(W,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(J)}catch(j){if(I4(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((X,J)=>X.localeCompare(J))}catch(Z){if(I4(Z))return[];throw Z}}function pV($){let Z=zv($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,X=Z.match(Q);if(!X)return{data:{},body:Z,hadFrontmatter:!1};let[,J,W]=X;try{let j=Tv.parse(J);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function yX($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let X=$.trim();if(!X&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return X||void 0}function h4($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function Cv($,Z){if(m$($.filePath).toLowerCase()!==_O.toLowerCase())return m$($.filePath,kX($.filePath));if(Z&&H7($.filePath)===H7(Z,_O))return"Workspace AGENTS.md";if(H7($.filePath)===H7(Ov()))return"Global AGENTS.md";return m$($.filePath,kX($.filePath))}function L7($,Z){let{data:Q,body:X,parseError:J}=pV($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in skill file.");let Y=yX(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:yX(Q.description,"description",!1),disabled:h4(Q.disabled,"disabled")??(h4(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function D7($,Z){let{data:Q,body:X,parseError:J}=pV($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=yX(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:h4(Q.disabled,"disabled")??(h4(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function _7($,Z){let{data:Q,body:X,parseError:J}=pV($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=yX(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:h4(Q.disabled,"disabled")??(h4(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function z7($){return qv($)}function O7($){return Nv($)}function N7($){return Av($)}async function OO($){if(m$($)===".cline"){let Z=await lV($);return(await Promise.all(Z.map((X)=>OO(B1(X,U7))))).flat()}try{let Z=await uV($,{withFileTypes:!0}),Q=[];for(let X of Z){if(X.isFile()&&X.name===bX){Q.push({directoryPath:$,fileName:X.name,filePath:B1($,X.name)});continue}let J=B1($,X.name);if(X.isDirectory()||X.isSymbolicLink()&&await cV(J).then((j)=>j.isDirectory()).catch((j)=>{if(I4(j))return!1;throw j}))Q.push({directoryPath:J,fileName:bX,filePath:B1(J,bX)})}return Q}catch(Z){if(I4(Z))return[];throw Z}}async function IX($){if(m$($)===".cline"){let Z=await lV($);return(await Promise.all(Z.map((X)=>IX(B1(X,"rules.md"))))).flat()}try{if((await cV($)).isFile())return[{directoryPath:_v($),fileName:m$($),filePath:$}]}catch(Z){if(!I4(Z))throw Z}try{let Q=(await uV($,{withFileTypes:!0})).filter((J)=>J.isFile()&&xX(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:B1($,J.name)})),X=B1($,"AGENTS.md");try{if((await cV(X)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:X})}}catch{}return Q}catch(Z){if(I4(Z))return[];throw Z}}async function Pv($){if(m$($)===".cline"){let Z=await lV($);return(await Promise.all(Z.map((X)=>IX(B1(X,F7))))).flat()}return IX($)}function q7($){let Z=Rv($),Q=$?.workspacePath?B1($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?zO([...Z,Q]):Z,discoverFiles:OO,includeFile:(X)=>X===bX,parseFile:(X)=>L7(X.content,m$(X.directoryPath)),resolveId:(X)=>dV(X.name)}}function A7($){let Z=$?.directories??O7($?.workspacePath),Q=$?.workspacePath?B1($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:IX,includeFile:(X,J)=>X===".clinerules"||xX(X)||xX(J),parseFile:(X)=>D7(X.content,Cv(X,$?.workspacePath)),resolveId:(X)=>dV(X.name)}}function T7($){let Z=$?.directories??N7($?.workspacePath),Q=$?.workspacePath?B1($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:Pv,includeFile:(X)=>xX(X),parseFile:(X)=>_7(X.content,m$(X.filePath,kX(X.filePath))),resolveId:(X)=>dV(X.name)}}function NO($){let Z=[q7($?.skills),A7($?.rules),T7($?.workflows)];return new v6(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{createHash as fv}from"node:crypto";import{truncateSplit as qO}from"@cline/shared";function v4($){return $.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^\p{L}\p{N}_.:@-]+/gu,"-").replace(/-+/g,"-").replace(/^-/,"").replace(/-$/,"")}function wv($){let Z=v4($).replace(/[^a-z0-9_-]+/g,"-").replace(/^-/,"").replace(/-$/,""),Q=fv("sha256").update($).digest("hex").slice(0,12);return`${Z||"command"}-${Q}`}function Sv($,Z){if($.description?.trim())return qO($.description,".");if(Z==="workflow")return;return qO($.instructions,".")}function bv($){return $.disabled!==!0}function AO($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,X])=>({id:Q,record:X})).filter(({record:Q})=>bv(Q.item)).map(({id:Q,record:X})=>({id:Q,name:v4(X.item.name)||`${Z}-${wv(Q)}`,instructions:X.item.instructions,description:Sv(X.item,Z),kind:Z})).sort((Q,X)=>Q.name.localeCompare(X.name)||Q.id.localeCompare(X.id))}function E7($){let Z=new Map;for(let Q of[...AO($,"skill"),...AO($,"workflow")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,X)=>Q.name.localeCompare(X.name))}function TO($,Z,Q){if(!$.startsWith("/")||$.length<2)return $;let X=$.match(/^\/(\S+)/);if(!X)return $;let J=X[1],W=v4(J);if(!W)return $;let j=J.length+1,Y=$.slice(j),V=E7(Z).find((B)=>B.name===W);if(!V)return $;if(V.kind==="skill"&&Q?.expandSkillCommands===!1)return $;return`${V.instructions}${Y}`}function vX($){return $.trim().replace(/^\/+/,"").toLowerCase()}function kv($){if(!$||$.length===0)return;let Z=$.map(vX).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function xv($,Z,Q){if(!Q)return!0;let X=vX($),J=vX(Z),W=X.includes(":")?X.split(":").at(-1)??X:X,j=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(X)||Q.has(J)||Q.has(W)||Q.has(j)}function M7($,Z){let Q=kv(Z);return[...$.getSnapshot("skill").entries()].map(([J,W])=>{let j=W.item;return{id:J,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((J)=>xv(J.id,J.name,Q))}function yv($,Z){return M7($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,X)=>Q.localeCompare(X))}function Iv($,Z,Q){let X=vX(Z);if(!X)return{error:"Missing skill name."};let J=M7($,Q),W=J.find((K)=>K.id===X);if(W){let{skill:K}=W;if(K.disabled===!0)return{error:`Skill "${K.name}" is configured but disabled.`};return{id:W.id,skill:K}}let j=X.includes(":")?X.split(":").at(-1)??X:X,Y=J.filter(({id:K})=>{if(K===j)return!0;return K.endsWith(`:${j}`)}),V=Y.filter(({skill:K})=>K.disabled!==!0);if(V.length===1){let{id:K,skill:G}=V[0];return{id:K,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:K})=>K).join(", ")}`};if(Y.length===1){let{skill:K}=Y[0];return{error:`Skill "${K.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${Y.map(({id:K})=>K).join(", ")}`};let B=yv($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function iV($,Z=Promise.resolve(),Q){let X=new Set,J=async(W,j)=>{await Z;let Y=Iv($,W,Q);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(X.has(V))return`Skill "${B.name}" is already running.`;X.add(V);try{let K=j?.trim(),G=K?`
|
|
553
553
|
<command-args>${K}</command-args>`:"",H=B.description?.trim()?`Description: ${B.description.trim()}
|
|
554
554
|
|
|
555
555
|
`:"";return`<command-name>${B.name}</command-name>${G}
|
|
@@ -589,7 +589,7 @@ ${Z}`}function cv($,Z){let{data:Q,body:X,hadFrontmatter:J}=mv($);if(!J&&Z)return
|
|
|
589
589
|
`;if(jq(Bq(J),{recursive:!0}),Yq(J,j,"utf8"),!this.messagesArtifactUploader)return;try{await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:J,contents:j,row:X})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}resolveCompactionPath($){let{manifest:Z}=this.readManifestFile($);return Z?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,Z){let Q=this.readManifestFile($);if(!Q.manifest)return;if(Q.manifest.compaction_path===Z)return;this.writeSessionManifest(Q.path,{...Q.manifest,compaction_path:Z})}async readSessionCompactionState($){let Z=this.resolveCompactionPath($);try{return c1(JSON.parse(await Vq(Z,"utf8")))}catch(Q){if($u(Q))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:Z,error:Q,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,Z){let Q=this.resolveCompactionPath($),X=G9.parse(Z);await Wq(Q,`${JSON.stringify(X,null,2)}
|
|
590
590
|
`),this.updateCompactionPath($,Q)}async deleteSessionCompactionState($){await sc(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,Z,Q,X,J){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??tc(ec(),"hooks.jsonl");ac(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:X,sessionId:Z,pid:Q,source:J})}
|
|
591
591
|
`,"utf8")}}import{appendFileSync as Qu}from"node:fs";import{join as Xu}from"node:path";import{resolveRootSessionId as Kq}from"@cline/shared";import{ensureHookLogDir as Ju}from"@cline/shared/storage";import{z as CB}from"zod";var Wu=CB.looseObject({task:CB.string().optional(),systemPrompt:CB.string().optional()});class XJ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,X){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=X}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){let Q=U4($.metadata);return{sessionId:Z.sessionId,source:$.source,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:p9({metadata:v0(void 0,{mode:Z.mode,version:Q?.version}),prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=Kq($.sessionContext);if(!Z)return;let Q=Wu.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let X=F4(Z,$.agentId),J=await this.adapter.getSession(X),W=D0(),j=this.manifestStore.artifacts.subagentArtifactPaths(X,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),Y=$.prompt??J?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J){let V=this.buildSubsessionRow(Q,{sessionId:X,mode:"subagent",parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:W,...j});return await this.adapter.upsertSession(V),this.manifestStore.initializeMessagesFile(V,j.messagesPath,W),X}return await this.adapter.updateSession({sessionId:X,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??Y??null,metadata:p9({metadata:v0(J.metadata,{mode:"subagent",version:U4(Q.metadata)?.version}),prompt:J.prompt??Y??null}),expectedStatusLock:J.statusLock}),X}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=Kq($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=F4(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,d9(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let X=f0(Z)?null:D0(),J=f0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:X,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let X of Q)await this.applySubagentStatusBySessionId(X.sessionId,Z)}async onTeamTaskStart($,Z,Q){let X=await this.adapter.getSession($);if(!X)return;let J=c9($,Z),W=D0(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z),Y=this.buildSubsessionRow(X,{sessionId:J,mode:"team",parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:W,messagesPath:j});await this.adapter.upsertSession(Y),this.manifestStore.initializeMessagesFile(Y,j,W);let V=this.teamTaskQueueKey($,Z),B=this.teamTaskSessionsByAgent.get(V)??[];B.push(J),this.teamTaskSessionsByAgent.set(V,B)}async onTeamTaskEnd($,Z,Q,X,J,W){let j=this.teamTaskQueueKey($,Z),Y=this.teamTaskSessionsByAgent.get(j);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(j);if(!V)return;let B=J?.messages??W,K=this.toPersistedMessages(B,J,W);if(K)await this.manifestStore.persistSessionMessages(V,K);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,X){let J=this.teamTaskQueueKey($,Z),W=this.teamTaskSessionsByAgent.get(J)?.[0];if(!W)return;let j=Q.trim();if(!j)return;let Y=X?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),K=this.teamTaskLastHeartbeatBySession.get(W)??0;if(B-K<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(W,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(W)===V)return;this.teamTaskLastProgressLineBySession.set(W,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let X=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(X)await this.manifestStore.persistSessionMessages(Q,X);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Xu(Ju(),"hooks.jsonl");Qu(Q,`${JSON.stringify({ts:D0(),...$})}
|
|
592
|
-
`,"utf8")}}import{formatUserInputBlock as Cu}from"@cline/shared";var qq={};f(qq,{toTeamProgressLifecycleEvent:()=>$5,sanitizeTeamName:()=>m_,reviveTeamStateDates:()=>b3,parseConfiguredAgentConfig:()=>l7,loadConfiguredAgentConfigs:()=>s4,createWorkerReviewerTeam:()=>Nq,createSpawnAgentTool:()=>q2,createDelegatedAgentConfigProvider:()=>O2,createDelegatedAgent:()=>N2,createConfiguredAgentTools:()=>t4,createAgentTeamsTools:()=>E6,createAgentTeam:()=>wB,buildTeamProgressSummary:()=>e4,buildDelegatedAgentConfig:()=>A6,buildConfiguredAgentToolName:()=>p7,buildConfiguredAgentToolDescriptors:()=>i7,bootstrapAgentTeams:()=>K4,AgentTeamsRuntime:()=>s6,AgentTeam:()=>Q5});import{existsSync as ju,readdirSync as Yu,readFileSync as Vu}from"node:fs";import{basename as Gq,extname as Bu,join as Ku}from"node:path";import{stripUtf8Bom as Gu}from"@cline/shared";import{resolveAgentConfigSearchPaths as Hu}from"@cline/shared/storage";import Uq from"yaml";import{z as Q1}from"zod";var Fq=Q1.object({name:Q1.string().trim().min(1),description:Q1.string().trim().min(1),tools:Q1.union([Q1.string(),Q1.array(Q1.string())]).optional(),skills:Q1.union([Q1.string(),Q1.array(Q1.string())]).optional(),providerId:Q1.string().trim().min(1).optional(),modelId:Q1.string().trim().min(1).optional(),maxIterations:Q1.number().int().positive().optional()});function Uu($){$=Gu($);let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,X=/^---[^\S\r\n]*(?:\r?\n|$)/gm;X.lastIndex=Q;let J,W=Array.from($.matchAll(X)).filter((j)=>j.index>=Q);for(let j of W){let Y=j.index,V=$.slice(Q,Y);try{let B=Uq.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;Fq.parse(B);let K=$.slice(Y+j[0].length);J={frontmatter:V,body:K}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function Hq($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function Fu($){return $.trim().toLowerCase()}function Lu($){let Z=Bu($).toLowerCase();return Z===".yml"||Z===".yaml"}function l7($,Z={}){let{frontmatter:Q,body:X}=Uu($),J=Uq.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let W=Fq.parse(J),j=X.trim();if(!j)throw Error("Missing system prompt body in agent config file.");return{name:W.name,description:W.description,tools:Hq(W.tools),skills:Hq(W.skills),providerId:W.providerId,modelId:W.modelId,maxIterations:W.maxIterations,systemPrompt:j,path:Z.path}}function s4($){let Z=$.searchPaths??Hu($.workspaceRoot),Q=new Map,X=[];for(let W of Z.filter(Boolean)){if(!ju(W))continue;let j;try{j=Yu(W,{withFileTypes:!0})}catch(Y){X.push({path:W,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of j){if(!Y.isFile()||!Lu(Y.name))continue;let V=Ku(W,Y.name);try{let B=Vu(V,"utf8"),K=l7(B,{path:V}),G=Fu(K.name);if(!Q.has(G))Q.set(G,K)}catch(B){X.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((W,j)=>(W.path?Gq(W.path):W.name).localeCompare(j.path?Gq(j.path):j.name)),errors:X}}import{createTool as Du,zodToJsonSchema as _u}from"@cline/shared";import{z as Lq}from"zod";var PB="subagent_",JJ=64,zu=Lq.object({prompt:Lq.string().trim().min(1).describe("Task for the subagent to perform")});function Ou($){let Z="",Q=!0;for(let X of $.trim().toLowerCase()){let J=X.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||X==="_")||X==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=X,Q=!1}return Q?Z.slice(0,-1):Z}function Nu($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function p7($){let Z=Ou($)||"agent",Q=Nu($).slice(0,6),X=`${PB}${Z}`;if(X.length<=JJ)return X;let J=JJ-PB.length-Q.length-1,W=Z.slice(0,Math.max(1,J));return`${PB}${W}_${Q}`.slice(0,JJ)}function i7($){let Z=new Set,Q=[];for(let X of[...$].sort((J,W)=>J.name.localeCompare(W.name))){let J=p7(X.name),W=J,j=2;while(Z.has(W)){let Y=`_${j++}`,V=Math.max(1,JJ-Y.length);W=`${J.slice(0,V)}${Y}`}Z.add(W),Q.push({toolName:W,config:X})}return Q}function qu($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function t4($){return i7($.agents).map(({toolName:Z,config:Q})=>{return Du({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:_u(zu),execute:async(J,W)=>{let j=$.configProvider.getRuntimeConfig(),Y=O2(qu(j,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,W):[],B=N2({kind:"subagent",prompt:Q.systemPrompt,configProvider:Y,tools:V,maxIterations:Q.maxIterations,parentAgentId:W.agentId,abortSignal:W.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),K=B.getAgentId(),G=B.getConversationId(),H=W.agentId,U={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:K,conversationId:G,parentAgentId:H,input:U})}catch{}try{let F=await B.run(J.prompt),L={text:F.text,iterations:F.iterations,finishReason:F.finishReason,usage:{inputTokens:F.usage.inputTokens,outputTokens:F.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:K,conversationId:G,parentAgentId:H,input:U,result:L,agentResult:F})}catch{}return L}catch(F){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:K,conversationId:G,parentAgentId:H,input:U,error:F instanceof Error?F:Error(String(F))})}catch{}throw F}},timeoutMs:300000,retryable:!1})})}function B$(){return new Date().toISOString()}function Dq($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function Au($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let X=new Set;for(let J of $){if(J.status==="finalized")continue;for(let W of J.requiredSections)if(!Q.has(`${J.id}:${W}`))X.add(`${J.id}:${W}`)}return[...X].sort((J,W)=>J.localeCompare(W))}function e4($,Z){let Q={idle:0,running:0,stopped:0},X={pending:0,in_progress:0,blocked:0,completed:0},J={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},Y=0,V=0;for(let D of Z.members)if(Q[D.status]+=1,D.role==="lead")Y+=1;else V+=1;let B=[],K=[],G=Z.tasks.filter((D)=>D.status==="completed").length,H=new Map(Z.tasks.map((D)=>[D.id,D]));for(let D of Z.tasks){if(X[D.status]+=1,D.status==="blocked"){B.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((_)=>{return H.get(_)?.status==="completed"}))K.push(D.id)}let U=[],F,L=0;for(let D of Z.runs){if(J[D.status]+=1,D.status==="queued"||D.status==="running")U.push(D.id);let z=D.startedAt.getTime();if(z>=L)L=z,F=D.id}for(let D of Z.outcomes)W[D.status]+=1;for(let D of Z.outcomeFragments)j[D.status]+=1;return{teamName:$,updatedAt:B$(),members:{total:Z.members.length,byStatus:Q,leadCount:Y,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:X,blockedTaskIds:B,readyTaskIds:K,completionPct:Dq(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:U,latestRunId:F},outcomes:{total:Z.outcomes.length,byStatus:W,finalizedPct:Dq(W.finalized,Z.outcomes.length),missingRequiredSections:Au(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:j}}}function $5($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$()}}import{sanitizeFileName as Tu,TeamMessageType as i}from"@cline/shared";import{nanoid as Eu}from"nanoid";import{TeamMessageType as
|
|
592
|
+
`,"utf8")}}import{formatUserInputBlock as Cu}from"@cline/shared";var qq={};f(qq,{toTeamProgressLifecycleEvent:()=>$5,sanitizeTeamName:()=>m_,reviveTeamStateDates:()=>b3,parseConfiguredAgentConfig:()=>l7,loadConfiguredAgentConfigs:()=>s4,createWorkerReviewerTeam:()=>Nq,createSpawnAgentTool:()=>q2,createDelegatedAgentConfigProvider:()=>O2,createDelegatedAgent:()=>N2,createConfiguredAgentTools:()=>t4,createAgentTeamsTools:()=>E6,createAgentTeam:()=>wB,buildTeamProgressSummary:()=>e4,buildDelegatedAgentConfig:()=>A6,buildConfiguredAgentToolName:()=>p7,buildConfiguredAgentToolDescriptors:()=>i7,bootstrapAgentTeams:()=>K4,AgentTeamsRuntime:()=>s6,AgentTeam:()=>Q5});import{existsSync as ju,readdirSync as Yu,readFileSync as Vu}from"node:fs";import{basename as Gq,extname as Bu,join as Ku}from"node:path";import{stripUtf8Bom as Gu}from"@cline/shared";import{resolveAgentConfigSearchPaths as Hu}from"@cline/shared/storage";import Uq from"yaml";import{z as Q1}from"zod";var Fq=Q1.object({name:Q1.string().trim().min(1),description:Q1.string().trim().min(1),tools:Q1.union([Q1.string(),Q1.array(Q1.string())]).optional(),skills:Q1.union([Q1.string(),Q1.array(Q1.string())]).optional(),providerId:Q1.string().trim().min(1).optional(),modelId:Q1.string().trim().min(1).optional(),maxIterations:Q1.number().int().positive().optional()});function Uu($){$=Gu($);let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,X=/^---[^\S\r\n]*(?:\r?\n|$)/gm;X.lastIndex=Q;let J,W=Array.from($.matchAll(X)).filter((j)=>j.index>=Q);for(let j of W){let Y=j.index,V=$.slice(Q,Y);try{let B=Uq.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;Fq.parse(B);let K=$.slice(Y+j[0].length);J={frontmatter:V,body:K}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function Hq($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function Fu($){return $.trim().toLowerCase()}function Lu($){let Z=Bu($).toLowerCase();return Z===".yml"||Z===".yaml"}function l7($,Z={}){let{frontmatter:Q,body:X}=Uu($),J=Uq.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let W=Fq.parse(J),j=X.trim();if(!j)throw Error("Missing system prompt body in agent config file.");return{name:W.name,description:W.description,tools:Hq(W.tools),skills:Hq(W.skills),providerId:W.providerId,modelId:W.modelId,maxIterations:W.maxIterations,systemPrompt:j,path:Z.path}}function s4($){let Z=$.searchPaths??Hu($.workspaceRoot),Q=new Map,X=[];for(let W of Z.filter(Boolean)){if(!ju(W))continue;let j;try{j=Yu(W,{withFileTypes:!0})}catch(Y){X.push({path:W,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of j){if(!Y.isFile()||!Lu(Y.name))continue;let V=Ku(W,Y.name);try{let B=Vu(V,"utf8"),K=l7(B,{path:V}),G=Fu(K.name);if(!Q.has(G))Q.set(G,K)}catch(B){X.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((W,j)=>(W.path?Gq(W.path):W.name).localeCompare(j.path?Gq(j.path):j.name)),errors:X}}import{createTool as Du,zodToJsonSchema as _u}from"@cline/shared";import{z as Lq}from"zod";var PB="subagent_",JJ=64,zu=Lq.object({prompt:Lq.string().trim().min(1).describe("Task for the subagent to perform")});function Ou($){let Z="",Q=!0;for(let X of $.trim().toLowerCase()){let J=X.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||X==="_")||X==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=X,Q=!1}return Q?Z.slice(0,-1):Z}function Nu($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function p7($){let Z=Ou($)||"agent",Q=Nu($).slice(0,6),X=`${PB}${Z}`;if(X.length<=JJ)return X;let J=JJ-PB.length-Q.length-1,W=Z.slice(0,Math.max(1,J));return`${PB}${W}_${Q}`.slice(0,JJ)}function i7($){let Z=new Set,Q=[];for(let X of[...$].sort((J,W)=>J.name.localeCompare(W.name))){let J=p7(X.name),W=J,j=2;while(Z.has(W)){let Y=`_${j++}`,V=Math.max(1,JJ-Y.length);W=`${J.slice(0,V)}${Y}`}Z.add(W),Q.push({toolName:W,config:X})}return Q}function qu($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function t4($){return i7($.agents).map(({toolName:Z,config:Q})=>{return Du({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:_u(zu),execute:async(J,W)=>{let j=$.configProvider.getRuntimeConfig(),Y=O2(qu(j,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,W):[],B=N2({kind:"subagent",prompt:Q.systemPrompt,configProvider:Y,tools:V,maxIterations:Q.maxIterations,parentAgentId:W.agentId,abortSignal:W.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),K=B.getAgentId(),G=B.getConversationId(),H=W.agentId,U={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:K,conversationId:G,parentAgentId:H,input:U})}catch{}try{let F=await B.run(J.prompt),L={text:F.text,iterations:F.iterations,finishReason:F.finishReason,usage:{inputTokens:F.usage.inputTokens,outputTokens:F.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:K,conversationId:G,parentAgentId:H,input:U,result:L,agentResult:F})}catch{}return L}catch(F){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:K,conversationId:G,parentAgentId:H,input:U,error:F instanceof Error?F:Error(String(F))})}catch{}throw F}},timeoutMs:300000,retryable:!1})})}function B$(){return new Date().toISOString()}function Dq($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function Au($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let X=new Set;for(let J of $){if(J.status==="finalized")continue;for(let W of J.requiredSections)if(!Q.has(`${J.id}:${W}`))X.add(`${J.id}:${W}`)}return[...X].sort((J,W)=>J.localeCompare(W))}function e4($,Z){let Q={idle:0,running:0,stopped:0},X={pending:0,in_progress:0,blocked:0,completed:0},J={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},Y=0,V=0;for(let D of Z.members)if(Q[D.status]+=1,D.role==="lead")Y+=1;else V+=1;let B=[],K=[],G=Z.tasks.filter((D)=>D.status==="completed").length,H=new Map(Z.tasks.map((D)=>[D.id,D]));for(let D of Z.tasks){if(X[D.status]+=1,D.status==="blocked"){B.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((_)=>{return H.get(_)?.status==="completed"}))K.push(D.id)}let U=[],F,L=0;for(let D of Z.runs){if(J[D.status]+=1,D.status==="queued"||D.status==="running")U.push(D.id);let z=D.startedAt.getTime();if(z>=L)L=z,F=D.id}for(let D of Z.outcomes)W[D.status]+=1;for(let D of Z.outcomeFragments)j[D.status]+=1;return{teamName:$,updatedAt:B$(),members:{total:Z.members.length,byStatus:Q,leadCount:Y,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:X,blockedTaskIds:B,readyTaskIds:K,completionPct:Dq(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:U,latestRunId:F},outcomes:{total:Z.outcomes.length,byStatus:W,finalizedPct:Dq(W.finalized,Z.outcomes.length),missingRequiredSections:Au(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:j}}}function $5($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:B$()}}import{sanitizeFileName as Tu,TeamMessageType as i}from"@cline/shared";import{nanoid as Eu}from"nanoid";import{TeamMessageType as i70}from"@cline/shared";function fB($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function _q($,Z){return $?.status==="stopped"&&fB(Z)}var Mu=600000,zq="recovered_queued";function Ru($){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.
|
|
593
593
|
|
|
594
594
|
${$.message}`}class Q5{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,X]of Object.entries($))this.addAgent(Q,X)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:i.AgentEvent,agentId:$,event:J})}},X=new z2(Q);if(Q.onEvent)X.subscribeEvents(Q.onEvent);this.agents.set($,X),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:i.TaskStart,agentId:$,message:Z});try{let X=await Q.run(Z);return this.emitEvent({type:i.TaskEnd,agentId:$,result:X}),X}catch(X){let J=X instanceof Error?X:Error(String(X));throw this.emitEvent({type:i.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),X}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:i.TaskStart,agentId:$,message:Z});try{let X=await Q.continue(Z);return this.emitEvent({type:i.TaskEnd,agentId:$,result:X}),X}catch(X){let J=X instanceof Error?X:Error(String(X));throw this.emitEvent({type:i.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),X}}async runParallel($){let Z=$.map(async(Q)=>{let X=this.agents.get(Q.agentId);if(!X)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:i.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await X.run(Q.message);return this.emitEvent({type:i.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let W=J instanceof Error?J:Error(String(J));return this.emitEvent({type:i.TaskEnd,agentId:Q.agentId,error:W,messages:X.getMessages()}),{agentId:Q.agentId,result:void 0,error:W,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let X=this.agents.get(Q.agentId);if(!X){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:i.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await X.run(Q.message);this.emitEvent({type:i.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let W=J instanceof Error?J:Error(String(J));this.emitEvent({type:i.TaskEnd,agentId:Q.agentId,error:W,messages:X.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:W,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let X=[],J=Z;for(let W of $){let j=this.agents.get(W);if(!j){X.push({agentId:W,result:void 0,error:Error(`Agent "${W}" not found in team`)});break}this.emitEvent({type:i.TaskStart,agentId:W,message:J});try{let Y=await j.run(J);this.emitEvent({type:i.TaskEnd,agentId:W,result:Y}),X.push({agentId:W,result:Y});let V=$.indexOf(W)+1;if(V<$.length){let B=$[V];J=Q?Q(Y,B):`Previous agent output:
|
|
595
595
|
${Y.text}
|
|
@@ -787,7 +787,7 @@ ${J}`,$.config.mode)}function a7($,Z){return Cu($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
787
787
|
reviewed_by = excluded.reviewed_by,
|
|
788
788
|
reviewed_at = excluded.reviewed_at,
|
|
789
789
|
version = team_outcome_fragments.version + 1`,[X,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($,Z){let Q=V5($),X=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(X.length===0)return[];let J=ZK();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
790
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),X.map((W)=>W.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function QK($={}){try{let Z=new Z8($);return Z.init(),Z}catch{let Z=new QZ({teamDir:$.teamDir});return Z.init(),Z}}function FJ($,Z){return Cd($,Z)}function wd($,Z){let Q=Z?.["*"]??{},X=Z?.[$]??{};return{...Q,...X}.enabled!==!1}function Sd($,Z){return $.filter((Q)=>wd(Q.name,Z))}function XK($,Z){return T$(Sd($,Z))}var bd={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function kd($){let Z=$.trim().toLowerCase();return bd[Z]??Z}function xd($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(kd));if(Z.skills!==void 0)Q.add("skills");return $.filter((X)=>Q.has(X.name))}function DJ(){return`team-${fd(5)}`}function LJ($,Z,Q,X,J,W,j,Y,V,B){let K=A1[k$({mode:Q})],G=j4(Z,X,Q,J??W4);return XK(R6({cwd:$,telemetry:V,executorOptions:{bash:{executionController:B}},...K,enableSkills:!!j,...G,executors:{...j?{skills:j}:{},...Y??{}}}),W)}function yd($){return LJ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Id,$.toolExecutors).some((Z)=>Z.name==="skills")}var Id=async()=>"";async function hd($){let Z=K0();if(!c$({filePath:Z}))return{tools:[]};let Q=new i6({clientFactory:p6({settingsPath:Z})}),X;try{X=await d6(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=X.filter((Y)=>Y.disabled!==!0),W=await Promise.allSettled(J.map((Y)=>p4({serverName:Y.name,provider:Q,timeoutMs:Pd(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of W.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function vd($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function gd($){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 md($){let Z=A1[k$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class B5{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:X,logger:J,telemetry:W,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:K}=$,G=$.onTeamEvent??(()=>{}),H=md(Z),U=[];if(H.enableTools&&R8("web_search")&&ZA({providerId:Z.providerId,modelId:Z.modelId},"web_search"))U.push({name:"web_search"});if(H.enableTools&&ZA({providerId:Z.providerId,modelId:Z.modelId},"image_generation"))U.push({name:"image_generation",outputFormat:"png"});let F=Z.workspaceRoot??Z.cwd,L=$.toolPolicies??Z.toolPolicies,D=s1(),z=[],_=Z.teamName?.trim()||DJ(),O=Z.sessionId?.trim()||_,A=H.enableSpawnAgent?s4({workspaceRoot:F}):{configs:[],errors:[]},q=A.configs.some((s)=>s.skills!==void 0),N=FJ(B,"rules"),T=FJ(B,"skills"),C=T||q,r=FJ(B,"workflows"),y=FJ(B,"plugins"),x=N||T||r,E=!1,g=Boolean(V),b=V,o;for(let s of A.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${s.path}: ${s.error.message}`);if(!b&&(x||q))b=w2({skills:C?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(b)await b.start().catch(()=>{});let k=H.enableTools&&T&&Boolean(b)&&b?.hasConfiguredSkills(Z.skills)===!0&&yd({cwd:Z.cwd,providerId:Z.providerId,mode:H.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:L,toolExecutors:K}),I=b&&x?b.createExtension({includeRules:N,includeSkills:T,includeWorkflows:r,registerSkillsTool:k,allowedSkillNames:Z.skills}):void 0,d=H.mode==="plan"&&H.enableTools?F3({telemetry:W??Z.telemetry}):void 0,Z0=[I,d].filter((s)=>s!==void 0),m0=Z0.length>0?[...X??Z.extensions??[],...Z0]:X??Z.extensions;if(H.enableTools){if(z.push(...LJ(Z.cwd,Z.providerId,H.mode,Z.modelId,Z.toolRoutingRules,L,void 0,K,W??Z.telemetry,$.runCommandExecutionController)),!H.disableMcpSettingsTools){let s=await hd(Z.logger);z.push(...s.tools),o=s.shutdown}}let G0,G1=H.enableAgentTeams?QK():void 0,r0=G1?.loadRuntime(O),_$=r0?.state,H1=r0?.teammates??[],c0=new Map(H1.map((s)=>[s.agentId,s])),t0=Z.sessionId||_,n,U1=[],u=!1,F0=O2({providerId:Z.providerId,modelId:Z.modelId,distinctId:$.distinctId,sessionId:Z.sessionId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:m0,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(H.enableSpawnAgent){if(A.configs.length>0)z.push(...XK(t4({configProvider:F0,agents:A.configs,createSubAgentTools:(s)=>H.enableTools?xd(LJ(Z.cwd,s.providerId??Z.providerId,H.mode,s.modelId??Z.modelId,Z.toolRoutingRules,L,s.skills!==void 0&&b?.createSkillsExecutor?b.createSkillsExecutor(s.skills):void 0,K,W??Z.telemetry,$.runCommandExecutionController),s):[],hookErrorMode:Z.hookErrorMode,toolPolicies:L,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),L))}if(!this.teamRuntimeEntries.has(t0))this.teamRuntimeEntries.set(t0,{delegatedAgentConfigProvider:F0});let k0=()=>{if(!H.enableAgentTeams)return;let s=this.teamRuntimeEntries.get(t0)??{delegatedAgentConfigProvider:F0};if(this.teamRuntimeEntries.set(t0,s),G0=s.runtime,!G0){if(G0=new s6({teamName:_,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:H.missionLogIntervalSteps,missionLogIntervalMs:H.missionLogIntervalMs,onTeamEvent:(M0)=>{if(G(M0),G0&&G1){if(M0.type==="teammate_spawned"&&M0.teammate?.rolePrompt){let z$={agentId:M0.agentId,rolePrompt:M0.teammate.rolePrompt,modelId:M0.teammate.modelId,maxIterations:M0.teammate.maxIterations};c0.set(z$.agentId,z$)}if(M0.type==="teammate_shutdown"&&!gd(M0.reason))c0.delete(M0.agentId);G1.handleTeamEvent(O,M0),G1.persistRuntime(O,G0.exportState(),Array.from(c0.values()))}}}),_$)G0.hydrateState(_$),u=!0;s.runtime=G0}if(!E){if(!G0)return;E=!0;let M0=K4({runtime:G0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(_$),restoredTeammates:H1,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(z$)=>{U1=z$,n?.addTools(z$)},createBaseTools:H.enableTools?()=>LJ(Z.cwd,Z.providerId,H.mode,Z.modelId,Z.toolRoutingRules,L,void 0,K,W??Z.telemetry,$.runCommandExecutionController):void 0,teammateConfigProvider:F0});if(u)G0.recoverActiveRuns("runtime_recovered");if(M0.restoredFromPersistence)Y?.();z.push(...M0.tools)}return G0};if(H.enableSpawnAgent&&j){let s=j();z.push({...s,execute:async(M0,z$)=>{return k0(),s.execute(M0,z$)}})}if(H.enableAgentTeams)k0();let a0=XK(z,L),p2=a0.some((s)=>s.name==="submit_and_exit"&&s.lifecycle?.completesRun===!0),$Q=H.enableAgentTeams?()=>{let s=this.teamRuntimeEntries.get(t0)?.runtime;if(!s)return;let M0=s.listTasks(),z$=M0.some((n$)=>n$.status==="in_progress"||n$.status==="pending"),VH=s.listRuns({}),EM=VH.some((n$)=>n$.status==="running"||n$.status==="queued");if(z$||EM){let n$=M0.filter((F1)=>F1.status==="in_progress"||F1.status==="pending").map((F1)=>`${F1.id} (${F1.status}): ${F1.title}`).join(", "),BH=VH.filter((F1)=>F1.status==="running"||F1.status==="queued").map((F1)=>`${F1.id} (${F1.status})`).join(", "),PW=[];if(n$)PW.push(`Unfinished tasks: ${n$}`);if(BH)PW.push(`Active runs: ${BH}`);return`[SYSTEM] You still have team obligations. ${PW.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,TM=p2?{requireCompletionTool:!0,...$Q?{completionGuard:$Q}:{}}:$Q?{completionGuard:$Q}:void 0;return{tools:a0,modelTools:U,logger:J??Z.logger,telemetry:W??Z.telemetry,teamRuntime:G0,teamRestoredFromPersistence:Boolean(_$),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(t0)?.delegatedAgentConfigProvider??F0,extensions:m0,completionPolicy:TM,registerLeadAgent:(s)=>{if(n=s,U1.length>0)s.addTools(T$(U1,[...D]))},shutdown:async(s)=>{if(vd(G0,s),this.teamRuntimeEntries.delete(t0),await o?.(),!g)b?.stop()}}}}var XA={};f(XA,{RuntimeOAuthTokenManager:()=>K5,OAuthReauthRequiredError:()=>Q8});function cd($,Z){let Q=$?.expiresAt,X=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===X}class Q8 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class K5{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new H$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=C0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let X=this.refreshInFlight.get(Z);if(X)return X;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((W)=>{throw W}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let X=C0($);if(!X)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return j0(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let W=K9($,J);if(!W)return j0(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;j0(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${d0(W.access)} refreshTokenHash=${d0(W.refresh)}`);let j=await X.refresh({settings:J,credentials:W,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw j0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new Q8($);let Y=W6({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:j,setLastUsed:!1,save:!1}),V=!cd(J.auth,Y.auth);if(V)j0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${d0(j.access)} newRefreshTokenHash=${d0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else j0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:X.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}var WA={};f(WA,{requestDesktopToolApproval:()=>WK});import{mkdir as ud,readFile as dd,unlink as ld,writeFile as pd}from"node:fs/promises";import{join as JA}from"node:path";function id($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function rd($){return new Promise((Z)=>setTimeout(Z,$))}async function JK($){try{await ld($)}catch{}}async function WK($,Z={}){let Q=Z.approvalDir?.trim(),X=Z.sessionId?.trim();if(!Q||!X)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await ud(Q,{recursive:!0});let J=id(`${$.toolCallId}`),W=JA(Q,`${X}.request.${J}.json`),j=JA(Q,`${X}.decision.${J}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await pd(W,`${JSON.stringify({requestId:J,sessionId:X,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
790
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),X.map((W)=>W.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function QK($={}){try{let Z=new Z8($);return Z.init(),Z}catch{let Z=new QZ({teamDir:$.teamDir});return Z.init(),Z}}function FJ($,Z){return Cd($,Z)}function wd($,Z){let Q=Z?.["*"]??{},X=Z?.[$]??{};return{...Q,...X}.enabled!==!1}function Sd($,Z){return $.filter((Q)=>wd(Q.name,Z))}function XK($,Z){return T$(Sd($,Z))}var bd={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function kd($){let Z=$.trim().toLowerCase();return bd[Z]??Z}function xd($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(kd));if(Z.skills!==void 0)Q.add("skills");return $.filter((X)=>Q.has(X.name))}function DJ(){return`team-${fd(5)}`}function LJ($,Z,Q,X,J,W,j,Y,V,B){let K=A1[k$({mode:Q})],G=j4(Z,X,Q,J??W4);return XK(R6({cwd:$,telemetry:V,executorOptions:{bash:{executionController:B}},...K,enableSkills:!!j,...G,executors:{...j?{skills:j}:{},...Y??{}}}),W)}function yd($){return LJ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Id,$.toolExecutors).some((Z)=>Z.name==="skills")}var Id=async()=>"";async function hd($){let Z=K0();if(!c$({filePath:Z}))return{tools:[]};let Q=new i6({clientFactory:p6({settingsPath:Z})}),X;try{X=await d6(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=X.filter((Y)=>Y.disabled!==!0),W=await Promise.allSettled(J.map((Y)=>p4({serverName:Y.name,provider:Q,timeoutMs:Pd(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of W.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function vd($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function gd($){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 md($){let Z=A1[k$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class B5{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:X,logger:J,telemetry:W,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:K}=$,G=$.onTeamEvent??(()=>{}),H=md(Z),U=[];if(H.enableTools&&R8("web_search")&&ZA({providerId:Z.providerId,modelId:Z.modelId},"web_search"))U.push({name:"web_search"});if(H.enableTools&&ZA({providerId:Z.providerId,modelId:Z.modelId},"image_generation"))U.push({name:"image_generation",outputFormat:"png"});let F=Z.workspaceRoot??Z.cwd,L=$.toolPolicies??Z.toolPolicies,D=s1(),z=[],_=Z.teamName?.trim()||DJ(),O=Z.sessionId?.trim()||_,A=H.enableSpawnAgent?s4({workspaceRoot:F}):{configs:[],errors:[]},q=A.configs.some((s)=>s.skills!==void 0),N=FJ(B,"rules"),T=FJ(B,"skills"),C=T||q,r=FJ(B,"workflows"),y=FJ(B,"plugins"),x=N||T||r,E=!1,g=Boolean(V),S=V,n;for(let s of A.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${s.path}: ${s.error.message}`);if(!S&&(x||q))S=w2({skills:C?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(S)await S.start().catch(()=>{});let k=H.enableTools&&T&&Boolean(S)&&S?.hasConfiguredSkills(Z.skills)===!0&&yd({cwd:Z.cwd,providerId:Z.providerId,mode:H.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:L,toolExecutors:K}),I=S&&x?S.createExtension({includeRules:N,includeSkills:T,includeWorkflows:r,registerSkillsTool:k,allowedSkillNames:Z.skills}):void 0,d=H.mode==="plan"&&H.enableTools?F3({telemetry:W??Z.telemetry}):void 0,Z0=[I,d].filter((s)=>s!==void 0),m0=Z0.length>0?[...X??Z.extensions??[],...Z0]:X??Z.extensions;if(H.enableTools){if(z.push(...LJ(Z.cwd,Z.providerId,H.mode,Z.modelId,Z.toolRoutingRules,L,void 0,K,W??Z.telemetry,$.runCommandExecutionController)),!H.disableMcpSettingsTools){let s=await hd(Z.logger);z.push(...s.tools),n=s.shutdown}}let G0,G1=H.enableAgentTeams?QK():void 0,r0=G1?.loadRuntime(O),_$=r0?.state,H1=r0?.teammates??[],c0=new Map(H1.map((s)=>[s.agentId,s])),t0=Z.sessionId||_,o,U1=[],u=!1,F0=O2({providerId:Z.providerId,modelId:Z.modelId,distinctId:$.distinctId,sessionId:Z.sessionId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:m0,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(H.enableSpawnAgent){if(A.configs.length>0)z.push(...XK(t4({configProvider:F0,agents:A.configs,createSubAgentTools:(s)=>H.enableTools?xd(LJ(Z.cwd,s.providerId??Z.providerId,H.mode,s.modelId??Z.modelId,Z.toolRoutingRules,L,s.skills!==void 0&&S?.createSkillsExecutor?S.createSkillsExecutor(s.skills):void 0,K,W??Z.telemetry,$.runCommandExecutionController),s):[],hookErrorMode:Z.hookErrorMode,toolPolicies:L,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),L))}if(!this.teamRuntimeEntries.has(t0))this.teamRuntimeEntries.set(t0,{delegatedAgentConfigProvider:F0});let k0=()=>{if(!H.enableAgentTeams)return;let s=this.teamRuntimeEntries.get(t0)??{delegatedAgentConfigProvider:F0};if(this.teamRuntimeEntries.set(t0,s),G0=s.runtime,!G0){if(G0=new s6({teamName:_,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:H.missionLogIntervalSteps,missionLogIntervalMs:H.missionLogIntervalMs,onTeamEvent:(M0)=>{if(G(M0),G0&&G1){if(M0.type==="teammate_spawned"&&M0.teammate?.rolePrompt){let z$={agentId:M0.agentId,rolePrompt:M0.teammate.rolePrompt,modelId:M0.teammate.modelId,maxIterations:M0.teammate.maxIterations};c0.set(z$.agentId,z$)}if(M0.type==="teammate_shutdown"&&!gd(M0.reason))c0.delete(M0.agentId);G1.handleTeamEvent(O,M0),G1.persistRuntime(O,G0.exportState(),Array.from(c0.values()))}}}),_$)G0.hydrateState(_$),u=!0;s.runtime=G0}if(!E){if(!G0)return;E=!0;let M0=K4({runtime:G0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(_$),restoredTeammates:H1,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(z$)=>{U1=z$,o?.addTools(z$)},createBaseTools:H.enableTools?()=>LJ(Z.cwd,Z.providerId,H.mode,Z.modelId,Z.toolRoutingRules,L,void 0,K,W??Z.telemetry,$.runCommandExecutionController):void 0,teammateConfigProvider:F0});if(u)G0.recoverActiveRuns("runtime_recovered");if(M0.restoredFromPersistence)Y?.();z.push(...M0.tools)}return G0};if(H.enableSpawnAgent&&j){let s=j();z.push({...s,execute:async(M0,z$)=>{return k0(),s.execute(M0,z$)}})}if(H.enableAgentTeams)k0();let a0=XK(z,L),p2=a0.some((s)=>s.name==="submit_and_exit"&&s.lifecycle?.completesRun===!0),$Q=H.enableAgentTeams?()=>{let s=this.teamRuntimeEntries.get(t0)?.runtime;if(!s)return;let M0=s.listTasks(),z$=M0.some((n$)=>n$.status==="in_progress"||n$.status==="pending"),VH=s.listRuns({}),EM=VH.some((n$)=>n$.status==="running"||n$.status==="queued");if(z$||EM){let n$=M0.filter((F1)=>F1.status==="in_progress"||F1.status==="pending").map((F1)=>`${F1.id} (${F1.status}): ${F1.title}`).join(", "),BH=VH.filter((F1)=>F1.status==="running"||F1.status==="queued").map((F1)=>`${F1.id} (${F1.status})`).join(", "),PW=[];if(n$)PW.push(`Unfinished tasks: ${n$}`);if(BH)PW.push(`Active runs: ${BH}`);return`[SYSTEM] You still have team obligations. ${PW.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,TM=p2?{requireCompletionTool:!0,...$Q?{completionGuard:$Q}:{}}:$Q?{completionGuard:$Q}:void 0;return{tools:a0,modelTools:U,logger:J??Z.logger,telemetry:W??Z.telemetry,teamRuntime:G0,teamRestoredFromPersistence:Boolean(_$),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(t0)?.delegatedAgentConfigProvider??F0,extensions:m0,completionPolicy:TM,registerLeadAgent:(s)=>{if(o=s,U1.length>0)s.addTools(T$(U1,[...D]))},shutdown:async(s)=>{if(vd(G0,s),this.teamRuntimeEntries.delete(t0),await n?.(),!g)S?.stop()}}}}var XA={};f(XA,{RuntimeOAuthTokenManager:()=>K5,OAuthReauthRequiredError:()=>Q8});function cd($,Z){let Q=$?.expiresAt,X=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===X}class Q8 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class K5{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new H$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=C0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let X=this.refreshInFlight.get(Z);if(X)return X;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((W)=>{throw W}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let X=C0($);if(!X)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return j0(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let W=K9($,J);if(!W)return j0(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;j0(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${d0(W.access)} refreshTokenHash=${d0(W.refresh)}`);let j=await X.refresh({settings:J,credentials:W,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw j0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new Q8($);let Y=W6({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:j,setLastUsed:!1,save:!1}),V=!cd(J.auth,Y.auth);if(V)j0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${d0(j.access)} newRefreshTokenHash=${d0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else j0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:X.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}var WA={};f(WA,{requestDesktopToolApproval:()=>WK});import{mkdir as ud,readFile as dd,unlink as ld,writeFile as pd}from"node:fs/promises";import{join as JA}from"node:path";function id($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function rd($){return new Promise((Z)=>setTimeout(Z,$))}async function JK($){try{await ld($)}catch{}}async function WK($,Z={}){let Q=Z.approvalDir?.trim(),X=Z.sessionId?.trim();if(!Q||!X)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await ud(Q,{recursive:!0});let J=id(`${$.toolCallId}`),W=JA(Q,`${X}.request.${J}.json`),j=JA(Q,`${X}.decision.${J}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await pd(W,`${JSON.stringify({requestId:J,sessionId:X,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
791
791
|
`,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,K=Date.now();while(Date.now()-K<V){try{let G=await dd(j,"utf8"),H=JSON.parse(G),U={approved:H.approved===!0,reason:typeof H.reason==="string"?H.reason:void 0};return await Promise.all([JK(j),JK(W)]),U}catch{}await rd(B)}return await JK(W),{approved:!1,reason:"Tool approval request timed out"}}var VA={};f(VA,{listActiveConnectors:()=>X8});import{existsSync as ad,readdirSync as nd,readFileSync as od}from"node:fs";import{join as jA}from"node:path";import{listConnectorCatalog as sd}from"@cline/shared";import{resolveConnectorDataDir as td}from"@cline/shared/storage";var YA={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},ed={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function $l($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Zl($,Z){let Q;try{let V=JSON.parse(od(Z,"utf8"));if(!V||typeof V!=="object"||Array.isArray(V))return;Q=V}catch{return}let X=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!X||!J||!$l(X))return;let W=ed[$];if(!W)return;let j={};for(let V of W.required){let B=YA[V](Q);if(!B||typeof B==="string"&&!B.trim())return;j[V]=B}for(let V of W.optional){let B=YA[V](Q);if(B!==void 0)j[V]=B}let Y=$==="telegram"?j.botUsername:$==="discord"?j.applicationId:$==="whatsapp"&&typeof Q.instanceKey==="string"?Q.instanceKey:j.userName;if(!Y)return;return{id:`${$}:${Y}`,type:$,instanceId:Y,pid:X,hubUrl:J,...j}}function X8(){let $=[];for(let{name:Z}of sd()){let Q=jA(td(),Z);if(!ad(Q))continue;for(let X of nd(Q)){if(!X.endsWith(".json")||X.endsWith(".threads.json"))continue;let J=Zl(Z,jA(Q,X));if(J)$.push(J)}}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let X=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return X.localeCompare(J)})}var BA={};f(BA,{removePersistedConnectorConnection:()=>YK,reconnectPersistedConnectors:()=>VK,persistConnectorConnection:()=>jK,getPersistedConnectorConnection:()=>G5,disableConnectorAutostart:()=>JZ});import{withConnectorStore as XZ}from"@cline/shared/db";var Ql=new Set(["-i","--interactive"]);function Xl($,Z){let Q=$.filter((J)=>!Ql.has(J));return Q.some((J)=>J==="--cwd"||J.startsWith("--cwd="))?Q:[...Q,"--cwd",Z]}function jK($,Z,Q,X=process.cwd()){try{let J=Xl(Q,X);XZ((W)=>W.recordConnected($,Z,J))}catch{}}function JZ($,Z){try{XZ((Q)=>{if($)Q.setEnabled($,!1,Z);else Q.disableAll()})}catch{}}function G5($,Z){try{return XZ((Q)=>Q.getConnection($,Z))}catch{return}}function YK($,Z){try{XZ((Q)=>Q.deleteConnection($,Z))}catch{}}async function VK($){let Z=$.log??(()=>{}),Q;try{Q=XZ((J)=>J.listConnections()).filter((J)=>J.enabled).map((J)=>({channel:J.channel,instanceId:J.instanceId,args:J.connectArgs}))}catch(J){return Z(`[connect] failed to read persisted connectors: ${J instanceof Error?J.message:String(J)}`),[]}let X=[];for(let J of Q){let{channel:W,instanceId:j}=J;if($.isHealthy?.(J)){Z(`[connect] skipping ${W} connector ${j}: already live in this host`);continue}Z(`[connect] reconnecting ${W} connector ${j}`);try{let Y=await $.start(J);if(X.push({channel:W,instanceId:j,ok:Y}),!Y)Z(`[connect] failed to reconnect ${W} connector ${j}`)}catch(Y){let V=Y instanceof Error?Y.message:String(Y);X.push({channel:W,instanceId:j,ok:!1,error:V}),Z(`[connect] failed to reconnect ${W} connector ${j}: ${V}`)}}return X}var GA={};f(GA,{buildConnectorChildEnv:()=>J8,__test__:()=>jl});import{CLINE_CONNECTOR_STARTING_INSTANCE_ENV as Jl,CLINE_RUN_AS_HUB_DAEMON_ENV as Wl}from"@cline/shared";var KA=/^CLINE_(?:CONNECTOR_DETACHED_CHILD|[A-Z0-9]+_CONNECT_CHILD)$/;function J8($=process.env){let Z={...$};delete Z[Wl],delete Z[Jl];for(let Q of Object.keys(Z))if(KA.test(Q))delete Z[Q];return Z}var jl={CONNECTOR_CHILD_MARKER_PATTERN:KA};var HA={};f(HA,{cleanupConnectorInstanceViaCli:()=>BK});import{spawn as Yl}from"node:child_process";import{readConnectorCliLaunchSpec as Vl}from"@cline/shared";var Bl=15000;async function BK($,Z,Q={}){let X="launchSpec"in Q?Q.launchSpec:Vl();if(!X)throw Error("connector CLI launch information is unavailable");let J=Q.spawnProcess??Yl,W=Q.timeoutMs??Bl;await new Promise((j,Y)=>{let V=!1,B,K=(U)=>{if(V)return;if(V=!0,B)clearTimeout(B);if(U)Y(U);else j()},G;try{G=J(X.launcher,[...X.connectArgsPrefix,"--cleanup-instance",Z,$],{cwd:X.cwd,env:J8(),stdio:["ignore","ignore","pipe"],windowsHide:!0})}catch(U){K(U instanceof Error?U:Error(String(U)));return}let H="";G.stderr?.setEncoding("utf8"),G.stderr?.on("data",(U)=>{H+=String(U)}),B=setTimeout(()=>{try{G.kill("SIGKILL")}catch{}K(Error(`cleanup timed out after ${W}ms`))},W),B.unref?.(),G.once("error",(U)=>{K(U instanceof Error?U:Error(String(U)))}),G.once("close",(U)=>{if(U===0||U===null){K();return}K(Error(`cleanup exited with code ${U}${H.trim()?`: ${H.trim()}`:""}`))})})}var LA={};f(LA,{setActiveConnectorSupervisor:()=>KK,getActiveConnectorSupervisor:()=>jZ,STOP_SIGTERM_TIMEOUT_MS:()=>qJ,STOP_SIGKILL_TIMEOUT_MS:()=>AJ,RESTART_MAX_DELAY_MS:()=>zJ,RESTART_GIVE_UP_AFTER:()=>OJ,RESTART_COUNTER_RESET_MS:()=>NJ,RESTART_BASE_DELAY_MS:()=>_J,ConnectorSupervisor:()=>TJ,ADOPTED_POLL_INTERVAL_MS:()=>WZ});import{spawn as Kl}from"node:child_process";import{openSync as Gl}from"node:fs";import{CLINE_CONNECTOR_SUPERVISED_ENV as Hl,readConnectorCliLaunchSpec as Ul}from"@cline/shared";import{ensureParentDir as Fl,resolveConnectorLogPath as Ll}from"@cline/shared/storage";var _J=1000,zJ=60000,OJ=5,NJ=60000,WZ=5000,qJ=5000,AJ=2000,Dl=100;function W8($,Z){return`${$}\x00${Z}`}function _l($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function UA($){return $===void 0?void 0:new Date($).toISOString()}class TJ{entries=new Map;instanceLocks=new Map;pollTimer;disposed=!1;launchSpec;spawnProcess;isProcessRunning;killProcess;listActive;cleanupInstance;isAutostartEnabled;log;now;setTimer;clearTimer;constructor($={}){this.launchSpec=$.launchSpec??Ul,this.spawnProcess=$.spawnProcess??Kl,this.isProcessRunning=$.isProcessRunning??_l,this.killProcess=$.killProcess??((Z,Q)=>process.kill(Z,Q)),this.listActive=$.listActive??X8,this.cleanupInstance=$.cleanupInstance,this.isAutostartEnabled=$.isAutostartEnabled??((Z,Q)=>G5(Z,Q)?.enabled===!0),this.log=$.log??((Z)=>process.stderr.write(`[hub-daemon] ${Z}
|
|
792
792
|
`)),this.now=$.now??(()=>Date.now()),this.setTimer=$.setTimer??((Z,Q)=>{let X=setTimeout(Z,Q);return X.unref?.(),X}),this.clearTimer=$.clearTimer??((Z)=>clearTimeout(Z))}adoptRunningConnectors(){let $=[];for(let Z of this.listActive()){let Q=W8(Z.type,Z.instanceId);if(this.entries.has(Q))continue;let X={channel:Z.type,instanceId:Z.instanceId,args:[],argsKnown:!1,origin:"adopted",state:"running",pid:Z.pid,startedAt:Z.startedAt?Date.parse(Z.startedAt):this.now(),restarts:0};this.entries.set(Q,X),$.push(this.toRecord(X)),this.log(`[connect] adopted running ${Z.type} connector ${Z.instanceId} pid=${Z.pid}`)}if($.length>0)this.ensurePolling();return $}withInstanceLock($,Z){let X=(this.instanceLocks.get($)??Promise.resolve()).then(Z,Z),J=X.then(()=>{return},()=>{return});return this.instanceLocks.set($,J),J.then(()=>{if(this.instanceLocks.get($)===J)this.instanceLocks.delete($)}),X}async start($){return this.withInstanceLock(W8($.channel,$.instanceId),()=>this.startLocked($))}async startLocked($){let{channel:Z,instanceId:Q}=$,X=W8(Z,Q),J=this.entries.get(X);if(J&&this.isEntryAlive(J)){if(!$.restart)return{started:!1,reason:"already_running",record:this.toRecord(J)};await this.stopLocked({channel:Z,instanceId:Q,disableAutostart:!1})}else if(J)this.cancelRestart(J),J.state="stopped",J.child?.removeAllListeners("exit");let W={channel:Z,instanceId:Q,args:[...$.args],argsKnown:!0,origin:"spawned",state:"running",restarts:J?.restarts??0};if(this.entries.set(X,W),this.spawnEntry(W),W.state!=="running")return{started:!1,record:this.toRecord(W)};return{started:!0,record:this.toRecord(W)}}async stop($){return this.withInstanceLock(W8($.channel,$.instanceId),()=>this.stopLocked($))}async stopLocked($){let Z=W8($.channel,$.instanceId),Q=this.entries.get(Z);if($.disableAutostart!==!1)JZ($.channel,$.instanceId);if(!Q)return!1;this.cancelRestart(Q),Q.state="stopped";let X=Q.child?.pid??Q.pid;if(X&&this.isProcessRunning(X)){if(this.signal(X,"SIGTERM"),!await this.waitForProcessExit(X,qJ))this.signal(X,"SIGKILL"),await this.waitForProcessExit(X,AJ)}return await this.runCleanup(Q),this.entries.delete(Z),!0}signal($,Z){try{this.killProcess($,Z)}catch{}}async waitForProcessExit($,Z){let Q=this.now()+Z;while(this.isProcessRunning($)){if(this.now()>=Q)return!1;await new Promise((X)=>{this.setTimer(X,Dl)})}return!0}list(){return[...this.entries.values()].map(($)=>this.toRecord($)).sort(($,Z)=>$.channel.localeCompare(Z.channel)||$.instanceId.localeCompare(Z.instanceId))}dispose(){this.disposed=!0;for(let $ of this.entries.values())this.cancelRestart($),$.child?.removeAllListeners("exit");if(this.pollTimer!==void 0)this.clearTimer(this.pollTimer),this.pollTimer=void 0;this.entries.clear(),this.instanceLocks.clear()}spawnEntry($){let Z=this.launchSpec();if(!Z){$.state="failed",$.lastError="connector CLI launch information is unavailable",this.log(`[connect] cannot start ${$.channel} connector ${$.instanceId}: ${$.lastError}`);return}let Q=Ll($.channel,$.instanceId),X=["ignore","ignore","ignore"];try{Fl(Q);let J=Gl(Q,"a");X=["ignore",J,J]}catch{}try{let J=this.spawnProcess(Z.launcher,[...Z.connectArgsPrefix,$.channel,...$.args],{cwd:Z.cwd,env:{...J8(),[Hl]:"1"},detached:!0,stdio:X,windowsHide:!0});$.child=J,$.pid=J.pid??void 0,$.startedAt=this.now(),$.state="running",$.lastError=void 0,J.unref?.(),J.once("error",(W)=>{$.lastError=W instanceof Error?W.message:String(W),this.handleExit($,void 0,void 0)}),J.once("exit",(W,j)=>{this.handleExit($,W??void 0,j??void 0)}),this.log(`[connect] started ${$.channel} connector ${$.instanceId} pid=${$.pid}`)}catch(J){$.state="backoff",$.lastError=J instanceof Error?J.message:String(J),this.log(`[connect] failed to spawn ${$.channel} connector ${$.instanceId}: ${$.lastError}`),this.scheduleRestart($)}}handleExit($,Z,Q){if(this.disposed||$.state==="stopped")return;if($.child=void 0,$.pid=void 0,$.lastExitCode=Z,$.lastExitSignal=Q,$.startedAt!==void 0&&this.now()-$.startedAt>=NJ)$.restarts=0;this.log(`[connect] ${$.channel} connector ${$.instanceId} exited${Z===void 0?"":` code=${Z}`}${Q?` signal=${Q}`:""}`),this.runCleanup($).then(()=>{let J=W8($.channel,$.instanceId);if(this.disposed||$.state==="stopped"||this.entries.get(J)!==$)return;if(!this.isAutostartEnabled($.channel,$.instanceId)){this.log(`[connect] not restarting ${$.channel} connector ${$.instanceId}: autostart is disabled`),this.entries.delete(J);return}this.scheduleRestart($)})}scheduleRestart($){if($.restarts>=OJ){$.state="failed",$.nextRestartAt=void 0,this.log(`[connect] giving up on ${$.channel} connector ${$.instanceId} after ${$.restarts} failed restarts${$.lastError?`: ${$.lastError}`:""}`);return}let Z=Math.min(_J*2**$.restarts,zJ);$.restarts+=1,$.state="backoff",$.nextRestartAt=this.now()+Z,this.log(`[connect] restarting ${$.channel} connector ${$.instanceId} in ${Z}ms (attempt ${$.restarts})`);let Q=W8($.channel,$.instanceId);$.restartTimer=this.setTimer(()=>{$.restartTimer=void 0,$.nextRestartAt=void 0,this.withInstanceLock(Q,async()=>{if(this.disposed||$.state==="stopped"||this.entries.get(Q)!==$)return;let X=this.resolveRestartArgs($);if(!X){$.state="failed",this.log(`[connect] cannot restart ${$.channel} connector ${$.instanceId}: no stored launch arguments`);return}$.args=X,$.argsKnown=!0,$.origin="spawned",this.spawnEntry($)})},Z)}resolveRestartArgs($){if($.argsKnown)return $.args;let Z=G5($.channel,$.instanceId);return Z?.connectArgs?.length?Z.connectArgs:void 0}cancelRestart($){if($.restartTimer!==void 0)this.clearTimer($.restartTimer),$.restartTimer=void 0;$.nextRestartAt=void 0}async runCleanup($){if(!this.cleanupInstance)return;try{await this.cleanupInstance($.channel,$.instanceId)}catch(Z){this.log(`[connect] cleanup failed for ${$.channel} connector ${$.instanceId}: ${Z instanceof Error?Z.message:String(Z)}`)}}isEntryAlive($){if($.state==="backoff"||$.state==="failed")return!1;let Z=$.child?.pid??$.pid;return Z!==void 0&&this.isProcessRunning(Z)}ensurePolling(){if(this.pollTimer!==void 0||this.disposed)return;let $=()=>{if(this.pollTimer=void 0,this.disposed)return;for(let Z of[...this.entries.values()]){if(Z.origin!=="adopted"||Z.state!=="running"||Z.child)continue;if(Z.pid===void 0||!this.isProcessRunning(Z.pid))this.handleExit(Z,void 0,void 0)}if(this.hasAdoptedRunning())this.pollTimer=this.setTimer($,WZ)};this.pollTimer=this.setTimer($,WZ)}hasAdoptedRunning(){for(let $ of this.entries.values())if($.origin==="adopted"&&$.state==="running")return!0;return!1}toRecord($){return{channel:$.channel,instanceId:$.instanceId,state:$.state,origin:$.origin,restarts:$.restarts,...$.pid===void 0?{}:{pid:$.pid},...$.startedAt===void 0?{}:{startedAt:UA($.startedAt)},...$.nextRestartAt===void 0?{}:{nextRestartAt:UA($.nextRestartAt)},...$.lastExitCode===void 0?{}:{lastExitCode:$.lastExitCode},...$.lastExitSignal===void 0?{}:{lastExitSignal:$.lastExitSignal},...$.lastError===void 0?{}:{lastError:$.lastError}}}}var FA;function KK($){FA=$}function jZ(){return FA}y1();var fA={};f(fA,{uninstallMarketplaceSkill:()=>SJ,uninstallMarketplacePlugin:()=>bJ,uninstallMarketplaceMcpServerFromSettings:()=>fJ,uninstallMarketplaceEntry:()=>CK,resolveMarketplaceMcpServerName:()=>HZ,marketplaceEntryKey:()=>RK,isMarketplaceSkillInstalled:()=>wJ,getMarketplaceSkillCandidates:()=>UZ,getGlobalMarketplaceSkillPaths:()=>FZ,findInstalledGlobalMarketplaceSkillName:()=>LZ});import{spawn as Zp}from"node:child_process";import{existsSync as CA,rmSync as Qp}from"node:fs";import{homedir as Xp,platform as Jp}from"node:os";import{dirname as Wp,join as RA}from"node:path";import{resolveClineDir as jp,resolveMcpSettingsPath as Yp}from"@cline/shared/storage";var _A={};f(_A,{uninstallMcpServer:()=>HK,parseMcpInstallArgs:()=>YZ,installMcpServer:()=>GK,buildMcpInstallTransport:()=>EJ});function zl($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function Ol($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function Nl($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),X=$.slice(Z+1).trim();if(!Q||!X)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,X]}function ql($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function DA($){let Z=[...$.headers??[]],Q=[],X=$.transport,J=$.targetArgs??[];for(let W=0;W<J.length;W++){let j=J[W];if($.parseTransport&&j==="--transport"){let Y=J[W+1];if(!Y)throw Error("--transport requires a value");X=Y,W++;continue}if($.parseTransport&&j?.startsWith("--transport=")){X=j.slice(12);continue}if(j==="--header"){let Y=J[W+1];if(!Y)throw Error("--header requires a value");Z.push(Y),W++;continue}if(j?.startsWith("--header=")){Z.push(j.slice(9));continue}Q.push(j)}return{headers:Z,targetArgs:Q,transport:X}}function Al($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let X of $){let[J,W]=Nl(X);if(Z[J]=W,ql(W))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function EJ($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:X,transport:J}=DA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),W=zl(J),{headers:j,warnings:Y}=Al(Q);if(W==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...K]=X;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");let G=gX({type:W,command:B,args:K.length>0?K:void 0});return{name:Z,transport:G,warnings:Y}}if(X.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=X[0]?.trim()??"";return Ol(V),{name:Z,transport:j?{type:W,url:V,headers:j}:{type:W,url:V},warnings:Y}}function YZ($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...DA({parseTransport:!0,targetArgs:Q})}}function Tl($,Z,Q){M1(Q,(X)=>{let J=X.mcpServers,W=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};W[$]={transport:Z},X.mcpServers=W})}function GK($){let{name:Z,transport:Q,warnings:X}=EJ($);return Tl(Z,Q,$.settingsPath??K0()),{name:Z,status:"installed",transport:Q,warnings:X}}function El($,Z){return M1(Z,(Q)=>{let X=Q.mcpServers,J=X&&typeof X==="object"&&!Array.isArray(X)?X:{};if(!Object.hasOwn(J,$))throw Error(`MCP server "${$}" is not installed.`);return delete J[$],Q.mcpServers=J,!0})}function HK($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let Q=$.settingsPath??K0();return El(Z,Q),{name:Z,status:"uninstalled"}}y1();var MA={};f(MA,{uninstallPlugin:()=>KZ});import{existsSync as U5,readdirSync as kl,readFileSync as xl,rmdirSync as yl,rmSync as Il,statSync as hl}from"node:fs";import{basename as w1,dirname as h2,extname as vl,isAbsolute as gl,join as p$,relative as ml,resolve as H5,sep as _K}from"node:path";import{discoverPluginModulePaths as cl,resolvePluginConfigSearchPaths as ul}from"@cline/shared/storage";var qA={};f(qA,{syncPluginMcpServersToSettings:()=>VZ,removePluginMcpServersFromSettings:()=>BZ,disablePluginMcpServersInSettings:()=>DK});import{existsSync as Ml,mkdirSync as Rl,readFileSync as Cl,writeFileSync as Pl}from"node:fs";import{dirname as OA,isAbsolute as fl,relative as wl,resolve as zA}from"node:path";function j8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function MJ($,Z){let Q=wl(zA($),zA(Z));return Q===""||!Q.startsWith("..")&&!fl(Q)}function UK($){if(!Ml($))return{mcpServers:{}};try{let Z=JSON.parse(Cl($,"utf8"));if(j8(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function FK($){if(j8($.mcpServers))return{...$.mcpServers};return{}}function LK($,Z,Q){Rl(OA($),{recursive:!0}),Pl($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
|
|
793
793
|
`,"utf8")}function NA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function CJ($){if(!j8($))return;let Z=$.metadata;return j8(Z)?Z:void 0}function RJ($,Z){let Q=CJ($);if(!Q||Q.source!=="plugin")return!1;let X=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&X===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||MJ(Z.pluginPath,J)||MJ(J,Z.pluginPath)))return!0;if(X&&Z.pluginNames?.some((W)=>W===X))return!0;if(J&&Z.pluginPaths?.some((W)=>J===W||MJ(W,J)||MJ(J,W)))return!0;return!1}function Sl($){let Z=j8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:OA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function bl($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await A4({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],X=[],J=(Z.failures??[]).map((W)=>({pluginPath:W.pluginPath,pluginName:W.pluginName,message:W.message}));for(let W of Z.extensions??[]){let j=W.__clinePluginPath;if(!j)continue;if(!W.setup){Q.push({pluginName:W.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!W.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await W.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:j,pluginName:W.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:W.name,pluginPath:j});for(let B of Y)X.push({pluginName:W.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:W.name,pluginPath:j}}})}return{plugins:Q,servers:X,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function VZ($){let Z=$.settingsPath??K0(),Q={mutations:[],failures:[]},X;try{X=await bl($)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...X.failures);let J;try{J=UK(Z)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)});return Q}let W=FK(J),j=new Map,Y=new Map;for(let B of X.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=aX(X.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let K=B.owner;if(!j.has(K.pluginPath))j.set(K.pluginPath,new Set);if(B.name)j.get(K.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=W[B.registration.name];if(G!==void 0){if(!RJ(G,{pluginName:K.pluginName,pluginPath:K.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}W[B.registration.name]=Sl({registration:B.registration,pluginName:K.pluginName,pluginPath:K.pluginPath,existing:j8(G)?G:void 0}),Q.mutations.push({name:B.registration.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,K]of Object.entries(W)){let G=CJ(K),H=typeof G?.pluginPath==="string"?G.pluginPath:"",U=j.get(H);if(U&&RJ(K,{pluginPath:H})&&!U.has(B))delete W[B],Q.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:Y.get(H)??"plugin",pluginPath:H,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{LK(Z,J,W)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)})}return Q}function DK($){let Z=$.settingsPath??K0(),Q;try{Q=UK(Z)}catch{return[]}let X=FK(Q),J=NA($),W=[];for(let[j,Y]of Object.entries(X)){if(!j8(Y)||!RJ(Y,J))continue;let V=CJ(Y);X[j]={...Y,disabled:!0},W.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(W.length>0)LK(Z,Q,X);return W}function BZ($){let Z=$.settingsPath??K0(),Q;try{Q=UK(Z)}catch{return[]}let X=FK(Q),J=NA($),W=[];for(let[j,Y]of Object.entries(X)){if(!RJ(Y,J))continue;let V=CJ(Y);delete X[j],W.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(W.length>0)LK(Z,Q,X);return W}var AK="_installed",dl="package",ll=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function zK($){return $.trim().toLowerCase()}function p1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function pl($){return $.replace(/-[0-9a-f]{12}$/i,"")}function OK($){let Z=vl($);return Z?$.slice(0,-Z.length):$}function NK($){if(!U5($))return;try{let Z=JSON.parse(xl($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function TK($,Z){let Q=ml(Z,$);return Q===""||!Q.startsWith("..")&&!gl(Q)}function AA($){let Q=H5($).split(_K),X=Q.lastIndexOf(AK);if(X<0)return;let J=Q[X+1];if(!J)return;let W=ll.get(J)??1,j=X+2+W;if(Q.length<j)return;let Y=Q.slice(0,j).join(_K)||_K;return U5(Y)?Y:void 0}function PJ($){try{return kl($,{withFileTypes:!0})}catch{return[]}}function il($){let Z=p$($,AK);if(!U5(Z))return[];let Q=[];for(let X of PJ(Z)){if(!X.isDirectory())continue;let J=p$(Z,X.name);if(X.name==="git"){for(let W of PJ(J)){if(!W.isDirectory())continue;let j=p$(J,W.name);for(let Y of PJ(j))if(Y.isDirectory())Q.push(p$(j,Y.name))}continue}for(let W of PJ(J))if(W.isDirectory())Q.push(p$(J,W.name))}return Q.sort((X,J)=>X.localeCompare(J))}function TA($){try{return cl($)}catch{return[]}}function qK($){let Z=TA($),Q=new Set;p1(Q,w1($)),p1(Q,pl(w1($))),p1(Q,NK(p$($,"package.json"))),p1(Q,NK(p$($,dl,"package.json")));for(let X of Z)p1(Q,w1(X)),p1(Q,OK(w1(X)));return{installPath:$,entryPaths:Z,names:[...Q].sort((X,J)=>X.localeCompare(J)),installed:!0}}function rl($,Z){let Q=H5($),X=Z.find((j)=>TK(Q,j));if(!X)return;let J=h2(Q);while(J!==X&&J!==h2(J)){if(U5(p$(J,"package.json")))return J;J=h2(J)}let W=w1(Q);if((W==="index.ts"||W==="index.js")&&h2(Q)!==X)return h2(Q);return Q}function EA($,Z){let Q=rl($,Z);if(!Q)return;let X=new Set;return p1(X,w1($)),p1(X,OK(w1($))),p1(X,w1(Q)),p1(X,OK(w1(Q))),p1(X,NK(p$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...X].sort((J,W)=>J.localeCompare(W)),installed:!1}}function al($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return ul(Z).filter((Q)=>U5(Q))}function nl($){let Z=new Map;for(let Q of $){for(let X of il(Q))Z.set(X,qK(X));for(let X of TA(Q)){let J=AA(X);if(J){if(!Z.has(J))Z.set(J,qK(J));continue}let W=EA(X,$);if(W)Z.set(W.installPath,W)}}return[...Z.values()].sort((Q,X)=>Q.installPath.localeCompare(X.installPath))}function ol($,Z){let Q=zK(Z);if(!Q)return!1;if(zK($.installPath)===Q)return!0;return $.names.some((X)=>zK(X)===Q)}function sl($,Z,Q){let X=H5($);for(let W of Z){if(TK(X,W.installPath))return W;if(W.entryPaths.some((j)=>H5(j)===X))return W}let J=AA(X);if(J)return qK(J);if(U5(X))return EA(X,Q);return}function tl($){let Z=W0(),Q=Z.disabledPlugins;if(!Q?.length)return;let X=Q.filter((J)=>{let W=H5(J);if(TK(W,$.installPath))return!1;return!$.entryPaths.some((j)=>H5(j)===W)});if(X.length===Q.length)return;u0({...Z,disabledPlugins:X})}function el($){let Z=h2($);while(Z!==h2(Z)&&w1(Z)!==AK){try{yl(Z)}catch{return}Z=h2(Z)}}function $p($){return`${$.names[0]??w1($.installPath)} at ${$.installPath}`}async function KZ($){let Z=al($),Q=nl(Z),X=$.path?.trim(),J=$.name?.trim(),W;if(X){if(W=sl(X,Q,Z),!W)throw Error(`No plugin found at ${X}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>ol(V,J));if(Y.length===0)throw Error(`No plugin found matching "${J}"`);if(Y.length>1)throw Error(`Multiple plugins match "${J}": ${Y.map($p).join(", ")}`);W=Y[0]}let j=hl(W.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${W.installPath}`);if(BZ({pluginPaths:[W.installPath,...W.entryPaths],pluginNames:W.names}),Il(W.installPath,{recursive:j.isDirectory(),force:!0}),tl(W),W.installed)el(W.installPath);return{name:J||W.names[0]||w1(W.installPath),installPath:W.installPath,removedPaths:[W.installPath],entryPaths:W.entryPaths}}var EK=120000,GZ=12000,Vp=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Bp=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Kp=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Gp=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function MK($){return $.install?.args??[]}function Hp(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Xp()}function Up($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function Fp($){return Up($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function PA($){return $.split(/\r?\n/).map((Z)=>{if(!Vp.test(Z))return Z;return Z.replace(Bp,"$1[redacted]").replace(Kp,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Gp,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
|
|
@@ -948,8 +948,8 @@ ${$.instructions.trim()}
|
|
|
948
948
|
enabled_at = excluded.enabled_at,
|
|
949
949
|
updated_at = excluded.updated_at`).run(Z,$.mode,$.applyToAgentCreated?1:0,Q,X,J,$.enabledBy?JSON.stringify($.enabledBy):null,kT($.enabledAt,"enabledAt")??null,W),this.getAutomationPolicy(Z)}}var N5={kind:"system",id:"file_reconciler"},U8={kind:"system",id:"task_manager"},IT={kind:"automation_policy",id:"global"},xZ=new Set(["completed","failed","cancelled","interrupted"]),Ba=30000,Ka=250;function D$(){return new Date().toISOString()}function hT($){return typeof $==="string"&&$.trim()?$.trim():void 0}function vT($){let Z=Date.parse($);if(!Number.isFinite(Z))throw Error("expiresAt must be a valid ISO-8601 timestamp");if(Z<=Date.now())throw Error("expiresAt must be in the future")}function gT($,Z){let Q=Ya($,Z);return Q!==""&&!Q.startsWith("..")&&!Q.startsWith("/")}function yZ($){if(!$||!qG($))return!1;try{return Wa($).isDirectory()}catch{return!1}}function OG($,Z){return JSON.stringify({type:$.type,title:$.title,description:$.description,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot,cwd:$.cwd,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee,modelSelection:$.modelSelection,mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,availableAt:$.availableAt??Z.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible})}function NG($){return JSON.stringify({type:$.type,title:$.title,description:$.description,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot,cwd:$.cwd,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee,modelSelection:$.modelSelection,mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,availableAt:$.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible})}function Ga($,Z){return{taskId:Z.taskId,expectedRevision:Z.revision,type:$.type,title:$.title,description:$.description??null,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot??null,cwd:$.cwd??null,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee??null,modelSelection:$.modelSelection??null,mode:$.mode??null,systemPrompt:$.systemPrompt??null,maxIterations:$.maxIterations??null,timeoutSeconds:$.timeoutSeconds??null,availableAt:$.availableAt??Z.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible,updatedBy:N5}}function Ha($,Z){return{...$,type:Z.type??$.type,title:Z.title??$.title,description:Z.description===null?void 0:Z.description??$.description,instructions:Z.instructions??$.instructions,scope:Z.scope??$.scope,workspaceRoot:Z.workspaceRoot===null?void 0:Z.workspaceRoot??$.workspaceRoot,cwd:Z.cwd===null?void 0:Z.cwd??$.cwd,resourcePaths:Z.resourcePaths??$.resourcePaths,priority:Z.priority??$.priority,assignee:Z.assignee===null?void 0:Z.assignee??$.assignee,modelSelection:Z.modelSelection===null?void 0:Z.modelSelection??$.modelSelection,mode:Z.mode===null?void 0:Z.mode??$.mode,systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt??$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations??$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds??$.timeoutSeconds,availableAt:Z.availableAt??$.availableAt,expiresAt:Z.expiresAt??$.expiresAt,automationEligible:Z.automationEligible??$.automationEligible}}class IZ{runtime;store;ownsStore;globalSpecsDir;watcherDebounceMs;watchFiles;logger;publishEvent;scopes=new Map;activeRuns=new Map;backgroundRuns=new Set;maintenanceTimer;queuedAutomationScopes=new Set;automationPumping=!1;automationPolicyGeneration=0;started=!1;disposed=!1;constructor($){this.runtime=$.runtime,this.ownsStore=!$.store,this.store=$.store??new kZ({dbPath:$.dbPath}),this.globalSpecsDir=$.globalSpecsDir,this.watcherDebounceMs=Math.max(0,$.watcherDebounceMs??Ka),this.watchFiles=$.watchFiles!==!1,this.logger=$.logger??Va,this.publishEvent=$.publish??(()=>{})}async start(){if(this.disposed)throw Error("AgendaTaskManager disposed");if(this.started)return;this.started=!0,this.recoverInterruptedRuns(),await this.reconcileSourceForProjection("global",void 0,"startup");for(let $ of this.store.listWorkspaceRoots())if(yZ($))await this.reconcileSourceForProjection("workspace",$,"startup");this.expireTasks(),this.maintenanceTimer=setInterval(()=>{this.expireTasks(),this.queueAutomation()},Ba),this.maintenanceTimer.unref?.(),this.queueAutomation()}async dispose(){if(this.disposed)return;if(this.disposed=!0,this.maintenanceTimer)clearInterval(this.maintenanceTimer);for(let $ of this.scopes.values()){if($.timer)clearTimeout($.timer);$.watcher?.close()}this.scopes.clear();for(let $ of this.activeRuns.values())if($.sessionId)await this.runtime.abortSession($.sessionId,"Hub task manager stopped").catch(()=>{});await Promise.allSettled(this.backgroundRuns);for(let[$,Z]of this.activeRuns)this.store.updateRun(Z.runId,{status:"interrupted",completedAt:D$(),error:"Hub task manager stopped before the run completed."}),this.store.updateTaskState($,{status:"failed",currentRunId:null,error:"Hub task manager stopped before the run completed.",updatedBy:U8});if(this.activeRuns.clear(),this.ownsStore)this.store.close()}async createTask($){this.assertUsable(),vT($.expiresAt);let Z=L$($),Q={...$,...Z},X=hT(Q.taskId)??yT("task_");if(await this.reconcileScope(Q.scope,Q.workspaceRoot),this.store.getTask(X))throw Error(`task ${X} already exists`);let J=this.ensureScope(Q.scope,Q.workspaceRoot),W=J.resolveWritePath(X,Q.specPath);if(qG(W)||this.store.getTaskBySpecPath(W))throw Error(`task spec already exists: ${W}`);let j=this.store.createTask({...Q,taskId:X,specPath:W});try{J.writeSpec({...Q,taskId:X},{specPath:W,createOnly:!0})}catch(Y){throw this.store.deleteTask(X),Y}return this.publish("task.created",j),this.expireTask(j),this.queueAutomation(),this.requireTask(X)}async listTasks($={}){if(this.assertUsable(),!$.scope||$.scope==="global")await this.reconcileSourceForProjection("global",void 0,"list");if($.workspaceRoot){if(yZ($.workspaceRoot))await this.reconcileSourceForProjection("workspace",$.workspaceRoot,"list")}else if($.scope!=="global"){for(let Z of this.store.listWorkspaceRoots())if(yZ(Z))await this.reconcileSourceForProjection("workspace",Z,"list")}return this.expireTasks(),this.store.listTasks($)}async getTask($){this.assertUsable();let Z=this.store.getTask($.trim());if(Z?.scope==="workspace"&&yZ(Z.workspaceRoot))await this.reconcileSourceForProjection("workspace",Z.workspaceRoot,"read");else if(Z?.scope==="global")await this.reconcileSourceForProjection("global",void 0,"read");let Q=this.store.getTask($.trim());if(Q)this.expireTask(Q);return this.store.getTask($.trim())}async updateTask($){this.assertUsable();let Z=this.requireTask($.taskId);if(Z.revision!==$.expectedRevision)this.store.updateTask($);if(Z.status==="in_progress")throw Error("an in-progress task cannot be edited");if(Z.status==="completed"||Z.status==="cancelled"||Z.status==="expired")throw Error(`task ${Z.taskId} cannot be edited from ${Z.status}; create a new task instead`);let Q=Ha(Z,$);vT(Q.expiresAt);let X=L$(Q),J={...Q,...X},W={...$,scope:J.scope,workspaceRoot:J.workspaceRoot??null,cwd:J.cwd??null,resourcePaths:J.resourcePaths},j=this.ensureScope(J.scope,J.workspaceRoot),Y=Z.specPath!==void 0&&gT(j.specsDir,Z.specPath);if(!Y)await this.reconcileFileStore(j);let V=j.resolveWritePath(Z.taskId,Y?Z.specPath:void 0);if(V!==Z.specPath&&(qG(V)||this.store.getTaskBySpecPath(V)))throw Error(`task spec already exists: ${V}`);let B;if(Y&&Z.specPath){let F=j.readSpec(Z.specPath);if(!F.ok)throw Error(`task spec is invalid: ${F.error}`);if($.updatedBy.id!==N5.id&&OG(F.spec,Z)!==NG(Z))throw Error(`task spec changed outside the manager; reconcile task ${Z.taskId} and retry`);B=F.contentHash}let K,G;try{K=j.writeSpec(J,{specPath:V,expectedContentHash:B,createOnly:!Y}),G=this.store.updateTask(W)}catch(F){try{if(K&&Y&&Z.specPath)j.writeSpec(Z,{specPath:Z.specPath,expectedContentHash:K.contentHash});else if(K)j.deleteSpec(V,{expectedContentHash:K.contentHash})}catch(L){this.logError("agenda task update rollback failed",L,{taskId:Z.taskId,specPath:V})}throw F}if(!G||!K)throw Error(`unknown task: ${$.taskId}`);let H=this.store.updateTaskState(G.taskId,{status:"pending_approval",approvedRevision:null,currentRunId:null,specPath:K.specPath,error:null,completedAt:null,archivedAt:null,updatedBy:$.updatedBy},G.revision);if(Z.specPath&&Z.specPath!==K.specPath)this.fileStoreForTask(Z).deleteSpec(Z.specPath);let U=H??this.requireTask($.taskId);return this.publish("task.updated",U),this.expireTask(U),this.queueAutomation(),this.requireTask($.taskId)}async approveTask($,Z,Q){this.assertUsable();let X=await this.refreshAndVerifyTaskIntent($);if(this.assertRevision(X,Q),this.isExpired(X))throw this.expireTask(X),Error(`task ${$} has expired`);if(X.status==="approved"&&X.approvedRevision===X.revision)return X;if(X.status!=="pending_approval"&&X.status!=="failed")throw Error(`task ${$} cannot be approved from ${X.status}`);let J=this.store.updateTaskState($,{status:"approved",approvedRevision:X.revision,error:null,updatedBy:Z},X.revision);if(!J)throw Error(`unknown task: ${$}`);return this.publish("task.updated",J),this.queueAutomation(),J}async cancelTask($,Z,Q,X){this.assertUsable();let J=this.requireTask($);if(this.assertRevision(J,Q),J.status==="cancelled")return J;if(J.status==="completed"||J.status==="expired")throw Error(`task ${$} cannot be cancelled from ${J.status}`);let W=J.currentRunId?this.store.getRun(J.currentRunId):void 0,j=X?.trim()||"Agenda task cancelled";if(W&&!xZ.has(W.status))this.store.updateRun(W.runId,{status:"cancelled",completedAt:D$(),error:X?.trim()||void 0});this.activeRuns.delete($);let Y=this.store.updateTaskState($,{status:"cancelled",approvedRevision:null,currentRunId:null,error:X?.trim()||null,updatedBy:Z},J.revision);if(!Y)throw Error(`unknown task: ${$}`);if(this.publish("task.updated",Y,W),W?.sessionId)try{await this.runtime.abortSession(W.sessionId,j)}catch(V){this.logError("agenda task session abort failed",V,{taskId:$,runId:W.runId,sessionId:W.sessionId})}return Y}async runTask($,Z,Q,X){this.assertUsable();let J=await this.refreshAndVerifyTaskIntent($);if(this.assertRevision(J,Q),this.isExpired(J))throw this.expireTask(J),Error(`task ${$} has expired`);if(Date.parse(J.availableAt)>Date.now())throw Error(`task ${$} is not available yet`);if(J.status!=="approved"&&J.status!=="failed")throw Error(`task ${$} must be approved before it can run`);if(J.approvedRevision!==J.revision)throw Error(`task ${$} approval is stale`);if(this.activeRuns.has($)||J.currentRunId)throw Error(`task ${$} already has an active run`);let W=this.store.createRun({taskId:$,taskRevision:J.revision,requestedByClientId:X}),j=this.store.updateTaskState($,{currentRunId:W.runId,lastRunId:W.runId,error:null,completedAt:null,updatedBy:Z},J.revision);if(!j)throw Error(`unknown task: ${$}`);this.activeRuns.set($,{runId:W.runId}),this.publish("task.updated",j,W);try{let Y=await this.runtime.startSession(j,W,X,{unattended:Z.kind==="automation_policy"&&this.store.getAutomationPolicy(j.scope==="workspace"&&j.workspaceRoot?j.workspaceRoot:"global").mode==="unattended"}),V=this.store.getRun(W.runId),B=this.store.getTask($);if(!V||xZ.has(V.status)||B?.status!==J.status||B.currentRunId!==W.runId){if(V&&!xZ.has(V.status))this.store.updateRun(W.runId,{status:"cancelled",sessionId:Y.sessionId,completedAt:D$(),error:"Task changed or was cancelled while its session was starting."});else if(V)this.store.updateRun(W.runId,{sessionId:Y.sessionId});throw this.activeRuns.delete($),await this.runtime.abortSession(Y.sessionId,"Agenda task was cancelled while its session was starting").catch((G)=>this.logError("cancelled agenda task session abort failed",G,{taskId:$,runId:W.runId,sessionId:Y.sessionId})),Error(`task ${$} changed or was cancelled while starting`)}W=this.store.updateRun(W.runId,{status:"running",sessionId:Y.sessionId,startedAt:D$()})??W,j=this.store.updateTaskState($,{status:"in_progress",lastSessionId:Y.sessionId,updatedBy:Z})??j,this.activeRuns.set($,{runId:W.runId,sessionId:Y.sessionId}),this.publish("task.run.started",j,W);let K=this.finishRun(j,W,Y.sessionId);return this.backgroundRuns.add(K),K.finally(()=>this.backgroundRuns.delete(K)),{task:j,run:W}}catch(Y){throw await this.finishRunFailure(j,W,Y),Y}}async getAutomationPolicy($="global"){return this.assertUsable(),this.store.getAutomationPolicy($)}async setAutomationPolicy($,Z){this.assertUsable();let Q=D$(),X=this.store.setAutomationPolicy({...$,enabledBy:$.mode==="manual"?void 0:Z,enabledAt:$.mode==="manual"?void 0:Q});return this.automationPolicyGeneration+=1,this.publishEvent("task.automation.updated",{policy:X}),this.queueAutomation(X.scopeKey),X}notifyAutomationReadinessChanged(){if(!this.disposed)this.queueAutomation()}async finishRun($,Z,Q){try{let X=await this.runtime.runSession(Q,$,Z),J=this.store.getRun(Z.runId);if(!J||xZ.has(J.status))return;if(X.status==="completed"){let W=D$(),j=this.store.updateRun(Z.runId,{status:"completed",completedAt:W,resultSummary:X.summary,error:null})??J,Y=this.store.updateTaskState($.taskId,{status:"completed",currentRunId:null,error:null,completedAt:W,updatedBy:U8})??this.requireTask($.taskId);this.publish("task.run.completed",Y,j)}else if(X.status==="cancelled")await this.cancelTask($.taskId,U8,$.revision,X.error||"Task session was cancelled");else await this.finishRunFailure($,Z,Error(X.error||X.summary||"Task session failed"))}catch(X){await this.finishRunFailure($,Z,X)}finally{this.activeRuns.delete($.taskId);let X=this.store.getTask($.taskId);(X?.scope==="workspace"&&X.workspaceRoot?this.reconcileScope("workspace",X.workspaceRoot):this.reconcileScope("global")).catch((W)=>this.logError("post-run agenda task reconciliation failed",W,{taskId:$.taskId})),this.queueAutomation()}}async finishRunFailure($,Z,Q){let X=this.store.getRun(Z.runId);if(!X||xZ.has(X.status))return;let J=Q instanceof Error?Q.message:String(Q),W=this.store.updateRun(Z.runId,{status:"failed",completedAt:D$(),error:J})??X,j=this.store.getTask($.taskId);if(!j||j.status==="cancelled")return;if(j.currentRunId!==Z.runId){this.activeRuns.delete($.taskId),this.publish("task.run.failed",j,W);return}let Y=this.store.updateTaskState($.taskId,{status:"failed",currentRunId:null,error:J,updatedBy:U8})??j;this.activeRuns.delete($.taskId),this.publish("task.run.failed",Y,W)}ensureScope($,Z){let Q=hT(Z);if($==="workspace"&&!Q)throw Error("workspaceRoot is required for workspace task scope");if($==="workspace"&&!yZ(Q))throw Error("workspaceRoot must be an existing directory");let X=$==="global"?"global":`workspace:${Q}`,J=this.scopes.get(X);if(J)return J.store;let W=new wZ({scope:$,workspaceRoot:Q,taskSpecsDir:$==="global"?this.globalSpecsDir:void 0}),j={store:W},Y=!0;try{W.ensureSpecsDir();let V=this.watchFiles?this.resolveWatchRoot(W.specsDir):void 0;if(V!==void 0)j.watcher=ja(V,(B,K)=>{if(!K||!String(K).endsWith(".task.md"))return;if(j.timer)clearTimeout(j.timer);j.timer=setTimeout(()=>{j.timer=void 0,this.reconcileFileStore(W).catch((G)=>this.logError("agenda task watcher reconciliation failed",G,{specsDir:W.specsDir}))},this.watcherDebounceMs)}),j.watcher.on("error",(B)=>this.logError("agenda task watcher failed",B,{specsDir:W.specsDir}))}catch(V){Y=!1,this.logError("agenda task source could not be attached",V,{specsDir:W.specsDir})}if(Y)this.scopes.set(X,j);return W}async reconcileScope($,Z){let Q=this.ensureScope($,Z);await this.reconcileFileStore(Q)}async reconcileSourceForProjection($,Z,Q){try{await this.reconcileScope($,Z)}catch(X){this.logError(`agenda task source ${Q} reconciliation failed`,X,{scope:$,...Z?{workspaceRoot:Z}:{}})}}async reconcileFileStore($){if(this.disposed)return;let Z=new Set;for(let X of $.listSpecs()){if(Z.add(X.specPath),!X.ok){this.logger.log("agenda task spec is invalid",{severity:"warn",specPath:X.specPath,error:X.error});continue}try{let J=X.spec;if(!J.taskId)J=$.writeSpec({...J,taskId:yT("task_")},{specPath:J.specPath,expectedContentHash:J.contentHash});let W=this.store.getTaskBySpecPath(J.specPath);if(W&&J.taskId&&J.taskId!==W.taskId)this.logger.log("agenda task id is immutable for an existing spec",{severity:"warn",taskId:W.taskId,requestedTaskId:J.taskId,specPath:J.specPath}),J=$.writeSpec({...J,taskId:W.taskId},{specPath:J.specPath,expectedContentHash:J.contentHash});let j=J.taskId?this.store.getTask(J.taskId):void 0,Y=W??j;if(j?.specPath&&j.specPath!==J.specPath){this.logger.log("agenda task id is already owned by another spec",{severity:"warn",taskId:J.taskId,specPath:J.specPath});continue}if(!Y){let V=this.store.createTask(WW(J,N5));this.publish("task.created",V),this.expireTask(V);continue}if(Y.archivedAt){let V=Y.status==="cancelled"&&Y.error==="Task spec was deleted.",B=this.store.updateTaskState(Y.taskId,{status:V?"pending_approval":Y.status,approvedRevision:V?null:Y.approvedRevision,archivedAt:null,error:V?null:Y.error,updatedBy:N5});if(B)Y=B,this.publish("task.updated",B)}if(OG(J,Y)===NG(Y))continue;if(Y.status==="in_progress"){this.logger.log("agenda task edit deferred until its run completes",{severity:"warn",taskId:Y.taskId});continue}if(Y.status==="completed"||Y.status==="cancelled"||Y.status==="expired"){this.logger.log("terminal agenda task edits are not applied",{severity:"warn",taskId:Y.taskId,status:Y.status}),$.writeSpec(Y,{specPath:J.specPath,expectedContentHash:J.contentHash});continue}await this.updateTask(Ga(J,Y))}catch(J){this.logError("agenda task spec reconciliation failed",J,{specPath:X.spec.specPath})}}let Q=this.store.listTasks({scope:$.scope,workspaceRoot:$.workspaceRoot,includeArchived:!0,limit:1000});for(let X of Q){if(!X.specPath||!gT($.specsDir,X.specPath)||Z.has(X.specPath)||X.archivedAt)continue;if(X.status==="in_progress")await this.cancelTask(X.taskId,N5,X.revision,"Task spec was deleted.");let J=this.store.updateTaskState(X.taskId,{status:X.status==="completed"||X.status==="expired"?X.status:"cancelled",approvedRevision:null,currentRunId:null,error:X.status==="cancelled"?X.error??null:"Task spec was deleted.",archivedAt:D$(),updatedBy:N5});if(J)this.publish("task.deleted",J)}this.queueAutomation()}expireTasks(){for(let $ of this.store.listTasks({limit:1000}))this.expireTask($)}expireTask($){if(!this.isExpired($))return;if($.currentRunId||$.status==="in_progress"||$.status==="completed"||$.status==="cancelled"||$.status==="expired")return;let Z=this.store.updateTaskState($.taskId,{status:"expired",approvedRevision:null,currentRunId:null,error:"Task expired before it was started.",updatedBy:U8});if(Z)this.publish("task.updated",Z)}isExpired($){return Date.parse($.expiresAt)<=Date.now()}recoverInterruptedRuns(){let $=D$();for(let Z of this.store.listRuns({status:["starting","running"],limit:1000})){this.store.updateRun(Z.runId,{status:"interrupted",completedAt:$,error:"Hub restarted while this task was running."});let Q=this.store.getTask(Z.taskId);if(!Q||Q.currentRunId!==Z.runId)continue;if(Q.status==="completed"||Q.status==="cancelled"||Q.status==="expired"){this.store.updateTaskState(Q.taskId,{currentRunId:null});continue}if(Z.status==="starting"&&Q.approvedRevision===Z.taskRevision&&Q.revision===Z.taskRevision&&!this.isExpired(Q)){this.store.updateTaskState(Q.taskId,{status:"approved",currentRunId:null,error:"Hub restarted before this task session was linked.",updatedBy:U8});continue}this.store.updateTaskState(Q.taskId,{status:Z.status==="starting"?"pending_approval":"failed",approvedRevision:Z.status==="starting"?null:Q.approvedRevision,currentRunId:null,error:"Hub restarted while this task was running.",updatedBy:U8})}}queueAutomation($){if(this.disposed)return;if($)this.queuedAutomationScopes.add($);else for(let Z of this.store.listAutomationPolicies())this.queuedAutomationScopes.add(Z.scopeKey);if(this.automationPumping)return;queueMicrotask(()=>{this.pumpAutomation().catch((Z)=>this.logError("agenda task automation pump failed",Z,{}))})}async pumpAutomation(){if(this.disposed||this.automationPumping)return;this.automationPumping=!0;let $=this.automationPolicyGeneration;try{while(this.queuedAutomationScopes.size>0){let Z=this.queuedAutomationScopes.values().next().value;if(!Z)break;this.queuedAutomationScopes.delete(Z);let Q=this.store.getAutomationPolicy(Z);if(Q.mode==="manual")continue;this.expireTasks();let X=this.store.listRuns({limit:1000}).filter((j)=>Date.parse(j.claimedAt)>=Date.now()-3600000).length,J=Math.min(Math.max(0,Q.maxConcurrentRuns-this.activeRuns.size),Math.max(0,Q.maxStartsPerHour-X));if(J<=0)continue;let W=this.store.listTasks({statuses:["pending_approval","approved"],...Z==="global"?{}:{scope:"workspace",workspaceRoot:Z},automationEligible:!0,availableBefore:D$(),limit:1000});for(let j of W){if(J<=0)break;if($!==this.automationPolicyGeneration)return;try{let Y=j;if(Y.status==="pending_approval"){if(!this.canAutomaticallyApprove(Y,Q))continue;Y=await this.approveTask(Y.taskId,IT,Y.revision)}if($!==this.automationPolicyGeneration)return;if(Q.mode==="auto_start"&&this.runtime.isInteractiveClientAvailable?.()!==!0)continue;await this.runTask(Y.taskId,IT,Y.revision),J-=1}catch(Y){this.logError("agenda task automation start failed",Y,{taskId:j.taskId})}}}}finally{if(this.automationPumping=!1,this.queuedAutomationScopes.size>0)this.queueAutomation()}}canAutomaticallyApprove($,Z){let Q=[$.createdBy,$.updatedBy];if(Q.some((X)=>X.kind==="system"&&X.id==="file_reconciler"))return!1;if(!Z.applyToAgentCreated&&Q.some((X)=>X.kind==="agent"))return!1;return this.taskChainDepth($)<=Z.maxChainDepth}taskChainDepth($){let Z=0,Q=$,X=new Set([$.taskId]);while(Q.originTaskId){if(X.has(Q.originTaskId))return Number.POSITIVE_INFINITY;X.add(Q.originTaskId);let J=this.store.getTask(Q.originTaskId);if(!J)break;Z+=1,Q=J}return Z}fileStoreForTask($){return this.ensureScope($.scope,$.workspaceRoot)}async refreshAndVerifyTaskIntent($){let Z=this.requireTask($);await this.reconcileScope(Z.scope,Z.workspaceRoot);let Q=this.requireTask($);if(Q.archivedAt)throw Error(`task ${$} no longer has an active task spec`);if(!Q.specPath)throw Error(`task ${$} has no canonical task spec`);let X;try{X=this.fileStoreForTask(Q).readSpec(Q.specPath)}catch(J){throw Error(`task ${$} task spec is unavailable: ${J instanceof Error?J.message:String(J)}`)}if(!X.ok)throw Error(`task ${$} task spec is invalid: ${X.error}`);if(X.spec.taskId!==Q.taskId||OG(X.spec,Q)!==NG(Q))throw Error(`task ${$} task spec does not match revision ${Q.revision}`);return Q}requireTask($){let Z=$.trim();if(!Z)throw Error("taskId is required");let Q=this.store.getTask(Z);if(!Q)throw Error(`unknown task: ${Z}`);return Q}assertRevision($,Z){if($.revision!==Z)throw Error(`task ${$.taskId} is at revision ${$.revision}; the requested revision is stale`)}publish($,Z,Q){this.publishEvent($,{task:Z,...Q?{run:Q}:{}},Q?.sessionId??Z.lastSessionId)}resolveWatchRoot($){try{return Ja.native($)}catch(Z){this.logError("agenda task watcher disabled: specs dir could not be resolved",Z,{specsDir:$});return}}logError($,Z,Q){if(this.logger.error)this.logger.error($,{...Q,error:Z});else this.logger.log($,{...Q,error:Z,severity:"error"})}assertUsable(){if(this.disposed)throw Error("AgendaTaskManager disposed")}}var cT={};f(cT,{ChatViewStateSchema:()=>AG,ChatSummarySchema:()=>UW,ChatSessionStatusSchema:()=>BW,ChatSessionConfigSchema:()=>VW,ChatMessageSchema:()=>HW,ChatMessageRoleSchema:()=>KW,ChatMessageImageSchema:()=>GW});import{z as c}from"zod";var VW=c.object({workspaceRoot:c.string().min(1),cwd:c.string().optional(),provider:c.string().min(1),model:c.string().min(1),mode:c.enum(["act","plan"]).default("act"),apiKey:c.string(),systemPrompt:c.string().optional(),rules:c.string().optional(),maxIterations:c.number().int().positive().optional(),enableTools:c.boolean(),enableSpawn:c.boolean().optional(),enableTeams:c.boolean().optional(),autoApproveTools:c.boolean().optional(),missionStepInterval:c.number().int().positive().optional(),missionTimeIntervalMs:c.number().int().positive().optional()}),BW=c.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),KW=c.enum(["user","assistant","tool","system","status","error"]),GW=c.object({id:c.string().min(1),mediaType:c.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:c.string().min(1)}),HW=c.object({id:c.string().min(1),sessionId:c.string().nullable(),role:KW,content:c.string(),images:c.array(GW).optional(),createdAt:c.number().int().nonnegative(),meta:c.object({stream:c.enum(["stdout","stderr"]).optional(),toolName:c.string().optional(),iteration:c.number().int().nonnegative().optional(),agentId:c.string().optional(),conversationId:c.string().optional(),hookEventName:c.string().optional(),inputTokens:c.number().int().nonnegative().optional(),outputTokens:c.number().int().nonnegative().optional(),checkpoint:c.object({ref:c.string(),createdAt:c.number().int().nonnegative(),runCount:c.number().int().positive(),kind:c.enum(["stash","commit"]).optional()}).optional()}).optional()}),UW=c.object({toolCalls:c.number().int().nonnegative(),tokensIn:c.number().int().nonnegative(),tokensOut:c.number().int().nonnegative()}),AG=c.object({sessionId:c.string().nullable(),status:BW,config:VW,messages:c.array(HW),rawTranscript:c.string(),error:c.string().nullable(),summary:UW});var uT={};f(uT,{CORE_BUILD_VERSION:()=>TG});var TG=Q2;import{Agent as Bn,createAgentRuntime as Kn}from"@cline/agents";var dT={};f(dT,{loadLlmsConfigFromFile:()=>MG,defineLlmsConfig:()=>EG});import{readFile as Ua}from"node:fs/promises";import Fa from"node:path";function EG($){return $}async function MG($){let Z=Fa.resolve($),Q=await Ua(Z,"utf8"),X;try{X=JSON.parse(Q)}catch(J){let W=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${W}`)}return La(X,Z)}function La($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let X=$.providers;if(!Array.isArray(X))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!X.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var nT={};f(nT,{createLlmsSdk:()=>CG,DefaultLlmsSdk:()=>hZ});import{BUILT_IN_PROVIDER_IDS as iT,createHandler as za,createHandlerAsync as Oa,getProviderCollection as Na,hasProvider as rT,registerAsyncHandler as qa,registerHandler as Aa,registerModel as Ta,registerProvider as aT}from"@cline/llms";function lT($){return $?{...$}:{}}function Da($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function _a($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function pT($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class RG{providers=new Map;register($){_a($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...lT($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Da($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...lT($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class hZ{configuredProviders=new RG;constructor($){this.applyConfig($)}createHandler($){return za(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Oa(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(aT($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Aa($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)qa($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);aT({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){Ta($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...iT]}async getBuiltInProviders(){return(await Promise.all(iT.map((Z)=>Na(Z)))).filter((Z)=>Z!==void 0).map((Z)=>pT({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=rT(Z.id),X=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof X==="string"&&rT(X);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function CG($){return new hZ($)}sW();async function Ea(){return Promise.resolve().then(() => (KJ(),rq))}function _n(){return new Date().toISOString()}var zn="cline",On="cline-pass";function Nn($){if(JE($)!=="providers.json")return;let Z=bG($);if(JE(Z)!=="settings")return;return bG(Z)}class H${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Dn(),this.dataDir=$.dataDir??Nn(this.filePath),this.dataDir||!$.filePath)PZ({providerSettingsManager:this,dataDir:this.dataDir});if(qZ(this),NZ(this.read()),SG(this.filePath))try{XE(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!SG(this.filePath))return f2();try{let $=Hn(this.filePath,"utf8"),Z=JSON.parse($),Q=k4.safeParse(Z);if(Q.success){NZ(Q.data);let X=Q.data.providers.cline?.settings?.auth;return j0(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!X?.accessToken} clineAccessTokenHash=${d0(X?.accessToken)} clineRefreshTokenHash=${d0(X?.refreshToken)}`),Q.data}}catch{}return f2()}write($){let Z=k4.parse($),Q=bG(this.filePath);if(!SG(Q))Gn(Q,{recursive:!0,mode:448});let X=`${this.filePath}.${process.pid}.tmp`;try{Ln(X,`${JSON.stringify(Z,null,2)}
|
|
950
950
|
`,{encoding:"utf8",mode:384}),Un(X,this.filePath)}catch(J){throw Fn(X,{force:!0}),J}try{XE(this.filePath,384)}catch{}NZ(Z)}saveProviderSettings($,Z={}){let Q=b4.parse($),X=this.read(),J=Q.provider,W=Z.setLastUsed!==!1,j=X.providers[J],Y=Z.tokenSource??j?.tokenSource??"manual",V={...X,providers:{...X.providers,[J]:{settings:Q,updatedAt:_n(),tokenSource:Y}},lastUsedProvider:W?J:X.lastUsedProvider};this.write(V);let B=X.providers.cline?.settings?.auth,K=Q.provider==="cline"?Q.auth:V.providers.cline?.settings?.auth,G=!!B?.accessToken&&!K?.accessToken;return j0(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!K?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=C0(Z)?.storageProviderId;if(!J||J===Z)return Q;let W=$.providers[J]?.settings;if(!W)return Q;return b4.parse({...W.auth?{auth:W.auth}:{},...W.apiKey?{apiKey:W.apiKey}:{},...W.baseUrl?{baseUrl:W.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}getVoiceInputSettings(){return this.read().modes.voiceInput}setVoiceInputSettings($){let Z=this.read();if($)Z.modes.voiceInput=MX.parse($);else delete Z.modes.voiceInput;return this.write(Z),Z}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===On&&Z.isClinePassEnabled===!1)return zn;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return T1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return T1(Z,$)}async refreshCatalog(){try{await C2({})}catch{}}}q0();o2();import{normalizeUserInput as qn}from"@cline/shared";import{nanoid as An}from"nanoid";class WE{list($){return $?k1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),X=$.pendingPrompts.findIndex((V)=>V.id===Q);if(X<0)return{sessionId:Z.sessionId,prompts:k1($),updated:!1};let J=$.pendingPrompts[X];if(!J)return{sessionId:Z.sessionId,prompts:k1($),updated:!1};let W=Z.prompt===void 0?J.prompt:qn(Z.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=Z.delivery??J.delivery,Y={...J,prompt:W,mode:Z.mode??J.mode,delivery:j};return $.pendingPrompts.splice(X,1),En($,Y,X,J.delivery),{sessionId:Z.sessionId,prompts:k1($),prompt:OW(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),X=$.pendingPrompts.findIndex((W)=>W.id===Q);if(X<0)return{sessionId:Z.sessionId,prompts:k1($),removed:!1};let[J]=$.pendingPrompts.splice(X,1);return{sessionId:Z.sessionId,prompts:k1($),prompt:J?OW(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:X,delivery:J,userImages:W,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Q,mode:X??V.mode,userImages:W??V.userImages,userFiles:j??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${An(5)}`,prompt:Q,mode:X,delivery:J,userImages:W,userFiles:j};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return k1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((X)=>X.delivery==="steer");if(Z<0)return{prompts:k1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:k1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:k1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),k1($)}clear($){return $.pendingPrompts.length=0,[]}}class kG{deps;service=new WE;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}discardQueue($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:k1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let X=!0;try{let J=await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles});if(Tn(J))X=!1}catch{X=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,X&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=OW(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function Tn($){return typeof $==="object"&&$!==null&&"finishReason"in $&&$.finishReason==="error"}function OW($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function k1($){return $.pendingPrompts.map(OW)}function En($,Z,Q,X){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(X==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}q0();class NW{deps;constructor($){this.deps=$}lastKnownIdentityBySession=new Map;static MAX_IDENTITY_SNAPSHOTS=512;dispatchAgentEvent($,Z,Q){let X=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:X,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=tY(Q);if(!!X&&(!W.agentId||W.agentId===xG(X.agent))){let Y={agentId:xG(X.agent),conversationId:X.agent.getConversationId(),...X?.runtime.teamRuntime?{teamRole:"lead"}:{}};this.rememberSessionIdentity($,Y),m3(J,Q,{...Y,isPrimaryAgentEvent:!0});return}m3(J,Q,{...X?{}:this.lastKnownIdentityBySession.get($),isPrimaryAgentEvent:!1})}rememberSessionIdentity($,Z){if(this.lastKnownIdentityBySession.delete($),this.lastKnownIdentityBySession.set($,Z),this.lastKnownIdentityBySession.size>NW.MAX_IDENTITY_SNAPSHOTS){let Q=this.lastKnownIdentityBySession.keys().next().value;if(Q!==void 0)this.lastKnownIdentityBySession.delete(Q)}}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(SB(Q,Z),Z.type==="agent_event"){let X={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};m3(X,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let X=y$({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:xG(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(X)$2(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...X})}}if(await bB($,Z,this.deps.invokeBackendOptional),Q)kB(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,X){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,X);return}if(Z.name==="automation_event"){let B=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!B)return;let K=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!K)return;await B.ingestEvent(K);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let J=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,W=typeof J?.sessionId==="string"&&J.sessionId.trim().length>0?J.sessionId.trim():$,j=typeof J?.prompt==="string"?J.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":J?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let J=this.deps.getSession($)?.config.telemetry??Q;if(!J||!Z||typeof Z!=="object")return;let W=Z,j=typeof W.pluginName==="string"&&W.pluginName?W.pluginName:"unknown";if(W.kind==="event"){let Y=typeof W.event==="string"?W.event.trim():"";if(!Y)return;let V={...W.properties&&typeof W.properties==="object"?W.properties:{},plugin_name:j,session_id:$};if(W.required===!0)J.captureRequired(`plugin.${Y}`,V);else J.capture({event:`plugin.${Y}`,properties:V});return}if(W.kind==="metric"){let Y=typeof W.name==="string"?W.name.trim():"",V=typeof W.value==="number"?W.value:NaN;if(!Y||Number.isNaN(V))return;let B={...W.attributes&&typeof W.attributes==="object"?W.attributes:{},plugin_name:j},K=typeof W.description==="string"?W.description:void 0,G=W.required===!0,H=`plugin.${Y}`;if(W.metric==="counter")J.recordCounter(H,V,B,K,G);else if(W.metric==="histogram")J.recordHistogram(H,V,B,K,G);else if(W.metric==="gauge")J.recordGauge(H,V,B,K,G)}}handlePluginLog($,Z,Q){let X=this.deps.getSession($),J=Q??X?.config.extensionContext?.logger??X?.config.logger;if(!J||!Z||typeof Z!=="object")return;let W=Z,j=typeof W.message==="string"?W.message:"";if(!j)return;let Y=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(Y.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)Y.pluginName=W.pluginName;if(W.level==="debug"){J.debug(j,Y);return}if(W.level==="error"){if(J.error)J.error(j,Y);else J.log(j,{...Y,severity:"error"});return}J.log(j,Y)}}function xG($){return $.getAgentId()}function yG($){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:I$($.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 IG($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function jE($,Z,...Q){let X=IG($,Z);if(!X)throw Error(`session service method not available: ${Z}`);return Promise.resolve(X.apply($,Q))}async function YE($,Z,...Q){let X=IG($,Z);if(!X)return;await Promise.resolve(X.apply($,Q))}async function VE($,Z,...Q){let X=IG($,Z);if(!X)return;return await Promise.resolve(X.apply($,Q))}y1();q0();function hG($,Z,Q){return{onSubAgentEvent:(X)=>$.onAgentEvent(Q,Z,X),onSubAgentStart:(X)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(X.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let W=y$({agentId:X.subAgentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:X.parentAgentId});if(W)$2(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...W});y5(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:X.parentAgentId,agentId:X.subAgentId,...W}),$.invokeBackendOptional("handleSubAgentStart",Q,X)},onSubAgentEnd:(X)=>{let J=$.getSession(Q)?.runtime.teamRuntime,W=$.subAgentStarts.get(X.subAgentId),j=W?Date.now()-W.startedAt:0,Y=X.result?.text?X.result.text.split(`
|
|
951
|
-
`).length:0;y5(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:X.error?String(X.error):void 0,agentId:X.subAgentId,parentId:X.parentAgentId,...y$({agentId:X.subAgentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:X.parentAgentId})}),$.subAgentStarts.delete(X.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,X)}}}function vG($,Z,Q,X){let J=hG($,Z,Q);return q2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?R6({cwd:Z.cwd,telemetry:Z.telemetry,...A1[k$({mode:Z.mode})],executors:X}):[];if(Z.enableSpawnAgent)j.push(vG($,Z,Q,X));return T$(j)},...J})}import{readFile as Mn,stat as Rn}from"node:fs/promises";var Cn=20480000;async function BE($){let Z=await Rn($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Cn)throw Error("File is too large to read into context.");let Q=await Mn($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var KE=5000,cG;function yn($,Z){if(cG)return;cG=AD().then(()=>{return}).catch((Q)=>{cG=void 0,$?.error?.("Detached command log recovery failed",{error:Q}),x1(Z,{component:"core",operation:"command.detached_log_recovery",error:Q,severity:"warn",handled:!0})})}function pZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function In($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=pZ(Z.inputTokens),X=pZ(Z.outputTokens),J=pZ(Z.cacheReadTokens),W=pZ(Z.cacheWriteTokens),j=pZ(Z.totalCost);if(Q===void 0||X===void 0||J===void 0||W===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:X,cacheReadTokens:J,cacheWriteTokens:W,totalCost:j}}function hn($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function GE($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class G${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;events=new g7;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new m2;runCommandExecutionController=new X4;constructor($){let Z=fn();if(Z)xn(Z);let Q=W1($.distinctId);this.distinctId=Q,this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new B5,this.createAgentInstance=$.createAgent??((X)=>new z2(X)),this.defaultCapabilities=i0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new H$,this.oauthTokenManager=$.oauthTokenManager??new K5({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,yn(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new kG({getSession:(X)=>this.sessions.get(X),emit:(X)=>this.emit(X),send:(X)=>this.runTurn(X)}),this.pendingPrompts={list:async(X)=>this.pendingPromptsController.list(X.sessionId),update:async(X)=>this.pendingPromptsController.update(X),delete:async(X)=>this.pendingPromptsController.delete(X)},this.eventBridge=new NW({getSession:(X)=>this.sessions.get(X),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(X)=>this.emit(X),persistMessages:(X,J,W)=>{this.invoke("persistSessionMessages",X,J,W).catch((j)=>{let Y=this.sessions.get(X);(Y?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:X,error:j}),x1(Y?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:j,severity:"warn",handled:!0,context:{sessionId:X,providerId:Y?.config.providerId,modelId:Y?.config.modelId}})})},enqueuePendingPrompt:(X,J)=>this.pendingPromptsController.enqueue(X,J),invokeBackendOptional:(X,...J)=>this.invokeOptional(X,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||Sn(),X=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),J=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),W=X&&!J?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=W?{...$.config,cwd:W.cwd,workspaceRoot:W.workspace_root}:await kD($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,W)}async startResolvedSession($,Z,Q,X){let J=$.source??X0.CLI,W=D0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?_4(Y):g0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let K=gG(B,Z),G=gG(K,`${Z}.messages.json`),H=gG(K,`${Z}.json`),U=I$($.config),F=$.interactive===!0&&!j.prompt?.trim(),L=V1.parse({version:1,session_id:Z,source:J,pid:process.pid,started_at:W,status:F?"idle":"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:U,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:G}),D,z;if(Q&&Y.length>0&&!j.prompt?.trim()){let u=X??await this.invokeOptionalValue("readSessionManifest",Z);if(u)L=u,D={manifestPath:H,messagesPath:u.messages_path||G,compactionPath:u.compaction_path,manifest:u},z=await this.invokeOptionalValue("readSessionCompactionState",Z)}let O=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:K,rootMessagesPath:D?.messagesPath??G,manifest:L});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,O);let A=i0(this.defaultCapabilities,$.capabilities),q=A?.toolExecutors??this.toolExecutors,N=$.localRuntime,T=N?.extensionContext?.logger??N?.logger,C=N?.extensionContext?.automation,r=N?.extensionContext?.telemetry??N?.telemetry??this.defaultTelemetry,y,x={getSession:(u)=>this.sessions.get(u),subAgentStarts:this.subAgentStarts,onAgentEvent:(u,F0,k0)=>this.eventBridge.dispatchAgentEvent(u,F0,k0),invokeBackendOptional:(u,...F0)=>this.invokeOptional(u,...F0)};y=await JO({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:A,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(u)=>{if(u.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,u.payload,T);return}this.eventBridge.handlePluginEvent(Z,u,C,r)},onTeamEvent:(u)=>{this.eventBridge.handleTeamEvent(Z,u),y.config.onTeamEvent?.(u)},createSpawnTool:()=>vG(x,y.config,Z,q),createSubAgentLifecycleCallbacks:(u)=>hG(x,u,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(u)=>{await this.persistSessionMetadata(Z,()=>u)}});let E=v0(JQ({...D?.manifest.metadata??{},...j.sessionMetadata??{}},y.gitState),{mode:j.mode,version:y.config.extensionContext?.client?.version});if(!D)L.metadata=E;let g=await this.runtimeBuilder.build({...y.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController}),b=y.config,o=y.providerConfig;if(g.teamRuntime&&!b.teamName?.trim())b.teamName=g.teamRuntime.getTeamName();let k=async()=>{let u=this.sessions.get(Z);if(!u||!Y2(u.config.providerId))return!1;try{return await this.syncOAuthCredentials(u,{forceRefresh:!0}),!0}catch{return!1}};g.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:k});let I=[...g.tools,...b.extraTools??[]],d=g.extensions??y.extensions,Z0=j.initialCompactionState,m0,G0=_9(b),G1=Z0??z,r0=G1?{...G1,conversation_id:G1.conversation_id?.trim()||Z}:void 0,_$=z9({compact:G0,getState:()=>m0?.compactionState,saveState:async(u,F0)=>{let k0=m0;if(!k0)return;let a0={...u,conversation_id:k0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(k0,a0,F0)).updated)b.logger?.debug?.("Skipped stale session compaction state",{sessionId:k0.sessionId,sourceMessageCount:a0.source_message_count})}catch(p2){b.logger?.error?.("Failed to persist session compaction state",{sessionId:k0.sessionId,error:p2}),x1(b.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:p2,context:{sessionId:k0.sessionId,providerId:b.providerId,modelId:b.modelId}})}}}),H1={distinctId:this.distinctId,sessionId:Z,providerId:o.providerId,modelId:o.modelId,apiKey:o.apiKey,baseUrl:o.baseUrl,headers:o.headers,onAuthError:k,knownModels:o.knownModels,providerConfig:o,thinking:b.thinking,reasoningEffort:b.reasoningEffort??o.reasoningEffort,thinkingBudgetTokens:b.thinkingBudgetTokens,maxTokensPerTurn:b.maxTokensPerTurn,temperature:b.temperature,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:_$,tools:I,modelTools:g.modelTools,hooks:y.hooks,extensions:d,hookErrorMode:b.hookErrorMode,initialMessages:y.effectiveInput.initialMessages,userFileContentLoader:BE,toolPolicies:y.toolPolicies,requestToolApproval:y.requestToolApproval?async(u)=>{let F0=y.requestToolApproval,k0=this.sessions.get(Z);if(k0)await this.markTurnPending(k0);try{if(!F0)return{approved:!1,reason:"Tool approval callback is not configured."};return await F0(u)}finally{let a0=this.sessions.get(Z);if(a0?.status==="pending")await this.markTurnRunning(a0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:g.completionPolicy,consumePendingUserMessage:()=>{let u=this.pendingPromptsController.consumeSteer(Z);return u?a7(u.prompt,u.mode??b.mode):void 0},logger:g.logger??b.logger,extensionContext:b.extensionContext,onEvent:(u)=>this.eventBridge.dispatchAgentEvent(Z,b,u)};H1.hooks={...H1.hooks,onEvent:async(u)=>{if(await y.hooks?.onEvent?.(u),u.type!=="assistant-message")return;let F0=this.sessions.get(Z);if(!F0)return;let k0=F0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,k0,b.systemPrompt)}catch(a0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:a0}),x1(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:a0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:b.providerId,modelId:b.modelId}})}}};let c0=this.createAgentInstance(H1);if(H1.onEvent)c0.subscribeEvents(H1.onEvent);g.registerLeadAgent?.(c0);let t0=y$({agentId:c0.getAgentId(),conversationId:c0.getConversationId(),teamId:g.teamRuntime?.getTeamId(),teamName:g.teamRuntime?.getTeamName(),teamRole:g.teamRuntime?"lead":void 0});if(jO(b,Z,Q,U,t0),t0)$2(b.telemetry,{ulid:Z,modelId:b.modelId,provider:b.providerId,...t0});if(g.teamRuntime)TQ(b.telemetry,{ulid:Z,teamId:g.teamRuntime.getTeamId(),teamName:g.teamRuntime.getTeamName(),leadAgentId:c0.getAgentId(),restoredFromPersistence:g.teamRestoredFromPersistence===!0});let n={sessionId:Z,config:b,sessionMetadata:E,...D?{artifacts:D}:{},source:J,startedAt:D?.manifest.started_at??W,updatedAt:D?.manifest.ended_at??D?.manifest.started_at??W,pendingPrompt:L.prompt,runtime:g,agent:c0,started:!1,status:D?.manifest.status??(F?"idle":"running"),aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:r0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:y.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(m0=n,n.compactionState&&!this.isCompactionStateForSession(n.sessionId,n.compactionState,n))n.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:n.sessionId,conversationId:n.compactionState.conversation_id}),n.compactionState=void 0;if(this.sessions.set(Z,n),D)await this.refreshActiveSessionGitMetadata(n,y.gitState);if(Y.length>0&&!D)try{await this.ensureSessionPersisted(n),await this.invoke("persistSessionMessages",Z,Y,n.config.systemPrompt)}catch(u){n.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:Z,error:u}),x1(n.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:u,severity:"warn",handled:!0,context:{sessionId:Z,providerId:n.config.providerId,modelId:n.config.modelId}})}this.emitStatus(Z,n.status);let U1;try{if(j.prompt?.trim())if(U1=await this.executeTurn(n,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!n.interactive)await this.finalizeSingleRun(n,U1.finishReason);else await this.completeInteractiveTurn(n,U1.finishReason)}catch(u){if(n.interactive&&n.aborting)U1=await this.completeAbortedInteractiveTurn(n);else{x1(n.config.telemetry,{component:"core",operation:"session.start",error:u,severity:"error",handled:!1,context:{sessionId:n.sessionId,providerId:n.config.providerId,modelId:n.config.modelId}});try{await this.failSession(n)}catch(F0){n.config.logger?.error?.("Session failure cleanup threw",{sessionId:n.sessionId,error:F0})}throw u}}return{sessionId:Z,manifest:L,manifestPath:H,messagesPath:G,result:U1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let X=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...X?{sessionMetadata:X}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),X=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:X??"immediate"}}),X==="queue"||X==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:X,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)});return J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw x1(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=NB(this.usageBySession.get($)),Q=NB(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;if(Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,Q.drainingPendingPrompts)this.pendingPromptsController.discardQueue(Q);Q.agent.abort(Z)}async proceedWhileRunning($,Z){return this.runCommandExecutionController.proceedWhileRunning($,Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!f0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!f0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return yG(Z);let Q=$.trim();if(!Q)return;let X=await this.getRow(Q);if(X)return l9(X);let J=await this.readManifest(Q);return J?eX(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(l9),X=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(X.has(J.sessionId))continue;Q.unshift(yG(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let X=this.sessions.get(Q),J=X?void 0:await this.getSession(Q);if(!(X??J))return{updated:!1};if(X){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,X,void 0,Y))return{updated:!1};X.agent.restore(Y)}return await this.persistActiveSessionCompactionState(X,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,J))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(GE(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let X=Q.compactionStateWriteQueue;if(!X)return Q.compactionState;await X.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,X){let J=Z.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let W=Q?.agent.getConversationId()?.trim()||X?.conversationId?.trim();return W?J===W:!1}async canPersistCompactionState($,Z,Q,X,J){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,X))return!1;let W=J??Q?.agent.getMessages()??await this.readSessionMessages($);return V2(Z,W)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let X=$.compactionState,J=X!==void 0&&V2(X,Q??$.agent.getMessages())!==void 0;if(X&&(J?GE(Z,X):Date.parse(Z.updated_at)<Date.parse(X.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let X=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),J=X.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await X}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let X=Q.agent.getMessages();if(X.length>0)return X}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return x2(Q.messagesPath);let X=await this.readManifest(Z);return x2(X?.messages_path)}async dispatchHookEvent($){await kN($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=q6(Z),X=this.getSessionOrThrow($);if(Q.providerId!==void 0)X.config.providerId=Q.providerId;if(Q.modelId!==void 0)X.config.modelId=Q.modelId;if(Q.apiKey!==void 0)X.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)X.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)X.config.headers=Q.headers;if(Q.providerConfig!==void 0)X.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))X.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))X.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(X.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)X.config.reasoningEffort=void 0,X.config.thinkingBudgetTokens=void 0}let J={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let W={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(X.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),X.agent.updateConnection(Q),X.runtime.teamRuntime?.updateTeammateConnections(W),Q.providerId||Q.modelId)await this.mutateSessionManifest(X,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let X=$.sessionId,W=(this.manifestMutationQueues.get(X)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",X)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=W.then(()=>{return},()=>{return});this.manifestMutationQueues.set(X,j);try{return await W}finally{if(this.manifestMutationQueues.get(X)===j)this.manifestMutationQueues.delete(X)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),X=Q.prompt.trim(),J=Q?.userImages?.length,W=Q?.userFiles?.length;if(!X&&!J&&!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=X;if(await this.ensureSessionPersisted($),!$.pendingPrompt){$.pendingPrompt=X;try{await this.invokeOptionalValue("updateSession",{sessionId:$.sessionId,prompt:X})}catch(j){$.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:$.sessionId,error:j})}}await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,X,Q.userImages,Q.userFiles);while(xB($,j.finishReason)){let Y=await yB($);if(Y.length===0)break;let V=IB($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(r7($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),X=g0();if($.persistedMessages=Q,$.started=$.started||Q.length>0,Q.length>0)try{await this.ensureSessionPersisted($),await this.invoke("persistSessionMessages",$.sessionId,Q,$.config.systemPrompt)}catch(J){$.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:$.sessionId,error:J}),x1($.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:J,severity:"warn",handled:!0,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}})}return this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:X}),await this.completeInteractiveTurn($,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),{text:"",usage:X,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,X){let J=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??g0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=g0(),$.turnUsageByAgent=new Map,DQ($.config.telemetry,$.sessionId,$.config.mode),A8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,X):()=>$.agent.run(Z,Q,X),B=await this.runWithAuthRetry($,V,W);$.started=!0;let K=g3(B.messages,B,W);$.persistedMessages=K;let G=i9($.turnUsageByAgent?.values()??[]),H=h0(j,B.usage),U=h0(h0(g0(),B.usage),G),F=h0(Y,U);return this.usageBySession.set($.sessionId,H),this.aggregateUsageBySession.set($.sessionId,F),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:H.totalCost,aggregatedAgentsCost:F.totalCost,usage:H,aggregateUsage:F})),await this.invoke("persistSessionMessages",$.sessionId,K,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){x1($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}});try{await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt)}catch(B){$.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:$.sessionId,error:B})}throw V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((X)=>X.name===O0.SUBMIT_AND_EXIT&&X.error===void 0))return;$.submitAndExitObserved=!0,x5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=I$($.config),X=kn(Z.prompt).trim();if(!X)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await Q4(X,Q);YO($.config.telemetry,J);let W=a7(J.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:W,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=I$($.config);if($.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt}),$.compactionState){if(!(await this.persistActiveSessionCompactionState($,$.compactionState)).updated)$.compactionState=void 0}}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await bW(I$($.config));if(!Q||!$.artifacts)return;if(SW($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(X)=>JQ({...X??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),X=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(X?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(r7($))return;let Q=Z==="aborted"||$.aborting,X=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":X?"failed":"completed",exitCode:X?1:0,shutdownReason:X?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)x5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});if(WJ($),!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z.shutdownReason));let Q=[],X=(J,W)=>{Q.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:W,severity:"warn"}),x1($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){X("update_status",J)}}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){X("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){X("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){X("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],X=(J,W)=>{Q.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:W,severity:"warn"}),x1($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};if(!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z));try{await $.agent.shutdown(Z)}catch(J){X("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){X("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){X("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let X=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!X.updated)return;let J=await this.mutateSessionManifest($,(W)=>{if(W.status=Z,f0(Z))delete W.ended_at,W.exit_code=null;else W.ended_at=X.endedAt??D0(),W.exit_code=typeof Q==="number"?Q:null});if(!J)return;$.status=Z,$.updatedAt=X.endedAt??D0(),$.endedAt=f0(Z)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(X){if(!Y2($.config.providerId)||!bn(X))throw X;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(X){if(X instanceof Q8)throw Error(`${X.providerId} requires re-authentication.`);throw X}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new M$($);throw x1(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((X)=>X.trim()).filter((X)=>X.length>0).map((X)=>wn(X)?X:mG($,X));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return y$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=h0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let X=mG(Z),J=`${Q}.messages.json`,W;try{W=Pn($)}catch{return g0()}let j=g0();for(let Y of W){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=mG($,Y);if(V===X)continue;let B=await x2(V);if(B.length===0)continue;j=h0(j,_4(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=In(Z.metadata?.aggregateUsage);if(Q)return hn($,Q);let X=Z.metadata?.aggregatedAgentsCost;if(typeof X!=="number"||!Number.isFinite(X)||X<=$.totalCost)return $;return{...$,totalCost:X}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:W$({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),KE))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(KE)).find((X)=>X.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return jE(this.sessionService,$,...Z)}invokeOptional($,...Z){return YE(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return VE(this.sessionService,$,...Z)}}function gn($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function mn($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function tT($={}){let Z=async(X)=>X,Q=new G$({sessionService:new K$(new V$),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(X){let J=(X.cwd?.trim()||X.workspaceRoot).trim(),W=await Q.startSession({source:X0.CORE,mode:"automation",sessionMetadata:v0(void 0,{mode:"automation",trigger:X.source}),interactive:!1,config:{providerId:vn(X.provider),modelId:X.model,apiKey:X.apiKey?.trim()||void 0,cwd:J,workspaceRoot:X.workspaceRoot,systemPrompt:X.systemPrompt??"",mode:mn(X),maxIterations:X.maxIterations,enableTools:X.enableTools!==!1,enableSpawnAgent:X.enableSpawn!==!1,enableAgentTeams:X.enableTeams!==!1,disableMcpSettingsTools:X.disableMcpSettingsTools,missionLogIntervalSteps:X.missionStepInterval,missionLogIntervalMs:X.missionTimeIntervalMs},toolPolicies:X.toolPolicies??{"*":{autoApprove:X.autoApproveTools!==!1}},localRuntime:{configExtensions:X.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(X,J){let W=await Q.runTurn({sessionId:X,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:gn(W)}},async abortSession(X){return await Q.abort(X,Error("hub schedule abort")),{applied:!0}},async stopSession(X){return await Q.stopSession(X),{applied:!0}}}}import{resolveClineBuildEnv as qM}from"@cline/shared";function cn($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
952
|
-
`).trim()||void 0}var HE=120,uG="...";function vZ($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=HE)return Z;let Q=HE-Buffer.byteLength(uG,"utf8");if(Q<=0)return uG;let X="";for(let J of Z){if(Buffer.byteLength(X+J,"utf8")>Q)break;X+=J}return`${X}${uG}`}async function UE($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await x2(Q)].reverse().find((V)=>V.role==="assistant"),W=J?cn(J.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:vZ(W&&W.length>0?W:Y.length>0?Y:j),severity:"info"}}import{resolve as to}from"node:path";import{CLINE_DEFAULT_MODEL_ID as eo,captureSdkError as RW,createSessionId as QH,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as $s}from"@cline/shared";import{isChatWorkspacePath as Zs}from"@cline/shared/storage";import{createSessionId as pn}from"@cline/shared";import{createSessionId as ln}from"@cline/shared";function un($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function dn($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function qW($,Z,Q,X){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:un($.status),participants:Z?[...Z.participants.values()]:[],metadata:dn($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...X?{aggregateUsage:{...X}}:{}}}function h($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function m($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function d2($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function E0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function a1($,Z,Q){return{version:"v1",event:$,eventId:ln("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function s0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let X=await $.sessionHost.getAccumulatedUsage?.(Z);return qW(Q,$.sessionState.get(Z),X?.usage,X?.aggregateUsage)}async function J1($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[X,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return W$({session:Q,messages:X,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function dG($,Z,Q,X,J={}){let W=$.sessionState.get(Z);if(W){if(J.interactive!==void 0)W.interactive=J.interactive;if(X==="creator"&&!W.createdByClientId)W.createdByClientId=Q;if(!W.participants.has(Q))W.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:X});return W}let j={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:X}]])};return $.sessionState.set(Z,j),j}function FE($,Z,Q,X,J={}){let W=$.sessionState.get(Z);if(W){if(J.interactive!==void 0)W.interactive=J.interactive;if(!W.participants.has(Q))W.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:X});return W}let j={interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:X}]])};return $.sessionState.set(Z,j),j}async function AW($,Z){let Q=pn("approval_"),X=Z.sessionId;if($.sessionState.get(X)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};let W;try{W=await $.sessionHost.getSession(X)}catch{W=void 0}let j=typeof W?.metadata?.agendaTaskId==="string"?W.metadata.agendaTaskId:void 0;return await new Promise((Y)=>{let V=$.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy,agendaTaskId:j},X);$.pendingApprovals.set(Q,{sessionId:X,resolve:Y,requestedEvent:V}),$.publish(V)})}function LE($,Z){let Q=[];for(let X of $.pendingApprovals.values()){if(!X.requestedEvent)continue;if(Z&&X.sessionId!==Z)continue;Q.push(X.requestedEvent)}return Q}function lG($,Z,Q){let X=$.pendingApprovals.get(Z);if(!X)return;return $.pendingApprovals.delete(Z),X.resolve(Q),{sessionId:X.sessionId}}function pG($,Z,Q){let X=0;for(let[J,W]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(J),W.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},W.sessionId)),X+=1}return X}async function DE($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return m(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,W=Z.payload?.approved===!0,j=lG($,Q,{approved:W,reason:J});if(!j)return m(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:W,reason:J},j.sessionId)),h(Z,{approvalId:Q,approved:W})}import{createSessionId as nn}from"@cline/shared";function rn($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var _E={debug:10,info:20,warn:30,error:40,silent:50};function an(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function a($,Z,Q={}){if(_E[$]<_E[an()])return;let X=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,W])=>[J,rn(W)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${X}`);return}console.log(`[hub] ${X}`)}function iZ($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);a("error",$,{error:Q})}async function zE($,Z,Q,X,J,W){let j=nn("capreq_"),Y=performance.now();return a("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:W,resolve:(K)=>{if(a(K.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:J,ok:K.ok,error:K.error,durationMs:Math.round(performance.now()-Y)}),!K.ok){B(Error(K.error||`Capability ${Q} was rejected by ${J}.`));return}V(K.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:J,capabilityName:Q,payload:X},Z)),a("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:J})})}function OE($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",X=$.pendingCapabilityRequests.get(Q);if(!X)return h(Z,{requestId:Q,ignored:!0});if((Z.clientId?.trim()||"")!==X.targetClientId)return m(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${X.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==X.sessionId)return m(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${X.sessionId}`);let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return X.onProgress?.(W),h(Z,{requestId:Q})}function l2($,Z,Q){let X=0;for(let[J,W]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...W}))continue;$.pendingCapabilityRequests.delete(J),a("warn","capability.request.cancelled",{requestId:J,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:Q}),W.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:Q},W.sessionId)),X+=1}return X}async function NE($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",X=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!X||!J)return m(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},j=await $.requestCapability(Q,X,W,J);return h(Z,j)}catch(W){return m(Z,"capability_request_failed",W instanceof Error?W.message:String(W))}}function qE($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",X=$.pendingCapabilityRequests.get(Q);if(!X)return h(Z,{requestId:Q,ignored:!0});let J=Z.clientId?.trim()||"";if(J!==X.targetClientId)return m(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${X.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==X.sessionId)return m(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${X.sessionId}`);$.pendingCapabilityRequests.delete(Q);let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return a(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,respondedByClientId:J,ok:Y,error:j}),X.resolve({ok:Y,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:X.capabilityName,targetClientId:X.targetClientId,respondedByClientId:J,ok:Y,payload:W,error:j},X.sessionId)),h(Z,{requestId:Q,ok:Y})}import{createSessionId as on}from"@cline/shared";function AE($,Z){let Q=Z.payload,X=Q?.clientId?.trim()||Z.clientId?.trim()||on("client_");return $.clients.set(X,{clientId:X,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:X,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),h(Z,{clientId:X})}function TE($,Z){let Q=Z.clientId?.trim(),X=Q?$.clients.get(Q):void 0;if(!Q||!X)return m(Z,"client_not_found","Client is not registered with this hub.");let J=d2(Z.payload?.metadata);if(X.lastSeenAt=Date.now(),J)X.metadata=JSON.parse(JSON.stringify(J));if(Array.isArray(Z.payload?.capabilities))X.capabilities=Z.payload.capabilities.flatMap((W)=>{if(!W||typeof W!=="object"||Array.isArray(W))return[];let j=W;if(typeof j.name!=="string"||!j.name.trim())return[];return[{name:j.name.trim(),...typeof j.description==="string"?{description:j.description}:{},...Array.isArray(j.scopes)&&j.scopes.every((Y)=>typeof Y==="string")?{scopes:j.scopes}:{}}]});return h(Z)}function EE($,Z,Q){let X=Z.clientId?.trim();if(X)$.clients.delete(X),Q(X),$.publish($.buildEvent("hub.client.disconnected",{clientId:X}));return h(Z)}function ME($,Z){return h(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as sn,CONNECTOR_PLATFORMS as tn,connectorChannelsFromPlatforms as en,listConnectorCatalog as $o,mergeConnectorConnectArgs as Zo,shouldIncludeConnectorField as Qo}from"@cline/shared";import{withConnectorStore as iG}from"@cline/shared/db";q0();function F8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function TW($){return typeof $==="string"?$.trim():void 0}function RE($){if(!F8($))return{};let Z={};for(let[Q,X]of Object.entries($))if(typeof X==="string")Z[Q]=X.trim();return Z}function Xo(){return iG(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function rG(){return{available:en(),active:X8(),configured:Xo()}}function Jo($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Wo($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let X={};for(let J of $.fields){if(!Qo(J,Q))continue;Jo(J,Q),X[J.flag]=Q[J.flag]}return X}function jo($){if(!F8($))throw Error("connector.configure payload must be an object.");let Z=TW($.channel);if(!Z)throw Error("channel is required");let Q=tn.find((G)=>G.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set($o().map((G)=>G.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=RE($.values),W=Wo(Q,J),j=F8($.security)?$.security:{},Y=j.enabled===!0,V=RE(j.values);if(Y&&Q.security)for(let G of Q.security.fields){let H=V[G.key];if(!H)throw Error(G.requiredMessage);let U=G.validate?.(H);if(U)throw Error(U)}let B=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},K=sn(Q,W,B);return iG((G)=>G.upsertConfig({channel:Z,type:Z,values:W,security:B,updateConnectArgs:(H)=>Zo(Q,H.connection.connectArgs,K,{replaceSecurityArgs:H.config?.security?.enabled===!0||B.enabled})})),rG()}function Yo($){if(!F8($))throw Error("connector.delete_config payload must be an object.");let Z=TW($.channel);if(!Z)throw Error("channel is required");return iG((Q)=>Q.deleteConfig(Z)),rG()}function Vo($){return Array.isArray($)?$.filter((Z)=>typeof Z==="string"):[]}function aG(){let $=jZ();if(!$)throw Error("connector supervision is unavailable in this hub; start connectors with the CLI instead");return $}function CE($){if(!F8($))throw Error("payload must be an object.");let Z=TW($.channel);if(!Z)throw Error("channel is required");let Q=TW($.instanceId);if(!Q)throw Error("instanceId is required");return{channel:Z,instanceId:Q}}async function Bo($){let{channel:Z,instanceId:Q}=CE($),X=F8($)?$:{};return await aG().start({channel:Z,instanceId:Q,args:Vo(X.args),restart:X.restart===!0})}async function Ko($){let{channel:Z,instanceId:Q}=CE($),X=F8($)?$:{};return{stopped:await aG().stop({channel:Z,instanceId:Q,disableAutostart:X.disableAutostart!==!1}),channel:Z,instanceId:Q}}function Go($){return $==="connector.configure"||$==="connector.delete_config"||$==="connector.start"||$==="connector.stop"}function rZ($,Z,Q){if(!Go(Z.command))return;o1($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function PE($,Z){try{if(Z.command==="connector.channels")return h(Z,rG());if(Z.command==="connector.configure"){let Q=jo(Z.payload);return rZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.delete_config"){let Q=Yo(Z.payload);return rZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.start"){let Q=await Bo(Z.payload);return rZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.stop"){let Q=await Ko(Z.payload);return rZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.supervised")return h(Z,{supervised:aG().list()});return m(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return rZ($,Z,!1),m(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Ho=30000;function Uo($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Fo($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Lo($,Z){let Q=$.activeRpcTurnCountBySession;Q.set(Z,(Q.get(Z)??0)+1);let X=!1;return()=>{if(X)return;X=!0;let J=(Q.get(Z)??1)-1;if(J<=0)Q.delete(Z);else Q.set(Z,J)}}function fE($,Z,Q){let X=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return m($,t2,X)}function Do($){return $?$:void 0}function _o($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function zo($,Z,Q,X){let J=performance.now(),W=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:X},Y=setInterval(()=>{if(W)return;let K=Math.round(performance.now()-J);a("warn","run.heartbeat",{...j,elapsedMs:K}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:K,...X?{timeoutMs:X}:{}},Q.sessionId))},Ho),V=$.sessionHost.runTurn(Q);V.then((K)=>{if(!W)return;a("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-J),finishReason:K?.finishReason})},(K)=>{if(!W)return;a("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-J),error:K})});let B;try{if(!X)return await V;return await Promise.race([V,new Promise((K,G)=>{B=setTimeout(()=>{let H=`Hub run ${Z.command} timed out after ${X}ms.`;W=!0,clearInterval(Y),G(Error(H)),a("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-J)}),pG($,(U)=>U.sessionId===Q.sessionId,H),l2($,(U)=>U.sessionId===Q.sessionId,H),$.sessionHost.abort(Q.sessionId,H).catch((U)=>{a("error","run.timeout_abort_failed",{...j,error:U})})},X)})])}finally{if(W=!0,clearInterval(Y),B)clearTimeout(B)}}async function aZ($,Z){let Q=E0(Z),X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof X.prompt==="string"?X.prompt:typeof X.input==="string"?X.input:"";if(!J.trim())return m(Z,"invalid_session_input","session input requires a prompt string");if(!await $.sessionHost.getSession(Q))return fE(Z,Q);$.publish($.buildEvent("run.started",{...Z.requestId?{requestId:Z.requestId}:{},...Z.clientId?{clientId:Z.clientId}:{}},Q));let j=X.attachments&&typeof X.attachments==="object"&&!Array.isArray(X.attachments)?X.attachments:void 0,Y=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,V=_o(X);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let B=Lo($,Q),K;try{try{K=await zo($,Z,{sessionId:Q,prompt:J,mode:Do(X.mode),delivery:X.delivery==="queue"||X.delivery==="steer"?X.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:Y,timeoutMs:V},V)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(t1(H))return fE(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(K){let H=await J1($,Q),U=Fo(K);if($.publish($.buildEvent(Uo(K.finishReason),{reason:K.finishReason,...U?{error:U}:{},result:K,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q)}finally{B()}let G=await J1($,Q);return h(Z,K||G?{...K?{result:K}:{},...G?{snapshot:G}:{}}:void 0)}async function wE($,Z){let Q=E0(Z),X=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";pG($,(J)=>J.sessionId===Q,X);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){a("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{l2($,(J)=>J.sessionId===Q,X)}return h(Z,{applied:!0})}async function SE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","run.proceed_while_running requires a sessionId");if(typeof $.sessionHost.proceedWhileRunning!=="function")return m(Z,"unsupported_command","This runtime does not support proceeding while commands are running.");let X=typeof Z.payload?.toolCallId==="string"&&Z.payload.toolCallId.trim().length>0?Z.payload.toolCallId.trim():void 0,J=await $.sessionHost.proceedWhileRunning(Q,X);return h(Z,{detachedCount:J})}async function bE($,Z){let Q=C4(Z.payload?.payload);if(!Q)return m(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),h(Z,{applied:!0})}import{join as Oo}from"node:path";import{createSessionId as No}from"@cline/shared";import{loadSqliteDb as qo}from"@cline/shared/db";import{resolveDbDataDir as Ao}from"@cline/shared/storage";var To=32,Eo=604800000;class q5 extends Error{retryable=!0;constructor($,Z,Q){super(`Session ${$} queue is full (${Z} pending runs, limit ${Q}); retry later.`);this.name="HubRunAdmissionRejectedError"}}function PG($){let Z=$?.replace(/[^a-zA-Z0-9_-]/g,"-");return Oo(Ao(),Z?`hub-runs-${Z}.db`:"hub-runs.db")}class gZ{db;maxPendingPerSession;closed=!1;constructor($={}){this.db=qo($.dbPath??PG($.ownerId)),this.maxPendingPerSession=$.maxPendingPerSession??To,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
|
|
951
|
+
`).length:0;y5(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:X.error?String(X.error):void 0,agentId:X.subAgentId,parentId:X.parentAgentId,...y$({agentId:X.subAgentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:X.parentAgentId})}),$.subAgentStarts.delete(X.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,X)}}}function vG($,Z,Q,X){let J=hG($,Z,Q);return q2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?R6({cwd:Z.cwd,telemetry:Z.telemetry,...A1[k$({mode:Z.mode})],executors:X}):[];if(Z.enableSpawnAgent)j.push(vG($,Z,Q,X));return T$(j)},...J})}import{readFile as Mn,stat as Rn}from"node:fs/promises";var Cn=20480000;async function BE($){let Z=await Rn($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Cn)throw Error("File is too large to read into context.");let Q=await Mn($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var KE=5000,cG;function yn($,Z){if(cG)return;cG=AD().then(()=>{return}).catch((Q)=>{cG=void 0,$?.error?.("Detached command log recovery failed",{error:Q}),x1(Z,{component:"core",operation:"command.detached_log_recovery",error:Q,severity:"warn",handled:!0})})}function pZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function In($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=pZ(Z.inputTokens),X=pZ(Z.outputTokens),J=pZ(Z.cacheReadTokens),W=pZ(Z.cacheWriteTokens),j=pZ(Z.totalCost);if(Q===void 0||X===void 0||J===void 0||W===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:X,cacheReadTokens:J,cacheWriteTokens:W,totalCost:j}}function hn($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function GE($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class G${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;events=new g7;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new m2;runCommandExecutionController=new X4;constructor($){let Z=fn();if(Z)xn(Z);let Q=W1($.distinctId);this.distinctId=Q,this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new B5,this.createAgentInstance=$.createAgent??((X)=>new z2(X)),this.defaultCapabilities=i0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new H$,this.oauthTokenManager=$.oauthTokenManager??new K5({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,yn(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new kG({getSession:(X)=>this.sessions.get(X),emit:(X)=>this.emit(X),send:(X)=>this.runTurn(X)}),this.pendingPrompts={list:async(X)=>this.pendingPromptsController.list(X.sessionId),update:async(X)=>this.pendingPromptsController.update(X),delete:async(X)=>this.pendingPromptsController.delete(X)},this.eventBridge=new NW({getSession:(X)=>this.sessions.get(X),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(X)=>this.emit(X),persistMessages:(X,J,W)=>{this.invoke("persistSessionMessages",X,J,W).catch((j)=>{let Y=this.sessions.get(X);(Y?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:X,error:j}),x1(Y?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:j,severity:"warn",handled:!0,context:{sessionId:X,providerId:Y?.config.providerId,modelId:Y?.config.modelId}})})},enqueuePendingPrompt:(X,J)=>this.pendingPromptsController.enqueue(X,J),invokeBackendOptional:(X,...J)=>this.invokeOptional(X,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||Sn(),X=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),J=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),W=X&&!J?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=W?{...$.config,cwd:W.cwd,workspaceRoot:W.workspace_root}:await kD($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,W)}async startResolvedSession($,Z,Q,X){let J=$.source??X0.CLI,W=D0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?_4(Y):g0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let K=gG(B,Z),G=gG(K,`${Z}.messages.json`),H=gG(K,`${Z}.json`),U=I$($.config),F=$.interactive===!0&&!j.prompt?.trim(),L=V1.parse({version:1,session_id:Z,source:J,pid:process.pid,started_at:W,status:F?"idle":"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:U,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:G}),D,z;if(Q&&Y.length>0&&!j.prompt?.trim()){let u=X??await this.invokeOptionalValue("readSessionManifest",Z);if(u)L=u,D={manifestPath:H,messagesPath:u.messages_path||G,compactionPath:u.compaction_path,manifest:u},z=await this.invokeOptionalValue("readSessionCompactionState",Z)}let O=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:K,rootMessagesPath:D?.messagesPath??G,manifest:L});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,O);let A=i0(this.defaultCapabilities,$.capabilities),q=A?.toolExecutors??this.toolExecutors,N=$.localRuntime,T=N?.extensionContext?.logger??N?.logger,C=N?.extensionContext?.automation,r=N?.extensionContext?.telemetry??N?.telemetry??this.defaultTelemetry,y,x={getSession:(u)=>this.sessions.get(u),subAgentStarts:this.subAgentStarts,onAgentEvent:(u,F0,k0)=>this.eventBridge.dispatchAgentEvent(u,F0,k0),invokeBackendOptional:(u,...F0)=>this.invokeOptional(u,...F0)};y=await JO({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:A,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(u)=>{if(u.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,u.payload,T);return}this.eventBridge.handlePluginEvent(Z,u,C,r)},onTeamEvent:(u)=>{this.eventBridge.handleTeamEvent(Z,u),y.config.onTeamEvent?.(u)},createSpawnTool:()=>vG(x,y.config,Z,q),createSubAgentLifecycleCallbacks:(u)=>hG(x,u,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(u)=>{await this.persistSessionMetadata(Z,()=>u)}});let E=v0(JQ({...D?.manifest.metadata??{},...j.sessionMetadata??{}},y.gitState),{mode:j.mode,version:y.config.extensionContext?.client?.version});if(!D)L.metadata=E;let g=await this.runtimeBuilder.build({...y.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController}),S=y.config,n=y.providerConfig;if(g.teamRuntime&&!S.teamName?.trim())S.teamName=g.teamRuntime.getTeamName();let k=async()=>{let u=this.sessions.get(Z);if(!u||!Y2(u.config.providerId))return!1;try{return await this.syncOAuthCredentials(u,{forceRefresh:!0}),!0}catch{return!1}};g.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:k});let I=[...g.tools,...S.extraTools??[]],d=g.extensions??y.extensions,Z0=j.initialCompactionState,m0,G0=_9(S),G1=Z0??z,r0=G1?{...G1,conversation_id:G1.conversation_id?.trim()||Z}:void 0,_$=z9({compact:G0,getState:()=>m0?.compactionState,saveState:async(u,F0)=>{let k0=m0;if(!k0)return;let a0={...u,conversation_id:k0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(k0,a0,F0)).updated)S.logger?.debug?.("Skipped stale session compaction state",{sessionId:k0.sessionId,sourceMessageCount:a0.source_message_count})}catch(p2){S.logger?.error?.("Failed to persist session compaction state",{sessionId:k0.sessionId,error:p2}),x1(S.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:p2,context:{sessionId:k0.sessionId,providerId:S.providerId,modelId:S.modelId}})}}}),H1={distinctId:this.distinctId,sessionId:Z,providerId:n.providerId,modelId:n.modelId,apiKey:n.apiKey,baseUrl:n.baseUrl,headers:n.headers,onAuthError:k,knownModels:n.knownModels,providerConfig:n,thinking:S.thinking,reasoningEffort:S.reasoningEffort??n.reasoningEffort,thinkingBudgetTokens:S.thinkingBudgetTokens,maxTokensPerTurn:S.maxTokensPerTurn,temperature:S.temperature,systemPrompt:S.systemPrompt,maxIterations:S.maxIterations,execution:S.execution,prepareTurn:_$,tools:I,modelTools:g.modelTools,hooks:y.hooks,extensions:d,hookErrorMode:S.hookErrorMode,initialMessages:y.effectiveInput.initialMessages,userFileContentLoader:BE,toolPolicies:y.toolPolicies,requestToolApproval:y.requestToolApproval?async(u)=>{let F0=y.requestToolApproval,k0=this.sessions.get(Z);if(k0)await this.markTurnPending(k0);try{if(!F0)return{approved:!1,reason:"Tool approval callback is not configured."};return await F0(u)}finally{let a0=this.sessions.get(Z);if(a0?.status==="pending")await this.markTurnRunning(a0)}}:void 0,telemetry:S.telemetry,onConsecutiveMistakeLimitReached:S.onConsecutiveMistakeLimitReached,completionPolicy:g.completionPolicy,consumePendingUserMessage:()=>{let u=this.pendingPromptsController.consumeSteer(Z);return u?a7(u.prompt,u.mode??S.mode):void 0},logger:g.logger??S.logger,extensionContext:S.extensionContext,onEvent:(u)=>this.eventBridge.dispatchAgentEvent(Z,S,u)};H1.hooks={...H1.hooks,onEvent:async(u)=>{if(await y.hooks?.onEvent?.(u),u.type!=="assistant-message")return;let F0=this.sessions.get(Z);if(!F0)return;let k0=F0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,k0,S.systemPrompt)}catch(a0){S.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:a0}),x1(S.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:a0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:S.providerId,modelId:S.modelId}})}}};let c0=this.createAgentInstance(H1);if(H1.onEvent)c0.subscribeEvents(H1.onEvent);g.registerLeadAgent?.(c0);let t0=y$({agentId:c0.getAgentId(),conversationId:c0.getConversationId(),teamId:g.teamRuntime?.getTeamId(),teamName:g.teamRuntime?.getTeamName(),teamRole:g.teamRuntime?"lead":void 0});if(jO(S,Z,Q,U,t0),t0)$2(S.telemetry,{ulid:Z,modelId:S.modelId,provider:S.providerId,...t0});if(g.teamRuntime)TQ(S.telemetry,{ulid:Z,teamId:g.teamRuntime.getTeamId(),teamName:g.teamRuntime.getTeamName(),leadAgentId:c0.getAgentId(),restoredFromPersistence:g.teamRestoredFromPersistence===!0});let o={sessionId:Z,config:S,sessionMetadata:E,...D?{artifacts:D}:{},source:J,startedAt:D?.manifest.started_at??W,updatedAt:D?.manifest.ended_at??D?.manifest.started_at??W,pendingPrompt:L.prompt,runtime:g,agent:c0,started:!1,status:D?.manifest.status??(F?"idle":"running"),aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:r0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:y.pluginSandboxShutdown,submitAndExitObserved:!1,taskCompletedEmitted:!1,lastInteractiveTurnFinishReason:void 0};if(m0=o,o.compactionState&&!this.isCompactionStateForSession(o.sessionId,o.compactionState,o))o.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:o.sessionId,conversationId:o.compactionState.conversation_id}),o.compactionState=void 0;if(this.sessions.set(Z,o),D)await this.refreshActiveSessionGitMetadata(o,y.gitState);if(Y.length>0&&!D)try{await this.ensureSessionPersisted(o),await this.invoke("persistSessionMessages",Z,Y,o.config.systemPrompt)}catch(u){o.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:Z,error:u}),x1(o.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:u,severity:"warn",handled:!0,context:{sessionId:Z,providerId:o.config.providerId,modelId:o.config.modelId}})}this.emitStatus(Z,o.status);let U1;try{if(j.prompt?.trim())if(U1=await this.executeTurn(o,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!o.interactive)await this.finalizeSingleRun(o,U1.finishReason);else await this.completeInteractiveTurn(o,U1.finishReason)}catch(u){if(o.interactive&&o.aborting)U1=await this.completeAbortedInteractiveTurn(o);else{x1(o.config.telemetry,{component:"core",operation:"session.start",error:u,severity:"error",handled:!1,context:{sessionId:o.sessionId,providerId:o.config.providerId,modelId:o.config.modelId}});try{await this.failSession(o)}catch(F0){o.config.logger?.error?.("Session failure cleanup threw",{sessionId:o.sessionId,error:F0})}throw u}}return{sessionId:Z,manifest:L,manifestPath:H,messagesPath:G,result:U1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let X=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...X?{sessionMetadata:X}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),X=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:X??"immediate"}}),X==="queue"||X==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:X,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)});return J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw x1(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=NB(this.usageBySession.get($)),Q=NB(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;if(Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,Q.drainingPendingPrompts)this.pendingPromptsController.discardQueue(Q);Q.agent.abort(Z)}async proceedWhileRunning($,Z){return this.runCommandExecutionController.proceedWhileRunning($,Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!f0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!f0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return yG(Z);let Q=$.trim();if(!Q)return;let X=await this.getRow(Q);if(X)return l9(X);let J=await this.readManifest(Q);return J?eX(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(l9),X=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(X.has(J.sessionId))continue;Q.unshift(yG(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let X=this.sessions.get(Q),J=X?void 0:await this.getSession(Q);if(!(X??J))return{updated:!1};if(X){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,X,void 0,Y))return{updated:!1};X.agent.restore(Y)}return await this.persistActiveSessionCompactionState(X,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,J))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(GE(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let X=Q.compactionStateWriteQueue;if(!X)return Q.compactionState;await X.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,X){let J=Z.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let W=Q?.agent.getConversationId()?.trim()||X?.conversationId?.trim();return W?J===W:!1}async canPersistCompactionState($,Z,Q,X,J){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,X))return!1;let W=J??Q?.agent.getMessages()??await this.readSessionMessages($);return V2(Z,W)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let X=$.compactionState,J=X!==void 0&&V2(X,Q??$.agent.getMessages())!==void 0;if(X&&(J?GE(Z,X):Date.parse(Z.updated_at)<Date.parse(X.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let X=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),J=X.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await X}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let X=Q.agent.getMessages();if(X.length>0)return X}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return x2(Q.messagesPath);let X=await this.readManifest(Z);return x2(X?.messages_path)}async dispatchHookEvent($){await kN($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=q6(Z),X=this.getSessionOrThrow($);if(Q.providerId!==void 0)X.config.providerId=Q.providerId;if(Q.modelId!==void 0)X.config.modelId=Q.modelId;if(Q.apiKey!==void 0)X.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)X.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)X.config.headers=Q.headers;if(Q.providerConfig!==void 0)X.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))X.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))X.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(X.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)X.config.reasoningEffort=void 0,X.config.thinkingBudgetTokens=void 0}let J={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let W={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(X.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),X.agent.updateConnection(Q),X.runtime.teamRuntime?.updateTeammateConnections(W),Q.providerId||Q.modelId)await this.mutateSessionManifest(X,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let X=$.sessionId,W=(this.manifestMutationQueues.get(X)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",X)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=W.then(()=>{return},()=>{return});this.manifestMutationQueues.set(X,j);try{return await W}finally{if(this.manifestMutationQueues.get(X)===j)this.manifestMutationQueues.delete(X)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),X=Q.prompt.trim(),J=Q?.userImages?.length,W=Q?.userFiles?.length;if(!X&&!J&&!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=X;if(await this.ensureSessionPersisted($),!$.pendingPrompt){$.pendingPrompt=X;try{await this.invokeOptionalValue("updateSession",{sessionId:$.sessionId,prompt:X})}catch(j){$.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:$.sessionId,error:j})}}await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,X,Q.userImages,Q.userFiles);while(xB($,j.finishReason)){let Y=await yB($);if(Y.length===0)break;let V=IB($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(r7($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),X=g0();if($.persistedMessages=Q,$.started=$.started||Q.length>0,Q.length>0)try{await this.ensureSessionPersisted($),await this.invoke("persistSessionMessages",$.sessionId,Q,$.config.systemPrompt)}catch(J){$.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:$.sessionId,error:J}),x1($.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:J,severity:"warn",handled:!0,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}})}return this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:X}),await this.completeInteractiveTurn($,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),{text:"",usage:X,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,X){let J=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??g0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=g0(),$.turnUsageByAgent=new Map,DQ($.config.telemetry,$.sessionId,$.config.mode),A8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,X):()=>$.agent.run(Z,Q,X),B=await this.runWithAuthRetry($,V,W);$.started=!0;let K=g3(B.messages,B,W);$.persistedMessages=K;let G=i9($.turnUsageByAgent?.values()??[]),H=h0(j,B.usage),U=h0(h0(g0(),B.usage),G),F=h0(Y,U);return this.usageBySession.set($.sessionId,H),this.aggregateUsageBySession.set($.sessionId,F),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:H.totalCost,aggregatedAgentsCost:F.totalCost,usage:H,aggregateUsage:F})),await this.invoke("persistSessionMessages",$.sessionId,K,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){x1($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}});try{await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt)}catch(B){$.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:$.sessionId,error:B})}throw V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((X)=>X.name===O0.SUBMIT_AND_EXIT&&X.error===void 0))return;$.submitAndExitObserved=!0,$.taskCompletedEmitted=!0,x5($.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($)})}emitTaskCompletedOnTeardown($,Z){if($.taskCompletedEmitted||$.submitAndExitObserved)return;if(!($.interactive?$.lastInteractiveTurnFinishReason==="completed"&&!$.aborting&&$.agent.canStartRun():Z==="completed"))return;$.taskCompletedEmitted=!0,x5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=I$($.config),X=kn(Z.prompt).trim();if(!X)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await Q4(X,Q);YO($.config.telemetry,J);let W=a7(J.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:W,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=I$($.config);if($.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt}),$.compactionState){if(!(await this.persistActiveSessionCompactionState($,$.compactionState)).updated)$.compactionState=void 0}}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await bW(I$($.config));if(!Q||!$.artifacts)return;if(SW($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(X)=>JQ({...X??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),X=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(X?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(r7($))return;let Q=Z==="aborted"||$.aborting,X=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":X?"failed":"completed",exitCode:X?1:0,shutdownReason:X?"session_error":"session_complete",endReason:Z})}async failSession($){$.lastInteractiveTurnFinishReason="error",await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(this.emitTaskCompletedOnTeardown($,Z.status),WJ($),!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z.shutdownReason));let Q=[],X=(J,W)=>{Q.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:W,severity:"warn"}),x1($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){X("update_status",J)}}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){X("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){X("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){X("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){this.emitTaskCompletedOnTeardown($);let Q=[],X=(J,W)=>{Q.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:W,severity:"warn"}),x1($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};if(!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z));try{await $.agent.shutdown(Z)}catch(J){X("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){X("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){X("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let X=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!X.updated)return;let J=await this.mutateSessionManifest($,(W)=>{if(W.status=Z,f0(Z))delete W.ended_at,W.exit_code=null;else W.ended_at=X.endedAt??D0(),W.exit_code=typeof Q==="number"?Q:null});if(!J)return;$.status=Z,$.updatedAt=X.endedAt??D0(),$.endedAt=f0(Z)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(X){if(!Y2($.config.providerId)||!bn(X))throw X;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(X){if(X instanceof Q8)throw Error(`${X.providerId} requires re-authentication.`);throw X}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new M$($);throw x1(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((X)=>X.trim()).filter((X)=>X.length>0).map((X)=>wn(X)?X:mG($,X));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return y$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=h0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let X=mG(Z),J=`${Q}.messages.json`,W;try{W=Pn($)}catch{return g0()}let j=g0();for(let Y of W){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=mG($,Y);if(V===X)continue;let B=await x2(V);if(B.length===0)continue;j=h0(j,_4(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=In(Z.metadata?.aggregateUsage);if(Q)return hn($,Q);let X=Z.metadata?.aggregatedAgentsCost;if(typeof X!=="number"||!Number.isFinite(X)||X<=$.totalCost)return $;return{...$,totalCost:X}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:W$({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),KE))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(KE)).find((X)=>X.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return jE(this.sessionService,$,...Z)}invokeOptional($,...Z){return YE(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return VE(this.sessionService,$,...Z)}}function gn($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function mn($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function tT($={}){let Z=async(X)=>X,Q=new G$({sessionService:new K$(new V$),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(X){let J=(X.cwd?.trim()||X.workspaceRoot).trim(),W=await Q.startSession({source:X0.CORE,mode:"automation",sessionMetadata:v0(void 0,{mode:"automation",trigger:X.source}),interactive:!1,config:{providerId:vn(X.provider),modelId:X.model,apiKey:X.apiKey?.trim()||void 0,cwd:J,workspaceRoot:X.workspaceRoot,systemPrompt:X.systemPrompt??"",mode:mn(X),maxIterations:X.maxIterations,enableTools:X.enableTools!==!1,enableSpawnAgent:X.enableSpawn!==!1,enableAgentTeams:X.enableTeams!==!1,disableMcpSettingsTools:X.disableMcpSettingsTools,missionLogIntervalSteps:X.missionStepInterval,missionLogIntervalMs:X.missionTimeIntervalMs},toolPolicies:X.toolPolicies??{"*":{autoApprove:X.autoApproveTools!==!1}},localRuntime:{configExtensions:X.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(X,J){let W=await Q.runTurn({sessionId:X,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:gn(W)}},async abortSession(X){return await Q.abort(X,Error("hub schedule abort")),{applied:!0}},async stopSession(X){return await Q.stopSession(X),{applied:!0}}}}import{resolveClineBuildEnv as qM}from"@cline/shared";function cn($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
952
|
+
`).trim()||void 0}var HE=120,uG="...";function vZ($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=HE)return Z;let Q=HE-Buffer.byteLength(uG,"utf8");if(Q<=0)return uG;let X="";for(let J of Z){if(Buffer.byteLength(X+J,"utf8")>Q)break;X+=J}return`${X}${uG}`}async function UE($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await x2(Q)].reverse().find((V)=>V.role==="assistant"),W=J?cn(J.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:vZ(W&&W.length>0?W:Y.length>0?Y:j),severity:"info"}}import{resolve as $s}from"node:path";import{CLINE_DEFAULT_MODEL_ID as Zs,captureSdkError as RW,createSessionId as QH,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as Qs}from"@cline/shared";import{isChatWorkspacePath as Xs}from"@cline/shared/storage";import{createSessionId as pn}from"@cline/shared";import{createSessionId as ln}from"@cline/shared";function un($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function dn($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function qW($,Z,Q,X){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:un($.status),participants:Z?[...Z.participants.values()]:[],metadata:dn($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...X?{aggregateUsage:{...X}}:{}}}function h($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function m($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function d2($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function E0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function a1($,Z,Q){return{version:"v1",event:$,eventId:ln("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function s0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let X=await $.sessionHost.getAccumulatedUsage?.(Z);return qW(Q,$.sessionState.get(Z),X?.usage,X?.aggregateUsage)}async function J1($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[X,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return W$({session:Q,messages:X,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function dG($,Z,Q,X,J={}){let W=$.sessionState.get(Z);if(W){if(J.interactive!==void 0)W.interactive=J.interactive;if(X==="creator"&&!W.createdByClientId)W.createdByClientId=Q;if(!W.participants.has(Q))W.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:X});return W}let j={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:X}]])};return $.sessionState.set(Z,j),j}function FE($,Z,Q,X,J={}){let W=$.sessionState.get(Z);if(W){if(J.interactive!==void 0)W.interactive=J.interactive;if(!W.participants.has(Q))W.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:X});return W}let j={interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:X}]])};return $.sessionState.set(Z,j),j}async function AW($,Z){let Q=pn("approval_"),X=Z.sessionId;if($.sessionState.get(X)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};let W;try{W=await $.sessionHost.getSession(X)}catch{W=void 0}let j=typeof W?.metadata?.agendaTaskId==="string"?W.metadata.agendaTaskId:void 0;return await new Promise((Y)=>{let V=$.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy,agendaTaskId:j},X);$.pendingApprovals.set(Q,{sessionId:X,resolve:Y,requestedEvent:V}),$.publish(V)})}function LE($,Z){let Q=[];for(let X of $.pendingApprovals.values()){if(!X.requestedEvent)continue;if(Z&&X.sessionId!==Z)continue;Q.push(X.requestedEvent)}return Q}function lG($,Z,Q){let X=$.pendingApprovals.get(Z);if(!X)return;return $.pendingApprovals.delete(Z),X.resolve(Q),{sessionId:X.sessionId}}function pG($,Z,Q){let X=0;for(let[J,W]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(J),W.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},W.sessionId)),X+=1}return X}async function DE($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return m(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,W=Z.payload?.approved===!0,j=lG($,Q,{approved:W,reason:J});if(!j)return m(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:W,reason:J},j.sessionId)),h(Z,{approvalId:Q,approved:W})}import{createSessionId as nn}from"@cline/shared";function rn($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var _E={debug:10,info:20,warn:30,error:40,silent:50};function an(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function a($,Z,Q={}){if(_E[$]<_E[an()])return;let X=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,W])=>[J,rn(W)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${X}`);return}console.log(`[hub] ${X}`)}function iZ($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);a("error",$,{error:Q})}async function zE($,Z,Q,X,J,W){let j=nn("capreq_"),Y=performance.now();return a("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:W,resolve:(K)=>{if(a(K.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:J,ok:K.ok,error:K.error,durationMs:Math.round(performance.now()-Y)}),!K.ok){B(Error(K.error||`Capability ${Q} was rejected by ${J}.`));return}V(K.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:J,capabilityName:Q,payload:X},Z)),a("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:J})})}function OE($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",X=$.pendingCapabilityRequests.get(Q);if(!X)return h(Z,{requestId:Q,ignored:!0});if((Z.clientId?.trim()||"")!==X.targetClientId)return m(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${X.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==X.sessionId)return m(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${X.sessionId}`);let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return X.onProgress?.(W),h(Z,{requestId:Q})}function l2($,Z,Q){let X=0;for(let[J,W]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...W}))continue;$.pendingCapabilityRequests.delete(J),a("warn","capability.request.cancelled",{requestId:J,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:Q}),W.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:Q},W.sessionId)),X+=1}return X}async function NE($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",X=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!X||!J)return m(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},j=await $.requestCapability(Q,X,W,J);return h(Z,j)}catch(W){return m(Z,"capability_request_failed",W instanceof Error?W.message:String(W))}}function qE($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",X=$.pendingCapabilityRequests.get(Q);if(!X)return h(Z,{requestId:Q,ignored:!0});let J=Z.clientId?.trim()||"";if(J!==X.targetClientId)return m(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${X.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==X.sessionId)return m(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${X.sessionId}`);$.pendingCapabilityRequests.delete(Q);let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return a(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,respondedByClientId:J,ok:Y,error:j}),X.resolve({ok:Y,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:X.capabilityName,targetClientId:X.targetClientId,respondedByClientId:J,ok:Y,payload:W,error:j},X.sessionId)),h(Z,{requestId:Q,ok:Y})}import{createSessionId as on}from"@cline/shared";function AE($,Z){let Q=Z.payload,X=Q?.clientId?.trim()||Z.clientId?.trim()||on("client_");return $.clients.set(X,{clientId:X,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:X,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),h(Z,{clientId:X})}function TE($,Z){let Q=Z.clientId?.trim(),X=Q?$.clients.get(Q):void 0;if(!Q||!X)return m(Z,"client_not_found","Client is not registered with this hub.");let J=d2(Z.payload?.metadata);if(X.lastSeenAt=Date.now(),J)X.metadata=JSON.parse(JSON.stringify(J));if(Array.isArray(Z.payload?.capabilities))X.capabilities=Z.payload.capabilities.flatMap((W)=>{if(!W||typeof W!=="object"||Array.isArray(W))return[];let j=W;if(typeof j.name!=="string"||!j.name.trim())return[];return[{name:j.name.trim(),...typeof j.description==="string"?{description:j.description}:{},...Array.isArray(j.scopes)&&j.scopes.every((Y)=>typeof Y==="string")?{scopes:j.scopes}:{}}]});return h(Z)}function EE($,Z,Q){let X=Z.clientId?.trim();if(X)$.clients.delete(X),Q(X),$.publish($.buildEvent("hub.client.disconnected",{clientId:X}));return h(Z)}function ME($,Z){return h(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as sn,CONNECTOR_PLATFORMS as tn,connectorChannelsFromPlatforms as en,listConnectorCatalog as $o,mergeConnectorConnectArgs as Zo,shouldIncludeConnectorField as Qo}from"@cline/shared";import{withConnectorStore as iG}from"@cline/shared/db";q0();function F8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function TW($){return typeof $==="string"?$.trim():void 0}function RE($){if(!F8($))return{};let Z={};for(let[Q,X]of Object.entries($))if(typeof X==="string")Z[Q]=X.trim();return Z}function Xo(){return iG(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function rG(){return{available:en(),active:X8(),configured:Xo()}}function Jo($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Wo($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let X={};for(let J of $.fields){if(!Qo(J,Q))continue;Jo(J,Q),X[J.flag]=Q[J.flag]}return X}function jo($){if(!F8($))throw Error("connector.configure payload must be an object.");let Z=TW($.channel);if(!Z)throw Error("channel is required");let Q=tn.find((G)=>G.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set($o().map((G)=>G.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=RE($.values),W=Wo(Q,J),j=F8($.security)?$.security:{},Y=j.enabled===!0,V=RE(j.values);if(Y&&Q.security)for(let G of Q.security.fields){let H=V[G.key];if(!H)throw Error(G.requiredMessage);let U=G.validate?.(H);if(U)throw Error(U)}let B=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},K=sn(Q,W,B);return iG((G)=>G.upsertConfig({channel:Z,type:Z,values:W,security:B,updateConnectArgs:(H)=>Zo(Q,H.connection.connectArgs,K,{replaceSecurityArgs:H.config?.security?.enabled===!0||B.enabled})})),rG()}function Yo($){if(!F8($))throw Error("connector.delete_config payload must be an object.");let Z=TW($.channel);if(!Z)throw Error("channel is required");return iG((Q)=>Q.deleteConfig(Z)),rG()}function Vo($){return Array.isArray($)?$.filter((Z)=>typeof Z==="string"):[]}function aG(){let $=jZ();if(!$)throw Error("connector supervision is unavailable in this hub; start connectors with the CLI instead");return $}function CE($){if(!F8($))throw Error("payload must be an object.");let Z=TW($.channel);if(!Z)throw Error("channel is required");let Q=TW($.instanceId);if(!Q)throw Error("instanceId is required");return{channel:Z,instanceId:Q}}async function Bo($){let{channel:Z,instanceId:Q}=CE($),X=F8($)?$:{};return await aG().start({channel:Z,instanceId:Q,args:Vo(X.args),restart:X.restart===!0})}async function Ko($){let{channel:Z,instanceId:Q}=CE($),X=F8($)?$:{};return{stopped:await aG().stop({channel:Z,instanceId:Q,disableAutostart:X.disableAutostart!==!1}),channel:Z,instanceId:Q}}function Go($){return $==="connector.configure"||$==="connector.delete_config"||$==="connector.start"||$==="connector.stop"}function rZ($,Z,Q){if(!Go(Z.command))return;o1($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function PE($,Z){try{if(Z.command==="connector.channels")return h(Z,rG());if(Z.command==="connector.configure"){let Q=jo(Z.payload);return rZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.delete_config"){let Q=Yo(Z.payload);return rZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.start"){let Q=await Bo(Z.payload);return rZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.stop"){let Q=await Ko(Z.payload);return rZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.supervised")return h(Z,{supervised:aG().list()});return m(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return rZ($,Z,!1),m(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Ho=30000;function Uo($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Fo($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Lo($,Z){let Q=$.activeRpcTurnCountBySession;Q.set(Z,(Q.get(Z)??0)+1);let X=!1;return()=>{if(X)return;X=!0;let J=(Q.get(Z)??1)-1;if(J<=0)Q.delete(Z);else Q.set(Z,J)}}function fE($,Z,Q){let X=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return m($,t2,X)}function Do($){return $?$:void 0}function _o($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function zo($,Z,Q,X){let J=performance.now(),W=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:X},Y=setInterval(()=>{if(W)return;let K=Math.round(performance.now()-J);a("warn","run.heartbeat",{...j,elapsedMs:K}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:K,...X?{timeoutMs:X}:{}},Q.sessionId))},Ho),V=$.sessionHost.runTurn(Q);V.then((K)=>{if(!W)return;a("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-J),finishReason:K?.finishReason})},(K)=>{if(!W)return;a("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-J),error:K})});let B;try{if(!X)return await V;return await Promise.race([V,new Promise((K,G)=>{B=setTimeout(()=>{let H=`Hub run ${Z.command} timed out after ${X}ms.`;W=!0,clearInterval(Y),G(Error(H)),a("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-J)}),pG($,(U)=>U.sessionId===Q.sessionId,H),l2($,(U)=>U.sessionId===Q.sessionId,H),$.sessionHost.abort(Q.sessionId,H).catch((U)=>{a("error","run.timeout_abort_failed",{...j,error:U})})},X)})])}finally{if(W=!0,clearInterval(Y),B)clearTimeout(B)}}async function aZ($,Z){let Q=E0(Z),X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof X.prompt==="string"?X.prompt:typeof X.input==="string"?X.input:"";if(!J.trim())return m(Z,"invalid_session_input","session input requires a prompt string");if(!await $.sessionHost.getSession(Q))return fE(Z,Q);$.publish($.buildEvent("run.started",{...Z.requestId?{requestId:Z.requestId}:{},...Z.clientId?{clientId:Z.clientId}:{}},Q));let j=X.attachments&&typeof X.attachments==="object"&&!Array.isArray(X.attachments)?X.attachments:void 0,Y=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,V=_o(X);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let B=Lo($,Q),K;try{try{K=await zo($,Z,{sessionId:Q,prompt:J,mode:Do(X.mode),delivery:X.delivery==="queue"||X.delivery==="steer"?X.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:Y,timeoutMs:V},V)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(t1(H))return fE(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(K){let H=await J1($,Q),U=Fo(K);if($.publish($.buildEvent(Uo(K.finishReason),{reason:K.finishReason,...U?{error:U}:{},result:K,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q)}finally{B()}let G=await J1($,Q);return h(Z,K||G?{...K?{result:K}:{},...G?{snapshot:G}:{}}:void 0)}async function wE($,Z){let Q=E0(Z),X=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";pG($,(J)=>J.sessionId===Q,X);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){a("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{l2($,(J)=>J.sessionId===Q,X)}return h(Z,{applied:!0})}async function SE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","run.proceed_while_running requires a sessionId");if(typeof $.sessionHost.proceedWhileRunning!=="function")return m(Z,"unsupported_command","This runtime does not support proceeding while commands are running.");let X=typeof Z.payload?.toolCallId==="string"&&Z.payload.toolCallId.trim().length>0?Z.payload.toolCallId.trim():void 0,J=await $.sessionHost.proceedWhileRunning(Q,X);return h(Z,{detachedCount:J})}async function bE($,Z){let Q=C4(Z.payload?.payload);if(!Q)return m(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),h(Z,{applied:!0})}import{join as Oo}from"node:path";import{createSessionId as No}from"@cline/shared";import{loadSqliteDb as qo}from"@cline/shared/db";import{resolveDbDataDir as Ao}from"@cline/shared/storage";var To=32,Eo=604800000;class q5 extends Error{retryable=!0;constructor($,Z,Q){super(`Session ${$} queue is full (${Z} pending runs, limit ${Q}); retry later.`);this.name="HubRunAdmissionRejectedError"}}function PG($){let Z=$?.replace(/[^a-zA-Z0-9_-]/g,"-");return Oo(Ao(),Z?`hub-runs-${Z}.db`:"hub-runs.db")}class gZ{db;maxPendingPerSession;closed=!1;constructor($={}){this.db=qo($.dbPath??PG($.ownerId)),this.maxPendingPerSession=$.maxPendingPerSession??To,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
|
|
953
953
|
CREATE TABLE IF NOT EXISTS hub_runs (
|
|
954
954
|
accepted_seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
955
955
|
run_id TEXT NOT NULL UNIQUE,
|
|
@@ -973,7 +973,7 @@ ${$.instructions.trim()}
|
|
|
973
973
|
${Z.length?`WHERE ${Z.join(" AND ")}`:""}
|
|
974
974
|
ORDER BY accepted_seq DESC LIMIT ?;`).all(...Q).map(nZ)}recoverOnStartup(){let $=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'running' ORDER BY accepted_seq;").all().map(nZ);this.db.prepare(`UPDATE hub_runs SET state = 'interrupted', ended_at = ?,
|
|
975
975
|
error = 'Hub daemon exited before the run finished.'
|
|
976
|
-
WHERE state = 'running';`).run(Date.now());let Z=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'queued' ORDER BY accepted_seq;").all().map(nZ);return this.db.prepare("DELETE FROM hub_runs WHERE ended_at IS NOT NULL AND ended_at < ?;").run(Date.now()-Eo),{interrupted:$.map((Q)=>({...Q,state:"interrupted"})),requeued:Z}}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function nZ($){let Z={};try{let Q=JSON.parse(String($.input_json));if(Q&&typeof Q==="object"&&!Array.isArray(Q))Z=Q}catch{}return{runId:String($.run_id),sessionId:String($.session_id),state:String($.state),input:Z,clientId:typeof $.client_id==="string"?$.client_id:void 0,acceptedAt:Number($.accepted_at),startedAt:$.started_at===null?void 0:Number($.started_at),endedAt:$.ended_at===null?void 0:Number($.ended_at),error:typeof $.error==="string"?$.error:void 0}}var Mo="hub_draining",Ro=new Set(["session.create","session.restore","session.fork","run.start","session.send_input","run.enqueue"]);function kE($){return Ro.has($)}function xE($){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Mo,message:"Hub is draining and refuses new mutating work; retry once a hub is serving again.",details:{retryable:!0}}}}class nG{ctx;queue;activeSessions=new Set;constructor($,Z){this.ctx=$;this.queue=Z}pump($){if(this.activeSessions.has($))return;this.activeSessions.add($),this.drainSession($).catch((Z)=>{a("error","run.queue.pump_failed",{sessionId:$,error:Z})}).finally(()=>{if(this.activeSessions.delete($),this.queue.nextQueued($))this.pump($)})}async drainSession($){for(;;){let Z=this.queue.nextQueued($);if(!Z)return;this.queue.markRunning(Z.runId),await this.execute(Z)}}async execute($){let Z={version:"v1",command:"run.start",requestId:$.runId,clientId:$.clientId,sessionId:$.sessionId,payload:{...$.input,sessionId:$.sessionId}};try{let Q=await aZ(this.ctx,Z);if(Q.ok){let X=Q.payload?.result?.finishReason;this.queue.markTerminal($.runId,X==="aborted"?"aborted":X==="error"||X==="failed"?"failed":"completed",X==="error"?"Run finished with an error.":void 0)}else this.queue.markTerminal($.runId,"failed",Q.error?.message??"Run failed.")}catch(Q){this.queue.markTerminal($.runId,"failed",Q instanceof Error?Q.message:String(Q))}}}function yE($,Z,Q,X){let J=E0(Z);if(!J)return m(Z,"invalid_session_id","run.enqueue requires a sessionId");let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{};if(!(typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"").trim())return m(Z,"invalid_session_input","run.enqueue requires a prompt string");let Y;try{Y=Q.admit(J,W,Z.clientId?.trim()||void 0)}catch(V){if(V instanceof q5)return{version:Z.version,requestId:Z.requestId,ok:!1,error:{code:"run_admission_rejected",message:V.message,details:{retryable:!0}}};throw V}return $.publish($.buildEvent("run.enqueued",{runId:Y.runId,acceptedAt:Y.acceptedAt,queuePosition:Y.queuePosition,...Z.clientId?{clientId:Z.clientId}:{}},J)),X.pump(J),h(Z,{...Y})}function IE($,Z){let Q=E0($)||void 0,X=typeof $.payload?.limit==="number"&&Number.isFinite($.payload.limit)&&$.payload.limit>0?Math.floor($.payload.limit):void 0;return h($,{runs:Z.list({sessionId:Q,limit:X}).map((J)=>({runId:J.runId,sessionId:J.sessionId,state:J.state,acceptedAt:J.acceptedAt,startedAt:J.startedAt,endedAt:J.endedAt,error:J.error}))})}async function hE($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Co($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,X]=await Promise.all([s0($,Z.payload.sessionId),J1($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...X?{snapshot:X}:{}},Z.payload.sessionId));return}case"ended":await fo($,Z);return;default:return}}async function Co($,Z){let{sessionId:Q,event:X}=Z.payload;if(X.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:X.iteration},Q));return}if(X.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:X.iteration,hadToolCalls:X.hadToolCalls,toolCallCount:X.toolCallCount},Q));return}if(X.type==="content_start"){if(X.contentType==="text"&&typeof X.text==="string"&&X.text.length>0){$.publish($.buildEvent("assistant.delta",{text:X.text},Q));return}if(X.contentType==="reasoning"){if(X.redacted&&!X.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof X.reasoning==="string"&&X.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:X.reasoning,redacted:X.redacted===!0},Q));return}if(X.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:X.toolCallId,toolName:X.toolName,input:X.input},Q));return}}if(X.type==="content_update"&&X.contentType==="tool"){$.publish($.buildEvent("tool.updated",{toolCallId:X.toolCallId,toolName:X.toolName,update:X.update},Q));return}if(X.type==="content_end"){switch(X.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:X.text},Q));break;case"media":if(X.media)$.publish($.buildEvent("assistant.media",{media:X.media},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:X.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:X.toolCallId,toolName:X.toolName,output:X.output,error:X.error},Q));break}return}if(X.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:X.message,noticeType:X.noticeType,...X.displayRole?{displayRole:X.displayRole}:{},...X.reason?{reason:X.reason}:{},...X.metadata?{metadata:X.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":X.parentAgentId?"subagent":"lead",agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(X.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:X.inputTokens,outputTokens:X.outputTokens,cacheReadTokens:X.cacheReadTokens??0,cacheWriteTokens:X.cacheWriteTokens??0,totalCost:X.cost??0},totals:{inputTokens:X.totalInputTokens,outputTokens:X.totalOutputTokens,cacheReadTokens:X.totalCacheReadTokens??0,cacheWriteTokens:X.totalCacheWriteTokens??0,totalCost:X.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":X.parentAgentId?"subagent":"lead",agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(X.type==="done"){$.publish($.buildEvent("agent.done",{reason:X.reason,text:X.text,iterations:X.iterations,usage:X.usage},Q));return}if(X.type==="error")await Po($,Z)}async function Po($,Z){let{sessionId:Q,event:X}=Z.payload;if(X.type!=="error"||X.recoverable)return;if(X.parentAgentId||Z.payload.teamRole==="teammate")return;if(($.activeRpcTurnCountBySession.get(Q)??0)>0)return;let J=X.error instanceof Error?X.error.message:String(X.error),W=await J1($,Q);$.publish($.buildEvent("run.failed",{reason:"error",...J?{error:J,text:J}:{},...W?{snapshot:W}:{}},Q))}async function fo($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),X=Q===Z.payload.reason||Q==="run.start.reply";if(X)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,W]=await Promise.all([s0($,Z.payload.sessionId),J1($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await UE(J);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(X)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...W?{snapshot:W}:{}},Z.payload.sessionId))}import{createSessionId as uE,parseRuntimeConfigExtensions as dE,ReasoningEffortSchema as go}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as WV0,HUB_COMPACTION_CAPABILITY as jV0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as YV0,HUB_HOOK_CAPABILITY_PREFIX as VV0,HUB_MISTAKE_LIMIT_CAPABILITY as BV0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as KV0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as GV0,isHubToolExecutorName as wo}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as _V0,HUB_COMPACTION_CAPABILITY as zV0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as OV0,HUB_HOOK_CAPABILITY_PREFIX as NV0,HUB_MISTAKE_LIMIT_CAPABILITY as qV0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as AV0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as TV0}from"@cline/shared";var So=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function L8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function bo($,Z){let Q=typeof $.name==="string"?$.name.trim():"",X=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=L8($.inputSchema);if(!Q||!X||!W||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:X,inputSchema:W,...L8($.lifecycle)?{lifecycle:L8($.lifecycle)}:{}}}function sG($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let X of $){if(!X||typeof X!=="object"||Array.isArray(X))continue;let J=X,W=J.kind,j=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!j||Q.has(j))continue;if(W==="tool"){let Y=bo(J,Q);if(Y)Z.push(Y);continue}if(W==="toolExecutor"){let Y=J.executor;if(!wo(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(W==="hook"){let Y=typeof J.name==="string"?J.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(W==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...L8(J.config)?{config:L8(J.config)}:{}});continue}if(W==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...L8(J.config)?{config:L8(J.config)}:{}});continue}if(W==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function gE($){let Z=$.metadata?{...$.metadata}:void 0;return{sessionId:$.sessionId,agentId:$.agentId,conversationId:$.conversationId,runId:$.runId,iteration:$.iteration,toolCallId:$.toolCallId,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function mE($){return Object.hasOwn($,"update")?$.update:$}function oZ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function ko($){let Z=($??[]).map(oZ).filter(Boolean);return Z.length>0?new Set(Z):void 0}function xo($,Z,Q){if(!Q)return!0;let X=oZ($),J=oZ(Z),W=X.includes(":")?X.split(":").at(-1)??X:X,j=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(X)||Q.has(J)||Q.has(W)||Q.has(j)}function oG($,Z){let Q=ko(Z);return $.records.skill.map((X)=>({id:X.id,name:X.item.name,description:"description"in X.item&&typeof X.item.description==="string"?X.item.description:void 0,disabled:X.item.disabled===!0,skill:X.item})).filter((X)=>xo(X.id,X.name,Q))}function vE($,Z){let Q=async(X,J)=>{let W=oZ(X),Y=oG($,Z).filter((H)=>H.id===W||oZ(H.name)===W||H.id.endsWith(`:${W}`)).filter((H)=>!H.disabled);if(Y.length!==1)return Y.length>1?`Skill "${X}" is ambiguous. Use one of: ${Y.map((H)=>H.id).join(", ")}`:`Skill "${X}" not found.`;let V=Y[0].skill,B=J?.trim(),K=B?`
|
|
976
|
+
WHERE state = 'running';`).run(Date.now());let Z=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'queued' ORDER BY accepted_seq;").all().map(nZ);return this.db.prepare("DELETE FROM hub_runs WHERE ended_at IS NOT NULL AND ended_at < ?;").run(Date.now()-Eo),{interrupted:$.map((Q)=>({...Q,state:"interrupted"})),requeued:Z}}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function nZ($){let Z={};try{let Q=JSON.parse(String($.input_json));if(Q&&typeof Q==="object"&&!Array.isArray(Q))Z=Q}catch{}return{runId:String($.run_id),sessionId:String($.session_id),state:String($.state),input:Z,clientId:typeof $.client_id==="string"?$.client_id:void 0,acceptedAt:Number($.accepted_at),startedAt:$.started_at===null?void 0:Number($.started_at),endedAt:$.ended_at===null?void 0:Number($.ended_at),error:typeof $.error==="string"?$.error:void 0}}var Mo="hub_draining",Ro=new Set(["session.create","session.restore","session.fork","run.start","session.send_input","run.enqueue"]);function kE($){return Ro.has($)}function xE($){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Mo,message:"Hub is draining and refuses new mutating work; retry once a hub is serving again.",details:{retryable:!0}}}}class nG{ctx;queue;activeSessions=new Set;constructor($,Z){this.ctx=$;this.queue=Z}pump($){if(this.activeSessions.has($))return;this.activeSessions.add($),this.drainSession($).catch((Z)=>{a("error","run.queue.pump_failed",{sessionId:$,error:Z})}).finally(()=>{if(this.activeSessions.delete($),this.queue.nextQueued($))this.pump($)})}async drainSession($){for(;;){let Z=this.queue.nextQueued($);if(!Z)return;this.queue.markRunning(Z.runId),await this.execute(Z)}}async execute($){let Z={version:"v1",command:"run.start",requestId:$.runId,clientId:$.clientId,sessionId:$.sessionId,payload:{...$.input,sessionId:$.sessionId}};try{let Q=await aZ(this.ctx,Z);if(Q.ok){let X=Q.payload?.result?.finishReason;this.queue.markTerminal($.runId,X==="aborted"?"aborted":X==="error"||X==="failed"?"failed":"completed",X==="error"?"Run finished with an error.":void 0)}else this.queue.markTerminal($.runId,"failed",Q.error?.message??"Run failed.")}catch(Q){this.queue.markTerminal($.runId,"failed",Q instanceof Error?Q.message:String(Q))}}}function yE($,Z,Q,X){let J=E0(Z);if(!J)return m(Z,"invalid_session_id","run.enqueue requires a sessionId");let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{};if(!(typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"").trim())return m(Z,"invalid_session_input","run.enqueue requires a prompt string");let Y;try{Y=Q.admit(J,W,Z.clientId?.trim()||void 0)}catch(V){if(V instanceof q5)return{version:Z.version,requestId:Z.requestId,ok:!1,error:{code:"run_admission_rejected",message:V.message,details:{retryable:!0}}};throw V}return $.publish($.buildEvent("run.enqueued",{runId:Y.runId,acceptedAt:Y.acceptedAt,queuePosition:Y.queuePosition,...Z.clientId?{clientId:Z.clientId}:{}},J)),X.pump(J),h(Z,{...Y})}function IE($,Z){let Q=E0($)||void 0,X=typeof $.payload?.limit==="number"&&Number.isFinite($.payload.limit)&&$.payload.limit>0?Math.floor($.payload.limit):void 0;return h($,{runs:Z.list({sessionId:Q,limit:X}).map((J)=>({runId:J.runId,sessionId:J.sessionId,state:J.state,acceptedAt:J.acceptedAt,startedAt:J.startedAt,endedAt:J.endedAt,error:J.error}))})}async function hE($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Co($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,X]=await Promise.all([s0($,Z.payload.sessionId),J1($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...X?{snapshot:X}:{}},Z.payload.sessionId));return}case"ended":await fo($,Z);return;default:return}}async function Co($,Z){let{sessionId:Q,event:X}=Z.payload;if(X.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:X.iteration},Q));return}if(X.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:X.iteration,hadToolCalls:X.hadToolCalls,toolCallCount:X.toolCallCount},Q));return}if(X.type==="content_start"){if(X.contentType==="text"&&typeof X.text==="string"&&X.text.length>0){$.publish($.buildEvent("assistant.delta",{text:X.text},Q));return}if(X.contentType==="reasoning"){if(X.redacted&&!X.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof X.reasoning==="string"&&X.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:X.reasoning,redacted:X.redacted===!0},Q));return}if(X.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:X.toolCallId,toolName:X.toolName,input:X.input},Q));return}}if(X.type==="content_update"&&X.contentType==="tool"){$.publish($.buildEvent("tool.updated",{toolCallId:X.toolCallId,toolName:X.toolName,update:X.update},Q));return}if(X.type==="content_end"){switch(X.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:X.text},Q));break;case"media":if(X.media)$.publish($.buildEvent("assistant.media",{media:X.media},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:X.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:X.toolCallId,toolName:X.toolName,output:X.output,error:X.error},Q));break}return}if(X.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:X.message,noticeType:X.noticeType,...X.displayRole?{displayRole:X.displayRole}:{},...X.reason?{reason:X.reason}:{},...X.metadata?{metadata:X.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":X.parentAgentId?"subagent":"lead",agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(X.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:X.inputTokens,outputTokens:X.outputTokens,cacheReadTokens:X.cacheReadTokens??0,cacheWriteTokens:X.cacheWriteTokens??0,totalCost:X.cost??0},totals:{inputTokens:X.totalInputTokens,outputTokens:X.totalOutputTokens,cacheReadTokens:X.totalCacheReadTokens??0,cacheWriteTokens:X.totalCacheWriteTokens??0,totalCost:X.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":X.parentAgentId?"subagent":"lead",agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(X.type==="done"){$.publish($.buildEvent("agent.done",{reason:X.reason,text:X.text,iterations:X.iterations,usage:X.usage},Q));return}if(X.type==="error")await Po($,Z)}async function Po($,Z){let{sessionId:Q,event:X}=Z.payload;if(X.type!=="error"||X.recoverable)return;if(X.parentAgentId||Z.payload.teamRole==="teammate")return;if(($.activeRpcTurnCountBySession.get(Q)??0)>0)return;let J=X.error instanceof Error?X.error.message:String(X.error),W=await J1($,Q);$.publish($.buildEvent("run.failed",{reason:"error",...J?{error:J,text:J}:{},...W?{snapshot:W}:{}},Q))}async function fo($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),X=Q===Z.payload.reason||Q==="run.start.reply";if(X)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,W]=await Promise.all([s0($,Z.payload.sessionId),J1($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await UE(J);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(X)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...W?{snapshot:W}:{}},Z.payload.sessionId))}import{createSessionId as uE,parseRuntimeConfigExtensions as dE,ReasoningEffortSchema as go}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as YV0,HUB_COMPACTION_CAPABILITY as VV0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as BV0,HUB_HOOK_CAPABILITY_PREFIX as KV0,HUB_MISTAKE_LIMIT_CAPABILITY as GV0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as HV0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as UV0,isHubToolExecutorName as wo}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as OV0,HUB_COMPACTION_CAPABILITY as NV0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as qV0,HUB_HOOK_CAPABILITY_PREFIX as AV0,HUB_MISTAKE_LIMIT_CAPABILITY as TV0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as EV0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as MV0}from"@cline/shared";var So=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function L8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function bo($,Z){let Q=typeof $.name==="string"?$.name.trim():"",X=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=L8($.inputSchema);if(!Q||!X||!W||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:X,inputSchema:W,...L8($.lifecycle)?{lifecycle:L8($.lifecycle)}:{}}}function sG($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let X of $){if(!X||typeof X!=="object"||Array.isArray(X))continue;let J=X,W=J.kind,j=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!j||Q.has(j))continue;if(W==="tool"){let Y=bo(J,Q);if(Y)Z.push(Y);continue}if(W==="toolExecutor"){let Y=J.executor;if(!wo(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(W==="hook"){let Y=typeof J.name==="string"?J.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(W==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...L8(J.config)?{config:L8(J.config)}:{}});continue}if(W==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...L8(J.config)?{config:L8(J.config)}:{}});continue}if(W==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function gE($){let Z=$.metadata?{...$.metadata}:void 0;return{sessionId:$.sessionId,agentId:$.agentId,conversationId:$.conversationId,runId:$.runId,iteration:$.iteration,toolCallId:$.toolCallId,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function mE($){return Object.hasOwn($,"update")?$.update:$}function oZ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function ko($){let Z=($??[]).map(oZ).filter(Boolean);return Z.length>0?new Set(Z):void 0}function xo($,Z,Q){if(!Q)return!0;let X=oZ($),J=oZ(Z),W=X.includes(":")?X.split(":").at(-1)??X:X,j=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(X)||Q.has(J)||Q.has(W)||Q.has(j)}function oG($,Z){let Q=ko(Z);return $.records.skill.map((X)=>({id:X.id,name:X.item.name,description:"description"in X.item&&typeof X.item.description==="string"?X.item.description:void 0,disabled:X.item.disabled===!0,skill:X.item})).filter((X)=>xo(X.id,X.name,Q))}function vE($,Z){let Q=async(X,J)=>{let W=oZ(X),Y=oG($,Z).filter((H)=>H.id===W||oZ(H.name)===W||H.id.endsWith(`:${W}`)).filter((H)=>!H.disabled);if(Y.length!==1)return Y.length>1?`Skill "${X}" is ambiguous. Use one of: ${Y.map((H)=>H.id).join(", ")}`:`Skill "${X}" not found.`;let V=Y[0].skill,B=J?.trim(),K=B?`
|
|
977
977
|
<command-args>${B}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
|
|
978
978
|
|
|
979
979
|
`:"";return`<command-name>${V.name}</command-name>${K}
|
|
@@ -981,7 +981,7 @@ ${$.instructions.trim()}
|
|
|
981
981
|
${G}${V.instructions}
|
|
982
982
|
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>oG($,Z).map(({skill:X,...J})=>J),enumerable:!0}),Q}function yo($,Z,Q,X){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},W=async()=>{let j=await X($,Q.capabilityName,{},Z);if(j?.snapshot)J=j.snapshot};return{start:W,stop:()=>{},refreshType:async()=>{await W()},listRecords:(j)=>[...J.records[j]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(j,Y)=>{if(!j.startsWith("/")||j.length<2)return j;let B=j.match(/^\/(\S+)/)?.[1];if(!B)return j;let K=v4(B),G=J.runtimeCommands.find((H)=>v4(H.name)===K);if(!G)return j;if(G.kind==="skill"&&Y?.expandSkillCommands===!1)return j;return`${G.instructions}${j.slice(B.length+1)}`},hasConfiguredSkills:(j)=>oG(J,j).some((Y)=>!Y.disabled),createSkillsExecutor:(j)=>vE(J,j),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(j.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>_8(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(j.registerSkillsTool)Y.registerTool(F6(vE(J,j.allowedSkillNames)));for(let V of J.runtimeCommands.filter((B)=>B.kind==="skill"&&j.includeSkills||B.kind==="workflow"&&j.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let K=B.trim();return K?`${V.instructions}
|
|
983
983
|
|
|
984
|
-
${K}`:V.instructions}})}})}}function Io($,Z,Q,X){let J=Q.map((W)=>[W.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await X($,W.capabilityName,{executor:W.executor,args:V,context:gE(Y)},Z,Y.emitUpdate?(K)=>{Y.emitUpdate?.(mE(K))}:void 0))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function ho($,Z,Q,X){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(W,j){return(await X($,J.capabilityName,{toolName:J.name,input:W,context:gE(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(mE(V))}:void 0))?.result}}))}function vo($,Z,Q,X){let J=new Map(Q.map((j)=>[j.name,j])),W={};for(let j of So){let Y=J.get(j);if(!Y)continue;W[j]=async(V)=>{return(await X($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(W).length>0?W:void 0}function tG($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),X=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),W=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Io($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...X.length>0?{hooks:vo($.sessionId,$.targetClientId,X,$.requestCapability)}:{},...Q.length>0?{extraTools:ho($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:yo($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var cE="hubCapabilityOwnerClientId";function lE($,Z,Q){let X=G4(Q);return $.filter((J)=>(Z!=="yolo"||J.name!==Z2)&&M6(J.name,X))}function EW($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function mo($){if($===null)return null;let Z=go.safeParse($);return Z.success?Z.data:void 0}function co($){let Z=d2($)??{},Q={},X=EW(Z.providerId);if(X)Q.providerId=X;let J=EW(Z.modelId);if(J)Q.modelId=J;let W=EW(Z.apiKey);if(W!==void 0)Q.apiKey=W;let j=EW(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=mo(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return q6(Q)}function uo($,Z){return $.sessionState.get(Z)?.createdByClientId}function lo($){if(!$||!("autoApproveTools"in $)&&!(cE in $))return $;let Z={...$};return delete Z[cE],delete Z.autoApproveTools,Z}function pE($,Z){let Q=d2($),X=d2(Q?.["*"]);if(typeof X?.autoApprove==="boolean")return X.autoApprove;return Z.autoApproveTools===!0}function iE($){let Z=uo($.ctx,$.sessionId);if(!Z)return m($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return m($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function eG($,Z,Q){let X=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};a("info","session.create.begin",J);let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},Y=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,V=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=c1(W.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;j.autoApproveTools=pE(W.toolPolicies,V);let K=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},G=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():void 0,H=Z.clientId?.trim()||"hub-client",U=sG(V.clientContributions);a("info","session.create.contributions_parsed",{...J,clientId:H,workspaceRoot:G,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:U.length});let L=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||uE(),D=dE(V.configExtensions);a("info","session.create.runtime_build.begin",{...J,sessionId:L,configExtensionCount:D?.length??0});let z=tG({sessionId:L,targetClientId:H,contributions:U,sessionConfig:Y,requestCapability:$.requestCapability});a("info","session.create.start_session.begin",{...J,sessionId:L,provider:Y?.providerId??(typeof K.provider==="string"?K.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof K.model==="string"?K.model:typeof j.model==="string"?j.model:"hub")});let _=Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),O=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,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...z.localRuntime,extensions:[...$.sessionExtensions??[],...z.localRuntime.extensions??[]],extraTools:lE([...$.sessionTools??[],...z.localRuntime.extraTools??[]],_,typeof j.source==="string"?j.source:void 0)},capabilities:{toolExecutors:z.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:L,providerId:Y?.providerId??(typeof K.provider==="string"?K.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof K.model==="string"?K.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof K.apiKey==="string"?K.apiKey:void 0),cwd:Y?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:_,maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});a("info","session.create.start_session.end",{...J,sessionId:O.sessionId,elapsedMs:Math.round(performance.now()-X),hasImmediateResult:!!O.result}),dG($,O.sessionId,H,"creator",{interactive:j.interactive!==!1}),a("info","session.create.read_records.begin",{...J,sessionId:O.sessionId});let[A,q]=await Promise.all([s0($,O.sessionId),J1($,O.sessionId)]);if(a("info","session.create.read_records.end",{...J,sessionId:O.sessionId,hasSession:!!A,hasSnapshot:!!q,elapsedMs:Math.round(performance.now()-X)}),A)$.publish($.buildEvent("session.created",{session:A,...q?{snapshot:q}:{}},O.sessionId));return a("info","session.create.reply",{...J,sessionId:O.sessionId,elapsedMs:Math.round(performance.now()-X)}),h(Z,{session:A,...q?{snapshot:q}:{}})}async function rE($,Z,Q){let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof X.sessionId==="string"?X.sessionId.trim():Z.sessionId?.trim()||"",W=X.checkpointRunCount;if(!J)return m(Z,"invalid_restore","session.restore requires a session id");let j=X.restore&&typeof X.restore==="object"?X.restore:{},Y=j.messages!==!1;if(typeof W!=="number")return m(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0;if(Y&&!V)return m(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},K=c1(X.initialCompactionState),G=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;G.autoApproveTools=pE(X.toolPolicies,B);let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},U=Z.clientId?.trim()||"hub-client",F=sG(B.clientContributions),D=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||uE(),z=dE(B.configExtensions),_=tG({sessionId:D,targetClientId:U,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),A=await new m2().restoreCheckpoint({sessionId:J,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(C)=>$.sessionHost.getSession(C),readMessages:(C)=>$.sessionHost.readSessionMessages(C),buildStartInput:(C)=>{if(C.restoredCheckpointMetadata)G.checkpoint=C.restoredCheckpointMetadata;let r=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():C.sourceSession.workspaceRoot||C.sourceSession.cwd,y=V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act");return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:W},initialMessages:C.initialMessages,initialCompactionState:K,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:z,..._.localRuntime,extensions:[...$.sessionExtensions??[],..._.localRuntime.extensions??[]],extraTools:lE([...$.sessionTools??[],..._.localRuntime.extraTools??[]],y,typeof G.source==="string"?G.source:void 0)},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:D,providerId:V?.providerId??(typeof H.provider==="string"?H.provider:C.sourceSession.provider),modelId:V?.modelId??(typeof H.model==="string"?H.model:C.sourceSession.model),apiKey:V?.apiKey??(typeof H.apiKey==="string"?H.apiKey:""),cwd:V?.cwd??C.plan.cwd,workspaceRoot:V?.workspaceRoot??r,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:y,maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(C)=>$.sessionHost.startSession(C),getStartedSessionId:(C)=>C.sessionId,cleanupStartedSession:async(C)=>{if(!await $.sessionHost.deleteSession(C.sessionId))throw Error(`Failed to clean up restored session ${C.sessionId}`)},readRestoredSession:(C)=>$.sessionHost.getSession(C)});if(!Y)return h(Z,{checkpoint:A.checkpoint});let q=A.startResult;if(!q)return m(Z,"restore_failed","Checkpoint restore did not start a session");dG($,q.sessionId,U,"creator",{interactive:G.interactive!==!1});let[N,T]=await Promise.all([s0($,q.sessionId),J1($,q.sessionId)]);if(N)$.publish($.buildEvent("session.created",{session:N,...T?{snapshot:T}:{}},q.sessionId));return h(Z,{session:N,...T?{snapshot:T}:{},messages:A.messages??[],checkpoint:A.checkpoint})}catch(V){if(V instanceof X1)return m(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return m(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function aE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_attach","session.attach requires a session id");let X=await s0($,Q);if(!X)return m(Z,"session_not_found",`Unknown session: ${Q}`);FE($,Q,Z.clientId?.trim()||"hub-client","participant");let J=await s0($,Q);return $.publish($.buildEvent("session.attached",{session:J??X},Q)),h(Z,{session:J??X})}async function nE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_detach","session.detach requires a session id");let X=Z.clientId?.trim()||"hub-client",J=$.sessionState.get(Q);if(J){if(J.participants.delete(X),J.createdByClientId===X)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Q)}l2($,(Y)=>Y.sessionId===Q&&Y.targetClientId===X,`Capability owner client ${X} detached before request was resolved.`);let[W,j]=await Promise.all([s0($,Q),J1($,Q)]);return $.publish($.buildEvent("session.detached",W?{session:W,...j?{snapshot:j}:{},clientId:X}:{clientId:X},Q)),h(Z)}async function oE($,Z){let Q=E0(Z),X=Z.payload?.includeSnapshot===!0,[J,W]=await Promise.all([s0($,Q),X?J1($,Q):Promise.resolve(void 0)]);return J?h(Z,{session:J,...W?{snapshot:W}:{}}):m(Z,"session_not_found",`Unknown session: ${Q}`)}async function sE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","session.messages requires a session id");if(!await s0($,Q))return m(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return h(Z,{sessionId:Q,messages:J})}async function tE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await s0($,Q))return m(Z,"session_not_found",`Unknown session: ${Q}`);let J=Z.clientId?.trim()||"hub-client",W=iE({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(W)return W;let j=await $.sessionHost.readSessionCompactionState(Q);return h(Z,{sessionId:Q,state:j})}async function eE($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((W)=>qW(W,$.sessionState.get(W.sessionId)));return h(Z,{sessions:J})}async function $M($,Z){let Q=E0(Z),X=lo(d2(Z.payload?.metadata)),J=await $.sessionHost.updateSession(Q,{metadata:X}),[W,j]=await Promise.all([s0($,Q),J1($,Q)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:W,...j?{snapshot:j}:{}}}}async function ZM($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_update_connection","session.update_connection requires a session id");let X=$.sessionHost.updateSessionConnection;if(!X)return m(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=d2(Z.payload),W=co(J?.updates);return await X.call($.sessionHost,Q,W),h(Z,{sessionId:Q,updated:!0})}async function QM($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","session.compaction.update requires a session id");let X=Z.clientId?.trim()||"hub-client",J=await s0($,Q);if(!J)return m(Z,"session_not_found",`Unknown session: ${Q}`);let W=iE({sessionId:Q,ctx:$,clientId:X,envelope:Z});if(W)return W;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=c1(j.state);if(!Y)return m(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,K]=V.updated?await Promise.all([s0($,Q),J1($,Q)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...K?{snapshot:K}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...K?{snapshot:K}:{}}}}async function XM($,Z){let Q=E0(Z),X=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),h(Z,{deleted:X})}async function JM($,Z){let Q=E0(Z),X=$.sessionHost.pendingPrompts;if(!X)return m(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await X.list({sessionId:Q});return h(Z,{sessionId:Q,prompts:J})}async function WM($,Z){let Q=E0(Z),X=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,W=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return m(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:X,prompt:J,delivery:W});return h(Z,Y)}async function jM($,Z){let Q=E0(Z),X=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return m(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.delete({sessionId:Q,promptId:X});return h(Z,W)}import{join as po}from"node:path";import{loadSqliteDb as io}from"@cline/shared/db";import{resolveDbDataDir as ro}from"@cline/shared/storage";var ao=604800000,no=200000;function fG($){let Z=$?.replace(/[^a-zA-Z0-9_-]/g,"-");return po(ro(),Z?`hub-events-${Z}.db`:"hub-events.db")}class mZ{db;retentionMs;maxRows;closed=!1;constructor($={}){this.db=io($.dbPath??fG($.ownerId)),this.retentionMs=$.retentionMs??ao,this.maxRows=$.maxRows??no,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
|
|
984
|
+
${K}`:V.instructions}})}})}}function Io($,Z,Q,X){let J=Q.map((W)=>[W.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await X($,W.capabilityName,{executor:W.executor,args:V,context:gE(Y)},Z,Y.emitUpdate?(K)=>{Y.emitUpdate?.(mE(K))}:void 0))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function ho($,Z,Q,X){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(W,j){return(await X($,J.capabilityName,{toolName:J.name,input:W,context:gE(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(mE(V))}:void 0))?.result}}))}function vo($,Z,Q,X){let J=new Map(Q.map((j)=>[j.name,j])),W={};for(let j of So){let Y=J.get(j);if(!Y)continue;W[j]=async(V)=>{return(await X($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(W).length>0?W:void 0}function tG($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),X=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),W=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Io($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...X.length>0?{hooks:vo($.sessionId,$.targetClientId,X,$.requestCapability)}:{},...Q.length>0?{extraTools:ho($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:yo($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var cE="hubCapabilityOwnerClientId";function lE($,Z,Q){let X=G4(Q);return $.filter((J)=>(Z!=="yolo"||J.name!==Z2)&&M6(J.name,X))}function EW($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function mo($){if($===null)return null;let Z=go.safeParse($);return Z.success?Z.data:void 0}function co($){let Z=d2($)??{},Q={},X=EW(Z.providerId);if(X)Q.providerId=X;let J=EW(Z.modelId);if(J)Q.modelId=J;let W=EW(Z.apiKey);if(W!==void 0)Q.apiKey=W;let j=EW(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=mo(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return q6(Q)}function uo($,Z){return $.sessionState.get(Z)?.createdByClientId}function lo($){if(!$||!("autoApproveTools"in $)&&!(cE in $))return $;let Z={...$};return delete Z[cE],delete Z.autoApproveTools,Z}function pE($,Z){let Q=d2($),X=d2(Q?.["*"]);if(typeof X?.autoApprove==="boolean")return X.autoApprove;return Z.autoApproveTools===!0}function iE($){let Z=uo($.ctx,$.sessionId);if(!Z)return m($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return m($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function eG($,Z,Q){let X=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};a("info","session.create.begin",J);let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},Y=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,V=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=c1(W.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;j.autoApproveTools=pE(W.toolPolicies,V);let K=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},G=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():void 0,H=Z.clientId?.trim()||"hub-client",U=sG(V.clientContributions);a("info","session.create.contributions_parsed",{...J,clientId:H,workspaceRoot:G,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:U.length});let L=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||uE(),D=dE(V.configExtensions);a("info","session.create.runtime_build.begin",{...J,sessionId:L,configExtensionCount:D?.length??0});let z=tG({sessionId:L,targetClientId:H,contributions:U,sessionConfig:Y,requestCapability:$.requestCapability});a("info","session.create.start_session.begin",{...J,sessionId:L,provider:Y?.providerId??(typeof K.provider==="string"?K.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof K.model==="string"?K.model:typeof j.model==="string"?j.model:"hub")});let _=Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),O=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,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...z.localRuntime,extensions:[...$.sessionExtensions??[],...z.localRuntime.extensions??[]],extraTools:lE([...$.sessionTools??[],...z.localRuntime.extraTools??[]],_,typeof j.source==="string"?j.source:void 0)},capabilities:{toolExecutors:z.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:L,providerId:Y?.providerId??(typeof K.provider==="string"?K.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof K.model==="string"?K.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof K.apiKey==="string"?K.apiKey:void 0),cwd:Y?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:_,maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});a("info","session.create.start_session.end",{...J,sessionId:O.sessionId,elapsedMs:Math.round(performance.now()-X),hasImmediateResult:!!O.result}),dG($,O.sessionId,H,"creator",{interactive:j.interactive!==!1}),a("info","session.create.read_records.begin",{...J,sessionId:O.sessionId});let[A,q]=await Promise.all([s0($,O.sessionId),J1($,O.sessionId)]);if(a("info","session.create.read_records.end",{...J,sessionId:O.sessionId,hasSession:!!A,hasSnapshot:!!q,elapsedMs:Math.round(performance.now()-X)}),A)$.publish($.buildEvent("session.created",{session:A,...q?{snapshot:q}:{}},O.sessionId));return a("info","session.create.reply",{...J,sessionId:O.sessionId,elapsedMs:Math.round(performance.now()-X)}),h(Z,{session:A,...q?{snapshot:q}:{}})}async function rE($,Z,Q){let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof X.sessionId==="string"?X.sessionId.trim():Z.sessionId?.trim()||"",W=X.checkpointRunCount;if(!J)return m(Z,"invalid_restore","session.restore requires a session id");let j=X.restore&&typeof X.restore==="object"?X.restore:{},Y=j.messages!==!1;if(typeof W!=="number")return m(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0;if(Y&&!V)return m(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},K=c1(X.initialCompactionState),G=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;G.autoApproveTools=pE(X.toolPolicies,B);let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},U=Z.clientId?.trim()||"hub-client",F=sG(B.clientContributions),D=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||uE(),z=dE(B.configExtensions),_=tG({sessionId:D,targetClientId:U,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),A=await new m2().restoreCheckpoint({sessionId:J,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(C)=>$.sessionHost.getSession(C),readMessages:(C)=>$.sessionHost.readSessionMessages(C),buildStartInput:(C)=>{if(C.restoredCheckpointMetadata)G.checkpoint=C.restoredCheckpointMetadata;let r=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():C.sourceSession.workspaceRoot||C.sourceSession.cwd,y=V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act");return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:W},initialMessages:C.initialMessages,initialCompactionState:K,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:z,..._.localRuntime,extensions:[...$.sessionExtensions??[],..._.localRuntime.extensions??[]],extraTools:lE([...$.sessionTools??[],..._.localRuntime.extraTools??[]],y,typeof G.source==="string"?G.source:void 0)},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:D,providerId:V?.providerId??(typeof H.provider==="string"?H.provider:C.sourceSession.provider),modelId:V?.modelId??(typeof H.model==="string"?H.model:C.sourceSession.model),apiKey:V?.apiKey??(typeof H.apiKey==="string"?H.apiKey:""),cwd:V?.cwd??C.plan.cwd,workspaceRoot:V?.workspaceRoot??r,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:y,maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(C)=>$.sessionHost.startSession(C),getStartedSessionId:(C)=>C.sessionId,cleanupStartedSession:async(C)=>{if(!await $.sessionHost.deleteSession(C.sessionId))throw Error(`Failed to clean up restored session ${C.sessionId}`)},readRestoredSession:(C)=>$.sessionHost.getSession(C)});if(!Y)return h(Z,{checkpoint:A.checkpoint});let q=A.startResult;if(!q)return m(Z,"restore_failed","Checkpoint restore did not start a session");dG($,q.sessionId,U,"creator",{interactive:G.interactive!==!1});let[N,T]=await Promise.all([s0($,q.sessionId),J1($,q.sessionId)]);if(N)$.publish($.buildEvent("session.created",{session:N,...T?{snapshot:T}:{}},q.sessionId));return h(Z,{session:N,...T?{snapshot:T}:{},messages:A.messages??[],checkpoint:A.checkpoint})}catch(V){if(V instanceof X1)return m(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return m(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function aE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_attach","session.attach requires a session id");let X=await s0($,Q);if(!X)return m(Z,"session_not_found",`Unknown session: ${Q}`);FE($,Q,Z.clientId?.trim()||"hub-client","participant");let J=await s0($,Q);return $.publish($.buildEvent("session.attached",{session:J??X},Q)),h(Z,{session:J??X})}async function nE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_detach","session.detach requires a session id");let X=Z.clientId?.trim()||"hub-client",J=$.sessionState.get(Q);if(J){if(J.participants.delete(X),J.createdByClientId===X)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Q)}l2($,(Y)=>Y.sessionId===Q&&Y.targetClientId===X,`Capability owner client ${X} detached before request was resolved.`);let[W,j]=await Promise.all([s0($,Q),J1($,Q)]);return $.publish($.buildEvent("session.detached",W?{session:W,...j?{snapshot:j}:{},clientId:X}:{clientId:X},Q)),h(Z)}async function oE($,Z){let Q=E0(Z),X=Z.payload?.includeSnapshot===!0,[J,W]=await Promise.all([s0($,Q),X?J1($,Q):Promise.resolve(void 0)]);return J?h(Z,{session:J,...W?{snapshot:W}:{}}):m(Z,"session_not_found",`Unknown session: ${Q}`)}async function sE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","session.messages requires a session id");if(!await s0($,Q))return m(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return h(Z,{sessionId:Q,messages:J})}async function tE($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await s0($,Q))return m(Z,"session_not_found",`Unknown session: ${Q}`);let J=Z.clientId?.trim()||"hub-client",W=iE({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(W)return W;let j=await $.sessionHost.readSessionCompactionState(Q);return h(Z,{sessionId:Q,state:j})}async function eE($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((W)=>qW(W,$.sessionState.get(W.sessionId)));return h(Z,{sessions:J})}async function $M($,Z){let Q=E0(Z),X=lo(d2(Z.payload?.metadata)),J=await $.sessionHost.updateSession(Q,{metadata:X}),[W,j]=await Promise.all([s0($,Q),J1($,Q)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:W,...j?{snapshot:j}:{}}}}async function ZM($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_update_connection","session.update_connection requires a session id");let X=$.sessionHost.updateSessionConnection;if(!X)return m(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=d2(Z.payload),W=co(J?.updates);return await X.call($.sessionHost,Q,W),h(Z,{sessionId:Q,updated:!0})}async function QM($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","session.compaction.update requires a session id");let X=Z.clientId?.trim()||"hub-client",J=await s0($,Q);if(!J)return m(Z,"session_not_found",`Unknown session: ${Q}`);let W=iE({sessionId:Q,ctx:$,clientId:X,envelope:Z});if(W)return W;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=c1(j.state);if(!Y)return m(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,K]=V.updated?await Promise.all([s0($,Q),J1($,Q)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...K?{snapshot:K}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...K?{snapshot:K}:{}}}}async function XM($,Z){let Q=E0(Z),X=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),h(Z,{deleted:X})}async function JM($,Z){let Q=E0(Z),X=$.sessionHost.pendingPrompts;if(!X)return m(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await X.list({sessionId:Q});return h(Z,{sessionId:Q,prompts:J})}async function WM($,Z){let Q=E0(Z),X=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,W=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return m(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:X,prompt:J,delivery:W});return h(Z,Y)}async function jM($,Z){let Q=E0(Z),X=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return m(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.delete({sessionId:Q,promptId:X});return h(Z,W)}import{join as po}from"node:path";import{loadSqliteDb as io}from"@cline/shared/db";import{resolveDbDataDir as ro}from"@cline/shared/storage";var ao=604800000,no=200000,oo=67108864,so=16777216;function fG($){let Z=$?.replace(/[^a-zA-Z0-9_-]/g,"-");return po(ro(),Z?`hub-events-${Z}.db`:"hub-events.db")}class mZ{db;retentionMs;maxRows;maxTotalBytes;appendedBytesSincePrune=0;closed=!1;constructor($={}){this.db=io($.dbPath??fG($.ownerId)),this.retentionMs=$.retentionMs??ao,this.maxRows=$.maxRows??no,this.maxTotalBytes=$.maxTotalBytes??oo,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
|
|
985
985
|
CREATE TABLE IF NOT EXISTS hub_events (
|
|
986
986
|
sequence INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
987
987
|
event TEXT NOT NULL,
|
|
@@ -993,15 +993,23 @@ ${K}`:V.instructions}})}})}}function Io($,Z,Q,X){let J=Q.map((W)=>[W.executor,as
|
|
|
993
993
|
ON hub_events(session_id, sequence);
|
|
994
994
|
CREATE INDEX IF NOT EXISTS idx_hub_events_created
|
|
995
995
|
ON hub_events(created_at);
|
|
996
|
-
`)}append($){if(this.closed)return $;let Z=$.timestamp??Date.now(),
|
|
997
|
-
VALUES (?, ?, ?, ?);`).run($.event,$.sessionId??null,
|
|
998
|
-
WHERE ${X.join(" AND ")} ORDER BY sequence LIMIT ?;`).all(...J).flatMap((W)=>{try{return[{...JSON.parse(String(W.envelope_json)),sequence:Number(W.sequence)}]}catch{return[]}})}lastSequence(){if(this.closed)return 0;let $=this.db.prepare("SELECT MAX(sequence) AS sequence FROM hub_events;").get();return Number($?.sequence??0)}prune($=Date.now()){if(this.closed)return;this.db.prepare("DELETE FROM hub_events WHERE created_at < ?;").run($-this.retentionMs),this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
|
|
996
|
+
`)}append($){if(this.closed)return $;let Z=$.timestamp??Date.now(),Q=JSON.stringify($),J=this.db.prepare(`INSERT INTO hub_events (event, session_id, envelope_json, created_at)
|
|
997
|
+
VALUES (?, ?, ?, ?);`).run($.event,$.sessionId??null,Q,Z)?.lastInsertRowid,W=typeof J==="number"||typeof J==="bigint"?Number(J):this.lastSequence();if(this.appendedBytesSincePrune+=Buffer.byteLength(Q),this.appendedBytesSincePrune>=so)this.appendedBytesSincePrune=0,this.prune();return{...$,sequence:W}}listAfter($,Z,Q){if(this.closed)return[];let X=["sequence > ?"],J=[$];if(Z.sessionId)X.push("session_id = ?"),J.push(Z.sessionId);return J.push(Q),this.db.prepare(`SELECT sequence, envelope_json FROM hub_events
|
|
998
|
+
WHERE ${X.join(" AND ")} ORDER BY sequence LIMIT ?;`).all(...J).flatMap((W)=>{try{return[{...JSON.parse(String(W.envelope_json)),sequence:Number(W.sequence)}]}catch{return[]}})}lastSequence(){if(this.closed)return 0;let $=this.db.prepare("SELECT MAX(sequence) AS sequence FROM hub_events;").get();return Number($?.sequence??0)}prune($=Date.now()){if(this.closed)return;if(this.db.prepare("DELETE FROM hub_events WHERE created_at < ?;").run($-this.retentionMs),this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
|
|
999
999
|
SELECT sequence FROM hub_events ORDER BY sequence DESC
|
|
1000
1000
|
LIMIT 1 OFFSET ?
|
|
1001
|
-
);`).run(this.maxRows)
|
|
1001
|
+
);`).run(this.maxRows),this.fileSizeBytes()>this.maxTotalBytes){this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
|
|
1002
|
+
SELECT sequence FROM (
|
|
1003
|
+
SELECT sequence, SUM(LENGTH(CAST(envelope_json AS BLOB))) OVER (
|
|
1004
|
+
ORDER BY sequence DESC
|
|
1005
|
+
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
|
|
1006
|
+
) AS newer_bytes FROM hub_events
|
|
1007
|
+
)
|
|
1008
|
+
WHERE newer_bytes > ? ORDER BY sequence DESC LIMIT 1
|
|
1009
|
+
);`).run(Math.floor(this.maxTotalBytes/2));try{this.db.exec("VACUUM;")}catch{}}}fileSizeBytes(){let $=(Z)=>Number(this.db.prepare(`PRAGMA ${Z};`).get()?.[Z]??0);return $("page_count")*$("page_size")}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function YM($){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}}import{resolve as VM}from"node:path";var to=new Set(["task.create","task.list","task.get","task.update","task.approve","task.cancel","task.run","task.automation.get","task.automation.set"]);function BM($){return to.has($)}function eo($){return $.payload&&typeof $.payload==="object"?$.payload:{}}function MW($){return typeof $.taskId==="string"?$.taskId.trim():""}function $H($){let Z=$.expectedRevision;if(typeof Z!=="number"||!Number.isInteger(Z)||Z<1)throw Error("expectedRevision must be a positive integer");return Z}class ZH{tasks;constructor($){this.tasks=$}async handleCommand($,Z){let Q=eo($),X={kind:"user",id:$.clientId?.trim()||"hub-client",clientId:$.clientId?.trim()||void 0};try{let J=this.resolveWorkspace(Z);switch($.command){case"task.create":{let W=await this.tasks.createTask({...Q,scope:"workspace",workspaceRoot:J,cwd:J,requiresApproval:!1,createdBy:X});return h($,{task:W})}case"task.list":{let W=Q,[j,Y]=await Promise.all([this.tasks.listTasks({...W,scope:"workspace",workspaceRoot:J}),this.tasks.listTasks({...W,scope:"global",workspaceRoot:void 0})]);return h($,{tasks:[...j,...Y]})}case"task.get":{let W=await this.requireScopedTask(Q,J);return h($,{task:W})}case"task.update":{let W=await this.requireScopedTask(Q,J),j=await this.tasks.updateTask({...Q,scope:W.scope,workspaceRoot:W.workspaceRoot??null,cwd:W.cwd??null,updatedBy:X});return h($,{task:j})}case"task.approve":return await this.requireScopedTask(Q,J),h($,{task:await this.tasks.approveTask(MW(Q),X,$H(Q))});case"task.cancel":return await this.requireScopedTask(Q,J),h($,{task:await this.tasks.cancelTask(MW(Q),X,$H(Q),typeof Q.reason==="string"?Q.reason:void 0)});case"task.run":{await this.requireScopedTask(Q,J);let W=await this.tasks.runTask(MW(Q),X,$H(Q),$.clientId);return h($,W)}case"task.automation.get":return h($,{policy:await this.tasks.getAutomationPolicy(J)});case"task.automation.set":{let W=Q.policy&&typeof Q.policy==="object"&&!Array.isArray(Q.policy)?Q.policy:void 0;if(!W)throw Error("task.automation.set requires a policy object");return h($,{policy:await this.tasks.setAutomationPolicy({...W,scopeKey:J},X)})}default:return m($,"unsupported_command",`Unsupported agenda task command: ${$.command}`)}}catch(J){return m($,"task_command_failed",J instanceof Error?J.message:String(J))}}resolveWorkspace($){let Z=$?.workspaceContext?.workspaceRoot?.trim();if(!$?.clientId||!Z)throw Error("task commands require a Hub-authorized workspace");return VM(Z)}async requireScopedTask($,Z){let Q=await this.tasks.getTask(MW($));if(!Q||Q.scope==="workspace"&&(!Q.workspaceRoot||VM(Q.workspaceRoot)!==Z))throw Error("task does not exist in this workspace");return Q}}var Js=new Set(["skills","workflows","rules","plugins","tools","mcp"]);function XH($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function sZ($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function Ws($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function KM($){if($===void 0)return{};if(!XH($))throw Error("settings.list payload must be an object.");return{cwd:sZ($,"cwd"),workspaceRoot:sZ($,"workspaceRoot"),availabilityContext:XH($.availabilityContext)?$.availabilityContext:void 0}}function js($){if(!XH($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Js.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, plugins, tools, mcp.");return{...KM($),type:Z,id:sZ($,"id"),path:sZ($,"path"),name:sZ($,"name"),enabled:Ws($,"enabled")}}class A5{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;activeRpcTurnCountBySession=new Map;schedules;scheduleCommands;tasks;taskCommands;sessionTools=[];sessionExtensions=[];settings;cronService;sessionHost;hubId=QH("hub_");ctx;eventLog;eventLogPruneTimer;runQueue;runExecutor;draining=!1;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new G$({sessionService:new K$(new V$),fetch:$.fetch,logger:$.logger,telemetry:$.telemetry}),this.ctx={isDraining:()=>this.draining,clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,activeRpcTurnCountBySession:this.activeRpcTurnCountBySession,telemetry:$.telemetry,sessionTools:this.sessionTools,sessionExtensions:this.sessionExtensions,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:a1,requestCapability:(Z,Q,X,J,W)=>zE(this.ctx,Z,Q,X,J,W)},this.tasks=new IZ({...$.taskOptions,runtime:{isInteractiveClientAvailable:()=>[...this.clients.values()].some((Z)=>Z.capabilities.some((Q)=>Q.name===Qs)),startSession:(Z,Q,X,J)=>this.startAgendaTaskSession(Z,Q,X,J?.unattended===!0),runSession:(Z,Q,X)=>this.runAgendaTaskSession(Z,Q,X),abortSession:async(Z,Q)=>{await this.sessionHost.abort(Z,Q)}},logger:$.taskOptions?.logger??$.logger,publish:(Z,Q,X)=>{this.publish(a1(Z,Q,X))}}),this.taskCommands=new ZH(this.tasks),this.schedules=new q8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let X=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!X)return;this.publish(a1(X,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new D8(this.schedules),this.sessionTools.push(x8({todo:{manager:this.tasks,telemetry:$.telemetry,resolveSessionDefaults:async(Z)=>{let Q=await this.sessionHost.getSession(Z);if(!Q)return;let X=!Xs(Q.workspaceRoot)?Q.workspaceRoot:void 0;return{workspaceRoot:X,cwd:X?Q.cwd:void 0,modelSelection:{providerId:Q.provider,modelId:Q.model},originTaskId:typeof Q.metadata?.agendaTaskId==="string"?Q.metadata.agendaTaskId:void 0}}},scheduled:{schedules:this.schedules,telemetry:$.telemetry,publish:(Z,Q,X)=>{this.publish(a1(Z,Q,X))},resolveSessionDefaults:async(Z)=>{let Q=await this.sessionHost.getSession(Z);if(!Q)return;return{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,modelSelection:{providerId:Q.provider,modelId:Q.model},interactive:Q.interactive}}}})),this.sessionExtensions.push(y8()),this.settings=$.settingsService??new k2,$.cronOptions)this.cronService=new v7({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{hE(this.ctx,Z).catch((Q)=>{iZ("session event handling failed",Q),RW(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}async startAgendaTaskSession($,Z,Q,X=!1){let W=($.originSessionId?await this.sessionHost.getSession($.originSessionId):void 0)?.metadata?.autoApproveTools===!0,j=X||W,Y=$.modelSelection?.providerId?.trim()||"cline",V=$.modelSelection?.modelId?.trim()||(Y==="cline"?Zs:""),B=v0({title:$.title,agendaTaskId:$.taskId,agendaTaskRunId:Z.runId,agendaTaskAssignee:$.assignee,interactive:!X,source:X0.CORE},{mode:"task",trigger:"agenda_task"}),K=Q?.trim()||"agenda-task-manager",G=await eG(this.ctx,{version:"v1",command:"session.create",requestId:QH("task_session_"),clientId:K,payload:{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:Y,modelId:V,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",maxIterations:$.maxIterations,enableTools:!0,enableSpawnAgent:!0,enableAgentTeams:!0},metadata:B,runtimeOptions:{mode:$.mode??"act",maxIterations:$.maxIterations,enableTools:!0,enableSpawn:!0,enableTeams:!0},toolPolicies:{"*":{autoApprove:j,enabled:!0}}}},(L)=>AW(this.ctx,L));if(!G.ok)throw Error(G.error?.message??"failed to create task session");let H=G.payload?.session,U=G.payload?.snapshot,F=typeof U?.sessionId==="string"?U.sessionId:typeof H?.sessionId==="string"?H.sessionId:"";if(!F)throw Error("task session did not return a session id");return{sessionId:F}}async runAgendaTaskSession($,Z,Q){let X=Z.resourcePaths.length?`
|
|
1002
1010
|
|
|
1003
1011
|
Relevant resources (paths are relative to workspace root ${Z.workspaceRoot}):
|
|
1004
|
-
${Z.resourcePaths.map((K)=>`- ${K} (absolute: ${
|
|
1012
|
+
${Z.resourcePaths.map((K)=>`- ${K} (absolute: ${$s(Z.workspaceRoot??Z.cwd??"",K)})`).join(`
|
|
1005
1013
|
`)}`:"",J=Z.assignee?`
|
|
1006
1014
|
Assigned agent: ${Z.assignee}. If a configured agent or subagent with this name is available, delegate the work to it and oversee completion; otherwise execute it directly and mention the fallback in the summary.`:"",W=`Execute this approved agenda task.
|
|
1007
1015
|
|
|
@@ -1009,17 +1017,17 @@ Title: ${Z.title}
|
|
|
1009
1017
|
Type: ${Z.type}
|
|
1010
1018
|
Priority: P${Z.priority}${J}
|
|
1011
1019
|
|
|
1012
|
-
${Z.instructions}${X}`,j=await aZ(this.ctx,{version:"v1",command:"run.start",requestId:QH("task_run_"),clientId:Q.requestedByClientId??"agenda-task-manager",sessionId:$,payload:{sessionId:$,input:W,mode:Z.mode??"act",timeoutSeconds:Z.timeoutSeconds}});if(!j.ok)return{status:"failed",error:j.error?.message??"task session run failed"};let Y=j.payload?.result,V=typeof Y?.finishReason==="string"?Y.finishReason:void 0,B=typeof Y?.text==="string"&&Y.text.trim()?Y.text.trim():void 0;if(V==="completed")return{status:"completed",summary:B};if(V==="aborted")return{status:"cancelled",summary:B};return{status:"failed",summary:B,error:B??(V?`Task session ended with ${V}`:"Task session did not return a completion result")}}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.tasks.start(),await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}this.startEventLog(),this.startRunQueue()}startEventLog(){if(this.options.eventLog===!1||this.eventLog)return;try{let $=new mZ({ownerId:this.options.owner?.ownerId,...this.options.eventLog??{}});$.prune(),this.eventLog=$,this.eventLogPruneTimer=setInterval(()=>{try{$.prune()}catch{}},3600000),this.eventLogPruneTimer.unref?.()}catch($){a("error","event_log.start_failed",{error:$})}}startRunQueue(){if(this.options.runQueue===!1||this.runQueue)return;try{this.runQueue=new gZ({ownerId:this.options.owner?.ownerId,...this.options.runQueue??{}}),this.runExecutor=new nG(this.ctx,this.runQueue);let $=this.runQueue.recoverOnStartup();for(let Q of $.interrupted)this.publish(a1("run.interrupted",{runId:Q.runId,error:Q.error,reason:"hub_restart"},Q.sessionId));let Z=new Set($.requeued.map((Q)=>Q.sessionId));for(let Q of Z)this.runExecutor.pump(Q);if($.interrupted.length>0||$.requeued.length>0)a("info","run.queue.recovered",{interrupted:$.interrupted.length,requeued:$.requeued.length})}catch($){a("error","run.queue.start_failed",{error:$})}}async stop(){if(this.eventLogPruneTimer)clearInterval(this.eventLogPruneTimer),this.eventLogPruneTimer=void 0;for(let $ of this.pendingApprovals.keys())lG(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(l2(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.tasks.dispose(),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",$)}this.eventLog?.close(),this.eventLog=void 0,this.runQueue?.close(),this.runQueue=void 0,this.runExecutor=void 0}async handleCommand($,Z){try{let Q=$.clientId?.trim(),X=Z===void 0?this.options.workspaceRoot?.trim()&&Q?{clientId:Q,workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.workspaceRoot}}:void 0:Z??void 0,J=await this.dispatchCommand($,X);return this.captureFailedReply($,J),J}catch(Q){throw RW(this.options.telemetry,{component:"core",operation:"hub.command",error:Q,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Q}}async dispatchCommand($,Z){if(this.draining&&kE($.command))return xE($);if(BM($.command))return await this.taskCommands.handleCommand($,Z);switch($.command){case"client.register":{let Q=AE(this.ctx,$);return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.update":{let Q=TE(this.ctx,$);return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.unregister":{let Q=EE(this.ctx,$,(X)=>{this.listeners.delete(X),this.detachClientFromSessions(X)});return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.list":return ME(this.ctx,$);case"session.create":return await eG(this.ctx,$,(Q)=>AW(this.ctx,Q));case"session.restore":return await rE(this.ctx,$,(Q)=>AW(this.ctx,Q));case"session.attach":return await aE(this.ctx,$);case"session.detach":return await nE(this.ctx,$);case"session.get":return await oE(this.ctx,$);case"session.messages":return await sE(this.ctx,$);case"session.compaction.get":return await tE(this.ctx,$);case"session.list":return await eE(this.ctx,$);case"session.update":return await $M(this.ctx,$);case"session.update_connection":return await ZM(this.ctx,$);case"session.compaction.update":return await QM(this.ctx,$);case"session.pending_prompts":return await JM(this.ctx,$);case"session.update_pending_prompt":return await WM(this.ctx,$);case"session.remove_pending_prompt":return await jM(this.ctx,$);case"session.delete":return await XM(this.ctx,$);case"session.hook":return await bE(this.ctx,$);case"run.start":case"session.send_input":return await aZ(this.ctx,$);case"run.enqueue":{if(!this.runQueue||!this.runExecutor)return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"run_queue_unavailable",message:"This hub has no durable run queue; use run.start instead."}};return yE(this.ctx,$,this.runQueue,this.runExecutor)}case"run.list":{if(!this.runQueue)return h($,{runs:[]});return IE($,this.runQueue)}case"hub.drain":return this.handleHubDrain($);case"hub.status":return this.handleHubStatus($);case"run.abort":return await wE(this.ctx,$);case"run.proceed_while_running":return await SE(this.ctx,$);case"capability.request":return await NE(this.ctx,$);case"approval.respond":return await DE(this.ctx,$);case"capability.respond":return qE(this.ctx,$);case"capability.progress":return OE(this.ctx,$);case"ui.notify":return this.publish(a1("ui.notify",$.payload??{})),h($);case"ui.show_window":return this.publish(a1("ui.show_window",$.payload??{})),h($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":case"connector.start":case"connector.stop":case"connector.supervised":return await PE(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Q=await this.scheduleCommands.handleCommand($,Z);if(Q.ok){let X=YM($.command);if(X)this.publish(a1(X,Q.payload))}return Q}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Ws(Z.error.code))return;RW(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(KM($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(Js($.payload));return this.publish(a1("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}handleHubDrain($){let Z=$.payload?.draining!==!1,Q=typeof $.payload?.reason==="string"?$.payload.reason:void 0;if(this.draining!==Z)this.draining=Z,this.publish(a1("hub.drain_changed",{draining:this.draining,...Q?{reason:Q}:{}})),a("info","hub.drain_changed",{draining:this.draining,reason:Q});return h($,this.describeStatus())}handleHubStatus($){return h($,this.describeStatus())}describeStatus(){let $=0;for(let Z of this.activeRpcTurnCountBySession.values())$+=Z;return{hubId:this.hubId,draining:this.draining,activeRpcTurns:$,pendingRuns:this.runQueue?.countPending()??0,eventLog:this.eventLog?{lastSequence:this.eventLog.lastSequence()}:void 0,idle:$===0&&(this.runQueue?.countPending()??0)===0}}isDraining(){return this.draining}replayEventsAfter($,Z){if(!this.eventLog)return[];return this.eventLog.listAfter($,{sessionId:Z.sessionId},Z.limit)}lastEventSequence(){return this.eventLog?.lastSequence()??0}subscribe($,Z,Q){let X=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};X.add(J),this.listeners.set($,X);let W=LE(this.ctx,Q?.sessionId);if(W.length>0)queueMicrotask(()=>{if(!this.listeners.get($)?.has(J))return;for(let Y of W)try{J.listener(Y)}catch(V){iZ("listener threw while re-issuing pending approval",V)}});return()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}l2(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){if(this.eventLog)try{$=this.eventLog.append($)}catch(Z){iZ(`event log append failed for ${$.event}`,Z)}for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(X){iZ(`listener threw while publishing ${$.event}`,X),RW(this.options.telemetry,{component:"core",operation:"hub.publish",error:X,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Ws($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as qs}from"node:crypto";import As from"node:http";import{URL as eZ}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as jH,HUB_CAPABILITIES as Ts,MAX_CLIENT_HUB_PROTOCOL_VERSION as HM,MIN_CLIENT_HUB_PROTOCOL_VERSION as UM}from"@cline/shared";import{WebSocketServer as Es}from"ws";import{chmodSync as js,existsSync as Ys,mkdirSync as Vs}from"node:fs";import{dirname as Bs}from"node:path";import{loadSqliteDb as Ks}from"@cline/shared/db";var eT=3;class FW extends Error{lockFile;constructor($){super(`Hub instance lock is held by a live Hub: ${$}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=$}}function LW($){return $ instanceof Error&&$.name==="HubLockHeldError"}function DW($){return`${$}.instance.lock`}class u2{db;lockFile;constructor($,Z){this.lockFile=$,this.db=Z}get held(){return this.db!==void 0}release(){let $=this.db;if(!$)return;this.db=void 0;try{$.exec("ROLLBACK;")}catch{}$.close?.()}static acquire($){let Z=!1,Q;try{Vs(Bs($),{recursive:!0}),Z=Ys($),Q=Ks($)}catch{return new u2($,void 0)}try{Q.exec("PRAGMA busy_timeout = 0;"),Q.exec("BEGIN EXCLUSIVE;")}catch(X){if(Q.close?.(),Gs(X))throw new FW($);return new u2($,void 0)}if(!Z)try{js($,384)}catch{}return new u2($,Q)}}function Gs($){let Z=$ instanceof Error?$.message:String($),Q=$?.code;return Q==="SQLITE_BUSY"||Q==="SQLITE_LOCKED"||Z.includes("SQLITE_BUSY")||Z.includes("SQLITE_LOCKED")||Z.includes("database is locked")}import{isAbsolute as Hs,relative as Us,resolve as JH,sep as Fs}from"node:path";import{captureSdkError as GM,HUB_COMMAND_SLOW_LOG_MS as Ls,resolveHubCommandTimeoutMs as Ds,safeJsonParse as _s}from"@cline/shared";var zs=200,Os=1000;function WH($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function tZ($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}function Ns($,Z,Q=!1){let X=$.envelope.payload??{},J=$.envelope.clientId?.trim(),W=X.clientId?.trim()||J;if(!W||J&&W!==J)throw Error("Registration clientId must match the command connection");let j=X.workspaceContext?.workspaceRoot?.trim(),Y=Q?j||Z?.trim():Z?.trim();if(!Y)return{clientId:W};let V=JH(Y);if(!Q&&j&&JH(j)!==V)throw Error("Registration workspace must match the Hub-authorized workspace");let B=JH(X.workspaceContext?.cwd?.trim()||V),K=Us(V,B);if(K===".."||K.startsWith(`..${Fs}`)||Hs(K))throw Error("Registration cwd must be inside its workspace");return{clientId:W,workspaceContext:{workspaceRoot:V,cwd:B}}}class cZ{transport;telemetry;workspaceRoot;constructor($,Z,Q){this.transport=$;this.telemetry=Z;this.workspaceRoot=Q}attach($,Z={}){let Q=new Map,X=new Set,J,W=!1,j=(K)=>{try{$.send(JSON.stringify(K))}catch(G){console.error(`[hub] failed to send websocket frame: ${G instanceof Error?G.stack||G.message:String(G)}`)}},Y=(K)=>{j({kind:"event",envelope:K})},V=async(K)=>{try{let G=JSON.parse(K.data);switch(G.kind){case"command":{let H;if(J&&G.envelope.command==="client.register"){j({kind:"reply",envelope:tZ(G,"client_already_registered","This connection already owns a registered client.")});break}if(J&&G.envelope.clientId?.trim()!==J.clientId){j({kind:"reply",envelope:tZ(G,"client_authority_mismatch","Command clientId does not belong to this connection.")});break}if(G.envelope.command==="client.register")try{H=Ns(G,this.workspaceRoot,Z.allowRegisteredWorkspace)}catch(T){j({kind:"reply",envelope:tZ(G,"invalid_client_registration",T instanceof Error?T.message:String(T))});break}let U=performance.now(),F=!1,L=WH(G);a("info","command.start",L);let D=setTimeout(()=>{if(F)return;a("warn","command.slow",{...L,elapsedMs:Math.round(performance.now()-U)})},Ls),z=this.transport.command(G.envelope,J??null);z.then((T)=>{if(!F)return;a(T.ok?"warn":"error","command.late_end",{...L,elapsedMs:Math.round(performance.now()-U),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!F)return;a("error","command.late_error",{...L,elapsedMs:Math.round(performance.now()-U),error:T})});let _=!1,O,A,q=Ds(G.envelope.command,G.envelope.timeoutMs);try{A=q===null?await z:await Promise.race([z,new Promise((T)=>{O=setTimeout(()=>{_=!0,GM(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${G.envelope.command} did not complete within ${q}ms.`),severity:"error",handled:!0,context:{...L,timeoutMs:q}}),T(tZ(G,"hub_command_timeout",`Hub command ${G.envelope.command} did not complete within ${q}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${G.envelope.requestId}.`))},q)})])}catch(T){if(clearTimeout(D),O)clearTimeout(O);throw T}if(F=_,clearTimeout(D),O)clearTimeout(O);let N=Math.round(performance.now()-U);if(_)a("error","command.timeout",{...L,durationMs:N,timeoutMs:q});else a(A.ok?"info":"warn","command.end",{...L,durationMs:N,ok:A.ok,errorCode:A.error?.code,errorMessage:A.error?.message});if(G.envelope.command==="client.register"&&A.ok){if(H)X.add(H.clientId),J=H}else if(G.envelope.command==="client.unregister"&&A.ok){let T=G.envelope.clientId?.trim();if(T)X.delete(T),J=void 0}j({kind:"reply",envelope:A});break}case"stream.subscribe":{let H=`${G.clientId}:${G.sessionId??"*"}`;if(Q.has(H))break;let U=typeof G.sinceSequence==="number"&&Number.isFinite(G.sinceSequence)&&G.sinceSequence>=0?Math.floor(G.sinceSequence):void 0;if(U===void 0||typeof this.transport.replayEventsAfter!=="function"){let q=await this.transport.subscribe(G.clientId,Y,{sessionId:G.sessionId});Q.set(H,q);break}let F=!1,L=U,D=[],z=new Set,_=(q)=>{if(typeof q.sequence==="number"){if(q.sequence<=L)return;L=q.sequence}if(q.eventId&&z){if(z.has(q.eventId))return;z.add(q.eventId)}Y(q)},O=(q)=>{if(!F){D.push(q);return}_(q)},A=await this.transport.subscribe(G.clientId,O,{sessionId:G.sessionId});Q.set(H,A);try{let q=0;while(!W&&q<Os){let N=L,T=this.transport.replayEventsAfter(L,{sessionId:G.sessionId,limit:zs});if(T.length===0)break;for(let C of T)_(C);if(L<=N)break;q+=1,await new Promise((C)=>setTimeout(C,0))}}finally{F=!0;for(let q of D)_(q);D.length=0,z=void 0}break}case"stream.unsubscribe":{let H=`${G.clientId}:${G.sessionId??"*"}`;Q.get(H)?.(),Q.delete(H);break}case"reply":case"event":break}}catch(G){let H=typeof K.data==="string"?_s(K.data):void 0;if(!H||H.kind!=="command"){a("error","rejected malformed websocket frame",{error:G});return}a("error","command.error",{...WH(H),error:G}),GM(this.telemetry,{component:"core",operation:"hub.websocket_command",error:G,severity:"error",handled:!0,context:WH(H)}),j({kind:"reply",envelope:tZ(H,"command_failed",G instanceof Error?G.message:"Unknown hub error")})}},B=()=>{if(W)return;W=!0;for(let K of Q.values())K();Q.clear();for(let K of X)this.transport.command({version:"v1",command:"client.unregister",clientId:K});X.clear(),$.removeEventListener("message",V),$.removeEventListener("close",B)};return $.addEventListener("message",V),$.addEventListener("close",B),B}}class uZ{transport;constructor($){this.transport=$}command($,Z){return this.transport.handleCommand($,Z)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}replayEventsAfter($,Z){return this.transport.replayEventsAfter?.($,Z)??[]}}function Ms($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Rs($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(X)=>{Q({data:Ms(X)})});return}$.on("close",Q)},removeEventListener(){}}}function Cs($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
1020
|
+
${Z.instructions}${X}`,j=await aZ(this.ctx,{version:"v1",command:"run.start",requestId:QH("task_run_"),clientId:Q.requestedByClientId??"agenda-task-manager",sessionId:$,payload:{sessionId:$,input:W,mode:Z.mode??"act",timeoutSeconds:Z.timeoutSeconds}});if(!j.ok)return{status:"failed",error:j.error?.message??"task session run failed"};let Y=j.payload?.result,V=typeof Y?.finishReason==="string"?Y.finishReason:void 0,B=typeof Y?.text==="string"&&Y.text.trim()?Y.text.trim():void 0;if(V==="completed")return{status:"completed",summary:B};if(V==="aborted")return{status:"cancelled",summary:B};return{status:"failed",summary:B,error:B??(V?`Task session ended with ${V}`:"Task session did not return a completion result")}}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.tasks.start(),await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}this.startEventLog(),this.startRunQueue()}startEventLog(){if(this.options.eventLog===!1||this.eventLog)return;try{let $=new mZ({ownerId:this.options.owner?.ownerId,...this.options.eventLog??{}});$.prune(),this.eventLog=$,this.eventLogPruneTimer=setInterval(()=>{try{$.prune()}catch{}},3600000),this.eventLogPruneTimer.unref?.()}catch($){a("error","event_log.start_failed",{error:$})}}startRunQueue(){if(this.options.runQueue===!1||this.runQueue)return;try{this.runQueue=new gZ({ownerId:this.options.owner?.ownerId,...this.options.runQueue??{}}),this.runExecutor=new nG(this.ctx,this.runQueue);let $=this.runQueue.recoverOnStartup();for(let Q of $.interrupted)this.publish(a1("run.interrupted",{runId:Q.runId,error:Q.error,reason:"hub_restart"},Q.sessionId));let Z=new Set($.requeued.map((Q)=>Q.sessionId));for(let Q of Z)this.runExecutor.pump(Q);if($.interrupted.length>0||$.requeued.length>0)a("info","run.queue.recovered",{interrupted:$.interrupted.length,requeued:$.requeued.length})}catch($){a("error","run.queue.start_failed",{error:$})}}async stop(){if(this.eventLogPruneTimer)clearInterval(this.eventLogPruneTimer),this.eventLogPruneTimer=void 0;for(let $ of this.pendingApprovals.keys())lG(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(l2(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.tasks.dispose(),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",$)}this.eventLog?.close(),this.eventLog=void 0,this.runQueue?.close(),this.runQueue=void 0,this.runExecutor=void 0}async handleCommand($,Z){try{let Q=$.clientId?.trim(),X=Z===void 0?this.options.workspaceRoot?.trim()&&Q?{clientId:Q,workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.workspaceRoot}}:void 0:Z??void 0,J=await this.dispatchCommand($,X);return this.captureFailedReply($,J),J}catch(Q){throw RW(this.options.telemetry,{component:"core",operation:"hub.command",error:Q,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Q}}async dispatchCommand($,Z){if(this.draining&&kE($.command))return xE($);if(BM($.command))return await this.taskCommands.handleCommand($,Z);switch($.command){case"client.register":{let Q=AE(this.ctx,$);return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.update":{let Q=TE(this.ctx,$);return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.unregister":{let Q=EE(this.ctx,$,(X)=>{this.listeners.delete(X),this.detachClientFromSessions(X)});return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.list":return ME(this.ctx,$);case"session.create":return await eG(this.ctx,$,(Q)=>AW(this.ctx,Q));case"session.restore":return await rE(this.ctx,$,(Q)=>AW(this.ctx,Q));case"session.attach":return await aE(this.ctx,$);case"session.detach":return await nE(this.ctx,$);case"session.get":return await oE(this.ctx,$);case"session.messages":return await sE(this.ctx,$);case"session.compaction.get":return await tE(this.ctx,$);case"session.list":return await eE(this.ctx,$);case"session.update":return await $M(this.ctx,$);case"session.update_connection":return await ZM(this.ctx,$);case"session.compaction.update":return await QM(this.ctx,$);case"session.pending_prompts":return await JM(this.ctx,$);case"session.update_pending_prompt":return await WM(this.ctx,$);case"session.remove_pending_prompt":return await jM(this.ctx,$);case"session.delete":return await XM(this.ctx,$);case"session.hook":return await bE(this.ctx,$);case"run.start":case"session.send_input":return await aZ(this.ctx,$);case"run.enqueue":{if(!this.runQueue||!this.runExecutor)return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"run_queue_unavailable",message:"This hub has no durable run queue; use run.start instead."}};return yE(this.ctx,$,this.runQueue,this.runExecutor)}case"run.list":{if(!this.runQueue)return h($,{runs:[]});return IE($,this.runQueue)}case"hub.drain":return this.handleHubDrain($);case"hub.status":return this.handleHubStatus($);case"run.abort":return await wE(this.ctx,$);case"run.proceed_while_running":return await SE(this.ctx,$);case"capability.request":return await NE(this.ctx,$);case"approval.respond":return await DE(this.ctx,$);case"capability.respond":return qE(this.ctx,$);case"capability.progress":return OE(this.ctx,$);case"ui.notify":return this.publish(a1("ui.notify",$.payload??{})),h($);case"ui.show_window":return this.publish(a1("ui.show_window",$.payload??{})),h($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":case"connector.start":case"connector.stop":case"connector.supervised":return await PE(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Q=await this.scheduleCommands.handleCommand($,Z);if(Q.ok){let X=YM($.command);if(X)this.publish(a1(X,Q.payload))}return Q}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Ys(Z.error.code))return;RW(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(KM($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(js($.payload));return this.publish(a1("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}handleHubDrain($){let Z=$.payload?.draining!==!1,Q=typeof $.payload?.reason==="string"?$.payload.reason:void 0;if(this.draining!==Z)this.draining=Z,this.publish(a1("hub.drain_changed",{draining:this.draining,...Q?{reason:Q}:{}})),a("info","hub.drain_changed",{draining:this.draining,reason:Q});return h($,this.describeStatus())}handleHubStatus($){return h($,this.describeStatus())}describeStatus(){let $=0;for(let Z of this.activeRpcTurnCountBySession.values())$+=Z;return{hubId:this.hubId,draining:this.draining,activeRpcTurns:$,pendingRuns:this.runQueue?.countPending()??0,eventLog:this.eventLog?{lastSequence:this.eventLog.lastSequence()}:void 0,idle:$===0&&(this.runQueue?.countPending()??0)===0}}isDraining(){return this.draining}replayEventsAfter($,Z){if(!this.eventLog)return[];return this.eventLog.listAfter($,{sessionId:Z.sessionId},Z.limit)}lastEventSequence(){return this.eventLog?.lastSequence()??0}subscribe($,Z,Q){let X=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};X.add(J),this.listeners.set($,X);let W=LE(this.ctx,Q?.sessionId);if(W.length>0)queueMicrotask(()=>{if(!this.listeners.get($)?.has(J))return;for(let Y of W)try{J.listener(Y)}catch(V){iZ("listener threw while re-issuing pending approval",V)}});return()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}l2(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){if(this.eventLog)try{$=this.eventLog.append($)}catch(Z){iZ(`event log append failed for ${$.event}`,Z)}for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(X){iZ(`listener threw while publishing ${$.event}`,X),RW(this.options.telemetry,{component:"core",operation:"hub.publish",error:X,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Ys($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Ts}from"node:crypto";import Es from"node:http";import{URL as eZ}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as jH,HUB_CAPABILITIES as Ms,MAX_CLIENT_HUB_PROTOCOL_VERSION as HM,MIN_CLIENT_HUB_PROTOCOL_VERSION as UM}from"@cline/shared";import{WebSocketServer as Rs}from"ws";import{chmodSync as Vs,existsSync as Bs,mkdirSync as Ks}from"node:fs";import{dirname as Gs}from"node:path";import{loadSqliteDb as Hs}from"@cline/shared/db";var eT=3;class FW extends Error{lockFile;constructor($){super(`Hub instance lock is held by a live Hub: ${$}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=$}}function LW($){return $ instanceof Error&&$.name==="HubLockHeldError"}function DW($){return`${$}.instance.lock`}class u2{db;lockFile;constructor($,Z){this.lockFile=$,this.db=Z}get held(){return this.db!==void 0}release(){let $=this.db;if(!$)return;this.db=void 0;try{$.exec("ROLLBACK;")}catch{}$.close?.()}static acquire($){let Z=!1,Q;try{Ks(Gs($),{recursive:!0}),Z=Bs($),Q=Hs($)}catch{return new u2($,void 0)}try{Q.exec("PRAGMA busy_timeout = 0;"),Q.exec("BEGIN EXCLUSIVE;")}catch(X){if(Q.close?.(),Us(X))throw new FW($);return new u2($,void 0)}if(!Z)try{Vs($,384)}catch{}return new u2($,Q)}}function Us($){let Z=$ instanceof Error?$.message:String($),Q=$?.code;return Q==="SQLITE_BUSY"||Q==="SQLITE_LOCKED"||Z.includes("SQLITE_BUSY")||Z.includes("SQLITE_LOCKED")||Z.includes("database is locked")}import{isAbsolute as Fs,relative as Ls,resolve as JH,sep as Ds}from"node:path";import{captureSdkError as GM,HUB_COMMAND_SLOW_LOG_MS as _s,resolveHubCommandTimeoutMs as zs,safeJsonParse as Os}from"@cline/shared";var Ns=200,qs=1000;function WH($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function tZ($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}function As($,Z,Q=!1){let X=$.envelope.payload??{},J=$.envelope.clientId?.trim(),W=X.clientId?.trim()||J;if(!W||J&&W!==J)throw Error("Registration clientId must match the command connection");let j=X.workspaceContext?.workspaceRoot?.trim(),Y=Q?j||Z?.trim():Z?.trim();if(!Y)return{clientId:W};let V=JH(Y);if(!Q&&j&&JH(j)!==V)throw Error("Registration workspace must match the Hub-authorized workspace");let B=JH(X.workspaceContext?.cwd?.trim()||V),K=Ls(V,B);if(K===".."||K.startsWith(`..${Ds}`)||Fs(K))throw Error("Registration cwd must be inside its workspace");return{clientId:W,workspaceContext:{workspaceRoot:V,cwd:B}}}class cZ{transport;telemetry;workspaceRoot;constructor($,Z,Q){this.transport=$;this.telemetry=Z;this.workspaceRoot=Q}attach($,Z={}){let Q=new Map,X=new Set,J,W=!1,j=(K)=>{try{$.send(JSON.stringify(K))}catch(G){console.error(`[hub] failed to send websocket frame: ${G instanceof Error?G.stack||G.message:String(G)}`)}},Y=(K)=>{j({kind:"event",envelope:K})},V=async(K)=>{try{let G=JSON.parse(K.data);switch(G.kind){case"command":{let H;if(J&&G.envelope.command==="client.register"){j({kind:"reply",envelope:tZ(G,"client_already_registered","This connection already owns a registered client.")});break}if(J&&G.envelope.clientId?.trim()!==J.clientId){j({kind:"reply",envelope:tZ(G,"client_authority_mismatch","Command clientId does not belong to this connection.")});break}if(G.envelope.command==="client.register")try{H=As(G,this.workspaceRoot,Z.allowRegisteredWorkspace)}catch(T){j({kind:"reply",envelope:tZ(G,"invalid_client_registration",T instanceof Error?T.message:String(T))});break}let U=performance.now(),F=!1,L=WH(G);a("info","command.start",L);let D=setTimeout(()=>{if(F)return;a("warn","command.slow",{...L,elapsedMs:Math.round(performance.now()-U)})},_s),z=this.transport.command(G.envelope,J??null);z.then((T)=>{if(!F)return;a(T.ok?"warn":"error","command.late_end",{...L,elapsedMs:Math.round(performance.now()-U),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!F)return;a("error","command.late_error",{...L,elapsedMs:Math.round(performance.now()-U),error:T})});let _=!1,O,A,q=zs(G.envelope.command,G.envelope.timeoutMs);try{A=q===null?await z:await Promise.race([z,new Promise((T)=>{O=setTimeout(()=>{_=!0,GM(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${G.envelope.command} did not complete within ${q}ms.`),severity:"error",handled:!0,context:{...L,timeoutMs:q}}),T(tZ(G,"hub_command_timeout",`Hub command ${G.envelope.command} did not complete within ${q}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${G.envelope.requestId}.`))},q)})])}catch(T){if(clearTimeout(D),O)clearTimeout(O);throw T}if(F=_,clearTimeout(D),O)clearTimeout(O);let N=Math.round(performance.now()-U);if(_)a("error","command.timeout",{...L,durationMs:N,timeoutMs:q});else a(A.ok?"info":"warn","command.end",{...L,durationMs:N,ok:A.ok,errorCode:A.error?.code,errorMessage:A.error?.message});if(G.envelope.command==="client.register"&&A.ok){if(H)X.add(H.clientId),J=H}else if(G.envelope.command==="client.unregister"&&A.ok){let T=G.envelope.clientId?.trim();if(T)X.delete(T),J=void 0}j({kind:"reply",envelope:A});break}case"stream.subscribe":{let H=`${G.clientId}:${G.sessionId??"*"}`;if(Q.has(H))break;let U=typeof G.sinceSequence==="number"&&Number.isFinite(G.sinceSequence)&&G.sinceSequence>=0?Math.floor(G.sinceSequence):void 0;if(U===void 0||typeof this.transport.replayEventsAfter!=="function"){let q=await this.transport.subscribe(G.clientId,Y,{sessionId:G.sessionId});Q.set(H,q);break}let F=!1,L=U,D=[],z=new Set,_=(q)=>{if(typeof q.sequence==="number"){if(q.sequence<=L)return;L=q.sequence}if(q.eventId&&z){if(z.has(q.eventId))return;z.add(q.eventId)}Y(q)},O=(q)=>{if(!F){D.push(q);return}_(q)},A=await this.transport.subscribe(G.clientId,O,{sessionId:G.sessionId});Q.set(H,A);try{let q=0;while(!W&&q<qs){let N=L,T=this.transport.replayEventsAfter(L,{sessionId:G.sessionId,limit:Ns});if(T.length===0)break;for(let C of T)_(C);if(L<=N)break;q+=1,await new Promise((C)=>setTimeout(C,0))}}finally{F=!0;for(let q of D)_(q);D.length=0,z=void 0}break}case"stream.unsubscribe":{let H=`${G.clientId}:${G.sessionId??"*"}`;Q.get(H)?.(),Q.delete(H);break}case"reply":case"event":break}}catch(G){let H=typeof K.data==="string"?Os(K.data):void 0;if(!H||H.kind!=="command"){a("error","rejected malformed websocket frame",{error:G});return}a("error","command.error",{...WH(H),error:G}),GM(this.telemetry,{component:"core",operation:"hub.websocket_command",error:G,severity:"error",handled:!0,context:WH(H)}),j({kind:"reply",envelope:tZ(H,"command_failed",G instanceof Error?G.message:"Unknown hub error")})}},B=()=>{if(W)return;W=!0;for(let K of Q.values())K();Q.clear();for(let K of X)this.transport.command({version:"v1",command:"client.unregister",clientId:K});X.clear(),$.removeEventListener("message",V),$.removeEventListener("close",B)};return $.addEventListener("message",V),$.addEventListener("close",B),B}}class uZ{transport;constructor($){this.transport=$}command($,Z){return this.transport.handleCommand($,Z)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}replayEventsAfter($,Z){return this.transport.replayEventsAfter?.($,Z)??[]}}function Cs($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Ps($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(X)=>{Q({data:Cs(X)})});return}$.on("close",Q)},removeEventListener(){}}}function fs($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
1013
1021
|
Connection: close\r
|
|
1014
1022
|
Content-Length: 0\r
|
|
1015
1023
|
\r
|
|
1016
|
-
`),$.end()}catch{$.destroy()}}function
|
|
1024
|
+
`),$.end()}catch{$.destroy()}}function ws($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
1017
1025
|
Connection: close\r
|
|
1018
1026
|
Content-Length: 0\r
|
|
1019
1027
|
\r
|
|
1020
|
-
`),$.end()}catch{$.destroy()}}function
|
|
1028
|
+
`),$.end()}catch{$.destroy()}}function Ss($){try{$.write(`HTTP/1.1 503 Service Unavailable\r
|
|
1021
1029
|
Connection: close\r
|
|
1022
1030
|
Content-Length: 0\r
|
|
1023
1031
|
\r
|
|
1024
|
-
`),$.end()}catch{$.destroy()}}function CW($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),X=Buffer.from(Z,"utf8");return Q.length===X.length&&
|
|
1025
|
-
Caused by: ${$.stack}`;return W}function ws($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}function LM($,Z,Q,X){try{let J=new eZ($),W=new eZ(v1(Z,Q===0?1:Q,X));return J.protocol===W.protocol&&J.hostname===W.hostname&&J.pathname===W.pathname&&(Q===0||J.port===W.port)}catch{return!1}}function DM($,Z,Q){return Error(`Hub owner ${$} is already running at ${Z}; refusing a second endpoint at ${Q}`)}var a$=new Map,_M="cline-hub-auth.",Ss=30000,zM=2000,bs=3000,ks=100;async function OM($,Z){let Q;try{return await Promise.race([$.then(()=>!0,()=>!0),new Promise((X)=>{Q=setTimeout(()=>X(!1),Z)})])}finally{if(Q)clearTimeout(Q)}}function YH($){return Array.isArray($)?$.join(","):$??""}function NM($){return $===32||$===9}function dZ($){let Z=YH($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!NM(Z.charCodeAt(6)))return null;let X=7;while(X<Z.length&&NM(Z.charCodeAt(X)))X+=1;return Z.slice(X).trim()||null}function xs($){for(let Z of YH($).split(",")){let Q=Z.trim();if(Q.startsWith(_M))return Q.slice(_M.length).trim()||null}return null}function _W($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function wG($){let Z=YH($).trim();if(!Z)return!1;try{return _W(new eZ(Z).hostname)}catch{return!1}}async function lZ($){let Z=$.owner??R$(),Q=$.host??"127.0.0.1",X=$.pathname??"/hub",W=$.port??v8(),j=W,Y=v1(Q,W,X),V=_1(),B=i5(),K=hQ(),G=u2.acquire(DW(Z.discoveryPath));if(!G.held)a("warn","instance_lock.unavailable",{lockFile:G.lockFile});let H;try{H=new A5({...$,owner:Z}),await H.start()}catch(x){throw G.release(),x}let U=H.getHubId(),F=new cZ(new uZ(H),$.telemetry,$.workspaceRoot),L=new Set,D=new Date().toISOString(),z={protocolVersion:jH,minClientProtocolVersion:UM,maxClientProtocolVersion:HM,capabilities:Ts,coreVersion:e2.version,buildId:V,buildEpochMs:B,pid:process.pid,startedAt:D},_=new Set,O,A,q,N=!1,T=()=>{if(A)return A;if(q){let k=a$.get(Z.discoveryPath);if(k?.server===q)k.state="closing"}if(O)clearInterval(O),O=void 0;let x=new Promise((k,I)=>{y.close((d)=>{if(d){I(d);return}k()})}),E=new Promise((k,I)=>{r.close((d)=>{if(d){I(d);return}k()})}),g=Promise.resolve().then(()=>H.stop()),b=g.then(async()=>{await vQ(Z.discoveryPath,U)}),o=(async()=>{let I=(await Promise.allSettled([x,E,g,b])).flatMap((d)=>d.status==="rejected"?[d.reason]:[]);if(I.length>0)throw AggregateError(I,"hub server close failed")})().finally(()=>{if(a$.get(Z.discoveryPath)?.server===q)a$.delete(Z.discoveryPath);G.release()});A={transportStopped:g,closed:o};for(let k of _)k.terminate?.();_.clear();for(let k of L)k();return L.clear(),A},C=()=>T().closed,r=As.createServer((x,E)=>{if(!N){E.statusCode=503,E.end("Starting");return}if((x.url??"/")==="/health"){let b=JSON.stringify({ok:!0,protocolVersion:z.protocolVersion,minClientProtocolVersion:z.minClientProtocolVersion,maxClientProtocolVersion:z.maxClientProtocolVersion,coreVersion:z.coreVersion,buildId:z.buildId,buildEpochMs:z.buildEpochMs,draining:H.isDraining(),host:Q,port:j,url:Y});E.statusCode=200,E.setHeader("content-type","application/json"),E.end(b);return}if((x.url??"/")==="/status"){if(!CW(dZ(x.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let b=JSON.stringify({hubId:U,...z,authToken:K,host:Q,port:j,url:Y,updatedAt:new Date().toISOString()});E.statusCode=200,E.setHeader("content-type","application/json"),E.end(b);return}if((x.url??"/")==="/version"){E.statusCode=200,E.setHeader("content-type","application/json"),E.end(JSON.stringify(z));return}let g=new eZ(x.url??"/",`http://${Q}:${j}`);if(g.pathname==="/drain"&&x.method==="POST"){if(!CW(dZ(x.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let b=g.searchParams.get("off")===null;H.handleCommand({version:jH,command:"hub.drain",payload:{draining:b,reason:g.searchParams.get("reason")??"authenticated HTTP drain request"}}).then((o)=>{E.statusCode=o.ok?200:500,E.setHeader("content-type","application/json"),E.end(JSON.stringify(o.payload??{ok:o.ok}))},()=>{E.statusCode=500,E.end("Drain failed")});return}if(g.pathname==="/shutdown"&&x.method==="POST"){if(!CW(dZ(x.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}E.statusCode=202,E.setHeader("content-type","application/json"),E.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{try{Promise.resolve($.onShutdownRequested?.()).catch(()=>{return})}catch{}finally{C().catch(()=>{return})}});return}E.statusCode=404,E.end("Not found")}),y=new Es({noServer:!0});O=setInterval(()=>{for(let x of _){if(x.isAlive===!1){try{x.terminate?.()}catch{}_.delete(x);continue}x.isAlive=!1;try{x.ping?.()}catch{try{x.terminate?.()}catch{}_.delete(x)}}},Ss),r.on("upgrade",(x,E,g)=>{if(!N){fs(E);return}if(new eZ(x.url??"/",`http://${Q}:${j}`).pathname!==X){E.destroy();return}let o=CW(xs(x.headers["sec-websocket-protocol"]),K);if(!(o||_W(Q)&&wG(x.headers.origin))){Ps(E);return}try{y.handleUpgrade(x,E,g,(I)=>{let d=I;d.isAlive=!0,d.on("pong",()=>{d.isAlive=!0}),_.add(d);let Z0=F.attach(Rs(I),{allowRegisteredWorkspace:o});L.add(Z0),I.once("close",()=>{_.delete(d),Z0(),L.delete(Z0)})})}catch{Cs(E)}});try{await new Promise((x,E)=>{r.once("error",(g)=>{E(FM(g,{host:Q,port:W,pathname:X}))}),r.listen(W,Q,()=>{let g=r.address();if(!g||typeof g==="string"){E(FM(Error("Failed to resolve hub port"),{host:Q,port:W,pathname:X}));return}j=g.port,Y=v1(Q,j,X),x()})})}catch(x){if(O)clearInterval(O),O=void 0;throw await OM(Promise.resolve().then(()=>H.stop()),zM),G.release(),x}try{await I8(Z.discoveryPath,{hubId:U,protocolVersion:jH,minClientProtocolVersion:UM,maxClientProtocolVersion:HM,capabilities:[...z.capabilities],coreVersion:e2.version,buildId:V,buildEpochMs:B,authToken:K,host:Q,port:j,url:Y,pid:process.pid,startedAt:D,updatedAt:D}),N=!0}catch(x){if(!await OM(T().closed,zM))try{r.closeAllConnections(),r.unref()}catch{}throw x}return q={host:Q,port:j,url:Y,authToken:K,beginClose:T,close:C},q}async function zW($){let Z=$.owner??R$(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),X=$.host??"127.0.0.1",J=$.port??v8(),W=$.pathname??"/hub",j=v1(X,J,W),Y=Z.discoveryPath,V=(K)=>{if(!Q)J2(K.url,K.authToken);return K},B=a$.get(Y);if(B){let K=await B.promise;if(B.state==="closing"){if(await K.beginClose().closed.catch(()=>{return}),a$.get(Y)===B)a$.delete(Y)}else if(LM(K.url,X,J,W)||$.allowPortFallback===!0)return V({server:K,url:K.url,authToken:K.authToken,action:"reuse"});else throw DM(Z.ownerId,K.url,j)}return await h8(Z.discoveryPath,async()=>{let K=await R0(Z.discoveryPath);if(K?.url){let U=await h1(K.url,{authToken:K.authToken});if(U?.url&&X2(U)&&await e0(U.url,{authToken:K.authToken})){if(LM(K.url,X,J,W)||$.allowPortFallback===!0)return V({url:U.url,authToken:K.authToken,action:"reuse"});throw DM(Z.ownerId,K.url,j)}if(U?.url){let F={url:U.url,authToken:K.authToken,pid:U.pid??K.pid};if(await s5(F)){if(await e0(U.url,{authToken:K.authToken}))return V({url:U.url,authToken:K.authToken,action:"reuse"})}else await Q6(F,Z.discoveryPath)}else await I1(Z.discoveryPath)}let G=async(U)=>{let F=lZ({...U,owner:Z}),L={promise:F,state:"starting"};a$.set(Y,L);try{let D=await F;return L.server=D,L.state="open",V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){if(a$.get(Y)===L)a$.delete(Y);throw D}},H=Date.now()+bs;for(;;)try{return await G($)}catch(U){if(LW(U)&&Date.now()<H){await new Promise((F)=>setTimeout(F,ks));continue}if(!$.allowPortFallback||!ws(U))throw U;return await G({...$,port:0})}})}function AM(){return qM()==="production"?z1():j1()}function ys($){return qM()!=="production"&&!$}async function $E($){let Z=C$({host:$.host,port:$.port,pathname:$.pathname});return await lZ({...$,...Z,owner:AM()})}async function ZE($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=C$({host:$.host,port:$.port,pathname:$.pathname});return await zW({...$,...Q,allowPortFallback:$.allowPortFallback??ys(Z),owner:AM()})}export{I8 as writeHubDiscovery,h8 as withHubStartupLock,DF as watchManagedHubBuildMismatch,e0 as verifyHubConnection,vZ as truncateNotificationBody,jj as toHubStatusUrl,gQ as toHubHealthUrl,Cj as stopLocalHubServerGracefully,lZ as startHubWebSocketServer,$E as startHubServer,_j as spawnDetachedHubServerWithRetry,Dj as spawnDetachedHubServer,LF as sendHubCommand,Q6 as retireDiscoveredHub,dQ as restartLocalHubIfIdleAfterStartupTimeout,$F as resolveWorkspaceHubOwnerContext,j1 as resolveSharedHubOwnerContext,z1 as resolveProductionHubOwnerContext,Pj as resolveHubUrl,PG as resolveHubRunQueuePath,R$ as resolveHubOwnerContext,DW as resolveHubInstanceLockPath,fG as resolveHubEventLogPath,C$ as resolveHubEndpointOptions,a5 as resolveHubBuildIdentity,_1 as resolveHubBuildId,i5 as resolveHubBuildEpochMs,v8 as resolveDefaultHubPort,Gj as resolveDefaultHubPathname,Kj as resolveDefaultHubHost,$9 as resolveCompatibleLocalHubUrl,nU as resolveClineDir,$6 as resolveClineDataDir,e5 as requestHubShutdown,cQ as requestHubDrain,J2 as rememberRecoverableLocalHubUrl,Lj as readSupersededHubDiscovery,R0 as readHubDiscovery,dZ as readBearerToken,h1 as probeHubServer,FF as probeHubConnection,mQ as prewarmDetachedHubServer,W2 as normalizeHubWebSocketUrl,g8 as localHubHasNoActiveSessions,X2 as isManagedHubReusable,wG as isLocalHubOrigin,_W as isLocalHubHostName,Tj as isHubReconnectableTransportError,LW as isHubLockHeldError,uQ as isHubCommandTimeoutError,tU as isDiscoveryFilePresent,s5 as hubHasLiveSessions,Rj as hasActiveHubSessions,Z6 as getManagedHubCompatibility,h5 as executeScheduleOperation,zW as ensureHubWebSocketServer,ZE as ensureHubServer,t5 as ensureDetachedHubServer,X6 as ensureCompatibleLocalHubUrl,x8 as createTasksTool,y8 as createTasksPromptExtension,tT as createLocalHubScheduleRuntimeHandlers,oU as createInMemoryHubOwnerContext,v1 as createHubServerUrl,hQ as createHubAuthToken,E$ as createConfiguredTelemetryService,w8 as createConfiguredTelemetryHandle,lQ as connectToHub,r5 as compareHubBuilds,vQ as clearHubDiscoveryIfOwned,I1 as clearHubDiscovery,fj as checkManagedHubBuildMismatch,jF as __test__,l5 as TasksToolInputSchema,Z2 as TASKS_TOOL_NAME,d5 as TASKS_SYSTEM_PROMPT_RULE,n2 as ScheduledTaskInputSchema,g1 as NodeHubClient,uZ as NativeHubTransportAdapter,bj as HubUIClient,$1 as HubTransportError,Sj as HubSessionClient,A5 as HubServerTransport,q8 as HubScheduleService,D8 as HubScheduleCommandService,gZ as HubRunQueue,q5 as HubRunAdmissionRejectedError,FW as HubLockHeldError,u2 as HubInstanceLock,mZ as HubEventLogStore,m8 as HubCommandError,eT as HUB_LOCK_HELD_EXIT_CODE,Vj as DEFAULT_HUB_PORT,Bj as DEFAULT_HUB_PATHNAME,Yj as DEFAULT_HUB_HOST,cZ as BrowserWebSocketHubAdapter};
|
|
1032
|
+
`),$.end()}catch{$.destroy()}}function CW($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),X=Buffer.from(Z,"utf8");return Q.length===X.length&&Ts(Q,X)}function FM($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,X=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${X}`,W=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,W.code=Q;if($ instanceof Error&&$.stack)W.stack=`${W.name}: ${W.message}
|
|
1033
|
+
Caused by: ${$.stack}`;return W}function bs($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}function LM($,Z,Q,X){try{let J=new eZ($),W=new eZ(v1(Z,Q===0?1:Q,X));return J.protocol===W.protocol&&J.hostname===W.hostname&&J.pathname===W.pathname&&(Q===0||J.port===W.port)}catch{return!1}}function DM($,Z,Q){return Error(`Hub owner ${$} is already running at ${Z}; refusing a second endpoint at ${Q}`)}var a$=new Map,_M="cline-hub-auth.",ks=30000,zM=2000,xs=3000,ys=100;async function OM($,Z){let Q;try{return await Promise.race([$.then(()=>!0,()=>!0),new Promise((X)=>{Q=setTimeout(()=>X(!1),Z)})])}finally{if(Q)clearTimeout(Q)}}function YH($){return Array.isArray($)?$.join(","):$??""}function NM($){return $===32||$===9}function dZ($){let Z=YH($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!NM(Z.charCodeAt(6)))return null;let X=7;while(X<Z.length&&NM(Z.charCodeAt(X)))X+=1;return Z.slice(X).trim()||null}function Is($){for(let Z of YH($).split(",")){let Q=Z.trim();if(Q.startsWith(_M))return Q.slice(_M.length).trim()||null}return null}function _W($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function wG($){let Z=YH($).trim();if(!Z)return!1;try{return _W(new eZ(Z).hostname)}catch{return!1}}async function lZ($){let Z=$.owner??R$(),Q=$.host??"127.0.0.1",X=$.pathname??"/hub",W=$.port??v8(),j=W,Y=v1(Q,W,X),V=_1(),B=i5(),K=hQ(),G=u2.acquire(DW(Z.discoveryPath));if(!G.held)a("warn","instance_lock.unavailable",{lockFile:G.lockFile});let H;try{H=new A5({...$,owner:Z}),await H.start()}catch(x){throw G.release(),x}let U=H.getHubId(),F=new cZ(new uZ(H),$.telemetry,$.workspaceRoot),L=new Set,D=new Date().toISOString(),z={protocolVersion:jH,minClientProtocolVersion:UM,maxClientProtocolVersion:HM,capabilities:Ms,coreVersion:e2.version,buildId:V,buildEpochMs:B,pid:process.pid,startedAt:D},_=new Set,O,A,q,N=!1,T=()=>{if(A)return A;if(q){let k=a$.get(Z.discoveryPath);if(k?.server===q)k.state="closing"}if(O)clearInterval(O),O=void 0;let x=new Promise((k,I)=>{y.close((d)=>{if(d){I(d);return}k()})}),E=new Promise((k,I)=>{r.close((d)=>{if(d){I(d);return}k()})}),g=Promise.resolve().then(()=>H.stop()),S=g.then(async()=>{await vQ(Z.discoveryPath,U)}),n=(async()=>{let I=(await Promise.allSettled([x,E,g,S])).flatMap((d)=>d.status==="rejected"?[d.reason]:[]);if(I.length>0)throw AggregateError(I,"hub server close failed")})().finally(()=>{if(a$.get(Z.discoveryPath)?.server===q)a$.delete(Z.discoveryPath);G.release()});A={transportStopped:g,closed:n};for(let k of _)k.terminate?.();_.clear();for(let k of L)k();return L.clear(),A},C=()=>T().closed,r=Es.createServer((x,E)=>{if(!N){E.statusCode=503,E.end("Starting");return}if((x.url??"/")==="/health"){let S=JSON.stringify({ok:!0,protocolVersion:z.protocolVersion,minClientProtocolVersion:z.minClientProtocolVersion,maxClientProtocolVersion:z.maxClientProtocolVersion,coreVersion:z.coreVersion,buildId:z.buildId,buildEpochMs:z.buildEpochMs,draining:H.isDraining(),host:Q,port:j,url:Y});E.statusCode=200,E.setHeader("content-type","application/json"),E.end(S);return}if((x.url??"/")==="/status"){if(!CW(dZ(x.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let S=JSON.stringify({hubId:U,...z,authToken:K,host:Q,port:j,url:Y,updatedAt:new Date().toISOString()});E.statusCode=200,E.setHeader("content-type","application/json"),E.end(S);return}if((x.url??"/")==="/version"){E.statusCode=200,E.setHeader("content-type","application/json"),E.end(JSON.stringify(z));return}let g=new eZ(x.url??"/",`http://${Q}:${j}`);if(g.pathname==="/drain"&&x.method==="POST"){if(!CW(dZ(x.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let S=g.searchParams.get("off")===null;H.handleCommand({version:jH,command:"hub.drain",payload:{draining:S,reason:g.searchParams.get("reason")??"authenticated HTTP drain request"}}).then((n)=>{E.statusCode=n.ok?200:500,E.setHeader("content-type","application/json"),E.end(JSON.stringify(n.payload??{ok:n.ok}))},()=>{E.statusCode=500,E.end("Drain failed")});return}if(g.pathname==="/shutdown"&&x.method==="POST"){if(!CW(dZ(x.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let S=!1,n=()=>{if(S)return;S=!0;try{Promise.resolve($.onShutdownRequested?.()).catch(()=>{return})}catch{}finally{C().catch(()=>{return})}};E.statusCode=202,E.setHeader("content-type","application/json"),E.setHeader("connection","close");let k=setTimeout(n,1000);k.unref?.(),E.end(JSON.stringify({ok:!0}),()=>{setImmediate(()=>{clearTimeout(k),n()})});return}E.statusCode=404,E.end("Not found")}),y=new Rs({noServer:!0});O=setInterval(()=>{for(let x of _){if(x.isAlive===!1){try{x.terminate?.()}catch{}_.delete(x);continue}x.isAlive=!1;try{x.ping?.()}catch{try{x.terminate?.()}catch{}_.delete(x)}}},ks),r.on("upgrade",(x,E,g)=>{if(!N){Ss(E);return}if(new eZ(x.url??"/",`http://${Q}:${j}`).pathname!==X){E.destroy();return}let n=CW(Is(x.headers["sec-websocket-protocol"]),K);if(!(n||_W(Q)&&wG(x.headers.origin))){ws(E);return}try{y.handleUpgrade(x,E,g,(I)=>{let d=I;d.isAlive=!0,d.on("pong",()=>{d.isAlive=!0}),_.add(d);let Z0=F.attach(Ps(I),{allowRegisteredWorkspace:n});L.add(Z0),I.once("close",()=>{_.delete(d),Z0(),L.delete(Z0)})})}catch{fs(E)}});try{await new Promise((x,E)=>{r.once("error",(g)=>{E(FM(g,{host:Q,port:W,pathname:X}))}),r.listen(W,Q,()=>{let g=r.address();if(!g||typeof g==="string"){E(FM(Error("Failed to resolve hub port"),{host:Q,port:W,pathname:X}));return}j=g.port,Y=v1(Q,j,X),x()})})}catch(x){if(O)clearInterval(O),O=void 0;throw await OM(Promise.resolve().then(()=>H.stop()),zM),G.release(),x}try{await I8(Z.discoveryPath,{hubId:U,protocolVersion:jH,minClientProtocolVersion:UM,maxClientProtocolVersion:HM,capabilities:[...z.capabilities],coreVersion:e2.version,buildId:V,buildEpochMs:B,authToken:K,host:Q,port:j,url:Y,pid:process.pid,startedAt:D,updatedAt:D}),N=!0}catch(x){if(!await OM(T().closed,zM))try{r.closeAllConnections(),r.unref()}catch{}throw x}return q={host:Q,port:j,url:Y,authToken:K,beginClose:T,close:C},q}async function zW($){let Z=$.owner??R$(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),X=$.host??"127.0.0.1",J=$.port??v8(),W=$.pathname??"/hub",j=v1(X,J,W),Y=Z.discoveryPath,V=(K)=>{if(!Q)J2(K.url,K.authToken);return K},B=a$.get(Y);if(B){let K=await B.promise;if(B.state==="closing"){if(await K.beginClose().closed.catch(()=>{return}),a$.get(Y)===B)a$.delete(Y)}else if(LM(K.url,X,J,W)||$.allowPortFallback===!0)return V({server:K,url:K.url,authToken:K.authToken,action:"reuse"});else throw DM(Z.ownerId,K.url,j)}return await h8(Z.discoveryPath,async()=>{let K=await R0(Z.discoveryPath);if(K?.url){let U=await h1(K.url,{authToken:K.authToken});if(U?.url&&X2(U)&&await e0(U.url,{authToken:K.authToken})){if(LM(K.url,X,J,W)||$.allowPortFallback===!0)return V({url:U.url,authToken:K.authToken,action:"reuse"});throw DM(Z.ownerId,K.url,j)}if(U?.url){let F={url:U.url,authToken:K.authToken,pid:U.pid??K.pid};if(await s5(F)){if(await e0(U.url,{authToken:K.authToken}))return V({url:U.url,authToken:K.authToken,action:"reuse"})}else await Q6(F,Z.discoveryPath)}else await I1(Z.discoveryPath)}let G=async(U)=>{let F=lZ({...U,owner:Z}),L={promise:F,state:"starting"};a$.set(Y,L);try{let D=await F;return L.server=D,L.state="open",V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){if(a$.get(Y)===L)a$.delete(Y);throw D}},H=Date.now()+xs;for(;;)try{return await G($)}catch(U){if(LW(U)&&Date.now()<H){await new Promise((F)=>setTimeout(F,ys));continue}if(!$.allowPortFallback||!bs(U))throw U;return await G({...$,port:0})}})}function AM(){return qM()==="production"?z1():j1()}function hs($){return qM()!=="production"&&!$}async function $E($){let Z=C$({host:$.host,port:$.port,pathname:$.pathname});return await lZ({...$,...Z,owner:AM()})}async function ZE($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=C$({host:$.host,port:$.port,pathname:$.pathname});return await zW({...$,...Q,allowPortFallback:$.allowPortFallback??hs(Z),owner:AM()})}export{I8 as writeHubDiscovery,h8 as withHubStartupLock,DF as watchManagedHubBuildMismatch,e0 as verifyHubConnection,vZ as truncateNotificationBody,jj as toHubStatusUrl,gQ as toHubHealthUrl,Cj as stopLocalHubServerGracefully,lZ as startHubWebSocketServer,$E as startHubServer,_j as spawnDetachedHubServerWithRetry,Dj as spawnDetachedHubServer,LF as sendHubCommand,Q6 as retireDiscoveredHub,dQ as restartLocalHubIfIdleAfterStartupTimeout,$F as resolveWorkspaceHubOwnerContext,j1 as resolveSharedHubOwnerContext,z1 as resolveProductionHubOwnerContext,Pj as resolveHubUrl,PG as resolveHubRunQueuePath,R$ as resolveHubOwnerContext,DW as resolveHubInstanceLockPath,fG as resolveHubEventLogPath,C$ as resolveHubEndpointOptions,a5 as resolveHubBuildIdentity,_1 as resolveHubBuildId,i5 as resolveHubBuildEpochMs,v8 as resolveDefaultHubPort,Gj as resolveDefaultHubPathname,Kj as resolveDefaultHubHost,$9 as resolveCompatibleLocalHubUrl,nU as resolveClineDir,$6 as resolveClineDataDir,e5 as requestHubShutdown,cQ as requestHubDrain,J2 as rememberRecoverableLocalHubUrl,Lj as readSupersededHubDiscovery,R0 as readHubDiscovery,dZ as readBearerToken,h1 as probeHubServer,FF as probeHubConnection,mQ as prewarmDetachedHubServer,W2 as normalizeHubWebSocketUrl,g8 as localHubHasNoActiveSessions,X2 as isManagedHubReusable,wG as isLocalHubOrigin,_W as isLocalHubHostName,Tj as isHubReconnectableTransportError,LW as isHubLockHeldError,uQ as isHubCommandTimeoutError,tU as isDiscoveryFilePresent,s5 as hubHasLiveSessions,Rj as hasActiveHubSessions,Z6 as getManagedHubCompatibility,h5 as executeScheduleOperation,zW as ensureHubWebSocketServer,ZE as ensureHubServer,t5 as ensureDetachedHubServer,X6 as ensureCompatibleLocalHubUrl,x8 as createTasksTool,y8 as createTasksPromptExtension,tT as createLocalHubScheduleRuntimeHandlers,oU as createInMemoryHubOwnerContext,v1 as createHubServerUrl,hQ as createHubAuthToken,E$ as createConfiguredTelemetryService,w8 as createConfiguredTelemetryHandle,lQ as connectToHub,r5 as compareHubBuilds,vQ as clearHubDiscoveryIfOwned,I1 as clearHubDiscovery,fj as checkManagedHubBuildMismatch,jF as __test__,l5 as TasksToolInputSchema,Z2 as TASKS_TOOL_NAME,d5 as TASKS_SYSTEM_PROMPT_RULE,n2 as ScheduledTaskInputSchema,g1 as NodeHubClient,uZ as NativeHubTransportAdapter,bj as HubUIClient,$1 as HubTransportError,Sj as HubSessionClient,A5 as HubServerTransport,q8 as HubScheduleService,D8 as HubScheduleCommandService,gZ as HubRunQueue,q5 as HubRunAdmissionRejectedError,FW as HubLockHeldError,u2 as HubInstanceLock,mZ as HubEventLogStore,m8 as HubCommandError,eT as HUB_LOCK_HELD_EXIT_CODE,Vj as DEFAULT_HUB_PORT,Bj as DEFAULT_HUB_PATHNAME,Yj as DEFAULT_HUB_HOST,cZ as BrowserWebSocketHubAdapter};
|