@cline/core 0.0.39 → 0.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +2 -0
  2. package/dist/extensions/context/compaction-shared.d.ts +6 -5
  3. package/dist/extensions/mcp/client.d.ts +8 -1
  4. package/dist/extensions/mcp/config-loader.d.ts +11 -1
  5. package/dist/extensions/mcp/index.d.ts +6 -3
  6. package/dist/extensions/mcp/oauth.d.ts +48 -0
  7. package/dist/extensions/mcp/types.d.ts +17 -0
  8. package/dist/extensions/plugin-sandbox-bootstrap.js +1 -1
  9. package/dist/hub/daemon/entry.js +201 -199
  10. package/dist/hub/index.js +200 -198
  11. package/dist/hub/runtime-host/hub-runtime-host.d.ts +3 -1
  12. package/dist/hub/server/browser-websocket.d.ts +3 -1
  13. package/dist/hub/server/handlers/context.d.ts +2 -1
  14. package/dist/hub/server/hub-server-transport.d.ts +3 -0
  15. package/dist/index.d.ts +3 -3
  16. package/dist/index.js +201 -199
  17. package/dist/runtime/config/agent-runtime-config-builder.d.ts +2 -9
  18. package/dist/runtime/host/history.d.ts +1 -0
  19. package/dist/runtime/host/runtime-host.d.ts +3 -1
  20. package/dist/runtime/turn-queue/pending-prompt-service.d.ts +6 -1
  21. package/dist/services/llms/handler-factory.d.ts +2 -2
  22. package/dist/services/llms/provider-settings.d.ts +1 -0
  23. package/dist/services/providers/local-provider-registry.d.ts +3 -0
  24. package/dist/services/providers/local-provider-service.d.ts +4 -2
  25. package/dist/services/telemetry/core-events.d.ts +4 -1
  26. package/dist/services/telemetry/index.js +1 -1
  27. package/dist/session/services/file-session-service.d.ts +2 -0
  28. package/dist/session/services/persistence-service.d.ts +2 -1
  29. package/dist/session/services/session-service.d.ts +2 -0
  30. package/dist/session/stores/session-manifest-store.d.ts +3 -1
  31. package/dist/settings/types.d.ts +3 -2
  32. package/dist/types/config.d.ts +2 -2
  33. package/dist/types/session.d.ts +2 -1
  34. package/package.json +9 -8
@@ -1,21 +1,23 @@
1
- import{createRequire as qB}from"node:module";var{defineProperty:X5,getOwnPropertyNames:OB}=Object;var L3=Object.prototype.hasOwnProperty;function h3(f){return this[f]}var z=(f,$,J)=>{var W=OB($);for(let H of W)if(!L3.call(f,H)&&H!=="default")X5(f,H,{get:h3.bind($,H),enumerable:!0});if(J){for(let H of W)if(!L3.call(J,H)&&H!=="default")X5(J,H,{get:h3.bind($,H),enumerable:!0});return J}};var zB=(f)=>f;function NB(f,$){this[f]=zB.bind(null,$)}var N=(f,$)=>{for(var J in $)X5(f,J,{get:$[J],enumerable:!0,configurable:!0,set:NB.bind($,J)})};var W1=(f,$)=>()=>(f&&($=f(f=0)),$);var O3=qB(import.meta.url);var bQ={};N(bQ,{normalizeUserMessage:()=>UV,buildInitialUserContent:()=>yV});async function yV(f,$,J,W){let H=GV($),Q=await DV(J,W);if(H.length===0&&!Q)return f;let Z=[{type:"text",text:f},...H];if(Q)Z.push(...Q);return Z}function UV(f){if(f==null)return"";if(typeof f==="string")return f;let $=f.content;if(typeof $==="string")return $;if(!Array.isArray($))return"";let J=[];for(let W of $)if(W&&typeof W==="object"&&W.type==="text"){let H=W.text;if(typeof H==="string")J.push(H)}return J.join(`
2
- `)}function GV(f){if(!f||f.length===0)return[];let $=[];for(let J of f){let W=TV(J);if(W)$.push(W)}return $}function TV(f){let $=f.trim();if(!$)return;let J=$.match(/^data:([^;,]+);base64,(.+)$/);if(J){let W=J[1],H=J[2];if(!W||!H)return;return{type:"image",mediaType:W,data:H}}return{type:"image",mediaType:"image/png",data:$}}async function DV(f,$){if(!f||f.length===0)return;let J=$??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all(f.map(async(H)=>{let Q=H.replace(/\\/g,"/");try{let Z=await J(H);return{type:"file",path:Q,content:Z}}catch(Z){let j=Z instanceof Error?Z.message:String(Z);return{type:"file",path:Q,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}function l(f,$,J){f?.capture({event:$,properties:J})}function n4(f){if(!f)return;return f.substring(0,500)}function BR(f){if(typeof f==="string")return"Error";return f.name?.trim()||f.constructor?.name||"Error"}function YR(f){return typeof f==="string"?f:f.message}function F7(f,$){return f.some((J)=>$.has(J.trim().toLowerCase()))}function K7(f){l(f,v.CLIENT.EXTENSION_ACTIVATED)}function a4(f,$){let J=[...$.vcs_types],W={root_count:$.root_count,vcs_types:J,is_multi_root:$.root_count>1,has_git:F7(J,new Set(["git"])),has_mercurial:F7(J,new Set(["mercurial","hg"]))};if($.init_duration_ms!==void 0)W.init_duration_ms=$.init_duration_ms;if($.feature_flag_enabled!==void 0)W.feature_flag_enabled=$.feature_flag_enabled;if($.is_remote_workspace!==void 0)W.is_remote_workspace=$.is_remote_workspace;l(f,v.WORKSPACE.INITIALIZED,W)}function t4(f,$,J){l(f,v.WORKSPACE.INIT_ERROR,{error_type:BR($),error_message:n4(YR($)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function y7(f,$){l(f,v.WORKSPACE.PATH_RESOLVED,{...$})}function U0(f,$){l(f,v.USER.AUTH_STARTED,{provider:$})}function G0(f,$){l(f,v.USER.AUTH_SUCCEEDED,{provider:$})}function T0(f,$,J){l(f,v.USER.AUTH_FAILED,{provider:$,errorMessage:n4(J)})}function l0(f,$,J){l(f,v.USER.AUTH_LOGGED_OUT,{provider:$,reason:J})}function U7(f,$){f?.captureRequired(v.USER.TELEMETRY_OPT_OUT,$)}function D0(f,$){let J=$.id?.trim();if(J)f?.setDistinctId(J);f?.updateCommonProperties({account_id:$.id,account_email:$.email,provider:$.provider,organization_id:$.organizationId,organization_name:$.organizationName,member_id:$.memberId})}function s4(f,$){l(f,v.TASK.CREATED,$)}function o4(f,$){l(f,v.TASK.RESTARTED,$)}function n2(f,$){l(f,v.TASK.COMPLETED,$)}function y1(f,$){l(f,v.TASK.CONVERSATION_TURN,{...$,timestamp:new Date().toISOString()})}function e4(f,$){l(f,v.TASK.TOKEN_USAGE,$)}function f6(f,$,J){l(f,v.TASK.MODE_SWITCH,{ulid:$,mode:J})}function $6(f,$){l(f,v.TASK.TOOL_USED,$)}function J6(f,$){l(f,v.TASK.SKILL_USED,$)}function W6(f,$){l(f,v.TASK.DIFF_EDIT_FAILED,$)}function a2(f,$){l(f,v.TASK.PROVIDER_API_ERROR,{...$,errorMessage:n4($.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function H6(f,$,J){l(f,v.TASK.MENTION_USED,{mentionType:$,contentLength:J,timestamp:new Date().toISOString()})}function Q6(f,$,J,W){l(f,v.TASK.MENTION_FAILED,{mentionType:$,errorType:J,errorMessage:n4(W),timestamp:new Date().toISOString()})}function Z6(f,$,J,W,H){l(f,v.TASK.MENTION_SEARCH_RESULTS,{queryLength:$.length,resultCount:J,searchType:W,isEmpty:H,timestamp:new Date().toISOString()})}function p0(f,$){l(f,v.TASK.AGENT_CREATED,{...$,timestamp:new Date().toISOString()})}function j6(f,$){l(f,v.TASK.AGENT_TEAM_CREATED,{...$,timestamp:new Date().toISOString()})}function t2(f,$){l(f,$.event==="ended"?v.TASK.SUBAGENT_COMPLETED:v.TASK.SUBAGENT_STARTED,{...$,timestamp:new Date().toISOString()})}function X6(f,$,J,W){l(f,v.HOOKS.DISCOVERY_COMPLETED,{hookName:$,globalCount:J,workspaceCount:W,totalCount:J+W,timestamp:new Date().toISOString()})}var v;var Lf=W1(()=>{v={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"}}});import{mkdirSync as GR,readFileSync as TR,writeFileSync as DR}from"node:fs";import{dirname as _R}from"node:path";import{resolveGlobalSettingsPath as M7}from"@cline/shared/storage";import{z as o2}from"zod";function _7(){return e2.parse({})}function f0(){let f=M7(),$;try{$=JSON.parse(TR(f,"utf8"))}catch{return _7()}let J=e2.safeParse($);return J.success?J.data:_7()}function q$(f,$={}){let J=M7(),W=f0();GR(_R(J),{recursive:!0});let H=e2.parse(f);if(!W.telemetryOptOut&&H.telemetryOptOut)U7($.telemetry);DR(J,`${JSON.stringify(H,null,2)}
3
- `,"utf8")}function B6(){return f0().telemetryOptOut}function L7(f,$={}){q$({...f0(),telemetryOptOut:f},$)}function nf(f){return new Set(f??f0().disabledTools??[])}function f8(f){return new Set(f??f0().disabledPlugins??[])}function h7(f){return nf().has(f)}function Y6(f){let $=nf(),J=f0();if($.has(f))return $.delete(f),q$({...J,disabledTools:[...$]}),!1;return $.add(f),q$({...J,disabledTools:[...$]}),!0}function s5(f,$){let J=[...new Set(f.map((Q)=>Q.trim()).filter(Boolean))];if(J.length===0)return;let W=f0(),H=nf(W.disabledTools);for(let Q of J)if($)H.add(Q);else H.delete(Q);q$({...W,disabledTools:[...H]})}function O7(f,$){return s5([f],$),$}function z7(f){return f8().has(f)}function N7(f,$){let J=f.trim();if(!J)return;let W=f0(),H=f8(W.disabledPlugins);if($)H.add(J);else H.delete(J);q$({...W,disabledPlugins:[...H]})}function V6(f,$){let J=f8($);if(J.size===0)return[...f];return f.filter((W)=>!J.has(W))}function w$(f,$){let J=nf($);if(J.size===0)return[...f];return f.filter((W)=>!J.has(W.name))}function R6(f,$){if(!f||f.length===0)return f;let J=nf($);if(J.size===0)return f;return f.map((W)=>{if(!W.setup)return W;return{...W,setup:(H,Q)=>W.setup?.({...H,registerTool:(Z)=>{if(!J.has(Z.name))H.registerTool(Z)}},Q)}})}var D7,e2;var M0=W1(()=>{Lf();D7=o2.preprocess((f)=>Array.isArray(f)?f.filter(($)=>typeof $==="string").map(($)=>$.trim()).filter(Boolean):void 0,o2.array(o2.string()).optional()).transform((f)=>{if(!f)return;let $=[...new Set(f)].sort((J,W)=>J.localeCompare(W));return $.length>0?$:void 0}),e2=o2.object({telemetryOptOut:o2.boolean().default(!1).catch(!1),disabledTools:D7.optional(),disabledPlugins:D7.optional()}).strip().transform((f)=>{let $={telemetryOptOut:f.telemetryOptOut};if(f.disabledTools?.length)$.disabledTools=f.disabledTools;if(f.disabledPlugins?.length)$.disabledPlugins=f.disabledPlugins;return $})});import{existsSync as sT,mkdirSync as oT,readFileSync as eT,writeFileSync as fD}from"node:fs";import{resolve as $D}from"node:path";import{resolveSessionDataDir as JD}from"@cline/shared/storage";import{nanoid as WD}from"nanoid";import*as HD from"node-machine-id";function l$(f){let $=f?.trim();if($)return $;let J=jD();if(J)return J;return XD()}function ZD(){let f=HD;return f.machineIdSync??f.default?.machineIdSync}function jD(){try{let f=ZD();if(!f)return;return f().trim()||void 0}catch{return}}function XD(){let f=JD(),$=$D(f,QD);try{if(sT($)){let W=eT($,"utf8").trim();if(W.length>0)return W}}catch{}let J=`cl-${WD()}`;try{oT(f,{recursive:!0}),fD($,J,"utf8")}catch{}return J}var QD="machine-id";var _J=()=>{};class U4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(f){this.name=f.name??"OpenTelemetryAdapter",this.metadata={...f.metadata},this.meterProvider=f.meterProvider,this.loggerProvider=f.loggerProvider,this.meter=f.meterProvider?.getMeter("cline")??null,this.logger=f.loggerProvider?.getLogger("cline")??null,this.enabled=f.enabled??!0,this.distinctId=f.distinctId,this.commonProperties=f.commonProperties?{...f.commonProperties}:{}}emit(f,$){if(!this.isEnabled())return;this.emitLog(f,$,!1)}emitRequired(f,$){this.emitLog(f,$,!0)}recordCounter(f,$,J,W,H=!1){if(!this.meter||!H&&!this.isEnabled())return;let Q=this.counters.get(f);if(!Q)Q=this.meter.createCounter(f,W?{description:W}:void 0),this.counters.set(f,Q);Q.add($,this.flattenProperties(this.buildAttributes(J)))}recordHistogram(f,$,J,W,H=!1){if(!this.meter||!H&&!this.isEnabled())return;let Q=this.histograms.get(f);if(!Q)Q=this.meter.createHistogram(f,W?{description:W}:void 0),this.histograms.set(f,Q);Q.record($,this.flattenProperties(this.buildAttributes(J)))}recordGauge(f,$,J,W,H=!1){if(!this.meter||!H&&!this.isEnabled())return;let Q=this.buildAttributes(J),Z=JSON.stringify(Q),j=this.gaugeValues.get(f);if($===null){if(j){if(j.delete(Z),j.size===0)this.gaugeValues.delete(f),this.gauges.delete(f)}return}let X=j;if(!X)X=new Map,this.gaugeValues.set(f,X);if(!this.gauges.has(f)){let A=this.meter.createObservableGauge(f,W?{description:W}:void 0);A.addCallback((P)=>{for(let B of this.snapshotGaugeSeries(f))P.observe(B.value,this.flattenProperties(B.attributes))}),this.gauges.set(f,A)}X.set(Z,{value:$,attributes:Q})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(f){this.distinctId=f}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(f,$,J){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes($,J));this.logger.emit({severityText:"INFO",body:f,attributes:W})}buildAttributes(f,$=!1){return{...this.commonProperties,...this.metadata,...f,...this.distinctId?{distinct_id:this.distinctId}:{},...$?{_required:!0}:{}}}snapshotGaugeSeries(f){let $=this.gaugeValues.get(f);if(!$)return[];return Array.from($.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties(f,$="",J=new WeakSet,W=0){if(!f)return{};let H={},Q=100,Z=10;for(let[j,X]of Object.entries(f)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let A=$?`${$}.${j}`:j;if(X===null||X===void 0){H[A]=String(X);continue}if(Array.isArray(X)){let P=X.length>Q?X.slice(0,Q):X;try{H[A]=JSON.stringify(P)}catch{H[A]="[UnserializableArray]"}if(X.length>Q)H[`${A}_truncated`]=!0,H[`${A}_original_length`]=X.length;continue}if(typeof X==="object"){if(X instanceof Date){H[A]=X.toISOString();continue}if(X instanceof Error){H[A]=X.message;continue}if(J.has(X)){H[A]="[Circular]";continue}if(W>=Z){H[A]="[MaxDepthExceeded]";continue}J.add(X),Object.assign(H,this.flattenProperties(X,A,J,W+1));continue}if(N_(X)){H[A]=X;continue}try{H[A]=JSON.stringify(X)}catch{H[A]=String(X)}}return H}}function N_(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}class G4{name;logger;enabled;constructor(f={}){this.name=f.name??"TelemetryLoggerSink",this.logger=f.logger,this.enabled=f.enabled??!0}emit(f,$){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:f,properties:$})}emitRequired(f,$){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:f,properties:$})}recordCounter(f,$,J,W,H){if(!H&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:f,value:$,attributes:J,description:W,required:H===!0})}recordHistogram(f,$,J,W,H){if(!H&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:f,value:$,attributes:J,description:W,required:H===!0})}recordGauge(f,$,J,W,H){if(!H&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:f,value:$,attributes:J,description:W,required:H===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class X2{adapters;metadata;distinctId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new G4({logger:f.logger}));this.metadata={...f.metadata??{}},this.distinctId=f.distinctId,this.commonProperties={...f.commonProperties??{}}}addAdapter(f){this.adapters.push(f)}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return this.adapters.some((f)=>f.isEnabled())}capture(f){let $=this.buildAttributes(f.properties);for(let J of this.adapters)J.emit(f.event,$)}captureRequired(f,$){let J=this.buildAttributes($);for(let W of this.adapters)W.emitRequired(f,J)}recordCounter(f,$,J,W,H=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordCounter(f,$,Q,W,H)}recordHistogram(f,$,J,W,H=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordHistogram(f,$,Q,W,H)}recordGauge(f,$,J,W,H=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordGauge(f,$,Q,W,H)}async flush(){await Promise.all(this.adapters.map((f)=>f.flush()))}async dispose(){await Promise.all(this.adapters.map((f)=>f.dispose()))}buildAttributes(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var jH=()=>{};import{metrics as q_,trace as w_}from"@opentelemetry/api";import{logs as b_}from"@opentelemetry/api-logs";import{OTLPLogExporter as C_}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as E_}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as S_}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as k_}from"@opentelemetry/resources";import{BatchLogRecordProcessor as I_,ConsoleLogRecordExporter as m_,LoggerProvider as x_}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as g_,MeterProvider as v_,PeriodicExportingMetricReader as MA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as u_,ConsoleSpanExporter as c_,SimpleSpanProcessor as d_}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as r_}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as l_,ATTR_SERVICE_VERSION as p_}from"@opentelemetry/semantic-conventions";class LA{distinctId;metadata;commonProperties;constructor(f={}){this.distinctId=f.distinctId,this.metadata={...f.metadata??{}},this.commonProperties={...f.commonProperties??{}}}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return!1}capture(f){this.resolveProperties(f.properties)}captureRequired(f,$){this.resolveProperties($)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class A2{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let $=k_({[l_]:f.serviceName??"cline",...f.serviceVersion?{[p_]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider($),this.loggerProvider=this.createLoggerProvider($),this.tracerProvider=this.createTracerProvider($),this.meterProvider)q_.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)b_.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",$){return w_.getTracer(f,$??this.options.serviceVersion)}createAdapter(f){return new U4({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let $=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new X2({...f,adapters:[$],distinctId:l$(f.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider(f){let $=XH(this.options.metricsExporter);if($.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(J*0.8)),H=$.map((Q)=>a_(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:W})).filter((Q)=>Q!==null);if(H.length===0)return null;return new v_({resource:f,readers:H})}createTracerProvider(f){let $=XH(this.options.tracesExporter);if($.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,H=[];for(let Q of $){let Z=n_(Q,{endpoint:J,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Z)H.push(Z)}if(H.length===0)return null;return new r_({resource:f,spanProcessors:H})}createLoggerProvider(f){let $=XH(this.options.logsExporter);if($.length===0)return null;let J=$.map((W)=>{let H=i_(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!H)return null;return new I_(H,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(J.length===0)return null;return new x_({resource:f,processors:J})}}function T4(f){let $=new A2(f),J=$.createTelemetryService(f);return J.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:f.enabled??!0,logsExporter:Array.isArray(f.logsExporter)?f.logsExporter.join(","):f.logsExporter,metricsExporter:Array.isArray(f.metricsExporter)?f.metricsExporter.join(","):f.metricsExporter,tracesExporter:Array.isArray(f.tracesExporter)?f.tracesExporter.join(","):f.tracesExporter,otlpProtocol:f.otlpProtocol,hasOtlpEndpoint:Boolean(f.otlpEndpoint),serviceName:f.serviceName,serviceVersion:f.serviceVersion}),{provider:$,telemetry:J}}function C0(f){if(B6())return{telemetry:new LA(f)};if(f.enabled!==!0)return{telemetry:new X2({...f,distinctId:l$(f.distinctId)})};return T4(f)}function P2(f){let{telemetry:$,provider:J}=C0(f);return{telemetry:$,provider:J,flush:async()=>{let Q=J;if(Q&&typeof Q.forceFlush==="function")try{await Q.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([$.dispose(),J?.dispose()])}}}function XH(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function i_(f,$){if(f==="console")return new m_;if(!$.endpoint)return null;let J=AH($.endpoint,"/v1/logs");return new C_({url:J,headers:$.headers})}function n_(f,$){if(f==="console")return new d_(new c_);if(!$.endpoint)return null;let J=AH($.endpoint,"/v1/traces");return new u_(new S_({url:J,headers:$.headers}))}function a_(f,$){if(f==="console")return new MA({exporter:new g_,exportIntervalMillis:$.interval,exportTimeoutMillis:$.timeout});if(!$.endpoint)return null;let J=AH($.endpoint,"/v1/metrics");return new MA({exporter:new E_({url:J,headers:$.headers}),exportIntervalMillis:$.interval,exportTimeoutMillis:$.timeout})}function AH(f,$){let J=new URL(f),W=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=W.endsWith($)?W:`${W}${$}`,J.toString()}var CJ=W1(()=>{M0();_J();jH()});var MP={};N(MP,{createOpenTelemetryTelemetryService:()=>T4,createConfiguredTelemetryService:()=>C0,createConfiguredTelemetryHandle:()=>P2,OpenTelemetryProvider:()=>A2,OpenTelemetryAdapter:()=>U4});var zH=W1(()=>{CJ()});import{initVcr as iO}from"@cline/shared";import{normalizeProviderId as rO}from"@cline/llms";var KB={};N(KB,{LocalRuntimeHost:()=>X0});import{readdirSync as kO}from"node:fs";import{homedir as IO}from"node:os";import{isAbsolute as mO,join as T3,resolve as D3}from"node:path";import{createSessionId as xO,isLikelyAuthError as gO,normalizeUserInput as vO}from"@cline/shared";import{setHomeDirIfUnset as uO}from"@cline/shared/storage";var n3={};N(n3,{createContextCompactionPrepareTurn:()=>M2});import{createHandler as kB}from"@cline/llms";var z3=200000,N3=0.95;var A5=20000;var q3=8;function wB(f){return Math.max(1,Math.ceil(f.length/4))}function R$(f,$){if(f.length<=$)return f;return`${f.slice(0,$)}
4
- ...[truncated ${f.length-$} chars]`}function bB(f){if(typeof f==="string")return R$(f,2000);return f.map(($)=>{switch($.type){case"text":return $.text;case"file":return`<file path="${$.path}">
5
- ${R$($.content,2000)}
6
- </file>`;case"image":return`[image:${$.mediaType}]`;default:return""}}).join(`
7
- `)}function CB(f){return Object.entries(f).map(([$,J])=>`${$}=${JSON.stringify(J)}`).join(", ")}function w3(f){if(typeof f.content==="string")return`[${f.role==="user"?"User":"Bot"}]: ${f.content}`;let $=[];for(let J of f.content)switch(J.type){case"text":$.push(`[${f.role==="user"?"User":"Bot"}]: ${J.text}`);break;case"thinking":$.push(`[Bot thinking]: ${R$(J.thinking,2000)}`);break;case"redacted_thinking":$.push("[Bot thinking]: [redacted]");break;case"tool_use":$.push(`[Bot tool calls]: ${J.name}(${CB(J.input)})`);break;case"tool_result":$.push(`[Tool result]: ${bB(J.content)}`);break;case"file":$.push(`[${f.role==="user"?"User":"Bot"} file ${J.path}]: ${R$(J.content,2000)}`);break;case"image":$.push(`[${f.role==="user"?"User":"Bot"} image]: ${J.mediaType}`);break}return $.join(`
8
- `)}function b3(f){return f.map(w3).join(`
9
-
10
- `).trim()}function C3(){let f=new WeakMap;return($)=>{let J=$,W=f.get(J);if(typeof W==="number")return W;let H=wB(w3($));return f.set(J,H),H}}function D2(f){return f.metadata?.kind==="compaction_summary"}function P5(f){if(!D2(f))return;let $=f.metadata;if(!$)return;let J=$.details;return{kind:"compaction_summary",summary:String($.summary??""),details:{readFiles:Array.isArray(J?.readFiles)?J.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(J?.modifiedFiles)?J.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number($.tokensBefore??0),generatedAt:Number($.generatedAt??0)}}function EB(f){if(f.role!=="user"||!Array.isArray(f.content))return!1;return f.content.length>0&&f.content.every(($)=>$.type==="tool_result")}function E3(f){return f.role==="user"&&!EB(f)&&!D2(f)}function S3(f){for(let $=0;$<f.length;$+=1)if(E3(f[$]))return $;return-1}function B5(f){for(let $=f.length-1;$>=0;$-=1)if(E3(f[$]))return $;return 0}function k3(f){for(let $=f.length-1;$>=0;$-=1)if(f[$].role==="assistant")return $;return-1}function I3(f){for(let $=f.length-1;$>=0;$-=1)if(D2(f[$]))return $;return-1}function m3(f,$,J){let W=B5(f);if(W<=0)return 0;let H=0,Q=f.length;for(let Z=f.length-1;Z>=0;Z-=1)if(H+=J(f[Z]),Q=Z,H>=$)break;if(Q<=0)return 0;return Math.min(Q,W)}function T2(f){if(typeof f==="string"&&f.trim().length>0)return[f];if(Array.isArray(f))return f.flatMap(($)=>T2($));if(f&&typeof f==="object"){let $=f,J=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])J.push(...T2($[W]));if(Array.isArray($.files)){for(let W of $.files)if(W&&typeof W==="object")J.push(...T2(W.path))}if(Array.isArray($.file_paths))J.push(...T2($.file_paths));return J}return[]}function G2(f,$){let J=new Set(f);for(let W of $){let H=W.trim();if(!H)continue;J.add(H)}return[...J].sort((W,H)=>W.localeCompare(H))}function x3(f){let $=[],J=[];for(let W of f){let H=P5(W);if(H){$=G2($,H.details.readFiles),J=G2(J,H.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let Q of W.content){if(Q.type==="file"){$=G2($,[Q.path]);continue}if(Q.type!=="tool_use")continue;let Z=T2(Q.input);if(Q.name==="read_files"){$=G2($,Z);continue}if(Q.name==="editor"||Q.name==="apply_patch")J=G2(J,Z)}}return{readFiles:$,modifiedFiles:J}}function SB(f){let $=f.readFiles.length>0?f.readFiles.map((W)=>`- ${W}`).join(`
11
- `):"- none",J=f.modifiedFiles.length>0?f.modifiedFiles.map((W)=>`- ${W}`).join(`
1
+ import{createRequire as XB}from"node:module";var{defineProperty:N5,getOwnPropertyNames:ZB}=Object;var dZ=Object.prototype.hasOwnProperty;function lZ($){return this[$]}var M=($,f,J)=>{var Q=ZB(f);for(let Z of Q)if(!dZ.call($,Z)&&Z!=="default")N5($,Z,{get:lZ.bind(f,Z),enumerable:!0});if(J){for(let Z of Q)if(!dZ.call(J,Z)&&Z!=="default")N5(J,Z,{get:lZ.bind(f,Z),enumerable:!0});return J}};var WB=($)=>$;function jB($,f){this[$]=WB.bind(null,f)}var q=($,f)=>{for(var J in f)N5($,J,{get:f[J],enumerable:!0,configurable:!0,set:jB.bind(f,J)})};var F1=($,f)=>()=>($&&(f=$($=0)),f);var pZ=XB(import.meta.url);var $W={};q($W,{normalizeUserMessage:()=>QG,buildInitialUserContent:()=>JG});async function JG($,f,J,Q){let Z=ZG(f),W=await jG(J,Q);if(Z.length===0&&!W)return $;let j=[{type:"text",text:$},...Z];if(W)j.push(...W);return j}function QG($){if($==null)return"";if(typeof $==="string")return $;let f=$.content;if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Q of f)if(Q&&typeof Q==="object"&&Q.type==="text"){let Z=Q.text;if(typeof Z==="string")J.push(Z)}return J.join(`
2
+ `)}function ZG($){if(!$||$.length===0)return[];let f=[];for(let J of $){let Q=WG(J);if(Q)f.push(Q)}return f}function WG($){let f=$.trim();if(!f)return;let J=f.match(/^data:([^;,]+);base64,(.+)$/);if(J){let Q=J[1],Z=J[2];if(!Q||!Z)return;return{type:"image",mediaType:Q,data:Z}}return{type:"image",mediaType:"image/png",data:f}}async function jG($,f){if(!$||$.length===0)return;let J=f??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(Z)=>{let W=Z.replace(/\\/g,"/");try{let j=await J(Z);return{type:"file",path:W,content:j}}catch(j){let X=j instanceof Error?j.message:String(j);return{type:"file",path:W,content:`Error fetching content: ${X}`}}}));if(Q.length===0)return;return Q}import{SDK_ERROR_TELEMETRY_EVENT as tG}from"@cline/shared";function r($,f,J){$?.capture({event:f,properties:J})}function Z6($){if(!$)return;return $.substring(0,sG)}function oG($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function eG($){return typeof $==="string"?$:$.message}function gW($,f){return $.some((J)=>f.has(J.trim().toLowerCase()))}function mW($){r($,v.CLIENT.EXTENSION_ACTIVATED)}function W6($,f){let J=[...f.vcs_types],Q={root_count:f.root_count,vcs_types:J,is_multi_root:f.root_count>1,has_git:gW(J,new Set(["git"])),has_mercurial:gW(J,new Set(["mercurial","hg"]))};if(f.init_duration_ms!==void 0)Q.init_duration_ms=f.init_duration_ms;if(f.feature_flag_enabled!==void 0)Q.feature_flag_enabled=f.feature_flag_enabled;if(f.is_remote_workspace!==void 0)Q.is_remote_workspace=f.is_remote_workspace;r($,v.WORKSPACE.INITIALIZED,Q)}function j6($,f,J){r($,v.WORKSPACE.INIT_ERROR,{error_type:oG(f),error_message:Z6(eG(f)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function vW($,f){r($,v.WORKSPACE.PATH_RESOLVED,{...f})}function L$($,f){r($,v.USER.AUTH_STARTED,{provider:f})}function O$($,f){r($,v.USER.AUTH_SUCCEEDED,{provider:f})}function z$($,f,J){r($,v.USER.AUTH_FAILED,{provider:f,errorMessage:Z6(J)})}function n$($,f,J){r($,v.USER.AUTH_LOGGED_OUT,{provider:f,reason:J})}function cW($,f){$?.captureRequired(v.USER.TELEMETRY_OPT_OUT,f)}function _$($,f){let J=f.id?.trim();if(J)$?.setDistinctId(J);$?.updateCommonProperties({account_id:f.id,account_email:f.email,provider:f.provider,organization_id:f.organizationId,organization_name:f.organizationName,member_id:f.memberId})}function X6($,f){r($,v.TASK.CREATED,f)}function H6($,f){r($,v.TASK.RESTARTED,f)}function J8($,f){r($,v.TASK.COMPLETED,f)}function yf($,f){r($,v.TASK.CONVERSATION_TURN,{...f,timestamp:new Date().toISOString()})}function Y6($,f){r($,v.TASK.TOKEN_USAGE,f)}function V6($,f,J){r($,v.TASK.MODE_SWITCH,{ulid:f,mode:J})}function A6($,f){r($,v.TASK.TOOL_USED,f)}function B6($,f){r($,v.TASK.SKILL_USED,f)}function K6($,f){r($,v.TASK.DIFF_EDIT_FAILED,f)}function Q8($,f){r($,v.TASK.PROVIDER_API_ERROR,{...f,errorMessage:Z6(f.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function G6($,f,J){r($,v.TASK.MENTION_USED,{mentionType:f,contentLength:J,timestamp:new Date().toISOString()})}function P6($,f,J,Q){r($,v.TASK.MENTION_FAILED,{mentionType:f,errorType:J,errorMessage:Z6(Q),timestamp:new Date().toISOString()})}function F6($,f,J,Q,Z){r($,v.TASK.MENTION_SEARCH_RESULTS,{queryLength:f.length,resultCount:J,searchType:Q,isEmpty:Z,timestamp:new Date().toISOString()})}function a$($,f){r($,v.TASK.AGENT_CREATED,{...f,timestamp:new Date().toISOString()})}function D6($,f){r($,v.TASK.AGENT_TEAM_CREATED,{...f,timestamp:new Date().toISOString()})}function Z8($,f){r($,f.event==="ended"?v.TASK.SUBAGENT_COMPLETED:v.TASK.SUBAGENT_STARTED,{...f,timestamp:new Date().toISOString()})}function R6($,f,J,Q){r($,v.HOOKS.DISCOVERY_COMPLETED,{hookName:f,globalCount:J,workspaceCount:Q,totalCount:J+Q,timestamp:new Date().toISOString()})}var sG=500,v;var T0=F1(()=>{v={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:tG}}});import{mkdirSync as jP,readFileSync as XP,writeFileSync as HP}from"node:fs";import{dirname as YP}from"node:path";import{resolveGlobalSettingsPath as rW}from"@cline/shared/storage";import{z as j8}from"zod";function pW(){return X8.parse({})}function J$(){let $=rW(),f;try{f=JSON.parse(XP($,"utf8"))}catch{return pW()}let J=X8.safeParse(f);return J.success?J.data:pW()}function C1($,f={}){let J=rW(),Q=J$();jP(YP(J),{recursive:!0});let Z=X8.parse($);if(!Q.telemetryOptOut&&Z.telemetryOptOut)cW(f.telemetry);HP(J,`${JSON.stringify(Z,null,2)}
3
+ `,"utf8")}function O6(){return J$().telemetryOptOut}function iW($,f={}){C1({...J$(),telemetryOptOut:$},f)}function n0($){return new Set($??J$().disabledTools??[])}function H8($){return new Set($??J$().disabledPlugins??[])}function nW($){return n0().has($)}function z6($){let f=n0(),J=J$();if(f.has($))return f.delete($),C1({...J,disabledTools:[...f]}),!1;return f.add($),C1({...J,disabledTools:[...f]}),!0}function D9($,f){let J=[...new Set($.map((W)=>W.trim()).filter(Boolean))];if(J.length===0)return;let Q=J$(),Z=n0(Q.disabledTools);for(let W of J)if(f)Z.add(W);else Z.delete(W);C1({...Q,disabledTools:[...Z]})}function aW($,f){return D9([$],f),f}function tW($){return H8().has($)}function sW($,f){let J=$.trim();if(!J)return;let Q=J$(),Z=H8(Q.disabledPlugins);if(f)Z.add(J);else Z.delete(J);C1({...Q,disabledPlugins:[...Z]})}function _6($,f){let J=H8(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q))}function E1($,f){let J=n0(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q.name))}function y6($,f){if(!$||$.length===0)return $;let J=n0(f);if(J.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(Z,W)=>Q.setup?.({...Z,registerTool:(j)=>{if(!J.has(j.name))Z.registerTool(j)}},W)}})}var lW,X8;var T$=F1(()=>{T0();lW=j8.preprocess(($)=>Array.isArray($)?$.filter((f)=>typeof f==="string").map((f)=>f.trim()).filter(Boolean):void 0,j8.array(j8.string()).optional()).transform(($)=>{if(!$)return;let f=[...new Set($)].sort((J,Q)=>J.localeCompare(Q));return f.length>0?f:void 0}),X8=j8.object({telemetryOptOut:j8.boolean().default(!1).catch(!1),disabledTools:lW.optional(),disabledPlugins:lW.optional()}).strip().transform(($)=>{let f={telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)f.disabledTools=$.disabledTools;if($.disabledPlugins?.length)f.disabledPlugins=$.disabledPlugins;return f})});var tX={};q(tX,{updateMcpServerOAuthState:()=>d1,setMcpServerDisabled:()=>c1,resolveMcpServerRegistrations:()=>Q$,resolveDefaultMcpSettingsPath:()=>O0,registerMcpServersFromSettingsFile:()=>l1,normalizeMcpServerOAuthState:()=>sf,loadMcpSettingsFile:()=>v1,listMcpServerOAuthStatuses:()=>e8,hasMcpSettingsFile:()=>q$,getMcpServerOAuthState:()=>u1});import{existsSync as NR,mkdirSync as lX,readFileSync as D7,writeFileSync as pX}from"node:fs";import{dirname as rX}from"node:path";import{resolveMcpSettingsPath as MR}from"@cline/shared/storage";import{z as S}from"zod";function F7($){if(!$)return;if($==="http")return"streamableHttp";return $}function O0(){return MR()}function gR($){let f=D7($,"utf8"),J;try{J=JSON.parse(f)}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Z}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object.`);return J}function aX($,f){if(!Object.hasOwn($,f))return;let J=$[f];if(!J||typeof J!=="object"||Array.isArray(J))return;return J}function mR($,f,J){Object.defineProperty($,f,{value:J,enumerable:!0,configurable:!0,writable:!0})}function v1($={}){let f=$.filePath??O0(),J=D7(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${f}": ${j}`)}let Z=xR.safeParse(Q);if(!Z.success){let W=Z.error.issues.map((j)=>{let X=j.path.join(".");return X?`${X}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${f}": ${W}`)}return Z.data}function vR($){let f=D7($,"utf8"),J;try{J=JSON.parse(f)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${j}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object`);let Q=J,Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Q}function sf($){if(!$)return;let f={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(f).length>0?f:void 0}function cR($){if($===void 0)return;let f=R7.safeParse($);if(!f.success)return;return sf(f.data)}function q$($={}){let f=$.filePath??O0();return NR(f)}function Q$($={}){let f=v1($);return Object.entries(f.mcpServers).map(([J,Q])=>({name:J,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function c1($){let f=$.filePath??O0(),J=$.name.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=gR(f),Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${f}": mcpServers must be an object.`);let W={...Z},j=aX(W,J);if(!j)throw Error(`Unknown MCP server: ${J}`);let X={...j};if($.disabled)X.disabled=!0;else delete X.disabled;mR(W,J,X),lX(rX(f),{recursive:!0}),pX(f,`${JSON.stringify({...Q,mcpServers:W},null,2)}
4
+ `)}function u1($,f={}){let J=v1(f);if(!Object.hasOwn(J.mcpServers,$))return;return sf(J.mcpServers[$]?.oauth)}function d1($,f,J={}){let Q=J.filePath??O0(),Z=vR(Q),W=Z.mcpServers,j=aX(W,$);if(!j)throw Error(`Unknown MCP server: ${$}`);let X=cR(j.oauth)??{},H=sf(f(X));if(H)j.oauth=H;else delete j.oauth;return lX(rX(Q),{recursive:!0}),pX(Q,`${JSON.stringify(Z,null,2)}
5
+ `,"utf8"),H??{}}function e8($={}){return Q$($).map((J)=>{let Q=J.transport.type!=="stdio",Z=J.oauth?.tokens?.access_token;return{serverName:J.name,oauthSupported:Q,oauthConfigured:Q&&typeof Z==="string"&&Z.trim().length>0,lastError:J.oauth?.lastError,lastAuthenticatedAt:J.oauth?.lastAuthenticatedAt}}).sort((J,Q)=>J.serverName.localeCompare(Q.serverName))}async function l1($,f={}){let J=Q$(f);for(let Q of J)await $.registerServer(Q);return J}var o8,iX,R7,qR,wR,SR,CR,ER,hR,nX,bR,kR,IR,xR;var RJ=F1(()=>{o8=S.record(S.string(),S.string()),iX=S.record(S.string(),S.unknown()),R7=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),qR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:o8.optional()}),wR=S.object({type:S.literal("sse"),url:S.string().url(),headers:o8.optional()}),SR=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:o8.optional()}),CR=S.discriminatedUnion("type",[qR,wR,SR]),ER=S.object({transport:CR,disabled:S.boolean().optional(),metadata:iX.optional(),oauth:R7.optional()}),hR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),nX=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:hR,disabled:S.boolean().optional(),metadata:iX.optional(),oauth:R7.optional()});bR=nX.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:o8.optional()}).superRefine(($,f)=>{let J=$.type??F7($.transportType);if(J&&J!=="stdio")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),kR=nX.extend({url:S.string().url(),headers:o8.optional()}).superRefine(($,f)=>{let J=$.type??F7($.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??F7($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),IR=S.union([ER,bR,kR]),xR=S.object({mcpServers:S.record(S.string(),IR)}).passthrough()});import{existsSync as qz,mkdirSync as wz,readFileSync as Sz,writeFileSync as Cz}from"node:fs";import{resolve as Ez}from"node:path";import{resolveSessionDataDir as hz}from"@cline/shared/storage";import{nanoid as bz}from"nanoid";import*as kz from"node-machine-id";function e1($){let f=$?.trim();if(f)return f;let J=gz();if(J)return J;return mz()}function xz(){let $=kz;return $.machineIdSync??$.default?.machineIdSync}function gz(){try{let $=xz();if(!$)return;return $().trim()||void 0}catch{return}}function mz(){let $=hz(),f=Ez($,Iz);try{if(qz(f)){let Q=Sz(f,"utf8").trim();if(Q.length>0)return Q}}catch{}let J=`cl-${bz()}`;try{wz($,{recursive:!0}),Cz(f,J,"utf8")}catch{}return J}var Iz="machine-id";var cJ=()=>{};class M4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,f){if(!this.isEnabled())return;this.emitLog($,f,!1)}emitRequired($,f){this.emitLog($,f,!0)}recordCounter($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,W);W.add(f,this.flattenProperties(this.buildAttributes(J)))}recordHistogram($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,W);W.record(f,this.flattenProperties(this.buildAttributes(J)))}recordGauge($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.buildAttributes(J),j=JSON.stringify(W),X=this.gaugeValues.get($);if(f===null){if(X){if(X.delete(j),X.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let H=X;if(!H)H=new Map,this.gaugeValues.set($,H);if(!this.gauges.has($)){let Y=this.meter.createObservableGauge($,Q?{description:Q}:void 0);Y.addCallback((V)=>{for(let A of this.snapshotGaugeSeries($))V.observe(A.value,this.flattenProperties(A.attributes))}),this.gauges.set($,Y)}H.set(j,{value:f,attributes:W})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,f,J){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(f,J));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,f=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...f?{_required:!0}:{}}}snapshotGaugeSeries($){let f=this.gaugeValues.get($);if(!f)return[];return Array.from(f.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties($,f="",J=new WeakSet,Q=0){if(!$)return{};let Z={},W=100,j=10;for(let[X,H]of Object.entries($)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let Y=f?`${f}.${X}`:X;if(H===null||H===void 0){Z[Y]=String(H);continue}if(Array.isArray(H)){let V=H.length>W?H.slice(0,W):H;try{Z[Y]=JSON.stringify(V)}catch{Z[Y]="[UnserializableArray]"}if(H.length>W)Z[`${Y}_truncated`]=!0,Z[`${Y}_original_length`]=H.length;continue}if(typeof H==="object"){if(H instanceof Date){Z[Y]=H.toISOString();continue}if(H instanceof Error){Z[Y]=H.message;continue}if(J.has(H)){Z[Y]="[Circular]";continue}if(Q>=j){Z[Y]="[MaxDepthExceeded]";continue}J.add(H),Object.assign(Z,this.flattenProperties(H,Y,J,Q+1));continue}if(h_(H)){Z[Y]=H;continue}try{Z[Y]=JSON.stringify(H)}catch{Z[Y]=String(H)}}return Z}}function h_($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class q4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,f){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:f})}emitRequired($,f){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:f})}recordCounter($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordHistogram($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordGauge($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:f,attributes:J,description:Q,required:Z===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class P2{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new q4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let f=this.buildAttributes($.properties);for(let J of this.adapters)J.emit($.event,f)}captureRequired($,f){let J=this.buildAttributes(f);for(let Q of this.adapters)Q.emitRequired($,J)}recordCounter($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordCounter($,f,W,Q,Z)}recordHistogram($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordHistogram($,f,W,Q,Z)}recordGauge($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordGauge($,f,W,Q,Z)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var TQ=()=>{};import{metrics as b_,trace as k_}from"@opentelemetry/api";import{logs as I_}from"@opentelemetry/api-logs";import{OTLPLogExporter as x_}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as g_}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as m_}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as v_}from"@opentelemetry/resources";import{BatchLogRecordProcessor as c_,ConsoleLogRecordExporter as u_,LoggerProvider as d_}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as l_,MeterProvider as p_,PeriodicExportingMetricReader as fV}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as r_,ConsoleSpanExporter as i_,SimpleSpanProcessor as n_}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as a_}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as t_,ATTR_SERVICE_VERSION as s_}from"@opentelemetry/semantic-conventions";class JV{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,f){this.resolveProperties(f)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class F2{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let f=v_({[t_]:$.serviceName??"cline",...$.serviceVersion?{[s_]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(f),this.loggerProvider=this.createLoggerProvider(f),this.tracerProvider=this.createTracerProvider(f),this.meterProvider)b_.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)I_.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",f){return k_.getTracer($,f??this.options.serviceVersion)}createAdapter($){return new M4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let f=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new P2({...$,adapters:[f],distinctId:e1($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let f=NQ(this.options.metricsExporter);if(f.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(J*0.8)),Z=f.map((W)=>$y(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:Q})).filter((W)=>W!==null);if(Z.length===0)return null;return new p_({resource:$,readers:Z})}createTracerProvider($){let f=NQ(this.options.tracesExporter);if(f.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,Z=[];for(let W of f){let j=e_(W,{endpoint:J,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)Z.push(j)}if(Z.length===0)return null;return new a_({resource:$,spanProcessors:Z})}createLoggerProvider($){let f=NQ(this.options.logsExporter);if(f.length===0)return null;let J=f.map((Q)=>{let Z=o_(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!Z)return null;return new c_(Z,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(J.length===0)return null;return new d_({resource:$,processors:J})}}function w4($){let f=new F2($),J=f.createTelemetryService($);return J.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:f,telemetry:J}}function b$($){if(O6())return{telemetry:new JV($)};if($.enabled!==!0)return{telemetry:new P2({...$,distinctId:e1($.distinctId)})};return w4($)}function D2($){let{telemetry:f,provider:J}=b$($);return{telemetry:f,provider:J,flush:async()=>{let W=J;if(W&&typeof W.forceFlush==="function")try{await W.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([f.dispose(),J?.dispose()])}}}function NQ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function o_($,f){if($==="console")return new u_;if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/logs");return new x_({url:J,headers:f.headers})}function e_($,f){if($==="console")return new n_(new i_);if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/traces");return new r_(new m_({url:J,headers:f.headers}))}function $y($,f){if($==="console")return new fV({exporter:new l_,exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout});if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/metrics");return new fV({exporter:new g_({url:J,headers:f.headers}),exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout})}function MQ($,f){let J=new URL($),Q=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=Q.endsWith(f)?Q:`${Q}${f}`,J.toString()}var aJ=F1(()=>{T$();cJ();TQ()});var fA={};q(fA,{createOpenTelemetryTelemetryService:()=>w4,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,OpenTelemetryProvider:()=>F2,OpenTelemetryAdapter:()=>M4});var rQ=F1(()=>{aJ()});import{initVcr as Xq}from"@cline/shared";import{normalizeProviderId as Zq}from"@cline/llms";var nA={};q(nA,{LocalRuntimeHost:()=>A$});import{readdirSync as aM}from"node:fs";import{homedir as tM}from"node:os";import{isAbsolute as sM,join as mZ,resolve as vZ}from"node:path";import{captureSdkError as Hf,createSessionId as oM,isLikelyAuthError as eM,normalizeUserInput as $q}from"@cline/shared";import{setHomeDirIfUnset as fq}from"@cline/shared/storage";var D3={};q(D3,{createContextCompactionPrepareTurn:()=>C2});import{createHandlerAsync as BB}from"@cline/llms";import{estimateTokens as M5}from"@cline/shared";var nZ=200000,q5=0.9,aZ=16384,w5=20000,rZ=1024,iZ=2000,tZ=2000,sZ=8;function x$($,f){if($.length<=f)return $;return`${$.slice(0,f)}
6
+ ...[truncated ${$.length-f} chars]`}function HB($){let f=S5($);if(typeof f==="string")return f;return f.map((J)=>{switch(J.type){case"text":return J.text;case"file":return`<file path="${J.path}">
7
+ ${J.content}
8
+ </file>`;case"image":return`[image:${J.mediaType}]`;default:return""}}).join(`
9
+ `)}function S5($){if(typeof $==="string")return x$($,iZ);return $.map((f)=>{switch(f.type){case"text":return{...f,text:x$(f.text,iZ)};case"file":return{...f,content:x$(f.content,tZ)};case"image":return f;default:return f}})}function YB($){return Object.entries($).map(([f,J])=>`${f}=${JSON.stringify(J)}`).join(", ")}function oZ($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let f=[];for(let J of $.content)switch(J.type){case"text":f.push(`[${$.role==="user"?"User":"Bot"}]: ${J.text}`);break;case"thinking":f.push(`[Bot thinking]: ${x$(J.thinking,2000)}`);break;case"redacted_thinking":f.push("[Bot thinking]: [redacted]");break;case"tool_use":f.push(`[Bot tool calls]: ${J.name}(${YB(J.input)})`);break;case"tool_result":f.push(`[Tool result]: ${HB(J.content)}`);break;case"file":f.push(`[${$.role==="user"?"User":"Bot"} file ${J.path}]: ${x$(J.content,tZ)}`);break;case"image":f.push(`[${$.role==="user"?"User":"Bot"} image]: ${J.mediaType}`);break}return f.join(`
10
+ `)}function eZ($){return $.map(oZ).join(`
11
+
12
+ `).trim()}function $3(){let $=new WeakMap;return(f)=>{let J=f,Q=$.get(J);if(typeof Q==="number")return Q;let Z;try{Z=JSON.stringify(f)}catch{Z=oZ(f)}let W=M5(Z.length);return $.set(J,W),W}}function q2($){return $.metadata?.kind==="compaction_summary"}function C5($){if(!q2($))return;let f=$.metadata;if(!f)return;let J=f.details;return{kind:"compaction_summary",summary:String(f.summary??""),details:{readFiles:Array.isArray(J?.readFiles)?J.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(J?.modifiedFiles)?J.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(f.tokensBefore??0),generatedAt:Number(f.generatedAt??0)}}function VB($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((f)=>f.type==="tool_result")}function w2($){return $.role==="user"&&!VB($)&&!q2($)}function f3($){for(let f=0;f<$.length;f+=1)if(w2($[f]))return f;return-1}function u4($){for(let f=$.length-1;f>=0;f-=1)if(w2($[f]))return f;return 0}function J3($){for(let f=$.length-1;f>=0;f-=1)if($[f].role==="assistant")return f;return-1}function Q3($){for(let f=$.length-1;f>=0;f-=1)if(q2($[f]))return f;return-1}function Z3($,f,J){let Q=u4($);if(Q<=0)return 0;let Z=0,W=$.length;for(let X=$.length-1;X>=0;X-=1)if(Z+=J($[X]),W=X,Z>=f)break;if(W<=0)return 0;let j=Math.min(W,Q);while(j>0&&!w2($[j]))j-=1;return j}function M2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((f)=>M2(f));if($&&typeof $==="object"){let f=$,J=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])J.push(...M2(f[Q]));if(Array.isArray(f.files)){for(let Q of f.files)if(Q&&typeof Q==="object")J.push(...M2(Q.path))}if(Array.isArray(f.file_paths))J.push(...M2(f.file_paths));return J}return[]}function N2($,f){let J=new Set($);for(let Q of f){let Z=Q.trim();if(!Z)continue;J.add(Z)}return[...J].sort((Q,Z)=>Q.localeCompare(Z))}function W3($){let f=[],J=[];for(let Q of $){let Z=C5(Q);if(Z){f=N2(f,Z.details.readFiles),J=N2(J,Z.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let W of Q.content){if(W.type==="file"){f=N2(f,[W.path]);continue}if(W.type!=="tool_use")continue;let j=M2(W.input);if(W.name==="read_files"){f=N2(f,j);continue}if(W.name==="editor"||W.name==="apply_patch")J=N2(J,j)}}return{readFiles:f,modifiedFiles:J}}function AB($){let f=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
13
+ `):"- none",J=$.modifiedFiles.length>0?$.modifiedFiles.map((Q)=>`- ${Q}`).join(`
12
14
  `):"- none";return`## Files
13
15
  Read:
14
- ${$}
16
+ ${f}
15
17
  Modified:
16
- ${J}`}function g3(f,$){if(/^## Files$/im.test(f))return f.trim();return`${f.trim()}
18
+ ${J}`}function j3($,f){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
17
19
 
18
- ${SB($)}`.trim()}function v3(f){let $=[`Summarize this session for continuation. Be concise and factual.
20
+ ${AB(f)}`.trim()}function X3($){let f=[`Summarize this session for continuation. Be concise and factual.
19
21
 
20
22
  ## Goal
21
23
  One sentence: what is being built or fixed.
@@ -32,16 +34,16 @@ Key technical choices or notable findings (omit if none).
32
34
  Immediate next steps.
33
35
 
34
36
  ## Files
35
- Read: ${f.fileOps.readFiles.join(", ")||"none"}
36
- Edited: ${f.fileOps.modifiedFiles.join(", ")||"none"}`];if(f.previousSummary?.trim())$.push(`Previous summary:
37
- ${f.previousSummary.trim()}`);return $.push(`Conversation:
38
- ${f.conversationText||"(empty)"}`),$.join(`
37
+ Read: ${$.fileOps.readFiles.join(", ")||"none"}
38
+ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.trim())f.push(`Previous summary:
39
+ ${$.previousSummary.trim()}`);return f.push(`Conversation:
40
+ ${$.conversationText||"(empty)"}`),f.join(`
39
41
 
40
- `)}function u3(f){let $=f.summarizer;if(!$)return{...f.activeProviderConfig,maxOutputTokens:1024,thinking:!1};let J=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0;return{...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:$.knownModels??J?.knownModels,maxOutputTokens:$.maxOutputTokens??1024,thinking:!1}}function c3(f){return{role:"user",content:`Context summary:
42
+ `)}function H3($){let f=$.summarizer,J=(Z)=>{if(Z.providerId==="openai-codex"){let{maxOutputTokens:W,...j}=Z;return{...j,thinking:!1}}return{...Z,maxOutputTokens:Z.maxOutputTokens??rZ,thinking:!1}};if(!f)return J($.activeProviderConfig);let Q=f.providerConfig?.providerId===f.providerId?f.providerConfig:void 0;return J({...Q??{},providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey??Q?.apiKey,baseUrl:f.baseUrl??Q?.baseUrl,headers:f.headers??Q?.headers,knownModels:f.knownModels??Q?.knownModels,maxOutputTokens:f.maxOutputTokens??rZ})}function Y3($){return{role:"user",content:`Context summary:
41
43
 
42
- ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fileOps,tokensBefore:f.tokensBefore,generatedAt:Date.now()}}}async function IB(f){let $=kB(f.providerConfig),J="";for await(let W of $.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:f.request}])){if(W.type==="text"){J+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return f.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:f.providerConfig.modelId,providerId:f.providerConfig.providerId}),J.trim()}async function d3(f){let $=f.context.messages;if($.length<2)return;let J=m3($,f.preserveRecentTokens,f.estimateMessageTokens);if(J<=0||J>=$.length)return;let W=$.slice(0,J),H=I3(W),Q=H>=0?P5(W[H])?.summary:void 0,Z=H>=0?W.slice(H+1):W;if(Z.length===0)return;let j=x3(W),X=b3(Z),A=await IB({providerConfig:u3({activeProviderConfig:f.providerConfig,summarizer:f.summarizer}),request:v3({previousSummary:Q,conversationText:X,fileOps:j}),logger:f.logger});if(!A.trim())return;let P=g3(A,j),B=$.reduce((R,U)=>R+f.estimateMessageTokens(U),0),Y=[c3({summary:P,fileOps:j,tokensBefore:B}),...$.slice(J)],V=Y.reduce((R,U)=>R+f.estimateMessageTokens(U),0);return f.logger?.debug("Performed agentic compaction",{messagesBefore:$.length,messagesAfter:Y.length,messagesSummarized:J,messagesPreserved:$.length-J,tokensBefore:B,tokensAfter:V,contextWindowTokens:f.context.contextWindowTokens}),{messages:Y}}function p3(f){if(D2(f))return;if(typeof f.content==="string"){let J=f.content.trim();return J?{...f,content:J}:void 0}let $=f.content.filter((J)=>J.type!=="text"||J.text.trim());if($.length===0)return;return{...f,content:$.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J)}}function _2(f,$){return f.reduce((J,W)=>J+$(W),0)}function r3(f,$){let J=Math.max(1,$),W=Math.max(16,J*4);if(typeof f.content==="string"){let Z=R$(f.content,W).trim();return{...f,content:Z||"..."}}let H=W,Q=f.content.map((Z)=>{if(Z.type!=="text"||H<=0)return Z;let j=R$(Z.text,H).trim();return H-=j.length,{...Z,text:j||"..."}});return{...f,content:Q}}function mB(f,$){let J=S3(f),W=B5(f),H=k3(f),Q=[];for(let Z=0;Z<f.length;Z+=1){let j=p3(f[Z]);if(!j)continue;Q.push({index:Z,message:j,estimatedTokens:$(j),isFirstUser:Z===J,isLastUser:Z===W,isLastAssistant:Z===H})}return Q}function l3(f,$,J,W){let H=f[$];H.message=J,H.estimatedTokens=W(J)}function E4(f,$,J,W){let H=_2(f.map((Q)=>Q.message),W);for(let Q=0;Q<f.length&&H>J;){if(!$(f[Q])){Q+=1;continue}H-=f[Q].estimatedTokens,f.splice(Q,1)}}function xB(f,$,J){let W=_2(f.map((Q)=>Q.message),J);if(W<=$)return;for(let Q=f.length-1;Q>=0&&W>$;Q-=1){let Z=f[Q];if(Z.isFirstUser)continue;let j=Math.max(q3,Z.estimatedTokens-(W-$));if(j>=Z.estimatedTokens)continue;l3(f,Q,r3(Z.message,j),J),W=_2(f.map((X)=>X.message),J)}if(W<=$)return;let H=f.findIndex((Q)=>Q.isFirstUser);if(H>=0){let Q=Math.max(1,f[H].estimatedTokens-(W-$));l3(f,H,r3(f[H].message,Q),J)}}function gB(f,$){return JSON.stringify(f)!==JSON.stringify($)}function i3(f){let $=Math.max(1,Math.min(f.context.triggerTokens,f.context.contextWindowTokens)),J=mB(f.context.messages,f.estimateMessageTokens);if(J.length===0)return;E4(J,(Z)=>Z.message.role==="assistant"&&!Z.isLastAssistant,$,f.estimateMessageTokens),E4(J,(Z)=>Z.message.role==="user"&&!Z.isFirstUser&&!Z.isLastUser,$,f.estimateMessageTokens),E4(J,(Z)=>Z.message.role==="assistant"&&Z.isLastAssistant,$,f.estimateMessageTokens),E4(J,(Z)=>Z.message.role==="user"&&Z.isLastUser&&!Z.isFirstUser,$,f.estimateMessageTokens),xB(J,$,f.estimateMessageTokens);let W=J.map((Z)=>Z.message);if(!gB(f.context.messages,W))return;let H=_2(f.context.messages.map((Z)=>p3(Z)??Z),f.estimateMessageTokens),Q=_2(W,f.estimateMessageTokens);return f.logger?.debug("Performed basic compaction",{messagesBefore:f.context.messages.length,messagesAfter:W.length,messagesRemoved:f.context.messages.length-W.length,tokensBefore:H,tokensAfter:Q,targetTokens:$,contextWindowTokens:f.context.contextWindowTokens}),{messages:W}}var vB={basic:({context:f,estimateMessageTokens:$,logger:J})=>i3({context:f,estimateMessageTokens:$,logger:J}),agentic:({context:f,providerConfig:$,compaction:J,mode:W,estimateMessageTokens:H,logger:Q})=>d3({context:f,providerConfig:$,summarizer:J?.summarizer,preserveRecentTokens:W==="manual"?Math.min(J?.preserveRecentTokens??A5,f.triggerTokens):J?.preserveRecentTokens??A5,estimateMessageTokens:H,logger:Q})};function uB(f){if(typeof f.config.reserveTokens==="number"){let W=Math.max(0,f.config.reserveTokens),H=Math.max(0,f.contextWindowTokens-W);return{shouldCompact:f.inputTokens>H,triggerTokens:H,thresholdRatio:f.contextWindowTokens>0?H/f.contextWindowTokens:0}}let $=f.config.thresholdRatio??N3,J=f.contextWindowTokens*$;return{shouldCompact:f.inputTokens>J,triggerTokens:J,thresholdRatio:$}}function cB(f){let $=typeof f.manualTargetRatio==="number"&&Number.isFinite(f.manualTargetRatio)?f.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,$)),W=Math.max(1,Math.floor(Math.min(f.autoTriggerTokens,f.inputTokens*J)));return{triggerTokens:W,thresholdRatio:f.contextWindowTokens>0?W/f.contextWindowTokens:0}}function M2(f,$={}){let J=f.compaction;if(J?.enabled!==!0)return;let W=f.providerConfig??{providerId:f.providerId,modelId:f.modelId},H=C3(),Q=J?.strategy??"basic",Z=vB[Q],j=$.mode??"auto";return async(X)=>{let A=X.apiMessages.reduce((F,y)=>F+H(y),0),P=J?.contextWindowTokens??X.model.info?.contextWindow??z3;if(typeof P!=="number"||!Number.isFinite(P)||P<=0)return;let B=uB({inputTokens:A,contextWindowTokens:P,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if(j==="auto"&&!B.shouldCompact)return;let Y=j==="manual"?cB({inputTokens:A,contextWindowTokens:P,autoTriggerTokens:B.triggerTokens,manualTargetRatio:$.manualTargetRatio}):B,V={agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,iteration:X.iteration,messages:X.messages,model:X.model,contextWindowTokens:P,triggerTokens:Y.triggerTokens,thresholdRatio:Y.thresholdRatio,utilizationRatio:P>0?A/P:0},R=j==="manual"?"manual_compaction":"auto_compaction";X.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:R,reason:R,iteration:X.iteration,triggerTokens:Y.triggerTokens,contextWindowTokens:P});let U=X.messages.length,K=J?.compact?await J.compact(V):await Z({context:V,providerConfig:{...W,abortSignal:X.abortSignal},compaction:J,mode:j,estimateMessageTokens:H,logger:f.logger});if(K?.messages){let F=K.messages.reduce((y,D)=>y+H(D),0);f.logger?.log("Context compaction completed",{severity:"info",strategy:Q,contextWindowTokens:P,inputTokens:A,afterTokens:F,tokensSaved:A-F,utilizationBefore:`${(A/P*100).toFixed(1)}%`,utilizationAfter:`${(F/P*100).toFixed(1)}%`,thresholdTrigger:`${(Y.thresholdRatio*100).toFixed(1)}%`,messagesBefore:U,messagesAfter:K.messages.length,messagesRemoved:U-K.messages.length})}return K}}var j7={};N(j7,{zodToJsonSchema:()=>$R,validateWithZod:()=>fR,resolveToolRoutingConfig:()=>A1,resolveToolPresetName:()=>K0,resolveCoreSelectedToolIds:()=>r4,getCoreHeadlessToolNames:()=>u2,getCoreDefaultEnabledToolIds:()=>d4,getCoreBuiltinToolCatalog:()=>M$,getCoreAcpToolNames:()=>l4,createWindowsShellTool:()=>T5,createWebFetchTool:()=>D5,createWebFetchExecutor:()=>x2,createToolPoliciesWithPreset:()=>x4,createSubmitAndExitTool:()=>h5,createSkillsTool:()=>K$,createSearchTool:()=>U5,createSearchExecutor:()=>m2,createReadFilesTool:()=>y5,createFileReadExecutor:()=>I2,createEditorTool:()=>M5,createEditorExecutor:()=>S2,createDefaultToolsWithPreset:()=>g4,createDefaultTools:()=>v0,createDefaultExecutors:()=>j1,createBuiltinTools:()=>L$,createBashTool:()=>G5,createBashExecutor:()=>E2,createAskQuestionTool:()=>L5,createApplyPatchTool:()=>_5,createApplyPatchExecutor:()=>C2,WebFetchRequestSchema:()=>F5,ToolPresets:()=>Ef,TEAM_TOOL_NAMES:()=>V1,SubmitInputSchema:()=>b2,SkillsInputSchema:()=>q2,SearchCodebaseInputSchema:()=>h2,RunCommandsInputSchema:()=>H1,ReadFilesInputSchema:()=>L2,ReadFileRequestSchema:()=>I0,FetchWebContentInputSchema:()=>O2,EditFileInputSchema:()=>z2,DefaultToolNames:()=>Jf,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>X1,AskQuestionInputSchema:()=>w2,ApplyPatchInputSchema:()=>N2,ALL_DEFAULT_TOOL_NAMES:()=>k0});import{validateWithZod as fR,zodToJsonSchema as $R}from"@cline/shared";var Jf={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"},k0=[Jf.READ_FILES,Jf.SEARCH_CODEBASE,Jf.RUN_COMMANDS,Jf.FETCH_WEB_CONTENT,Jf.APPLY_PATCH,Jf.EDITOR,Jf.SKILLS,Jf.ASK,Jf.SUBMIT_AND_EXIT];import{createTool as R0,validateWithZod as g0,zodToJsonSchema as ef}from"@cline/shared";import{validateWithZod as JQ}from"@cline/shared";import{z as G}from"zod";var m0=6000,Y5=G.string().describe("The absolute file path of a text file to read content from"),a3=G.object({start_line:G.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:G.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit for the end of the file")}).describe("Optional inclusive one-based file line range"),I0=G.object({path:Y5,start_line:a3.shape.start_line,end_line:a3.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),L2=G.object({files:G.array(I0).describe("Array of file read requests. Omit start_line/end_line or set them to null to return the full file content boundaries; provide integers to return only that inclusive one-based line range. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),t3=G.union([L2,I0,G.array(I0),G.array(G.string()),G.string(),G.object({files:I0}),G.object({file_paths:G.array(Y5)}),G.object({file_paths:G.string()}),G.object({paths:G.array(G.union([Y5,I0]))}),G.object({paths:I0}),G.object({paths:G.string()})]),h2=G.object({queries:G.array(G.string()).describe("Array of regex search queries to execute")}),s3=G.union([h2,G.array(G.string()),G.string(),G.object({queries:G.string()})]),F$=G.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${m0*2} characters) to avoid timeouts.`),H1=G.object({commands:G.array(F$).describe("Array of shell commands to execute")}),o3=G.union([H1,G.object({commands:F$}),G.object({command:F$}),G.object({cmd:F$}),G.array(G.string()),G.string()]),V5=G.object({command:G.string().min(1).describe("The executable to run directly without shell parsing."),args:G.array(G.string()).optional().describe("Optional argv list passed directly to the executable.")}),e3=G.union([F$,V5]),R5=G.object({commands:G.array(e3).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),fQ=G.union([H1,R5,G.object({commands:e3}),G.array(V5),V5,G.object({command:F$}),G.object({cmd:F$}),G.array(G.string()),G.string()]),F5=G.object({url:G.string().describe("The URL to fetch"),prompt:G.string().min(2).describe("Analysis prompt for the fetched content")}),O2=G.object({requests:G.array(F5).describe("Array of the URLs for the web fetch requests")}),z2=G.object({path:G.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:G.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 ${m0} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:G.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 ${m0} 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:G.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."),N2=G.object({input:G.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."),$Q=G.union([N2,G.string()]),q2=G.object({skill:G.string().min(1).describe("Name of the skill to execute."),args:G.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),w2=G.object({question:G.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:G.array(G.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),b2=G.object({summary:G.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:G.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.
44
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function KB($){let f=await BB($.providerConfig),J="";for await(let Q of f.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){J+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),J.trim()}function GB($){try{return JSON.stringify($).length}catch{return String($).length}}async function V3($){let f=$.context.messages;if(f.length<2)return;let J=Z3(f,$.preserveRecentTokens,$.estimateMessageTokens);if(J<=0||J>=f.length)return;let Q=f.slice(0,J),Z=Q3(Q),W=Z>=0?C5(Q[Z])?.summary:void 0,j=Z>=0?Q.slice(Z+1):Q;if(j.length===0)return;let X=W3(Q),H=eZ(j),Y=X3({previousSummary:W,conversationText:H,fileOps:X});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:j.length,preservedMessages:f.length-J,previousSummaryChars:W?.length??0,conversationTextChars:H.length,summaryRequestChars:Y.length,summaryRequestEstimatedTokens:M5(Y.length),newMessagesJsonChars:GB(j),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let V=await KB({providerConfig:H3({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:Y,logger:$.logger});if(!V.trim())return;let A=j3(V,X),B=f.reduce((R,F)=>R+$.estimateMessageTokens(F),0),K=[Y3({summary:A,fileOps:X,tokensBefore:B}),...f.slice(J)],G=K.reduce((R,F)=>R+$.estimateMessageTokens(F),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:f.length,messagesAfter:K.length,messagesSummarized:J,messagesPreserved:f.length-J,tokensBefore:B,tokensAfter:G,maxInputTokens:$.context.maxInputTokens}),{messages:K}}function K3($){if(q2($))return;if(typeof $.content==="string"){let J=$.content.trim();return J?{...$,content:J}:void 0}let f=$.content.filter((J)=>J.type!=="text"||J.text.trim());if(f.length===0)return;return{...$,content:f.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J.type==="tool_result"?{...J,content:S5(J.content)}:J)}}function S2($,f){return $.reduce((J,Q)=>J+f(Q),0)}function A3($,f){let J=Math.max(1,f),Q=Math.max(16,J*4);if(typeof $.content==="string"){let j=x$($.content,Q).trim();return{...$,content:j||"..."}}let Z=Q,W=$.content.map((j)=>{if(j.type!=="text"||Z<=0)return j;let X=x$(j.text,Z).trim();return Z-=X.length,{...j,text:X||"..."}});return{...$,content:W}}function PB($,f){let J=f3($),Q=u4($),Z=J3($),W=[];for(let j=0;j<$.length;j+=1){let X=K3($[j]);if(!X)continue;W.push({index:j,message:X,estimatedTokens:f(X),isFirstUser:j===J,isLastUser:j===Q,isLastAssistant:j===Z})}return W}function B3($,f,J,Q){let Z=$[f];Z.message=J,Z.estimatedTokens=Q(J)}function FB($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_use")f.add(J.id);return f}function DB($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_result")f.add(J.tool_use_id);return f}function G3($){return new Set([...FB($.message),...DB($.message)])}function RB($){let f=new Map;for(let J=0;J<$.length;J+=1)for(let Q of G3($[J])){let Z=f.get(Q);if(Z)Z.add(J);else f.set(Q,new Set([J]))}return f}function UB($,f){let J=RB($),Q=new Set,Z=[f];while(Z.length>0){let W=Z.shift();if(W===void 0||Q.has(W))continue;Q.add(W);for(let j of G3($[W]))for(let X of J.get(j)??[])if(!Q.has(X))Z.push(X)}return Q}function d4($,f,J,Q){let Z=S2($.map((W)=>W.message),Q);for(let W=0;W<$.length&&Z>J;){if(!f($[W])){W+=1;continue}let j=UB($,W);Z-=Array.from(j).reduce((X,H)=>X+$[H].estimatedTokens,0);for(let X of Array.from(j).sort((H,Y)=>Y-H))$.splice(X,1)}}function LB($,f,J){let Q=S2($.map((W)=>W.message),J);if(Q<=f)return;for(let W=$.length-1;W>=0&&Q>f;W-=1){let j=$[W];if(j.isFirstUser)continue;let X=Math.max(sZ,j.estimatedTokens-(Q-f));if(X>=j.estimatedTokens)continue;B3($,W,A3(j.message,X),J),Q=S2($.map((H)=>H.message),J)}if(Q<=f)return;let Z=$.findIndex((W)=>W.isFirstUser);if(Z>=0){let W=Math.max(1,$[Z].estimatedTokens-(Q-f));B3($,Z,A3($[Z].message,W),J)}}function OB($,f){return JSON.stringify($)!==JSON.stringify(f)}function zB($){let f=u4($);if(f<0||f===0&&!w2($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,f),protectedTail:$.slice(f)}}function P3($){let f=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:J,protectedTail:Q}=zB($.context.messages);if(J.length===0)return;let Z=PB(J,$.estimateMessageTokens);if(Z.length===0)return;d4(Z,(H)=>H.message.role==="assistant"&&!H.isLastAssistant,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="user"&&!H.isFirstUser&&!H.isLastUser,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="assistant"&&H.isLastAssistant,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="user"&&H.isLastUser&&!H.isFirstUser,f,$.estimateMessageTokens),LB(Z,f,$.estimateMessageTokens);let W=[...Z.map((H)=>H.message),...Q];if(!OB($.context.messages,W))return;let j=S2([...J.map((H)=>K3(H)??H),...Q],$.estimateMessageTokens),X=S2(W,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:W.length,messagesRemoved:$.context.messages.length-W.length,tokensBefore:j,tokensAfter:X,targetTokens:f,maxInputTokens:$.context.maxInputTokens}),{messages:W}}function F3($){try{return JSON.stringify($).length}catch{return String($).length}}function _B($){let f=0,J=0,Q=0;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type!=="tool_result")continue;let j=F3(W.content);f+=1,J+=j,Q=Math.max(Q,j)}}return{toolResultCount:f,toolResultSerializedChars:J,maxToolResultSerializedChars:Q}}var yB={basic:({context:$,estimateMessageTokens:f,logger:J})=>P3({context:$,estimateMessageTokens:f,logger:J}),agentic:({context:$,providerConfig:f,compaction:J,mode:Q,estimateMessageTokens:Z,logger:W})=>V3({context:$,providerConfig:f,summarizer:J?.summarizer,preserveRecentTokens:Q==="manual"?Math.min(J?.preserveRecentTokens??w5,$.triggerTokens):J?.preserveRecentTokens??w5,estimateMessageTokens:Z,logger:W})};function TB($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),Z=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Q=Math.max(0,Math.min($.maxInputTokens-aZ,$.maxInputTokens*q5));return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}let f=$.config.thresholdRatio??q5,J=$.maxInputTokens*f;return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:f}}function NB($){let f=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,f)),Q=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*J)));return{triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}function C2($,f={}){let J=$.compaction;if(J?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},Z=$3(),W=J?.strategy??"basic",j=yB[W],X=f.mode??"auto";return async(H)=>{let Y=H.apiMessages.reduce((P,D)=>P+Z(D),0),V=J?.maxInputTokens??H.model.info?.maxInputTokens??H.model.info?.contextWindow??nZ;if(typeof V!=="number"||!Number.isFinite(V)||V<=0)return;let A=TB({inputTokens:Y,maxInputTokens:V,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:X,strategy:W,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:Y,maxInputTokens:V,triggerTokens:A.triggerTokens,thresholdRatio:A.thresholdRatio,shouldCompact:A.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:F3(H.apiMessages),..._B(H.apiMessages)}),X==="auto"&&!A.shouldCompact)return;let B=X==="manual"?NB({inputTokens:Y,maxInputTokens:V,autoTriggerTokens:A.triggerTokens,manualTargetRatio:f.manualTargetRatio}):A,K={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:V,triggerTokens:B.triggerTokens,thresholdRatio:B.thresholdRatio,utilizationRatio:V>0?Y/V:0},G=X==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(X==="manual"?"compacting":"auto-compacting",{kind:G,reason:G,iteration:H.iteration,triggerTokens:B.triggerTokens,maxInputTokens:V});let R=H.messages.length,F=J?.compact?await J.compact(K):await j({context:K,providerConfig:{...Q,abortSignal:H.abortSignal},compaction:J,mode:X,estimateMessageTokens:Z,logger:$.logger});if(F?.messages){let P=F.messages.reduce((D,O)=>D+Z(O),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:W,maxInputTokens:V,inputTokens:Y,afterTokens:P,tokensSaved:Y-P,utilizationBefore:`${(Y/V*100).toFixed(1)}%`,utilizationAfter:`${(P/V*100).toFixed(1)}%`,thresholdTrigger:`${(B.thresholdRatio*100).toFixed(1)}%`,messagesBefore:R,messagesAfter:F.messages.length,messagesRemoved:R-F.messages.length})}return F}}var SW={};q(SW,{zodToJsonSchema:()=>vG,validateWithZod:()=>mG,resolveToolRoutingConfig:()=>Ff,resolveToolPresetName:()=>R$,resolveCoreSelectedToolIds:()=>$6,getCoreHeadlessToolNames:()=>a2,getCoreDefaultEnabledToolIds:()=>e4,getCoreBuiltinToolCatalog:()=>T1,getCoreAcpToolNames:()=>f6,createWindowsShellTool:()=>v5,createWebFetchTool:()=>c5,createWebFetchExecutor:()=>r2,createToolPoliciesWithPreset:()=>n4,createSubmitAndExitTool:()=>p5,createSkillsTool:()=>R1,createSearchTool:()=>g5,createSearchExecutor:()=>p2,createReadFilesTool:()=>x5,createFileReadExecutor:()=>l2,createEditorTool:()=>d5,createEditorExecutor:()=>u2,createDefaultToolsWithPreset:()=>a4,createDefaultTools:()=>d$,createDefaultExecutors:()=>Gf,createBuiltinTools:()=>N1,createBashTool:()=>m5,createBashExecutor:()=>c2,createAskQuestionTool:()=>l5,createApplyPatchTool:()=>u5,createApplyPatchExecutor:()=>v2,WebFetchRequestSchema:()=>k5,ToolPresets:()=>b0,TEAM_TOOL_NAMES:()=>Lf,SubmitInputSchema:()=>m2,SkillsInputSchema:()=>x2,SearchCodebaseInputSchema:()=>h2,RunCommandsInputSchema:()=>Af,ReadFilesInputSchema:()=>E2,ReadFileRequestSchema:()=>m$,FetchWebContentInputSchema:()=>b2,EditFileInputSchema:()=>k2,DefaultToolNames:()=>J0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>Pf,AskQuestionInputSchema:()=>g2,ApplyPatchInputSchema:()=>I2,ALL_DEFAULT_TOOL_NAMES:()=>g$});import{validateWithZod as mG,zodToJsonSchema as vG}from"@cline/shared";var J0={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"},g$=[J0.READ_FILES,J0.SEARCH_CODEBASE,J0.RUN_COMMANDS,J0.FETCH_WEB_CONTENT,J0.APPLY_PATCH,J0.EDITOR,J0.SKILLS,J0.ASK,J0.SUBMIT_AND_EXIT];import{createTool as F$,validateWithZod as u$,zodToJsonSchema as f$}from"@cline/shared";import{validateWithZod as T3}from"@cline/shared";import{z as U}from"zod";var v$=6000,E5=U.string().describe("The absolute file path of a text file to read content from"),R3=U.object({start_line:U.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:U.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit for the end of the file")}).describe("Optional inclusive one-based file line range"),m$=U.object({path:E5,start_line:R3.shape.start_line,end_line:R3.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),E2=U.object({files:U.array(m$).describe("Array of file read requests. Omit start_line/end_line or set them to null to return the full file content boundaries; provide integers to return only that inclusive one-based line range. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),U3=U.union([E2,m$,U.array(m$),U.array(U.string()),U.string(),U.object({files:m$}),U.object({file_paths:U.array(E5)}),U.object({file_paths:U.string()}),U.object({paths:U.array(U.union([E5,m$]))}),U.object({paths:m$}),U.object({paths:U.string()})]),h2=U.object({queries:U.array(U.string()).describe("Array of regex search queries to execute")}),L3=U.union([h2,U.array(U.string()),U.string(),U.object({queries:U.string()})]),D1=U.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${v$*2} characters) to avoid timeouts.`),Af=U.object({commands:U.array(D1).describe("Array of shell commands to execute")}),O3=U.union([Af,U.object({commands:D1}),U.object({command:D1}),U.object({cmd:D1}),U.array(U.string()),U.string()]),h5=U.object({command:U.string().min(1).describe("The executable to run directly without shell parsing."),args:U.array(U.string()).optional().describe("Optional argv list passed directly to the executable.")}),z3=U.union([D1,h5]),b5=U.object({commands:U.array(z3).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),_3=U.union([Af,b5,U.object({commands:z3}),U.array(h5),h5,U.object({command:D1}),U.object({cmd:D1}),U.array(U.string()),U.string()]),k5=U.object({url:U.string().describe("The URL to fetch"),prompt:U.string().min(2).describe("Analysis prompt for the fetched content")}),b2=U.object({requests:U.array(k5).describe("Array of the URLs for the web fetch requests")}),k2=U.object({path:U.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:U.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${v$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:U.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${v$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:U.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),I2=U.object({input:U.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),y3=U.union([I2,U.string()]),x2=U.object({skill:U.string().min(1).describe("Name of the skill to execute."),args:U.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),g2=U.object({question:U.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:U.array(U.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),m2=U.object({summary:U.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:U.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
43
45
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
44
- IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function x0(f){if(f instanceof Error)return f.message;return String(f)}function WQ(f){if(typeof f.old_text==="string"&&f.old_text.length>m0)return`Editor input too large: old_text was ${f.old_text.length} characters, exceeding the recommended limit of ${m0}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if(f.new_text.length>m0)return`Editor input too large: new_text was ${f.new_text.length} characters, exceeding the recommended limit of ${m0}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}function of(f,$,J){return Promise.race([f,new Promise((W,H)=>{setTimeout(()=>H(Error(J)),$)})])}function HQ(f){let $=JQ(t3,f);if(typeof $==="string")return[{path:$}];if(Array.isArray($))return $.map((J)=>typeof J==="string"?{path:J}:J);if("files"in $)return Array.isArray($.files)?$.files:[$.files];if("file_paths"in $)return(Array.isArray($.file_paths)?$.file_paths:[$.file_paths]).map((W)=>({path:W}));if("paths"in $)return(Array.isArray($.paths)?$.paths:[$.paths]).map((W)=>typeof W==="string"?{path:W}:W);return[$]}function S4(f){let{path:$,start_line:J,end_line:W}=f;if(J==null&&W==null)return $;return`${$}:${J??1}-${W??"EOF"}`}function QQ(f){let{start_line:$,end_line:J}=f;if($==null||J==null||$<=J)return null;return`start_line must be less than or equal to end_line (received start_line: ${$}, end_line: ${J})`}function ZQ(f){let $=JQ(fQ,f);if(typeof $==="string")return[$];if(Array.isArray($))return $;if("commands"in $)return Array.isArray($.commands)?$.commands:[$.commands];if("command"in $)return"args"in $?[$]:[$.command];if("cmd"in $)return[$.cmd];return[$]}function K5(f){if(typeof f==="string")return f;let $=f.args??[];if($.length===0)return f.command;let J=$.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${f.command} ${J.join(" ")}`}function y5(f,$={}){let J=$.fileReadTimeoutMs??1e4;return R0({name:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Returns file contents or error messages for each path.",inputSchema:ef(L2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(W,H)=>{let Q=HQ(W);return Promise.all(Q.map(async(Z)=>{let j=QQ(Z);if(j)return{query:S4(Z),result:"",error:`Invalid file range: ${j}`,success:!1};try{let X=await of(f(Z,H),J,`File read timed out after ${J}ms`);return{query:S4(Z),result:X,success:!0}}catch(X){let A=x0(X);return{query:S4(Z),result:"",error:`Error reading file: ${A}`,success:!1}}}))}})}function U5(f,$={}){let J=$.searchTimeoutMs??30000,W=$.cwd??process.cwd();return R0({name:"search_codebase",description:"Perform regex pattern searches across the codebase. Supports multiple parallel searches. Use for finding code patterns, function definitions, class names, imports, etc.",inputSchema:ef(h2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(H,Q)=>{let Z=g0(s3,H),j=Array.isArray(Z)?Z:typeof Z==="object"?Array.isArray(Z.queries)?Z.queries:[Z.queries]:[Z];return Promise.all(j.map(async(X)=>{try{let A=await of(f(X,W,Q),J,`Search timed out after ${J}ms`),P=A.length>0&&!A.includes("No results found");return{query:X,result:A,success:P}}catch(A){let P=x0(A);return{query:X,result:"",error:`Search failed: ${P}`,success:!1}}}))}})}function G5(f,$={}){let J=$.bashTimeoutMs??30000,W=$.cwd??process.cwd();return R0({name:"run_commands",description:"Run shell commands from the root of the workspace. Use for listing files, checking git status, running builds, executing tests, etc. Commands should be properly shell-escaped.",inputSchema:ef(H1),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(H,Q)=>{let Z=g0(o3,H),j;if(typeof Z==="string")j=[Z];else if(Array.isArray(Z))j=Z;else if("commands"in Z)j=Array.isArray(Z.commands)?Z.commands:[Z.commands];else if("command"in Z)j=[Z.command];else j=[Z.cmd];return Promise.all(j.map(async(X)=>{try{let A=await of(f(X,W,Q),J,`Command timed out after ${J}ms`);return{query:X,result:A,success:!0}}catch(A){let P=x0(A);return{query:X,result:"",error:`Command failed: ${P}`,success:!1}}}))}})}function T5(f,$={}){let J=$.bashTimeoutMs??30000,W=$.cwd??process.cwd();return R0({name:"run_commands",description:"Run shell commands from the root of the workspacein Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped.",inputSchema:ef(R5),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(H,Q)=>{let Z=ZQ(H);return Promise.all(Z.map(async(j)=>{try{let X=await of(f(j,W,Q),J,`Command timed out after ${J}ms`);return{query:K5(j),result:X,success:!0}}catch(X){let A=x0(X);return{query:K5(j),result:"",error:`Command failed: ${A}`,success:!1}}}))}})}function D5(f,$={}){let J=$.webFetchTimeoutMs??30000;return R0({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract.",inputSchema:ef(O2),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(W,H)=>{let Q=g0(O2,W);return Promise.all(Q.requests.map(async(Z)=>{try{let j=await of(f(Z.url,Z.prompt,H),J,`Web fetch timed out after ${J}ms`);return{query:Z.url,result:j,success:!0}}catch(j){let X=x0(j);return{query:Z.url,result:"",error:`Error fetching web content: ${X}`,success:!1}}}))}})}var dB=`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:
46
+ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function c$($){if($ instanceof Error)return $.message;return String($)}function N3($){if(typeof $.old_text==="string"&&$.old_text.length>v$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>v$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}function $$($,f,J){return Promise.race([$,new Promise((Q,Z)=>{setTimeout(()=>Z(Error(J)),f)})])}function M3($){let f=T3(U3,$);if(typeof f==="string")return[{path:f}];if(Array.isArray(f))return f.map((J)=>typeof J==="string"?{path:J}:J);if("files"in f)return Array.isArray(f.files)?f.files:[f.files];if("file_paths"in f)return(Array.isArray(f.file_paths)?f.file_paths:[f.file_paths]).map((Q)=>({path:Q}));if("paths"in f)return(Array.isArray(f.paths)?f.paths:[f.paths]).map((Q)=>typeof Q==="string"?{path:Q}:Q);return[f]}function l4($){let{path:f,start_line:J,end_line:Q}=$;if(J==null&&Q==null)return f;return`${f}:${J??1}-${Q??"EOF"}`}function q3($){let{start_line:f,end_line:J}=$;if(f==null||J==null||f<=J)return null;return`start_line must be less than or equal to end_line (received start_line: ${f}, end_line: ${J})`}function w3($){let f=T3(_3,$);if(typeof f==="string")return[f];if(Array.isArray(f))return f;if("commands"in f)return Array.isArray(f.commands)?f.commands:[f.commands];if("command"in f)return"args"in f?[f]:[f.command];if("cmd"in f)return[f.cmd];return[f]}function I5($){if(typeof $==="string")return $;let f=$.args??[];if(f.length===0)return $.command;let J=f.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${J.join(" ")}`}function x5($,f={}){let J=f.fileReadTimeoutMs??1e4;return F$({name:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Returns file contents or error messages for each path.",inputSchema:f$(E2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Q,Z)=>{let W=M3(Q);return Promise.all(W.map(async(j)=>{let X=q3(j);if(X)return{query:l4(j),result:"",error:`Invalid file range: ${X}`,success:!1};try{let H=await $$($(j,Z),J,`File read timed out after ${J}ms`);return{query:l4(j),result:H,success:!0}}catch(H){let Y=c$(H);return{query:l4(j),result:"",error:`Error reading file: ${Y}`,success:!1}}}))}})}function g5($,f={}){let J=f.searchTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"search_codebase",description:"Perform regex pattern searches across the codebase. Supports multiple parallel searches. Use for finding code patterns, function definitions, class names, imports, etc.",inputSchema:f$(h2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Z,W)=>{let j=u$(L3,Z),X=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(X.map(async(H)=>{try{let Y=await $$($(H,Q,W),J,`Search timed out after ${J}ms`),V=Y.length>0&&!Y.includes("No results found");return{query:H,result:Y,success:V}}catch(Y){let V=c$(Y);return{query:H,result:"",error:`Search failed: ${V}`,success:!1}}}))}})}function m5($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"run_commands",description:"Run shell commands from the root of the workspace. Use for listing files, checking git status, running builds, executing tests, etc. Commands should be properly shell-escaped.",inputSchema:f$(Af),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(O3,Z),X;if(typeof j==="string")X=[j];else if(Array.isArray(j))X=j;else if("commands"in j)X=Array.isArray(j.commands)?j.commands:[j.commands];else if("command"in j)X=[j.command];else X=[j.cmd];return Promise.all(X.map(async(H)=>{try{let Y=await $$($(H,Q,W),J,`Command timed out after ${J}ms`);return{query:H,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:H,result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function v5($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"run_commands",description:"Run shell commands from the root of the workspacein Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped.",inputSchema:f$(b5),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=w3(Z);return Promise.all(j.map(async(X)=>{try{let H=await $$($(X,Q,W),J,`Command timed out after ${J}ms`);return{query:I5(X),result:H,success:!0}}catch(H){let Y=c$(H);return{query:I5(X),result:"",error:`Command failed: ${Y}`,success:!1}}}))}})}function c5($,f={}){let J=f.webFetchTimeoutMs??30000;return F$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract.",inputSchema:f$(b2),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(Q,Z)=>{let W=u$(b2,Q);return Promise.all(W.requests.map(async(j)=>{try{let X=await $$($(j.url,j.prompt,Z),J,`Web fetch timed out after ${J}ms`);return{query:j.url,result:X,success:!0}}catch(X){let H=c$(X);return{query:j.url,result:"",error:`Error fetching web content: ${H}`,success:!1}}}))}})}var MB=`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:
45
47
 
46
48
  *** Begin Patch
47
49
  *** Update File: path/to/file.ts
@@ -77,68 +79,68 @@ Example:
77
79
  </div>
78
80
  );
79
81
  }
80
- *** End Patch`;function _5(f,$={}){let J=$.applyPatchTimeoutMs??30000,W=$.cwd??process.cwd();return R0({name:"apply_patch",description:dB,inputSchema:ef(N2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(H,Q)=>{let Z=g0($Q,H),j=typeof Z==="string"?Z:Z.input;try{return{query:"apply_patch",result:await of(f({input:j},W,Q),J,`apply_patch timed out after ${J}ms`),success:!0}}catch(X){return{query:"apply_patch",result:"",error:`apply_patch failed: ${x0(X)}`,success:!1}}}})}function M5(f,$={}){let J=$.editorTimeoutMs??30000,W=$.cwd??process.cwd();return R0({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tools for making small, precise edits to existing files or creating new files over shell commands.",inputSchema:ef(z2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(H,Q)=>{let Z=g0(z2,H),j=Z.insert_line==null?"edit":"insert",X=WQ(Z);if(X)return{query:`${j}:${Z.path}`,result:"",error:X,success:!1};try{let A=await of(f(Z,W,Q),J,`Editor operation timed out after ${J}ms`);return{query:`${j}:${Z.path}`,result:A,success:!0}}catch(A){let P=x0(A);return{query:`${j}:${Z.path}`,result:"",error:`Editor operation failed: ${P}`,success:!1}}}})}function K$(f,$={}){let J=$.skillsTimeoutMs??15000,W='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',H=R0({name:"skills",description:W,inputSchema:ef(q2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,Z)=>{let j=g0(q2,Q);return of(f(j.skill,j.args||void 0,Z),J,`Skills operation timed out after ${J}ms`)}});return Object.defineProperty(H,"description",{get(){let Q=f.configuredSkills?.filter((Z)=>!Z.disabled).map((Z)=>Z.name);if(Q&&Q.length>0)return`${W} Available skills: ${Q.join(", ")}.`;return W},enumerable:!0,configurable:!0}),H}function L5(f){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:ef(w2),retryable:!1,maxRetries:0,execute:async($,J)=>{let W=g0(w2,$);return f(W.question,W.options,J)}}}function h5(f,$={}){let J=$.submitTimeoutMs??15000;return R0({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:ef(b2),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,H)=>{let Q=g0(b2,W);return of(f(Q.summary,Q.verified,H),J,`submit_and_exit timed out after ${J}ms`)}})}function v0(f){let{executors:$,enableReadFiles:J=!0,enableSearch:W=!0,enableBash:H=!0,enableWebFetch:Q=!0,enableApplyPatch:Z=!1,enableEditor:j=!0,enableSkills:X=!0,enableAskQuestion:A=!0,enableSubmitAndExit:P=!1,...B}=f,Y=[];if(J&&$.readFile)Y.push(y5($.readFile,B));if(W&&$.search)Y.push(U5($.search,B));if(H&&$.bash)if(process.platform==="win32")Y.push(T5($.bash,B));else Y.push(G5($.bash,B));if(Q&&$.webFetch)Y.push(D5($.webFetch,B));if(j&&$.editor)Y.push(M5($.editor,B));else if(Z&&$.applyPatch)Y.push(_5($.applyPatch,B));if(X&&$.skills)Y.push(K$($.skills,B));let V=P?$.submit:void 0;if(A&&$.askQuestion&&!V)Y.push(L5($.askQuestion));if(V)Y.push(h5(V,B));return Y}import*as bf from"node:fs/promises";import*as Cf from"node:path";var x={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},XQ=["%%bash","apply_patch","EOF","```"];class Qf extends Error{constructor(f){super(f);this.name="DiffError"}}function wf(f){let $={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return f.normalize("NFC").replace(/./gu,(J)=>$[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class O5{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor(f,$){this.lines=f;this.currentFiles=$}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning(f){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push(f)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(x.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(x.END)??!1}parseNextAction(){let f=this.lines[this.index];if(f?.startsWith(x.UPDATE)){this.parseUpdate(f.substring(x.UPDATE.length).trim());return}if(f?.startsWith(x.DELETE)){this.parseDelete(f.substring(x.DELETE.length).trim());return}if(f?.startsWith(x.ADD)){this.parseAdd(f.substring(x.ADD.length).trim());return}throw new Qf(`Unknown line while parsing: ${f}`)}checkDuplicate(f,$){if(f in this.patch.actions)throw new Qf(`Duplicate ${$} for file: ${f}`)}parseUpdate(f){this.checkDuplicate(f,"update"),this.currentPath=f,this.index++;let $=this.lines[this.index]?.startsWith(x.MOVE)?(this.lines[this.index++]??"").substring(x.MOVE.length).trim():void 0;if(!(f in this.currentFiles))throw new Qf(`Update File Error: Missing File: ${f}`);let J=this.currentFiles[f]??"",W=this.parseUpdateFile(J,f);W.movePath=$,this.patch.actions[f]=W,this.currentPath=void 0}parseUpdateFile(f,$){let J={type:"update",chunks:[]},W=f.split(`
81
- `),H=0,Q=[x.END,x.UPDATE,x.DELETE,x.ADD,x.END_FILE];while(!Q.some((Z)=>this.lines[this.index]?.startsWith(Z.trim()))){let Z=this.lines[this.index],j=Z?.startsWith("@@ ")?Z.substring(3):void 0;if(j!==void 0||(Z==="@@"?Z:void 0)!==void 0)this.index++;else if(H!==0)throw new Qf(`Invalid Line:
82
- ${this.lines[this.index]}`);if(j?.trim()){let K=wf(j.trim());for(let F=H;F<W.length;F++){let y=W[F];if(y&&(wf(y)===K||wf(y.trim())===K)){if(H=F+1,wf(y.trim())===K&&wf(y)!==K)this.fuzz++;break}}}let[A,P,B,Y]=pB(this.lines,this.index),[V,R,U]=lB(W,A,H,Y);if(V===-1){let K=A.join(`
83
- `);this.addWarning({path:this.currentPath||$,chunkIndex:J.chunks.length,message:`Could not find matching context (similarity: ${U.toFixed(2)}). Chunk skipped.`,context:K.length>200?`${K.substring(0,200)}...`:K}),this.index=B}else{this.fuzz+=R;for(let K of P)K.origIndex+=V,J.chunks.push(K);H=V+A.length,this.index=B}}return J}parseDelete(f){if(this.checkDuplicate(f,"delete"),!(f in this.currentFiles))throw new Qf(`Delete File Error: Missing File: ${f}`);this.patch.actions[f]={type:"delete",chunks:[]},this.index++}parseAdd(f){if(this.checkDuplicate(f,"add"),f in this.currentFiles)throw new Qf(`Add File Error: File already exists: ${f}`);this.index++;let $=[],J=[x.END,x.UPDATE,x.DELETE,x.ADD];while(this.hasMoreLines()&&!J.some((W)=>this.lines[this.index]?.startsWith(W.trim()))){let W=this.lines[this.index++];if(W===void 0)break;if(!W.startsWith("+"))throw new Qf(`Invalid Add File line (missing '+'): ${W}`);$.push(W.substring(1))}this.patch.actions[f]={type:"add",newFile:$.join(`
84
- `),chunks:[]}}}function jQ(f,$){let J=f.length>$.length?f:$,W=f.length>$.length?$:f;if(J.length===0)return 1;let H=rB(W,J);return(J.length-H)/J.length}function rB(f,$){let J=$.length+1,W=f.length+1,H=Array(J*W).fill(0),Q=(j,X)=>H[j*W+X]??0,Z=(j,X,A)=>{H[j*W+X]=A};for(let j=0;j<=$.length;j++)Z(j,0,j);for(let j=0;j<=f.length;j++)Z(0,j,j);for(let j=1;j<=$.length;j++)for(let X=1;X<=f.length;X++)if($[j-1]===f[X-1])Z(j,X,Q(j-1,X-1));else Z(j,X,1+Math.min(Q(j-1,X-1),Q(j,X-1),Q(j-1,X)));return Q($.length,f.length)}function lB(f,$,J,W){if($.length===0)return[J,0,1];let H=0,Q=(Z)=>{let j=wf($.join(`
85
- `));for(let A=Z;A<f.length;A++){let P=wf(f.slice(A,A+$.length).join(`
86
- `));if(P===j)return[A,0,1];let B=jQ(P,j);if(B>H)H=B}for(let A=Z;A<f.length;A++){let P=wf(f.slice(A,A+$.length).map((Y)=>Y.trimEnd()).join(`
87
- `)),B=wf($.map((Y)=>Y.trimEnd()).join(`
88
- `));if(P===B)return[A,1,1]}for(let A=Z;A<f.length;A++){let P=wf(f.slice(A,A+$.length).map((Y)=>Y.trim()).join(`
89
- `)),B=wf($.map((Y)=>Y.trim()).join(`
90
- `));if(P===B)return[A,100,1]}let X=0.66;for(let A=Z;A<f.length;A++){let P=wf(f.slice(A,A+$.length).join(`
91
- `)),B=jQ(P,j);if(B>=X)return[A,1000,B];if(B>H)H=B}return[-1,0,H]};if(W){let[Z,j,X]=Q(f.length-$.length);if(Z!==-1)return[Z,j,X];return[Z,j,X]=Q(J),[Z,j+1e4,X]}return Q(J)}function pB(f,$){let J=$,W=[],H=[],Q=[],Z=[],j="keep",X=["@@",x.END,x.UPDATE,x.DELETE,x.ADD,x.END_FILE];while(J<f.length){let A=f[J];if(!A||X.some((Y)=>A.startsWith(Y.trim())))break;if(A==="***")break;if(A.startsWith("***"))throw new Qf(`Invalid line: ${A}`);J++;let P=j,B=A;if(B[0]==="+")j="add";else if(B[0]==="-")j="delete";else if(B[0]===" ")j="keep";else j="keep",B=` ${B}`;if(B=B.slice(1),j==="keep"&&P!==j){if(Q.length||H.length)Z.push({origIndex:W.length-H.length,delLines:H,insLines:Q});H=[],Q=[]}if(j==="delete")H.push(B),W.push(B);else if(j==="add")Q.push(B);else W.push(B)}if(Q.length||H.length)Z.push({origIndex:W.length-H.length,delLines:H,insLines:Q});if(J<f.length&&f[J]===x.END_FILE)return J++,[W,Z,J,!0];return[W,Z,J,!1]}function z5(f,$,J){let W=Cf.isAbsolute($),H=W?Cf.normalize($):Cf.resolve(f,$);if(!J||W)return H;let Q=Cf.relative(f,H);if(Q.startsWith("..")||Cf.isAbsolute(Q))throw new Qf(`Path must stay within cwd: ${$}`);return H}function iB(f){return f.split(`
92
- `).map(($)=>$.replace(/\r$/,""))}function AQ(f){if(f.trim()==="")return!1;return XQ.some(($)=>f.startsWith($))}function nB(f){let $=0,J=f.length;while($<J&&AQ(f[$]??""))$++;while(J>$&&AQ(f[J-1]??""))J--;return f.slice($,J)}function aB(f){let $=iB(f),J=$.findIndex((Z)=>Z.startsWith(x.BEGIN)),W=-1;for(let Z=$.length-1;Z>=0;Z--)if($[Z]?.startsWith(x.END)){W=Z;break}if(J!==-1||W!==-1){if(J===-1||W===-1||W<J)throw new Qf("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:$.slice(J,W+1)}}let H=nB($);while(H.length>0&&H[0]==="")H.shift();while(H.length>0&&H[H.length-1]==="")H.pop();return{lines:[x.BEGIN,...H,x.END]}}function tB(f,$){let J=new Set;for(let W of f)for(let H of $)if(W.startsWith(H)){J.add(W.substring(H.length).trim());break}return[...J]}function sB(f,$,J){if($.length===0)return f;let W=f.split(`
93
- `),H=[],Q=0;for(let Z of $){if(Z.origIndex>W.length)throw new Qf(`${J}: chunk.origIndex ${Z.origIndex} > lines.length ${W.length}`);if(Q>Z.origIndex)throw new Qf(`${J}: currentIndex ${Q} > chunk.origIndex ${Z.origIndex}`);H.push(...W.slice(Q,Z.origIndex)),H.push(...Z.insLines),Q=Z.origIndex+Z.delLines.length}return H.push(...W.slice(Q)),H.join(`
94
- `)}async function oB(f,$,J,W){let H=tB(f,[x.UPDATE,x.DELETE]),Q={};for(let Z of H){let j=z5($,Z,W),X;try{X=await bf.readFile(j,J)}catch{throw new Qf(`File not found: ${Z}`)}Q[Z]=X.replace(/\r\n/g,`
95
- `)}return Q}function eB(f,$){let J={};for(let[W,H]of Object.entries(f.actions))switch(H.type){case"delete":J[W]={type:"delete",oldContent:$[W]};break;case"add":if(H.newFile===void 0)throw new Qf("ADD action without file content");J[W]={type:"add",newContent:H.newFile};break;case"update":J[W]={type:"update",oldContent:$[W],newContent:sB($[W]??"",H.chunks,W),movePath:H.movePath};break}return J}async function fY(f,$,J,W){let H=[];for(let[Q,Z]of Object.entries(f)){let j=z5($,Q,W);switch(Z.type){case"delete":await bf.rm(j,{force:!0}),H.push(`${Q}: [deleted]`);break;case"add":if(Z.newContent===void 0)throw new Qf(`Cannot create ${Q} with no content`);await bf.mkdir(Cf.dirname(j),{recursive:!0}),await bf.writeFile(j,Z.newContent,{encoding:J}),H.push(Q);break;case"update":{if(Z.newContent===void 0)throw new Qf(`UPDATE change for ${Q} has no new content`);if(Z.movePath){let X=z5($,Z.movePath,W);await bf.mkdir(Cf.dirname(X),{recursive:!0}),await bf.writeFile(X,Z.newContent,{encoding:J}),await bf.rm(j,{force:!0}),H.push(`${Q} -> ${Z.movePath}`)}else await bf.writeFile(j,Z.newContent,{encoding:J}),H.push(Q);break}}}return H}function C2(f={}){let{encoding:$="utf-8",restrictToCwd:J=!0}=f;return async(W,H,Q)=>{let Z=aB(W.input),j=await oB(Z.lines,H,$,J),X=new O5(Z.lines,j),{patch:A,fuzz:P}=X.parse(),B=eB(A,j),Y=await fY(B,H,$,J),V=["Successfully applied patch to the following files:"];for(let R of Y)V.push(R);if(P>0)V.push(`Note: Patch applied with fuzz factor ${P}`);if(A.warnings&&A.warnings.length>0)for(let R of A.warnings)V.push(`Warning (${R.path}): ${R.message}`);return V.join(`
96
- `)}}import{spawn as PQ}from"node:child_process";import{getDefaultShell as $Y,getShellArgs as JY}from"@cline/shared";function WY(f,$,J,W,H){return new Promise((Q,Z)=>{let j=process.platform==="win32",X=PQ(f.executable,f.args,{cwd:f.cwd,env:{...process.env,...f.env},stdio:["pipe","pipe","pipe"],detached:!j}),A=X.pid,P="",B="",Y=0,V=!1,R=!1,U=(T)=>{if(R)return;R=!0,T()},K=()=>{if(!A)return;if(j){PQ("taskkill",["/pid",String(A),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-A,"SIGKILL")}catch{X.kill("SIGKILL")}},F=(T)=>{V=!0,K(),U(()=>Z(T))},y=setTimeout(()=>F(Error(`Command timed out after ${J}ms`)),J),D=()=>F(Error("Command was aborted"));if($.signal)$.signal.addEventListener("abort",D);let M=()=>{clearTimeout(y),$.signal?.removeEventListener("abort",D)};X.stdout?.on("data",(T)=>{if(Y+=T.length,Y<=W)P+=T.toString()}),X.stderr?.on("data",(T)=>{if(Y+=T.length,Y<=W)B+=T.toString()}),X.on("close",(T)=>{if(M(),V)return;let _=H?P+(B?`
82
+ *** End Patch`;function u5($,f={}){let J=f.applyPatchTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"apply_patch",description:MB,inputSchema:f$(I2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(y3,Z),X=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await $$($({input:X},Q,W),J,`apply_patch timed out after ${J}ms`),success:!0}}catch(H){return{query:"apply_patch",result:"",error:`apply_patch failed: ${c$(H)}`,success:!1}}}})}function d5($,f={}){let J=f.editorTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tools for making small, precise edits to existing files or creating new files over shell commands.",inputSchema:f$(k2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(k2,Z),X=j.insert_line==null?"edit":"insert",H=N3(j);if(H)return{query:`${X}:${j.path}`,result:"",error:H,success:!1};try{let Y=await $$($(j,Q,W),J,`Editor operation timed out after ${J}ms`);return{query:`${X}:${j.path}`,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:`${X}:${j.path}`,result:"",error:`Editor operation failed: ${V}`,success:!1}}}})}function R1($,f={}){let J=f.skillsTimeoutMs??15000,Q='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',Z=F$({name:"skills",description:Q,inputSchema:f$(x2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=u$(x2,W);return $$($(X.skill,X.args||void 0,j),J,`Skills operation timed out after ${J}ms`)}});return Object.defineProperty(Z,"description",{get(){let W=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(W&&W.length>0)return`${Q} Available skills: ${W.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),Z}function l5($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:f$(g2),retryable:!1,maxRetries:0,execute:async(f,J)=>{let Q=u$(g2,f);return $(Q.question,Q.options,J)}}}function p5($,f={}){let J=f.submitTimeoutMs??15000;return F$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:f$(m2),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,Z)=>{let W=u$(m2,Q);return $$($(W.summary,W.verified,Z),J,`submit_and_exit timed out after ${J}ms`)}})}function d$($){let{executors:f,enableReadFiles:J=!0,enableSearch:Q=!0,enableBash:Z=!0,enableWebFetch:W=!0,enableApplyPatch:j=!1,enableEditor:X=!0,enableSkills:H=!0,enableAskQuestion:Y=!0,enableSubmitAndExit:V=!1,...A}=$,B=[];if(J&&f.readFile)B.push(x5(f.readFile,A));if(Q&&f.search)B.push(g5(f.search,A));if(Z&&f.bash)if(process.platform==="win32")B.push(v5(f.bash,A));else B.push(m5(f.bash,A));if(W&&f.webFetch)B.push(c5(f.webFetch,A));if(X&&f.editor)B.push(d5(f.editor,A));else if(j&&f.applyPatch)B.push(u5(f.applyPatch,A));if(H&&f.skills)B.push(R1(f.skills,A));let K=V?f.submit:void 0;if(Y&&f.askQuestion&&!K)B.push(l5(f.askQuestion));if(K)B.push(p5(K,A));return B}import*as E0 from"node:fs/promises";import*as h0 from"node:path";var g={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},C3=["%%bash","apply_patch","EOF","```"];class W0 extends Error{constructor($){super($);this.name="DiffError"}}function C0($){let f={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(J)=>f[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class r5{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,f){this.lines=$;this.currentFiles=f}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(g.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(g.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(g.UPDATE)){this.parseUpdate($.substring(g.UPDATE.length).trim());return}if($?.startsWith(g.DELETE)){this.parseDelete($.substring(g.DELETE.length).trim());return}if($?.startsWith(g.ADD)){this.parseAdd($.substring(g.ADD.length).trim());return}throw new W0(`Unknown line while parsing: ${$}`)}checkDuplicate($,f){if($ in this.patch.actions)throw new W0(`Duplicate ${f} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let f=this.lines[this.index]?.startsWith(g.MOVE)?(this.lines[this.index++]??"").substring(g.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new W0(`Update File Error: Missing File: ${$}`);let J=this.currentFiles[$]??"",Q=this.parseUpdateFile(J,$);Q.movePath=f,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,f){let J={type:"update",chunks:[]},Q=$.split(`
83
+ `),Z=0,W=[g.END,g.UPDATE,g.DELETE,g.ADD,g.END_FILE];while(!W.some((j)=>this.lines[this.index]?.startsWith(j.trim()))){let j=this.lines[this.index],X=j?.startsWith("@@ ")?j.substring(3):void 0;if(X!==void 0||(j==="@@"?j:void 0)!==void 0)this.index++;else if(Z!==0)throw new W0(`Invalid Line:
84
+ ${this.lines[this.index]}`);if(X?.trim()){let F=C0(X.trim());for(let P=Z;P<Q.length;P++){let D=Q[P];if(D&&(C0(D)===F||C0(D.trim())===F)){if(Z=P+1,C0(D.trim())===F&&C0(D)!==F)this.fuzz++;break}}}let[Y,V,A,B]=SB(this.lines,this.index),[K,G,R]=wB(Q,Y,Z,B);if(K===-1){let F=Y.join(`
85
+ `);this.addWarning({path:this.currentPath||f,chunkIndex:J.chunks.length,message:`Could not find matching context (similarity: ${R.toFixed(2)}). Chunk skipped.`,context:F.length>200?`${F.substring(0,200)}...`:F}),this.index=A}else{this.fuzz+=G;for(let F of V)F.origIndex+=K,J.chunks.push(F);Z=K+Y.length,this.index=A}}return J}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new W0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new W0(`Add File Error: File already exists: ${$}`);this.index++;let f=[],J=[g.END,g.UPDATE,g.DELETE,g.ADD];while(this.hasMoreLines()&&!J.some((Q)=>this.lines[this.index]?.startsWith(Q.trim()))){let Q=this.lines[this.index++];if(Q===void 0)break;if(!Q.startsWith("+"))throw new W0(`Invalid Add File line (missing '+'): ${Q}`);f.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:f.join(`
86
+ `),chunks:[]}}}function S3($,f){let J=$.length>f.length?$:f,Q=$.length>f.length?f:$;if(J.length===0)return 1;let Z=qB(Q,J);return(J.length-Z)/J.length}function qB($,f){let J=f.length+1,Q=$.length+1,Z=Array(J*Q).fill(0),W=(X,H)=>Z[X*Q+H]??0,j=(X,H,Y)=>{Z[X*Q+H]=Y};for(let X=0;X<=f.length;X++)j(X,0,X);for(let X=0;X<=$.length;X++)j(0,X,X);for(let X=1;X<=f.length;X++)for(let H=1;H<=$.length;H++)if(f[X-1]===$[H-1])j(X,H,W(X-1,H-1));else j(X,H,1+Math.min(W(X-1,H-1),W(X,H-1),W(X-1,H)));return W(f.length,$.length)}function wB($,f,J,Q){if(f.length===0)return[J,0,1];let Z=0,W=(j)=>{let X=C0(f.join(`
87
+ `));for(let Y=j;Y<$.length;Y++){let V=C0($.slice(Y,Y+f.length).join(`
88
+ `));if(V===X)return[Y,0,1];let A=S3(V,X);if(A>Z)Z=A}for(let Y=j;Y<$.length;Y++){let V=C0($.slice(Y,Y+f.length).map((B)=>B.trimEnd()).join(`
89
+ `)),A=C0(f.map((B)=>B.trimEnd()).join(`
90
+ `));if(V===A)return[Y,1,1]}for(let Y=j;Y<$.length;Y++){let V=C0($.slice(Y,Y+f.length).map((B)=>B.trim()).join(`
91
+ `)),A=C0(f.map((B)=>B.trim()).join(`
92
+ `));if(V===A)return[Y,100,1]}let H=0.66;for(let Y=j;Y<$.length;Y++){let V=C0($.slice(Y,Y+f.length).join(`
93
+ `)),A=S3(V,X);if(A>=H)return[Y,1000,A];if(A>Z)Z=A}return[-1,0,Z]};if(Q){let[j,X,H]=W($.length-f.length);if(j!==-1)return[j,X,H];return[j,X,H]=W(J),[j,X+1e4,H]}return W(J)}function SB($,f){let J=f,Q=[],Z=[],W=[],j=[],X="keep",H=["@@",g.END,g.UPDATE,g.DELETE,g.ADD,g.END_FILE];while(J<$.length){let Y=$[J];if(!Y||H.some((B)=>Y.startsWith(B.trim())))break;if(Y==="***")break;if(Y.startsWith("***"))throw new W0(`Invalid line: ${Y}`);J++;let V=X,A=Y;if(A[0]==="+")X="add";else if(A[0]==="-")X="delete";else if(A[0]===" ")X="keep";else X="keep",A=` ${A}`;if(A=A.slice(1),X==="keep"&&V!==X){if(W.length||Z.length)j.push({origIndex:Q.length-Z.length,delLines:Z,insLines:W});Z=[],W=[]}if(X==="delete")Z.push(A),Q.push(A);else if(X==="add")W.push(A);else Q.push(A)}if(W.length||Z.length)j.push({origIndex:Q.length-Z.length,delLines:Z,insLines:W});if(J<$.length&&$[J]===g.END_FILE)return J++,[Q,j,J,!0];return[Q,j,J,!1]}function i5($,f,J){let Q=h0.isAbsolute(f),Z=Q?h0.normalize(f):h0.resolve($,f);if(!J||Q)return Z;let W=h0.relative($,Z);if(W.startsWith("..")||h0.isAbsolute(W))throw new W0(`Path must stay within cwd: ${f}`);return Z}function CB($){return $.split(`
94
+ `).map((f)=>f.replace(/\r$/,""))}function E3($){if($.trim()==="")return!1;return C3.some((f)=>$.startsWith(f))}function EB($){let f=0,J=$.length;while(f<J&&E3($[f]??""))f++;while(J>f&&E3($[J-1]??""))J--;return $.slice(f,J)}function hB($){let f=CB($),J=f.findIndex((j)=>j.startsWith(g.BEGIN)),Q=-1;for(let j=f.length-1;j>=0;j--)if(f[j]?.startsWith(g.END)){Q=j;break}if(J!==-1||Q!==-1){if(J===-1||Q===-1||Q<J)throw new W0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:f.slice(J,Q+1)}}let Z=EB(f);while(Z.length>0&&Z[0]==="")Z.shift();while(Z.length>0&&Z[Z.length-1]==="")Z.pop();return{lines:[g.BEGIN,...Z,g.END]}}function bB($,f){let J=new Set;for(let Q of $)for(let Z of f)if(Q.startsWith(Z)){J.add(Q.substring(Z.length).trim());break}return[...J]}function kB($,f,J){if(f.length===0)return $;let Q=$.split(`
95
+ `),Z=[],W=0;for(let j of f){if(j.origIndex>Q.length)throw new W0(`${J}: chunk.origIndex ${j.origIndex} > lines.length ${Q.length}`);if(W>j.origIndex)throw new W0(`${J}: currentIndex ${W} > chunk.origIndex ${j.origIndex}`);Z.push(...Q.slice(W,j.origIndex)),Z.push(...j.insLines),W=j.origIndex+j.delLines.length}return Z.push(...Q.slice(W)),Z.join(`
96
+ `)}async function IB($,f,J,Q){let Z=bB($,[g.UPDATE,g.DELETE]),W={};for(let j of Z){let X=i5(f,j,Q),H;try{H=await E0.readFile(X,J)}catch{throw new W0(`File not found: ${j}`)}W[j]=H.replace(/\r\n/g,`
97
+ `)}return W}function xB($,f){let J={};for(let[Q,Z]of Object.entries($.actions))switch(Z.type){case"delete":J[Q]={type:"delete",oldContent:f[Q]};break;case"add":if(Z.newFile===void 0)throw new W0("ADD action without file content");J[Q]={type:"add",newContent:Z.newFile};break;case"update":J[Q]={type:"update",oldContent:f[Q],newContent:kB(f[Q]??"",Z.chunks,Q),movePath:Z.movePath};break}return J}async function gB($,f,J,Q){let Z=[];for(let[W,j]of Object.entries($)){let X=i5(f,W,Q);switch(j.type){case"delete":await E0.rm(X,{force:!0}),Z.push(`${W}: [deleted]`);break;case"add":if(j.newContent===void 0)throw new W0(`Cannot create ${W} with no content`);await E0.mkdir(h0.dirname(X),{recursive:!0}),await E0.writeFile(X,j.newContent,{encoding:J}),Z.push(W);break;case"update":{if(j.newContent===void 0)throw new W0(`UPDATE change for ${W} has no new content`);if(j.movePath){let H=i5(f,j.movePath,Q);await E0.mkdir(h0.dirname(H),{recursive:!0}),await E0.writeFile(H,j.newContent,{encoding:J}),await E0.rm(X,{force:!0}),Z.push(`${W} -> ${j.movePath}`)}else await E0.writeFile(X,j.newContent,{encoding:J}),Z.push(W);break}}}return Z}function v2($={}){let{encoding:f="utf-8",restrictToCwd:J=!0}=$;return async(Q,Z,W)=>{let j=hB(Q.input),X=await IB(j.lines,Z,f,J),H=new r5(j.lines,X),{patch:Y,fuzz:V}=H.parse(),A=xB(Y,X),B=await gB(A,Z,f,J),K=["Successfully applied patch to the following files:"];for(let G of B)K.push(G);if(V>0)K.push(`Note: Patch applied with fuzz factor ${V}`);if(Y.warnings&&Y.warnings.length>0)for(let G of Y.warnings)K.push(`Warning (${G.path}): ${G.message}`);return K.join(`
98
+ `)}}import{spawn as h3}from"node:child_process";import{getDefaultShell as mB,getShellArgs as vB}from"@cline/shared";function cB($,f,J,Q,Z){return new Promise((W,j)=>{let X=process.platform==="win32",H=h3($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!X}),Y=H.pid,V="",A="",B=0,K=!1,G=!1,R=(L)=>{if(G)return;G=!0,L()},F=()=>{if(!Y)return;if(X){h3("taskkill",["/pid",String(Y),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-Y,"SIGKILL")}catch{H.kill("SIGKILL")}},P=(L)=>{K=!0,F(),R(()=>j(L))},D=setTimeout(()=>P(Error(`Command timed out after ${J}ms`)),J),O=()=>P(Error("Command was aborted"));if(f.signal)f.signal.addEventListener("abort",O);let _=()=>{clearTimeout(D),f.signal?.removeEventListener("abort",O)};H.stdout?.on("data",(L)=>{if(B+=L.length,B<=Q)V+=L.toString()}),H.stderr?.on("data",(L)=>{if(B+=L.length,B<=Q)A+=L.toString()}),H.on("close",(L)=>{if(_(),K)return;let z=Z?V+(A?`
97
99
  [stderr]
98
- ${B}`:""):P;if(Y>W)_+=`
99
-
100
- [Output truncated: ${Y} bytes total, showing first ${W} bytes]`;if(T!==0)U(()=>Z(Error(B||`Command exited with code ${T}`)));else U(()=>Q(_))}),X.on("error",(T)=>{M(),U(()=>Z(Error(`Failed to execute command: ${T.message}`)))})})}function E2(f={}){let{shell:$=$Y(process.platform),timeoutMs:J=30000,maxOutputBytes:W=1e6,env:H={},combineOutput:Q=!0}=f;return(Z,j,X)=>{let A=typeof Z!=="string";return WY({executable:A?Z.command:$,args:A?Z.args??[]:JY($,Z),cwd:j,env:H},X,J,W,Q)}}import*as pf from"node:fs/promises";import*as lf from"node:path";function HY(f,$,J){let W=lf.isAbsolute($),H=W?lf.normalize($):lf.resolve(f,$);if(!J)return H;if(W)return H;let Q=lf.relative(f,H);if(Q.startsWith("..")||lf.isAbsolute(Q))throw Error(`Path must stay within cwd: ${$}`);return H}function QY(f,$){if($.length===0)return 0;return f.split($).length-1}function ZY(f,$,J){let W=f.split(`
101
- `),H=$.split(`
102
- `),Q=Math.max(W.length,H.length),Z=["```diff"],j=0;for(let X=0;X<Q;X++){if(j>=J){Z.push("... diff truncated ...");break}let A=W[X],P=H[X];if(A===P)continue;let B=X+1;if(A!==void 0)Z.push(`-${B}: ${A}`),j++;if(P!==void 0&&j<J)Z.push(`+${B}: ${P}`),j++}return Z.push("```"),Z.join(`
103
- `)}async function jY(f,$,J){return await pf.mkdir(lf.dirname(f),{recursive:!0}),await pf.writeFile(f,$,{encoding:J}),`File created successfully at: ${f}`}async function XY(f){try{return await pf.access(f),!0}catch{return!1}}async function AY(f,$,J,W,H){let Q=await pf.readFile(f,W),Z=QY(Q,$);if(Z===0)throw Error(`No replacement performed: text not found in ${f}.`);if(Z>1)throw Error(`No replacement performed: multiple occurrences of text found in ${f}.`);let j=Q.replace($,J??"");await pf.writeFile(f,j,{encoding:W});let X=ZY(Q,j,H);return`Edited ${f}
104
- ${X}`}async function PY(f,$,J,W){let Q=(await pf.readFile(f,W)).split(`
105
- `),Z=Q.length+1;if($<1||$>Z)throw Error(`Invalid insert_line: ${$}. insert_line must be a positive one-based boundary line in the range 1-${Z}. Use ${Z} to append at EOF.`);let j=$-1;return Q.splice(j,0,...J.split(`
106
- `)),await pf.writeFile(f,Q.join(`
107
- `),{encoding:W}),`Inserted content at line ${$} in ${f}.`}function S2(f={}){let{encoding:$="utf-8",restrictToCwd:J=!0,maxDiffLines:W=200}=f;return async(H,Q,Z)=>{let j=HY(Q,H.path,J);if(H.insert_line!=null)return PY(j,H.insert_line,H.new_text,$);if(!await XY(j))return jY(j,H.new_text,$);if(H.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return AY(j,H.old_text,H.new_text,$,W)}}import*as k2 from"node:fs/promises";import*as u0 from"node:path";var BY=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),YY={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0};function I2(f={}){let{maxFileSizeBytes:$,encoding:J,includeLineNumbers:W}={...YY,...f};return async(H,Q)=>{let{path:Z,start_line:j,end_line:X}=H,A=u0.isAbsolute(Z)?u0.normalize(Z):u0.resolve(process.cwd(),Z),P=u0.extname(A).toLowerCase(),B=BY.get(P),Y=await k2.stat(A);if(!Y.isFile())throw Error(`Path is not a file: ${A}`);if(Y.size>$)throw Error(`File too large: ${Y.size} bytes (max: ${$} bytes). Consider reading specific sections or using a different approach.`);if(B){if(Q.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let y=await k2.readFile(A);return[{type:"text",text:"Successfully read image"},{type:"image",data:y.toString("base64"),mediaType:B}]}let R=(await k2.readFile(A,J)).split(`
108
- `),U=Math.max((j??1)-1,0),K=Math.min(X??R.length,R.length),F=R.slice(U,K);if(W){let y=String(R.length).length;return F.map((D,M)=>`${String(U+M+1).padStart(y," ")} | ${D}`).join(`
109
- `)}return F.join(`
110
- `)}}import{spawn as yQ}from"node:child_process";import*as UQ from"node:fs/promises";import*as m4 from"node:path";var KQ={};N(KQ,{prewarmFileIndex:()=>I4,getFileIndex:()=>F0,enrichPromptWithMentions:()=>Z1});import{spawn as VY}from"node:child_process";import{readdir as RY}from"node:fs/promises";import q5 from"node:path";import{isMainThread as VQ,parentPort as BQ,Worker as FY}from"node:worker_threads";var KY=15000,yY=600000,UY=1000,GY=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function YQ(f){let $=f&&typeof f==="object"&&"code"in f?String(f.code??""):"";return $==="EACCES"||$==="EPERM"||$==="ENOENT"}var Q1=new Map;function TY(f){if(Q1.size<=1)return;for(let[$,J]of Q1.entries()){if(J.pending)continue;if(f-J.lastAccessedAt>yY)Q1.delete($)}}function DY(f,$){return q5.relative(f,$).split(q5.sep).join("/")}async function _Y(f){let J=(await new Promise((W,H)=>{let Q=VY("rg",["--files","--hidden","-g","!.git"],{cwd:f,stdio:["ignore","pipe","pipe"]}),Z="",j="";Q.stdout.on("data",(X)=>{Z+=X.toString()}),Q.stderr.on("data",(X)=>{j+=X.toString()}),Q.on("error",H),Q.on("close",(X)=>{if(X===0){W(Z);return}H(Error(j||`rg exited with code ${X}`))})})).split(/\r?\n/).map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>W.replace(/\\/g,"/"));return new Set(J)}async function RQ(f,$,J){let W;try{W=await RY($,{withFileTypes:!0})}catch(H){if(YQ(H))return;throw H}for(let H of W){let Q=q5.join($,H.name);if(H.isDirectory()){if(GY.has(H.name))continue;try{await RQ(f,Q,J)}catch(Z){if(YQ(Z))continue;throw Z}continue}if(H.isFile())J.add(DY(f,Q))}}async function MY(f){let $=new Set;return await RQ(f,f,$),$}async function k4(f){try{return await _Y(f)}catch{return MY(f)}}function LY(){if(VQ||!BQ)return;let f=BQ;f.on("message",($)=>{if($.type!=="index")return;k4($.cwd).then((J)=>{let W={type:"indexResult",requestId:$.requestId,files:Array.from(J)};f.postMessage(W)}).catch((J)=>{let W={type:"indexResult",requestId:$.requestId,error:J instanceof Error?J.message:"Failed to build file index"};f.postMessage(W)})})}class FQ{worker=new FY(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",(f)=>{if(f.type!=="indexResult")return;let $=this.pending.get(f.requestId);if(!$)return;if(this.pending.delete(f.requestId),f.error){$.reject(Error(f.error));return}$.resolve(f.files??[])}),this.worker.on("error",(f)=>{this.flushPending(f)}),this.worker.on("exit",(f)=>{if(f!==0)this.flushPending(Error(`File index worker exited with code ${f}`))})}requestIndex(f){let $=++this.nextRequestId,J=new Promise((H,Q)=>{let Z=setTimeout(()=>{this.pending.delete($),H(null)},UY);Z.unref(),this.pending.set($,{resolve:(j)=>{clearTimeout(Z),H(j)},reject:(j)=>{clearTimeout(Z),Q(j)}})}),W={type:"index",requestId:$,cwd:f};return this.worker.postMessage(W),J}flushPending(f){for(let[$,J]of this.pending.entries())J.reject(f),this.pending.delete($)}}LY();var N5;function hY(){if(!VQ)return null;if(N5===void 0)N5=new FQ;return N5}async function OY(f){let $=hY();if(!$)return k4(f);try{let J=await $.requestIndex(f);if(J===null)return k4(f);return new Set(J)}catch{return k4(f)}}async function F0(f,$={}){let J=$.ttlMs??KY,W=Date.now();TY(W);let H=Q1.get(f);if(H&&J>0&&W-H.lastBuiltAt<=J&&H.files.size>0)return H.lastAccessedAt=W,H.files;if(H?.pending)return H.lastAccessedAt=W,H.pending;let Q=OY(f).then((Z)=>{return Q1.set(f,{files:Z,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Z});return Q1.set(f,{files:H?.files??new Set,lastBuiltAt:H?.lastBuiltAt??0,lastAccessedAt:W,pending:Q}),Q}async function I4(f,$={}){await F0(f,{...$,ttlMs:0})}import{stat as zY}from"node:fs/promises";import y$ from"node:path";var NY=/[),.:;!?`'"]+$/,qY=/^[(`'"]+/;function wY(f){let $=f.matchAll(/(^|[\s])@([^\s]+)/g),J=[];for(let W of $){let H=(W[2]??"").trim();if(H.length===0)continue;let Q=H.replace(qY,"").replace(NY,"");if(Q.length===0||Q.includes("@"))continue;J.push(Q)}return Array.from(new Set(J))}function bY(f,$){let J=f.replace(/\\/g,"/"),W=y$.isAbsolute(J)?y$.resolve(J):y$.resolve($,J),H=y$.relative($,W);if(H.startsWith("..")||y$.isAbsolute(H))return;return H.split(y$.sep).join("/")}async function Z1(f,$,J={}){let W=wY(f);if(W.length===0)return{prompt:f,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:H,maxFileBytes:Q,maxTotalBytes:Z}=J,j=await F0($,{ttlMs:J.ttlMs}),X=[],A=[],P=[],B=0;for(let Y of W){if(H&&P.length>=H){A.push(Y);continue}let V=bY(Y,$);if(!V||!j.has(V)){A.push(Y);continue}if(!Q||!Z){X.push(V);continue}let R=y$.join($,V);try{if(!(await zY(R)).isFile()){A.push(Y);continue}let K=B+Q;if(K>Z){A.push(Y);continue}B=K,X.push(V)}catch{A.push(Y)}}return{prompt:f,mentions:W,matchedFiles:X,ignoredMentions:A}}var CY=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],EY=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],U$=null;function SY(){if(U$!==null)return Promise.resolve(U$);return new Promise((f)=>{let $=yQ("rg",["--version"],{stdio:["ignore","pipe","pipe"]});$.on("close",(J)=>{U$=J===0,f(U$)}),$.on("error",()=>{U$=!1,f(!1)}),setTimeout(()=>{if(!$.killed)$.kill("SIGTERM");if(U$===null)U$=!1,f(!1)},1000)})}function kY(f,$,J,W,H=5000,Q){return new Promise((Z)=>{let j=yQ("rg",["--json",`--context=${W}`,"--max-count=1","-i",f],{cwd:$,stdio:["ignore","pipe","pipe"]}),X="",A=!1,P=()=>{if(!j.killed)j.kill("SIGTERM")},B=setTimeout(()=>{if(!A)A=!0,P(),Z(null)},H),Y=(V)=>{if(!A)A=!0,clearTimeout(B),P(),Z(V)};if(Q?.aborted){P(),Z(null);return}Q?.addEventListener("abort",()=>{Y(null)}),j.stdout.on("data",(V)=>{X+=V.toString()}),j.stderr.on("data",()=>{}),j.on("close",(V)=>{if(V===0||V===1){try{let R=[],U=X.split(`
111
- `).filter((K)=>K.trim());for(let K of U){if(R.length>=J)break;let F=JSON.parse(K);if(F.type==="match"){let y=F.data,D=[];if(F.data.submatches&&F.data.submatches.length>0){let M=F.data.submatches[0];R.push({file:y.path.text,line:y.line_number,column:(M?.start??0)+1,match:M?.match?.text??"",context:D})}}else if(F.type==="context"&&R.length>0){let y=R[R.length-1],D=F.data.line_number===y.line?">":" ";y.context.push(`${D} ${F.data.line_number}: ${F.data.lines?.text??F.data.line?.text??""}`)}}Y(R.length>0?R:null)}catch{Y(null)}return}Y(null)}),j.on("error",()=>{Y(null)})})}function IY(f,$,J,W){let H=f.split("/"),Q=H[H.length-1]??"";if(H.length-1>W)return!1;for(let X=0;X<H.length-1;X++)if($.has(H[X]??""))return!1;let j=m4.posix.extname(Q).slice(1).toLowerCase();return J.has(j)||!j&&!Q.startsWith(".")}function m2(f={}){let{includeExtensions:$=CY,excludeDirs:J=EY,maxResults:W=100,contextLines:H=2,maxDepth:Q=20}=f,Z=new Set(J),j=new Set($.map((X)=>X.toLowerCase()));return async(X,A,P)=>{if(P.signal?.aborted)throw Error("Search operation aborted");let B=await SY(),Y=null;if(B)Y=await kY(X,A,W,H,5000,P.signal);if(Y){let y=[`Found ${Y.length} result${Y.length===1?"":"s"} for pattern: ${X}`,""];for(let D of Y)y.push(`${D.file}:${D.line}:${D.column}`),y.push(...D.context),y.push("");if(Y.length>=W)y.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return y.join(`
112
- `)}let V;try{V=new RegExp(X,"gim")}catch(y){throw Error(`Invalid regex pattern: ${X}. ${y instanceof Error?y.message:""}`)}let R=[],U=0,K=await F0(A);for(let y of K){if(P.signal?.aborted)throw Error("Search operation aborted");if(!IY(y,Z,j,Q))continue;if(R.length>=W)break;U++;let D=m4.join(A,y);try{let T=(await UQ.readFile(D,"utf-8")).split(`
113
- `);for(let _=0;_<T.length;_++){let L=T[_];V.lastIndex=0;let q=V.exec(L);while(q!==null){if(R.length>=W)break;let Wf=Math.max(0,_-H),Hf=Math.min(T.length-1,_+H),o=[];for(let c=Wf;c<=Hf;c++){let Gf=c===_?">":" ";o.push(`${Gf} ${c+1}: ${T[c]}`)}if(R.push({file:y,line:_+1,column:q.index+1,match:q[0],context:o}),q.index===V.lastIndex)V.lastIndex++;q=V.exec(L)}}}catch{}}if(R.length===0)return`No results found for pattern: ${X}
114
- Searched ${U} files.`;let F=[`Found ${R.length} result${R.length===1?"":"s"} for pattern: ${X}`,`Searched ${U} files.`,""];for(let y of R)F.push(`${y.file}:${y.line}:${y.column}`),F.push(...y.context),F.push("");if(R.length>=W)F.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return F.join(`
115
- `)}}function mY(f){return f.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
116
- `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,($,J)=>String.fromCharCode(parseInt(J,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
100
+ ${A}`:""):V;if(B>Q)z+=`
101
+
102
+ [Output truncated: ${B} bytes total, showing first ${Q} bytes]`;if(L!==0)R(()=>j(Error(A||`Command exited with code ${L}`)));else R(()=>W(z))}),H.on("error",(L)=>{_(),R(()=>j(Error(`Failed to execute command: ${L.message}`)))})})}function c2($={}){let{shell:f=mB(process.platform),timeoutMs:J=30000,maxOutputBytes:Q=1e6,env:Z={},combineOutput:W=!0}=$;return(j,X,H)=>{let Y=typeof j!=="string";return cB({executable:Y?j.command:f,args:Y?j.args??[]:vB(f,j),cwd:X,env:Z},H,J,Q,W)}}import*as i0 from"node:fs/promises";import*as r0 from"node:path";function uB($,f,J){let Q=r0.isAbsolute(f),Z=Q?r0.normalize(f):r0.resolve($,f);if(!J)return Z;if(Q)return Z;let W=r0.relative($,Z);if(W.startsWith("..")||r0.isAbsolute(W))throw Error(`Path must stay within cwd: ${f}`);return Z}function dB($,f){if(f.length===0)return 0;return $.split(f).length-1}function lB($,f,J){let Q=$.split(`
103
+ `),Z=f.split(`
104
+ `),W=Math.max(Q.length,Z.length),j=["```diff"],X=0;for(let H=0;H<W;H++){if(X>=J){j.push("... diff truncated ...");break}let Y=Q[H],V=Z[H];if(Y===V)continue;let A=H+1;if(Y!==void 0)j.push(`-${A}: ${Y}`),X++;if(V!==void 0&&X<J)j.push(`+${A}: ${V}`),X++}return j.push("```"),j.join(`
105
+ `)}async function pB($,f,J){return await i0.mkdir(r0.dirname($),{recursive:!0}),await i0.writeFile($,f,{encoding:J}),`File created successfully at: ${$}`}async function rB($){try{return await i0.access($),!0}catch{return!1}}async function iB($,f,J,Q,Z){let W=await i0.readFile($,Q),j=dB(W,f);if(j===0)throw Error(`No replacement performed: text not found in ${$}.`);if(j>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let X=W.replace(f,J??"");await i0.writeFile($,X,{encoding:Q});let H=lB(W,X,Z);return`Edited ${$}
106
+ ${H}`}async function nB($,f,J,Q){let W=(await i0.readFile($,Q)).split(`
107
+ `),j=W.length+1;if(f<1||f>j)throw Error(`Invalid insert_line: ${f}. insert_line must be a positive one-based boundary line in the range 1-${j}. Use ${j} to append at EOF.`);let X=f-1;return W.splice(X,0,...J.split(`
108
+ `)),await i0.writeFile($,W.join(`
109
+ `),{encoding:Q}),`Inserted content at line ${f} in ${$}.`}function u2($={}){let{encoding:f="utf-8",restrictToCwd:J=!0,maxDiffLines:Q=200}=$;return async(Z,W,j)=>{let X=uB(W,Z.path,J);if(Z.insert_line!=null)return nB(X,Z.insert_line,Z.new_text,f);if(!await rB(X))return pB(X,Z.new_text,f);if(Z.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return iB(X,Z.old_text,Z.new_text,f,Q)}}import*as d2 from"node:fs/promises";import*as l$ from"node:path";var aB=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),tB={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0};function l2($={}){let{maxFileSizeBytes:f,encoding:J,includeLineNumbers:Q}={...tB,...$};return async(Z,W)=>{let{path:j,start_line:X,end_line:H}=Z,Y=l$.isAbsolute(j)?l$.normalize(j):l$.resolve(process.cwd(),j),V=l$.extname(Y).toLowerCase(),A=aB.get(V),B=await d2.stat(Y);if(!B.isFile())throw Error(`Path is not a file: ${Y}`);if(B.size>f)throw Error(`File too large: ${B.size} bytes (max: ${f} bytes). Consider reading specific sections or using a different approach.`);if(A){if(W.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let D=await d2.readFile(Y);return[{type:"text",text:"Successfully read image"},{type:"image",data:D.toString("base64"),mediaType:A}]}let G=(await d2.readFile(Y,J)).split(`
110
+ `),R=Math.max((X??1)-1,0),F=Math.min(H??G.length,G.length),P=G.slice(R,F);if(Q){let D=String(G.length).length;return P.map((O,_)=>`${String(R+_+1).padStart(D," ")} | ${O}`).join(`
111
+ `)}return P.join(`
112
+ `)}}import{spawn as v3}from"node:child_process";import*as c3 from"node:fs/promises";import*as i4 from"node:path";var m3={};q(m3,{prewarmFileIndex:()=>r4,getFileIndex:()=>D$,enrichPromptWithMentions:()=>Kf});import{spawn as sB}from"node:child_process";import{readdir as oB}from"node:fs/promises";import a5 from"node:path";import{isMainThread as I3,parentPort as b3,Worker as eB}from"node:worker_threads";var $K=15000,fK=600000,JK=1000,QK=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function k3($){let f=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return f==="EACCES"||f==="EPERM"||f==="ENOENT"}var Bf=new Map;function ZK($){if(Bf.size<=1)return;for(let[f,J]of Bf.entries()){if(J.pending)continue;if($-J.lastAccessedAt>fK)Bf.delete(f)}}function WK($,f){return a5.relative($,f).split(a5.sep).join("/")}async function jK($){let J=(await new Promise((Q,Z)=>{let W=sB("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"]}),j="",X="";W.stdout.on("data",(H)=>{j+=H.toString()}),W.stderr.on("data",(H)=>{X+=H.toString()}),W.on("error",Z),W.on("close",(H)=>{if(H===0){Q(j);return}Z(Error(X||`rg exited with code ${H}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(J)}async function x3($,f,J){let Q;try{Q=await oB(f,{withFileTypes:!0})}catch(Z){if(k3(Z))return;throw Z}for(let Z of Q){let W=a5.join(f,Z.name);if(Z.isDirectory()){if(QK.has(Z.name))continue;try{await x3($,W,J)}catch(j){if(k3(j))continue;throw j}continue}if(Z.isFile())J.add(WK($,W))}}async function XK($){let f=new Set;return await x3($,$,f),f}async function p4($){try{return await jK($)}catch{return XK($)}}function HK(){if(I3||!b3)return;let $=b3;$.on("message",(f)=>{if(f.type!=="index")return;p4(f.cwd).then((J)=>{let Q={type:"indexResult",requestId:f.requestId,files:Array.from(J)};$.postMessage(Q)}).catch((J)=>{let Q={type:"indexResult",requestId:f.requestId,error:J instanceof Error?J.message:"Failed to build file index"};$.postMessage(Q)})})}class g3{worker=new eB(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let f=this.pending.get($.requestId);if(!f)return;if(this.pending.delete($.requestId),$.error){f.reject(Error($.error));return}f.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let f=++this.nextRequestId,J=new Promise((Z,W)=>{let j=setTimeout(()=>{this.pending.delete(f),Z(null)},JK);j.unref(),this.pending.set(f,{resolve:(X)=>{clearTimeout(j),Z(X)},reject:(X)=>{clearTimeout(j),W(X)}})}),Q={type:"index",requestId:f,cwd:$};return this.worker.postMessage(Q),J}flushPending($){for(let[f,J]of this.pending.entries())J.reject($),this.pending.delete(f)}}HK();var n5;function YK(){if(!I3)return null;if(n5===void 0)n5=new g3;return n5}async function VK($){let f=YK();if(!f)return p4($);try{let J=await f.requestIndex($);if(J===null)return p4($);return new Set(J)}catch{return p4($)}}async function D$($,f={}){let J=f.ttlMs??$K,Q=Date.now();ZK(Q);let Z=Bf.get($);if(Z&&J>0&&Q-Z.lastBuiltAt<=J&&Z.files.size>0)return Z.lastAccessedAt=Q,Z.files;if(Z?.pending)return Z.lastAccessedAt=Q,Z.pending;let W=VK($).then((j)=>{return Bf.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return Bf.set($,{files:Z?.files??new Set,lastBuiltAt:Z?.lastBuiltAt??0,lastAccessedAt:Q,pending:W}),W}async function r4($,f={}){await D$($,{...f,ttlMs:0})}import{stat as AK}from"node:fs/promises";import U1 from"node:path";var BK=/[),.:;!?`'"]+$/,KK=/^[(`'"]+/;function GK($){let f=$.matchAll(/(^|[\s])@([^\s]+)/g),J=[];for(let Q of f){let Z=(Q[2]??"").trim();if(Z.length===0)continue;let W=Z.replace(KK,"").replace(BK,"");if(W.length===0||W.includes("@"))continue;J.push(W)}return Array.from(new Set(J))}function PK($,f){let J=$.replace(/\\/g,"/"),Q=U1.isAbsolute(J)?U1.resolve(J):U1.resolve(f,J),Z=U1.relative(f,Q);if(Z.startsWith("..")||U1.isAbsolute(Z))return;return Z.split(U1.sep).join("/")}async function Kf($,f,J={}){let Q=GK($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:Z,maxFileBytes:W,maxTotalBytes:j}=J,X=await D$(f,{ttlMs:J.ttlMs}),H=[],Y=[],V=[],A=0;for(let B of Q){if(Z&&V.length>=Z){Y.push(B);continue}let K=PK(B,f);if(!K||!X.has(K)){Y.push(B);continue}if(!W||!j){H.push(K);continue}let G=U1.join(f,K);try{if(!(await AK(G)).isFile()){Y.push(B);continue}let F=A+W;if(F>j){Y.push(B);continue}A=F,H.push(K)}catch{Y.push(B)}}return{prompt:$,mentions:Q,matchedFiles:H,ignoredMentions:Y}}var FK=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],DK=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],L1=null;function RK(){if(L1!==null)return Promise.resolve(L1);return new Promise(($)=>{let f=v3("rg",["--version"],{stdio:["ignore","pipe","pipe"]});f.on("close",(J)=>{L1=J===0,$(L1)}),f.on("error",()=>{L1=!1,$(!1)}),setTimeout(()=>{if(!f.killed)f.kill("SIGTERM");if(L1===null)L1=!1,$(!1)},1000)})}function UK($,f,J,Q,Z=5000,W){return new Promise((j)=>{let X=v3("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:f,stdio:["ignore","pipe","pipe"]}),H="",Y=!1,V=()=>{if(!X.killed)X.kill("SIGTERM")},A=setTimeout(()=>{if(!Y)Y=!0,V(),j(null)},Z),B=(K)=>{if(!Y)Y=!0,clearTimeout(A),V(),j(K)};if(W?.aborted){V(),j(null);return}W?.addEventListener("abort",()=>{B(null)}),X.stdout.on("data",(K)=>{H+=K.toString()}),X.stderr.on("data",()=>{}),X.on("close",(K)=>{if(K===0||K===1){try{let G=[],R=H.split(`
113
+ `).filter((F)=>F.trim());for(let F of R){if(G.length>=J)break;let P=JSON.parse(F);if(P.type==="match"){let D=P.data,O=[];if(P.data.submatches&&P.data.submatches.length>0){let _=P.data.submatches[0];G.push({file:D.path.text,line:D.line_number,column:(_?.start??0)+1,match:_?.match?.text??"",context:O})}}else if(P.type==="context"&&G.length>0){let D=G[G.length-1],O=P.data.line_number===D.line?">":" ";D.context.push(`${O} ${P.data.line_number}: ${P.data.lines?.text??P.data.line?.text??""}`)}}B(G.length>0?G:null)}catch{B(null)}return}B(null)}),X.on("error",()=>{B(null)})})}function LK($,f,J,Q){let Z=$.split("/"),W=Z[Z.length-1]??"";if(Z.length-1>Q)return!1;for(let H=0;H<Z.length-1;H++)if(f.has(Z[H]??""))return!1;let X=i4.posix.extname(W).slice(1).toLowerCase();return J.has(X)||!X&&!W.startsWith(".")}function p2($={}){let{includeExtensions:f=FK,excludeDirs:J=DK,maxResults:Q=100,contextLines:Z=2,maxDepth:W=20}=$,j=new Set(J),X=new Set(f.map((H)=>H.toLowerCase()));return async(H,Y,V)=>{if(V.signal?.aborted)throw Error("Search operation aborted");let A=await RK(),B=null;if(A)B=await UK(H,Y,Q,Z,5000,V.signal);if(B){let D=[`Found ${B.length} result${B.length===1?"":"s"} for pattern: ${H}`,""];for(let O of B)D.push(`${O.file}:${O.line}:${O.column}`),D.push(...O.context),D.push("");if(B.length>=Q)D.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return D.join(`
114
+ `)}let K;try{K=new RegExp(H,"gim")}catch(D){throw Error(`Invalid regex pattern: ${H}. ${D instanceof Error?D.message:""}`)}let G=[],R=0,F=await D$(Y);for(let D of F){if(V.signal?.aborted)throw Error("Search operation aborted");if(!LK(D,j,X,W))continue;if(G.length>=Q)break;R++;let O=i4.join(Y,D);try{let L=(await c3.readFile(O,"utf-8")).split(`
115
+ `);for(let z=0;z<L.length;z++){let y=L[z];K.lastIndex=0;let w=K.exec(y);while(w!==null){if(G.length>=Q)break;let Q0=Math.max(0,z-Z),Z0=Math.min(L.length-1,z+Z),o=[];for(let u=Q0;u<=Z0;u++){let U0=u===z?">":" ";o.push(`${U0} ${u+1}: ${L[u]}`)}if(G.push({file:D,line:z+1,column:w.index+1,match:w[0],context:o}),w.index===K.lastIndex)K.lastIndex++;w=K.exec(y)}}}catch{}}if(G.length===0)return`No results found for pattern: ${H}
116
+ Searched ${R} files.`;let P=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${H}`,`Searched ${R} files.`,""];for(let D of G)P.push(`${D.file}:${D.line}:${D.column}`),P.push(...D.context),P.push("");if(G.length>=Q)P.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return P.join(`
117
+ `)}}function OK($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
118
+ `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(f,J)=>String.fromCharCode(parseInt(J,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
117
119
  `).replace(/\n{3,}/g,`
118
120
 
119
- `).trim()}function x2(f={}){let{timeoutMs:$=30000,maxResponseBytes:J=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:H={},followRedirects:Q=!0}=f;return async(Z,j,X)=>{let A;try{A=new URL(Z)}catch{throw Error(`Invalid URL: ${Z}`)}if(!["http:","https:"].includes(A.protocol))throw Error(`Invalid protocol: ${A.protocol}. Only http and https are supported.`);let P=new AbortController,B=setTimeout(()=>P.abort(),$),Y;if(X.signal)Y=()=>P.abort(),X.signal.addEventListener("abort",Y);try{let V=await fetch(Z,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...H},redirect:Q?"follow":"manual",signal:P.signal});if(clearTimeout(B),!Q&&V.status>=300&&V.status<400)return`Redirect to: ${V.headers.get("location")}`;if(!V.ok)throw Error(`HTTP ${V.status}: ${V.statusText}`);let R=V.headers.get("content-type")||"",U=V.body?.getReader();if(!U)throw Error("Failed to read response body");let K=[],F=0;while(!0){let{done:L,value:q}=await U.read();if(L)break;if(F+=q.length,F>J)throw U.cancel(),Error(`Response too large: exceeded ${J} bytes`);K.push(q)}let y=new Uint8Array(F),D=0;for(let L of K)y.set(L,D),D+=L.length;let M=new TextDecoder("utf-8").decode(y),T;if(R.includes("text/html")||R.includes("application/xhtml"))T=mY(M);else if(R.includes("application/json"))try{let L=JSON.parse(M);T=JSON.stringify(L,null,2)}catch{T=M}else T=M;let _=[`URL: ${Z}`,`Content-Type: ${R}`,`Size: ${F} bytes`,"","--- Content ---",T.slice(0,50000)];if(T.length>50000)_.push(`
120
- [Content truncated: showing first 50000 of ${T.length} characters]`);return _.push("","--- Analysis Request ---",`Prompt: ${j}`),_.join(`
121
- `)}catch(V){if(clearTimeout(B),V instanceof Error){if(V.name==="AbortError")throw Error(`Request timed out after ${$}ms`);throw V}throw Error(`Fetch failed: ${String(V)}`)}finally{if(X.signal&&Y)X.signal.removeEventListener("abort",Y)}}}function j1(f={}){return{readFile:I2(f.fileRead),search:m2(f.search),bash:E2(f.bash),webFetch:x2(f.webFetch),applyPatch:C2(f.applyPatch),editor:S2(f.editor)}}var xY={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},X1=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function GQ(f,$){if(!$||$.length===0)return!0;let J=f.toLowerCase();return $.some((W)=>J.includes(W.toLowerCase()))}function gY(f,$,J,W){if(f.mode&&f.mode!=="any"&&f.mode!==W)return!1;return GQ($,f.providerIdIncludes)&&GQ(J,f.modelIdIncludes)}function A1(f,$,J,W){if(!W||W.length===0)return{};let H=new Map;for(let Z of W){if(!gY(Z,f,$,J))continue;for(let j of Z.disableTools??[])H.set(j,!1);for(let j of Z.enableTools??[])H.set(j,!0)}let Q={};for(let[Z,j]of H.entries())Q[xY[Z]]=j;return Q}var Ef={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function K0(f){if(f.mode==="plan")return"plan";if(f.mode==="yolo")return"yolo";return"act"}function x4(f){if(f!=="yolo")return{};let $={enabled:!0,autoApprove:!0},J={"*":$};for(let W of k0)J[W]=$;return J}function g4(f,$){let J=Ef[f],{enableSpawnAgent:W,enableAgentTeams:H,...Q}=J;return v0({...Q,...$})}import{createTool as bV,zodToJsonSchema as CV}from"@cline/shared";import{z as g5}from"zod";import{createAgentRuntime as _V}from"@cline/agents";import{createContributionRegistry as MV}from"@cline/shared";import{createGateway as vY,MODEL_COLLECTIONS_BY_PROVIDER_ID as uY}from"@cline/llms";function w5(f){let $=f.providerConfig;if($?.knownModels)return $.knownModels;if(f.knownModels)return f.knownModels;return uY[f.providerId]?.models??void 0}function TQ(f,$){let J=f.providerConfig,W=J?.providerId===f.providerId?J:void 0,H={...W??{},providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey??W?.apiKey,baseUrl:f.baseUrl??W?.baseUrl,headers:f.headers??W?.headers,knownModels:w5(f),maxOutputTokens:f.maxTokensPerTurn,reasoningEffort:f.reasoningEffort,thinkingBudgetTokens:f.thinkingBudgetTokens,thinking:f.thinking,logger:$,extensionContext:f.extensionContext};return vY({providerConfigs:[{providerId:H.providerId,apiKey:H.apiKey,baseUrl:H.baseUrl,headers:H.headers,models:H.knownModels?Object.entries(H.knownModels).map(([Q,Z])=>({id:Q,name:Z.name??Q,description:Z.description,contextWindow:Z.contextWindow,maxOutputTokens:Z.maxTokens})):void 0}],logger:$}).createAgentModel({providerId:H.providerId,modelId:H.modelId},{maxTokens:H.maxOutputTokens})}import{normalizeUserInput as DQ}from"@cline/shared";var cY=50000,dY=6000000,_Q=8000,rY=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),lY=new Set(["read","read_files"]),G$="[outdated - see the latest file content]",MQ="Tool execution was interrupted before a result was produced.",pY=(f)=>`
121
+ `).trim()}function r2($={}){let{timeoutMs:f=30000,maxResponseBytes:J=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:Z={},followRedirects:W=!0}=$;return async(j,X,H)=>{let Y;try{Y=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(Y.protocol))throw Error(`Invalid protocol: ${Y.protocol}. Only http and https are supported.`);let V=new AbortController,A=setTimeout(()=>V.abort(),f),B;if(H.signal)B=()=>V.abort(),H.signal.addEventListener("abort",B);try{let K=await fetch(j,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...Z},redirect:W?"follow":"manual",signal:V.signal});if(clearTimeout(A),!W&&K.status>=300&&K.status<400)return`Redirect to: ${K.headers.get("location")}`;if(!K.ok)throw Error(`HTTP ${K.status}: ${K.statusText}`);let G=K.headers.get("content-type")||"",R=K.body?.getReader();if(!R)throw Error("Failed to read response body");let F=[],P=0;while(!0){let{done:y,value:w}=await R.read();if(y)break;if(P+=w.length,P>J)throw R.cancel(),Error(`Response too large: exceeded ${J} bytes`);F.push(w)}let D=new Uint8Array(P),O=0;for(let y of F)D.set(y,O),O+=y.length;let _=new TextDecoder("utf-8").decode(D),L;if(G.includes("text/html")||G.includes("application/xhtml"))L=OK(_);else if(G.includes("application/json"))try{let y=JSON.parse(_);L=JSON.stringify(y,null,2)}catch{L=_}else L=_;let z=[`URL: ${j}`,`Content-Type: ${G}`,`Size: ${P} bytes`,"","--- Content ---",L.slice(0,50000)];if(L.length>50000)z.push(`
122
+ [Content truncated: showing first 50000 of ${L.length} characters]`);return z.push("","--- Analysis Request ---",`Prompt: ${X}`),z.join(`
123
+ `)}catch(K){if(clearTimeout(A),K instanceof Error){if(K.name==="AbortError")throw Error(`Request timed out after ${f}ms`);throw K}throw Error(`Fetch failed: ${String(K)}`)}finally{if(H.signal&&B)H.signal.removeEventListener("abort",B)}}}function Gf($={}){return{readFile:l2($.fileRead),search:p2($.search),bash:c2($.bash),webFetch:r2($.webFetch),applyPatch:v2($.applyPatch),editor:u2($.editor)}}var zK={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},Pf=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function u3($,f){if(!f||f.length===0)return!0;let J=$.toLowerCase();return f.some((Q)=>J.includes(Q.toLowerCase()))}function _K($,f,J,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return u3(f,$.providerIdIncludes)&&u3(J,$.modelIdIncludes)}function Ff($,f,J,Q){if(!Q||Q.length===0)return{};let Z=new Map;for(let j of Q){if(!_K(j,$,f,J))continue;for(let X of j.disableTools??[])Z.set(X,!1);for(let X of j.enableTools??[])Z.set(X,!0)}let W={};for(let[j,X]of Z.entries())W[zK[j]]=X;return W}var b0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function R$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function n4($){if($!=="yolo")return{};let f={enabled:!0,autoApprove:!0},J={"*":f};for(let Q of g$)J[Q]=f;return J}function a4($,f){let J=b0[$],{enableSpawnAgent:Q,enableAgentTeams:Z,...W}=J;return d$({...W,...f})}import{createTool as FG,zodToJsonSchema as DG}from"@cline/shared";import{z as W9}from"zod";import{createAgentRuntime as XG}from"@cline/agents";import{createContributionRegistry as HG}from"@cline/shared";import{createGateway as yK,MODEL_COLLECTIONS_BY_PROVIDER_ID as TK}from"@cline/llms";function t5($){let f=$.providerConfig;if(f?.knownModels)return f.knownModels;if($.knownModels)return $.knownModels;return TK[$.providerId]?.models??void 0}function NK($){if(!$?.length)return;let f=new Set;for(let J of $)switch(J){case"tools":case"reasoning":case"prompt-cache":case"images":f.add(J);break;case"structured_output":f.add("structured-output");break;default:f.add("text")}return f.add("text"),[...f]}function MK($,f){return{id:$,name:f.name??$,description:f.description,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxOutputTokens:f.maxTokens,capabilities:NK(f.capabilities),metadata:{family:f.family,pricing:f.pricing,status:f.status,releaseDate:f.releaseDate}}}function d3($,f,J){let Q=$.providerConfig,Z=Q?.providerId===$.providerId?Q:void 0,W={...Z??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??Z?.apiKey,baseUrl:$.baseUrl??Z?.baseUrl,headers:$.headers??Z?.headers,knownModels:t5($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:f,extensionContext:$.extensionContext};return yK({providerConfigs:[{providerId:W.providerId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,models:W.knownModels?Object.entries(W.knownModels).map(([j,X])=>MK(j,X)):void 0}],logger:f,telemetry:J??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:W.providerId,modelId:W.modelId},{maxTokens:W.maxOutputTokens})}import{normalizeUserInput as l3}from"@cline/shared";var qK=50000,wK=6000000,p3=8000,SK=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),CK=new Set(["read","read_files"]),O1="[outdated - see the latest file content]",r3="Tool execution was interrupted before a result was produced.",EK=($)=>`
122
124
 
123
- ...[truncated ${f} chars]...
125
+ ...[truncated ${$} chars]...
124
126
 
125
- `,iY=(f)=>`
127
+ `,hK=($)=>`
126
128
 
127
- ...[truncated ${f} chars to fit provider request budget]...
129
+ ...[truncated ${$} chars to fit provider request budget]...
128
130
 
129
- `;class C5{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor(f=cY,$=rY,J=dY){this.maxToolResultChars=f;this.targetToolNames=$;this.maxTotalTextBytes=J}buildForApi(f){this.reindex(f);let J=this.addMissingToolResults(f).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let Z=DQ(W.content);if(Z!==W.content)return{...W,content:Z}}return W}let H=!1,Q=W.content.map((Z)=>{let j=this.transformBlock(Z,W.role);if(j!==Z)H=!0;return j});return H?{...W,content:Q}:W});return this.truncateToTotalTextBudget(J)}transformBlock(f,$){if($==="user"&&f.type==="text"&&typeof f.text==="string"){let H=DQ(f.text);if(H!==f.text)return{...f,text:H};return f}if(f.type==="file"){let H=this.truncateMiddle(f.content);return H===f.content?f:{...f,content:H}}if(f.type!=="tool_result")return f;let J=this.toolNameByIdCache.get(f.tool_use_id),W=f.content;if(this.isReadTool(J)&&f.is_error!==!0){let H=this.getReadLocators(f);if(H.length>0){let Q=H.filter((Z)=>this.isOutdatedReadLocator(Z,f.tool_use_id));if(Q.length>0)W=this.replaceOutdatedReadContent(W,Q)}}if(this.shouldTruncateTool(J))W=this.truncateToolResultContent(W);return W===f.content?f:{...f,content:W}}reindex(f){let $=this.indexedMessageCount===0||f.length>=this.indexedMessageCount&&f[this.indexedMessageCount-1]===this.indexedTailRef;if(f.length<this.indexedMessageCount||!$)this.resetIndexes();for(let J=this.indexedMessageCount;J<f.length;J++){let W=f[J];if(!Array.isArray(W.content))continue;for(let H=0;H<W.content.length;H++){let Q=W.content[H];if(Q.type==="file")this.latestFullContentOwnerByPathCache.set(Q.path,`file:${J}:${H}`);else if(Q.type==="tool_use"){let Z=Q.name.toLowerCase();if(this.toolNameByIdCache.set(Q.id,Z),this.isReadTool(Z)){let j=this.extractLocatorsFromReadToolInput(Q.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(Q.id,j)}}else if(Q.type==="tool_result"){let Z=this.toolNameByIdCache.get(Q.tool_use_id);if(!this.isReadTool(Z)||Q.is_error===!0)continue;let j=this.getReadLocators(Q);for(let X of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(X),Q.tool_use_id),this.isFullFileRead(X))this.latestFullContentOwnerByPathCache.set(X.path,Q.tool_use_id)}}}this.indexedMessageCount=f.length,this.indexedTailRef=f.length>0?f[f.length-1]:void 0}addMissingToolResults(f){let $=this.collectToolResultIds(f),J=[],W=new Map,H=!1,Q=()=>{if(W.size===0)return;Z(this.createMissingToolResultMessage(W)),W.clear(),H=!0},Z=(j)=>{let X=J.at(-1);if(this.shouldMergeUserAfterToolResults(X,j)){J[J.length-1]={...X,content:[...X.content,...this.contentBlocksForUserMerge(j.content)]},H=!0;return}J.push(j)};for(let j of f){if(this.isToolResultOnlyMessage(j)){if(Z(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),H=!0;continue}if(Array.isArray(j.content)){let X=j.content.filter((P)=>P.type==="tool_result"),A=j.content.filter((P)=>P.type!=="tool_result");if(X.length>0){let P=this.appendMissingToolResults({...j,role:"user",content:X},W);if(Z(P),W.size>0)W.clear();H=!0}if(A.length>0||X.length===0){if(X.length===0)Q();let P=X.length>0?{...j,content:A}:j;if(Z(P),P.role==="assistant")this.trackMissingToolCalls(P,$,W)}continue}Q(),Z(j)}return Q(),H?J:f}appendMissingToolResults(f,$){if($.size===0||!Array.isArray(f.content))return f;return{...f,role:"user",content:[...f.content,...this.createMissingToolResultBlocks($)]}}shouldMergeUserAfterToolResults(f,$){return f?.role==="user"&&$.role==="user"&&this.isToolResultOnlyMessage(f)&&this.contentBlocksForUserMerge($.content).length>0}contentBlocksForUserMerge(f){return typeof f==="string"?f.length>0?[{type:"text",text:f}]:[]:f}collectToolResultIds(f){let $=new Set;for(let J of f){if(!Array.isArray(J.content))continue;for(let W of J.content)if(W.type==="tool_result")$.add(W.tool_use_id)}return $}isToolResultOnlyMessage(f){return f.role==="user"&&Array.isArray(f.content)&&f.content.length>0&&f.content.every(($)=>$.type==="tool_result")}trackMissingToolCalls(f,$,J){if(!Array.isArray(f.content))return;for(let W of f.content){if(W.type!=="tool_use"||$.has(W.id))continue;J.set(W.id,W.name)}}createMissingToolResultMessage(f){return{role:"user",content:this.createMissingToolResultBlocks(f)}}createMissingToolResultBlocks(f){return Array.from(f,([$,J])=>({type:"tool_result",tool_use_id:$,content:[{type:"text",text:this.formatMissingToolResultText(J)}],is_error:!0}))}formatMissingToolResultText(f){return f?`${MQ} Tool: ${f}.`:MQ}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(f){let $=f,J=this.readResultLocatorCache.get($);if(J===void 0)J=this.extractReadLocatorsFromToolResultContent(f.content),this.readResultLocatorCache.set($,J);if(J.length>0)return J;return this.readLocatorsByToolUseIdCache.get(f.tool_use_id)??[]}extractLocatorsFromReadToolInput(f){if(!f||typeof f!=="object")return[];let $=f,J=[],W=this.extractLocatorFromReadRequest($);if(W)J.push(W);if(Array.isArray($.files))for(let H of $.files){let Q=this.extractLocatorFromReadRequest(H);if(Q)J.push(Q)}if(Array.isArray($.file_paths)){for(let H of $.file_paths)if(typeof H==="string"&&H.length>0)J.push({path:H,startLine:null,endLine:null})}return this.dedupeReadLocators(J)}extractReadLocatorsFromToolResultContent(f){if(typeof f==="string")return this.tryParseReadLocators(f);for(let $ of f){if($.type!=="text")continue;let J=this.tryParseReadLocators($.text);if(J.length>0)return J}return[]}tryParseReadLocators(f){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(f))}catch{return[]}}extractLocatorsFromParsedReadResult(f){if(Array.isArray(f)){let J=[];for(let W of f){let H=this.extractLocatorFromResultEntry(W);if(H)J.push(H)}return this.dedupeReadLocators(J)}let $=this.extractLocatorFromResultEntry(f);return $?[$]:[]}extractLocatorFromReadRequest(f){if(!f||typeof f!=="object")return;let $=f,J=this.extractPath($);if(!J)return;return{path:J,startLine:this.extractLineNumber($.start_line),endLine:this.extractLineNumber($.end_line)}}extractLocatorFromResultEntry(f){if(!f||typeof f!=="object")return;let $=f,J=this.extractPath($);if(J)return{path:J,startLine:this.extractLineNumber($.start_line),endLine:this.extractLineNumber($.end_line)};if(typeof $.query==="string"&&$.query.length>0)return this.parseReadQuery($.query);return}extractPath(f){let $=[f.path,f.file_path,f.filePath];for(let J of $)if(typeof J==="string"&&J.length>0)return J;return}extractLineNumber(f){return typeof f==="number"&&Number.isInteger(f)?f:null}parseReadQuery(f){let $=/^(.*):(\d+)-(EOF|\d+)$/.exec(f);if(!$)return{path:f,startLine:null,endLine:null};return{path:$[1],startLine:Number($[2]),endLine:$[3]==="EOF"?null:Number($[3])}}dedupeReadLocators(f){let $=new Map;for(let J of f)$.set(this.toReadLocatorKey(J),J);return Array.from($.values())}toReadLocatorKey(f){if(this.isFullFileRead(f))return f.path;return`${f.path}:${f.startLine??1}-${f.endLine??"EOF"}`}isFullFileRead(f){return f.startLine==null&&f.endLine==null}isOutdatedReadLocator(f,$){let J=this.latestFullContentOwnerByPathCache.get(f.path);if(J&&J!==$)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(f))!==$}replaceOutdatedReadContent(f,$){let J=new Set($.map((Q)=>this.toReadLocatorKey(Q))),W=new Set($.map((Q)=>Q.path));if(typeof f==="string")return this.replaceOutdatedInString(f,J)??G$;let H=0;for(let Q of f)if(Q.type==="text")H+=this.countOutdatedImageEntries(Q.text,J);return f.map((Q)=>{if(Q.type==="file"){if(!W.has(Q.path))return Q;return{...Q,content:G$}}if(Q.type==="image"){if(H===0)return Q;return H-=1,{type:"text",text:G$}}if(Q.type!=="text")return Q;let Z=this.replaceOutdatedInString(Q.text,J);if(Z===null)return{...Q,text:G$};return Z===Q.text?Q:{...Q,text:Z}})}countOutdatedImageEntries(f,$){let J;try{J=JSON.parse(f)}catch{return 0}let W=Array.isArray(J)?J:[J],H=0;for(let Q of W){if(!Q||typeof Q!=="object")continue;let Z=Q,j=this.extractLocatorFromResultEntry(Z);if(!j)continue;if(!$.has(this.toReadLocatorKey(j)))continue;if(Z.result==="Successfully read image"||Z.content==="Successfully read image")H+=1}return H}replaceOutdatedInString(f,$){let J;try{J=JSON.parse(f)}catch{return null}let W=Array.isArray(J)?J.map((H)=>this.replaceOutdatedReadEntry(H,$)):this.replaceOutdatedReadEntry(J,$);return JSON.stringify(W)}replaceOutdatedReadEntry(f,$){if(!f||typeof f!=="object")return f;let J=this.extractLocatorFromResultEntry(f);if(!J||!$.has(this.toReadLocatorKey(J)))return f;let W={...f};if(typeof W.result==="string")W.result=G$;else if(typeof W.content==="string")W.content=G$;else W.result=G$;return W}isReadTool(f){return!!f&&lY.has(f)}shouldTruncateTool(f){return!!f&&this.targetToolNames.has(f)}truncateToolResultContent(f){if(typeof f==="string")return this.truncateMiddle(f);return f.map(($)=>{if($.type==="file"){let W=this.truncateMiddle($.content);return W===$.content?$:{...$,content:W}}if($.type!=="text")return $;let J=this.truncateMiddle($.text);return J===$.text?$:{...$,text:J}})}truncateMiddle(f){return b5(f,this.maxToolResultChars,pY)}truncateToTotalTextBudget(f){if(this.maxTotalTextBytes<=0)return f;let $=this.countMessageTextBytes(f);if($<=this.maxTotalTextBytes)return f;let J=f.map((H)=>{if(!Array.isArray(H.content))return H;return{...H,content:H.content.map((Q)=>aY(Q))}}),W=this.collectTruncationCandidates(J);for(let H of W){if($<=this.maxTotalTextBytes)break;let Q=H.byteLength;if(Q<=_Q)continue;let Z=$-this.maxTotalTextBytes,j=Math.max(_Q,Q-Z),X=nY(H.get(),j,iY);H.set(X),$-=Q-_f(X)}return J}countMessageTextBytes(f){let $=0;for(let J of f){if(typeof J.content==="string"){$+=_f(J.content);continue}for(let W of J.content)if(W.type==="text")$+=_f(W.text);else if(W.type==="thinking")$+=_f(W.thinking);else if(W.type==="file")$+=_f(W.content);else if(W.type==="tool_result"){if(typeof W.content==="string")$+=_f(W.content);else for(let H of W.content)if(H.type==="text")$+=_f(H.text);else if(H.type==="file")$+=_f(H.content)}}return $}collectTruncationCandidates(f){let $=[];for(let J of f){if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type!=="tool_result")continue;let H=this.toolNameByIdCache.get(W.tool_use_id);if(!this.shouldTruncateTool(H))continue;if(typeof W.content==="string"){$.push({byteLength:_f(W.content),get:()=>W.content,set:(Q)=>{W.content=Q}});continue}for(let Q of W.content)if(Q.type==="text")$.push({byteLength:_f(Q.text),get:()=>Q.text,set:(Z)=>{Q.text=Z}});else if(Q.type==="file")$.push({byteLength:_f(Q.content),get:()=>Q.content,set:(Z)=>{Q.content=Z}})}}return $.sort((J,W)=>W.byteLength-J.byteLength)}}function _f(f){return Buffer.byteLength(f,"utf8")}function b5(f,$,J){if(f.length<=$)return f;let W=J(f.length-$),H=Math.max(0,Math.floor(($-W.length)/2)),Q=Math.max(0,f.length-H*2),Z=J(Q),j=Math.max(0,Math.floor(($-Z.length)/2)),X=f.slice(0,j),A=j>0?f.slice(-j):"";return`${X}${Z}${A}`}function nY(f,$,J){if(_f(f)<=$)return f;let W=0,H=f.length,Q=b5(f,0,J);while(W<=H){let Z=W+H>>>1,j=b5(f,Z,J);if(_f(j)<=$)Q=j,W=Z+1;else H=Z-1}return Q}function aY(f){if(f.type!=="tool_result"||typeof f.content==="string")return{...f};return{...f,content:f.content.map(($)=>({...$}))}}function E5(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class S5{messages=[];conversationId=E5();sessionStarted=!1;constructor(f){if((f?.length??0)>0)this.restore(f??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(f){this.messages.push(f)}appendMessages(f){if(f.length===0)return;this.messages.push(...f)}replaceMessages(f){this.messages=[...f]}resetForRun(){this.messages=[],this.conversationId=E5(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=E5(),this.sessionStarted=!1}restore(f){this.messages=[...f],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function tY(f){let $=oY(f.content),J=[],W=f.id??$V(),H=0,Q=[],Z=()=>{if(Q.length===0)return;let j=H===0?W:`${W}_part_${H}`;H+=1,J.push({id:j,role:f.role,content:Q.map(eY),createdAt:f.ts??Date.now(),metadata:f.metadata,modelInfo:f.modelInfo,metrics:LQ(f.metrics)}),Q=[]};if($.length===0)return J.push({id:W,role:f.role,content:[],createdAt:f.ts??Date.now(),metadata:f.metadata,modelInfo:f.modelInfo,metrics:LQ(f.metrics)}),J;for(let j of $){if(j.type!=="tool_result"){Q.push(j);continue}Z(),J.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[zQ(j)],createdAt:f.ts??Date.now(),metadata:f.metadata})}return Z(),J}function v4(f){return f.flatMap(tY)}function sY(f){let $=f.content.map(NQ).filter((J)=>J!==void 0);return{id:f.id,role:f.role==="tool"?"user":f.role,content:$,ts:f.createdAt,metadata:f.metadata,modelInfo:f.modelInfo,metrics:fV(f.metrics)}}function P1(f){return f.map(sY)}function OQ(f){let $=[];for(let J of f){let W=J.content.map(NQ).filter((Z)=>Z!==void 0),H=J.role==="tool"?"user":J.role,Q=$[$.length-1];if(H==="user"&&W.length>0&&W.every((Z)=>Z.type==="tool_result")&&Q?.role==="user"&&Array.isArray(Q.content)&&Q.content.every((Z)=>Z.type==="tool_result")){Q.content.push(...W);continue}$.push({role:H,content:W})}return $}function oY(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];return[...f]}function eY(f){switch(f.type){case"text":return{type:"text",text:f.text};case"thinking":return{type:"reasoning",text:f.thinking,metadata:f.signature?{signature:f.signature,details:f.details}:f.details?{details:f.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:f.data}};case"image":return{type:"image",image:f.data,mediaType:f.mediaType};case"file":return{type:"file",path:f.path,content:f.content};case"tool_use":return{type:"tool-call",toolCallId:f.id,toolName:f.name,input:f.input,metadata:f.signature?{signature:f.signature}:void 0};case"tool_result":return zQ(f)}}function zQ(f){return{type:"tool-result",toolCallId:f.tool_use_id,toolName:"",output:f.content,isError:f.is_error}}function NQ(f){switch(f.type){case"text":return{type:"text",text:f.text};case"reasoning":{if(f.redacted===!0)return{type:"redacted_thinking",data:f.metadata?.data??""};let $=f.metadata;return{type:"thinking",thinking:f.text,signature:$?.signature,details:$?.details}}case"image":return typeof f.image==="string"?{type:"image",data:f.image,mediaType:f.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:f.path,content:f.content};case"tool-call":return{type:"tool_use",id:f.toolCallId,name:f.toolName,input:f.input??{},signature:f.metadata?.signature};case"tool-result":{let $=f.output,J=typeof $==="string"?$:Array.isArray($)?$:JSON.stringify($);return{type:"tool_result",tool_use_id:f.toolCallId,content:J,is_error:f.isError}}}}function LQ(f){if(!f)return;return{inputTokens:f.inputTokens??0,outputTokens:f.outputTokens??0,cacheReadTokens:f.cacheReadTokens??0,cacheWriteTokens:f.cacheWriteTokens??0,cost:f.cost}}function fV(f){if(!f)return;return{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheWriteTokens:f.cacheWriteTokens,cost:f.cost}}var hQ=0;function $V(){return hQ+=1,`msg_${Date.now().toString(36)}_${hQ.toString(36)}`}function qQ(f){let{agentConfig:$}=f,J=JV($),W=WV($),H=f.hooks,Q=HV($.maxParallelToolCalls);return{sessionId:f.sessionId??$.sessionId,agentId:f.agentId,conversationId:f.conversationId,parentAgentId:f.parentAgentId,agentRole:f.agentRole,systemPrompt:f.systemPrompt??$.systemPrompt,messageModelInfo:W,model:f.model,modelOptions:J,tools:f.tools,hooks:H,prepareTurn:f.prepareTurn,consumePendingUserMessage:$.consumePendingUserMessage,plugins:f.plugins,logger:f.logger??$.logger,telemetry:f.telemetry??QV($.telemetry),initialMessages:f.initialMessages,completionPolicy:$.completionPolicy,maxIterations:$.maxIterations,toolExecution:Q,toolPolicies:$.toolPolicies,toolContextMetadata:f.toolContextMetadata,requestToolApproval:$.requestToolApproval}}function JV(f){let $={};if(f.thinking!==void 0)$.thinking=f.thinking;if(f.reasoningEffort!==void 0)$.reasoningEffort=f.reasoningEffort;if(f.thinkingBudgetTokens!==void 0)$.thinkingBudgetTokens=f.thinkingBudgetTokens;if(f.maxTokensPerTurn!==void 0)$.maxTokensPerTurn=f.maxTokensPerTurn;if(f.apiTimeoutMs!==void 0)$.apiTimeoutMs=f.apiTimeoutMs;return Object.keys($).length>0?$:void 0}function WV(f){let $=f.providerConfig?.family;return{id:f.modelId,provider:f.providerId,family:$}}function HV(f){if(f===void 0)return;return f>=2?"parallel":"sequential"}function QV(f){if(!f)return;return{capture:($,J)=>{f.capture({event:$,properties:J})}}}function ZV(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function jV(f){f.lastToolName="",f.lastToolSignature="",f.consecutiveIdenticalCount=0}function k5(f){if(f==null||typeof f!=="object")return f;if(Array.isArray(f))return f.map(k5);let $={};for(let J of Object.keys(f).sort())$[J]=k5(f[J]);return $}function XV(f){if(f==null)return"null";if(typeof f==="string")return f;if(typeof f!=="object")return String(f);try{return JSON.stringify(k5(f))}catch{return String(f)}}function AV(f,$,J,W){if($===f.lastToolName&&J===f.lastToolSignature)f.consecutiveIdenticalCount++;else f.consecutiveIdenticalCount=1;return f.lastToolName=$,f.lastToolSignature=J,{softWarning:f.consecutiveIdenticalCount===W.softThreshold,hardEscalation:f.consecutiveIdenticalCount>=W.hardThreshold}}var wQ={softThreshold:3,hardThreshold:5};class I5{config;state=ZV();constructor(f){this.config={softThreshold:f?.softThreshold??wQ.softThreshold,hardThreshold:f?.hardThreshold??wQ.hardThreshold}}inspect(f){let $=XV(f.input),J=AV(this.state,f.name,$,this.config);if(J.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${f.name}\`; stopping to avoid a loop.`};if(J.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${f.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){jV(this.state)}}class m5{consecutiveMistakes=0;options;constructor(f){this.options=f}async record(f){let $=this.options.maxConsecutiveMistakes,J=f.forceAtLimit&&$?$:this.consecutiveMistakes+1;this.consecutiveMistakes=J;let W=f.details?.trim()||`consecutive mistake (${f.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:f.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:f.iteration,reason:f.reason,details:f.details,consecutiveMistakes:J,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!$||J<$)return{action:"continue"};let H=await BV({iteration:f.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:$,reason:f.reason,details:f.details},this.options.onLimitReached);if(H.action==="continue"){let Q=H.guidance?.trim();if(Q)this.options.appendRecoveryNotice(Q,f.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:Q}}return{action:"stop",reason:H.reason?.trim()||void 0,message:PV({iteration:f.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:$,reason:f.reason,details:f.details,stopReason:H.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function PV(f){let $=[`Stopped after ${f.consecutiveMistakes}/${f.maxConsecutiveMistakes} consecutive mistakes (${f.reason}) at iteration ${f.iteration}.`],J=f.details?.trim();if(J)$.push(`Error: ${J}`);let W=f.stopReason?.trim();if(W)$.push(`Decision: ${W}`);return $.push("Session state was preserved. Send a new prompt to resume from the latest state."),$.join(" ")}async function BV(f,$){if(!$)return{action:"stop",reason:`maximum consecutive mistakes reached (${f.maxConsecutiveMistakes})`};try{return await $(f)}catch(J){return{action:"stop",reason:J instanceof Error?J.message:`maximum consecutive mistakes reached (${f.maxConsecutiveMistakes})`}}}function YV(f){let $=f.content.filter((J)=>J.type==="text");if($.length===0)return;return $.map((J)=>J.text).join("")}function VV(f){let $=f.content.filter((J)=>J.type==="reasoning");if($.length===0)return;return{reasoning:$.map((J)=>J.text).join(""),redacted:$.some((J)=>J.redacted===!0)}}function RV(f){return f.content.find(($)=>$.type==="tool-result")}function FV(f){switch(f){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function KV(f){if(!f||f.isError!==!0)return;if(typeof f.output==="string")return f.output;if(f.output instanceof Error)return f.output.message;try{return JSON.stringify(f.output)}catch{return String(f.output)}}class x5{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate(f){switch(f.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:f.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:f.iteration,hadToolCalls:f.toolCallCount>0,toolCallCount:f.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:f.text,accumulated:f.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:f.text,redacted:f.redacted===!0}];case"assistant-message":return this.translateAssistantMessage(f.message);case"tool-started":return this.translateToolStarted(f);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,update:f.update}];case"tool-finished":return this.translateToolFinished(f);case"usage-updated":return this.translateUsage(f.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:f.message,reason:f.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:f.metadata}];case"run-finished":return this.translateRunFinished(f.result);case"run-failed":return[{type:"error",error:f.error,recoverable:!1,iteration:f.snapshot.iteration}];default:return f}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage(f){let $=[],J=YV(f);if(J!==void 0)$.push({type:"content_end",contentType:"text",text:J});let W=VV(f);if(W!==void 0)$.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return $}translateToolStarted(f){return this.toolStartedAt.set(f.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,input:f.toolCall.input}]}translateToolFinished(f){let $=this.toolStartedAt.get(f.toolCall.toolCallId),J=$===void 0?void 0:Date.now()-$;this.toolStartedAt.delete(f.toolCall.toolCallId);let W=RV(f.message),H=W?.output,Q=KV(W);return[{type:"content_end",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,output:H,error:Q,durationMs:J}]}translateUsage(f){let $=f.inputTokens-this.lastUsage.inputTokens,J=f.outputTokens-this.lastUsage.outputTokens,W=f.cacheReadTokens-this.lastUsage.cacheReadTokens,H=f.cacheWriteTokens-this.lastUsage.cacheWriteTokens,Q=this.lastUsage.totalCost??0,j=(f.totalCost??0)-Q;return this.lastUsage={inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheWriteTokens:f.cacheWriteTokens,totalCost:f.totalCost},[{type:"usage",inputTokens:Math.max(0,$),outputTokens:Math.max(0,J),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:H===0?void 0:Math.max(0,H),cost:j===0?void 0:j,totalInputTokens:f.inputTokens,totalOutputTokens:f.outputTokens,totalCacheReadTokens:f.cacheReadTokens===0?void 0:f.cacheReadTokens,totalCacheWriteTokens:f.cacheWriteTokens===0?void 0:f.cacheWriteTokens,totalCost:f.totalCost}]}translateRunFinished(f){let $={inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens===0?void 0:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens===0?void 0:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost};return[{type:"done",reason:FV(f.status),text:f.outputText,iterations:f.iterations,usage:$}]}}function LV(f){if(typeof f==="string")return f;if(f instanceof Error)return f.message;try{return JSON.stringify(f)}catch{return String(f)}}async function hV(f){let J=(typeof f.content==="function"?await f.content():f.content).trim();return J.length>0?J:void 0}function OV(f,$){let J=f.trim(),W=$.map((H)=>H.trim()).filter(Boolean).join(`
131
+ `;class o5{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor($=qK,f=SK,J=wK){this.maxToolResultChars=$;this.targetToolNames=f;this.maxTotalTextBytes=J}buildForApi($){this.reindex($);let J=this.addMissingToolResults($).map((Q)=>{if(!Array.isArray(Q.content)){if(Q.role==="user"&&typeof Q.content==="string"){let j=l3(Q.content);if(j!==Q.content)return{...Q,content:j}}return Q}let Z=!1,W=Q.content.map((j)=>{let X=this.transformBlock(j,Q.role);if(X!==j)Z=!0;return X});return Z?{...Q,content:W}:Q});return this.truncateToTotalTextBudget(J)}transformBlock($,f){if(f==="user"&&$.type==="text"&&typeof $.text==="string"){let Z=l3($.text);if(Z!==$.text)return{...$,text:Z};return $}if($.type==="file"){let Z=this.truncateMiddle($.content);return Z===$.content?$:{...$,content:Z}}if($.type!=="tool_result")return $;let J=this.toolNameByIdCache.get($.tool_use_id),Q=$.content;if(this.isReadTool(J)&&$.is_error!==!0){let Z=this.getReadLocators($);if(Z.length>0){let W=Z.filter((j)=>this.isOutdatedReadLocator(j,$.tool_use_id));if(W.length>0)Q=this.replaceOutdatedReadContent(Q,W)}}if(this.shouldTruncateTool(J))Q=this.truncateToolResultContent(Q);return Q===$.content?$:{...$,content:Q}}reindex($){let f=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!f)this.resetIndexes();for(let J=this.indexedMessageCount;J<$.length;J++){let Q=$[J];if(!Array.isArray(Q.content))continue;for(let Z=0;Z<Q.content.length;Z++){let W=Q.content[Z];if(W.type==="file")this.latestFullContentOwnerByPathCache.set(W.path,`file:${J}:${Z}`);else if(W.type==="tool_use"){let j=W.name.toLowerCase();if(this.toolNameByIdCache.set(W.id,j),this.isReadTool(j)){let X=this.extractLocatorsFromReadToolInput(W.input);if(X.length>0)this.readLocatorsByToolUseIdCache.set(W.id,X)}}else if(W.type==="tool_result"){let j=this.toolNameByIdCache.get(W.tool_use_id);if(!this.isReadTool(j)||W.is_error===!0)continue;let X=this.getReadLocators(W);for(let H of X)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(H),W.tool_use_id),this.isFullFileRead(H))this.latestFullContentOwnerByPathCache.set(H.path,W.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let f=this.collectToolResultIds($),J=[],Q=new Map,Z=!1,W=()=>{if(Q.size===0)return;j(this.createMissingToolResultMessage(Q)),Q.clear(),Z=!0},j=(X)=>{let H=J.at(-1);if(this.shouldMergeUserAfterToolResults(H,X)){J[J.length-1]={...H,content:[...H.content,...this.contentBlocksForUserMerge(X.content)]},Z=!0;return}J.push(X)};for(let X of $){if(this.isToolResultOnlyMessage(X)){if(j(this.appendMissingToolResults(X,Q)),Q.size>0)Q.clear(),Z=!0;continue}if(Array.isArray(X.content)){let H=X.content.filter((V)=>V.type==="tool_result"),Y=X.content.filter((V)=>V.type!=="tool_result");if(H.length>0){let V=this.appendMissingToolResults({...X,role:"user",content:H},Q);if(j(V),Q.size>0)Q.clear();Z=!0}if(Y.length>0||H.length===0){if(H.length===0)W();let V=H.length>0?{...X,content:Y}:X;if(j(V),V.role==="assistant")this.trackMissingToolCalls(V,f,Q)}continue}W(),j(X)}return W(),Z?J:$}appendMissingToolResults($,f){if(f.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(f)]}}shouldMergeUserAfterToolResults($,f){return $?.role==="user"&&f.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(f.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let f=new Set;for(let J of $){if(!Array.isArray(J.content))continue;for(let Q of J.content)if(Q.type==="tool_result")f.add(Q.tool_use_id)}return f}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((f)=>f.type==="tool_result")}trackMissingToolCalls($,f,J){if(!Array.isArray($.content))return;for(let Q of $.content){if(Q.type!=="tool_use"||f.has(Q.id))continue;J.set(Q.id,Q.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([f,J])=>({type:"tool_result",tool_use_id:f,content:[{type:"text",text:this.formatMissingToolResultText(J)}],is_error:!0}))}formatMissingToolResultText($){return $?`${r3} Tool: ${$}.`:r3}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let f=$,J=this.readResultLocatorCache.get(f);if(J===void 0)J=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(f,J);if(J.length>0)return J;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let f=$,J=[],Q=this.extractLocatorFromReadRequest(f);if(Q)J.push(Q);if(Array.isArray(f.files))for(let Z of f.files){let W=this.extractLocatorFromReadRequest(Z);if(W)J.push(W)}if(Array.isArray(f.file_paths)){for(let Z of f.file_paths)if(typeof Z==="string"&&Z.length>0)J.push({path:Z,startLine:null,endLine:null})}return this.dedupeReadLocators(J)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);for(let f of $){if(f.type!=="text")continue;let J=this.tryParseReadLocators(f.text);if(J.length>0)return J}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let J=[];for(let Q of $){let Z=this.extractLocatorFromResultEntry(Q);if(Z)J.push(Z)}return this.dedupeReadLocators(J)}let f=this.extractLocatorFromResultEntry($);return f?[f]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let f=$,J=this.extractPath(f);if(!J)return;return{path:J,startLine:this.extractLineNumber(f.start_line),endLine:this.extractLineNumber(f.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let f=$,J=this.extractPath(f);if(J)return{path:J,startLine:this.extractLineNumber(f.start_line),endLine:this.extractLineNumber(f.end_line)};if(typeof f.query==="string"&&f.query.length>0)return this.parseReadQuery(f.query);return}extractPath($){let f=[$.path,$.file_path,$.filePath];for(let J of f)if(typeof J==="string"&&J.length>0)return J;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let f=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!f)return{path:$,startLine:null,endLine:null};return{path:f[1],startLine:Number(f[2]),endLine:f[3]==="EOF"?null:Number(f[3])}}dedupeReadLocators($){let f=new Map;for(let J of $)f.set(this.toReadLocatorKey(J),J);return Array.from(f.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,f){let J=this.latestFullContentOwnerByPathCache.get($.path);if(J&&J!==f)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==f}replaceOutdatedReadContent($,f){let J=new Set(f.map((W)=>this.toReadLocatorKey(W))),Q=new Set(f.map((W)=>W.path));if(typeof $==="string")return this.replaceOutdatedInString($,J)??O1;let Z=0;for(let W of $)if(W.type==="text")Z+=this.countOutdatedImageEntries(W.text,J);return $.map((W)=>{if(W.type==="file"){if(!Q.has(W.path))return W;return{...W,content:O1}}if(W.type==="image"){if(Z===0)return W;return Z-=1,{type:"text",text:O1}}if(W.type!=="text")return W;let j=this.replaceOutdatedInString(W.text,J);if(j===null)return{...W,text:O1};return j===W.text?W:{...W,text:j}})}countOutdatedImageEntries($,f){let J;try{J=JSON.parse($)}catch{return 0}let Q=Array.isArray(J)?J:[J],Z=0;for(let W of Q){if(!W||typeof W!=="object")continue;let j=W,X=this.extractLocatorFromResultEntry(j);if(!X)continue;if(!f.has(this.toReadLocatorKey(X)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")Z+=1}return Z}replaceOutdatedInString($,f){let J;try{J=JSON.parse($)}catch{return null}let Q=Array.isArray(J)?J.map((Z)=>this.replaceOutdatedReadEntry(Z,f)):this.replaceOutdatedReadEntry(J,f);return JSON.stringify(Q)}replaceOutdatedReadEntry($,f){if(!$||typeof $!=="object")return $;let J=this.extractLocatorFromResultEntry($);if(!J||!f.has(this.toReadLocatorKey(J)))return $;let Q={...$};if(typeof Q.result==="string")Q.result=O1;else if(typeof Q.content==="string")Q.content=O1;else Q.result=O1;return Q}isReadTool($){return!!$&&CK.has($)}shouldTruncateTool($){return!!$&&this.targetToolNames.has($)}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((f)=>{if(f.type==="file"){let Q=this.truncateMiddle(f.content);return Q===f.content?f:{...f,content:Q}}if(f.type!=="text")return f;let J=this.truncateMiddle(f.text);return J===f.text?f:{...f,text:J}})}truncateMiddle($){return s5($,this.maxToolResultChars,EK)}truncateToTotalTextBudget($){if(this.maxTotalTextBytes<=0)return $;let f=this.countMessageTextBytes($);if(f<=this.maxTotalTextBytes)return $;let J=$.map((Z)=>{if(!Array.isArray(Z.content))return Z;return{...Z,content:Z.content.map((W)=>kK(W))}}),Q=this.collectTruncationCandidates(J);for(let Z of Q){if(f<=this.maxTotalTextBytes)break;let W=Z.byteLength;if(W<=p3)continue;let j=f-this.maxTotalTextBytes,X=Math.max(p3,W-j),H=bK(Z.get(),X,hK);Z.set(H),f-=W-_0(H)}return J}countMessageTextBytes($){let f=0;for(let J of $){if(typeof J.content==="string"){f+=_0(J.content);continue}for(let Q of J.content)if(Q.type==="text")f+=_0(Q.text);else if(Q.type==="thinking")f+=_0(Q.thinking);else if(Q.type==="file")f+=_0(Q.content);else if(Q.type==="tool_result"){if(typeof Q.content==="string")f+=_0(Q.content);else for(let Z of Q.content)if(Z.type==="text")f+=_0(Z.text);else if(Z.type==="file")f+=_0(Z.content)}}return f}collectTruncationCandidates($){let f=[];for(let J of $){if(!Array.isArray(J.content))continue;for(let Q of J.content){if(Q.type!=="tool_result")continue;let Z=this.toolNameByIdCache.get(Q.tool_use_id);if(!this.shouldTruncateTool(Z))continue;if(typeof Q.content==="string"){f.push({byteLength:_0(Q.content),get:()=>Q.content,set:(W)=>{Q.content=W}});continue}for(let W of Q.content)if(W.type==="text")f.push({byteLength:_0(W.text),get:()=>W.text,set:(j)=>{W.text=j}});else if(W.type==="file")f.push({byteLength:_0(W.content),get:()=>W.content,set:(j)=>{W.content=j}})}}return f.sort((J,Q)=>Q.byteLength-J.byteLength)}}function _0($){return Buffer.byteLength($,"utf8")}function s5($,f,J){if($.length<=f)return $;let Q=J($.length-f),Z=Math.max(0,Math.floor((f-Q.length)/2)),W=Math.max(0,$.length-Z*2),j=J(W),X=Math.max(0,Math.floor((f-j.length)/2)),H=$.slice(0,X),Y=X>0?$.slice(-X):"";return`${H}${j}${Y}`}function bK($,f,J){if(_0($)<=f)return $;let Q=0,Z=$.length,W=s5($,0,J);while(Q<=Z){let j=Q+Z>>>1,X=s5($,j,J);if(_0(X)<=f)W=X,Q=j+1;else Z=j-1}return W}function kK($){if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((f)=>({...f}))}}function e5(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class $9{messages=[];conversationId=e5();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=e5(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=e5(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function IK($){let f=gK($.content),J=[],Q=$.id??cK(),Z=0,W=[],j=()=>{if(W.length===0)return;let X=Z===0?Q:`${Q}_part_${Z}`;Z+=1,J.push({id:X,role:$.role,content:W.map(mK),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:i3($.metrics)}),W=[]};if(f.length===0)return J.push({id:Q,role:$.role,content:[],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:i3($.metrics)}),J;for(let X of f){if(X.type!=="tool_result"){W.push(X);continue}j(),J.push({id:`${Q}_tool_${X.tool_use_id}`,role:"tool",content:[t3(X)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return j(),J}function t4($){return $.flatMap(IK)}function xK($){let f=$.content.map(s3).filter((J)=>J!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:f,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:vK($.metrics)}}function Df($){return $.map(xK)}function a3($){let f=[];for(let J of $){let Q=J.content.map(s3).filter((j)=>j!==void 0),Z=J.role==="tool"?"user":J.role,W=f[f.length-1];if(Z==="user"&&Q.length>0&&Q.every((j)=>j.type==="tool_result")&&W?.role==="user"&&Array.isArray(W.content)&&W.content.every((j)=>j.type==="tool_result")){W.content.push(...Q);continue}f.push({role:Z,content:Q})}return f}function gK($){if(typeof $==="string")return $.length>0?[{type:"text",text:$}]:[];return[...$]}function mK($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return t3($)}}function t3($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:"",output:$.content,isError:$.is_error}}function s3($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let f=$.metadata;return{type:"thinking",thinking:$.text,signature:f?.signature,details:f?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:$.metadata?.signature};case"tool-result":{let f=$.output,J=typeof f==="string"?f:Array.isArray(f)?f:JSON.stringify(f);return{type:"tool_result",tool_use_id:$.toolCallId,content:J,is_error:$.isError}}}}function i3($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function vK($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var n3=0;function cK(){return n3+=1,`msg_${Date.now().toString(36)}_${n3.toString(36)}`}function o3($){let{agentConfig:f}=$,J=uK(f),Q=dK(f),Z=$.hooks,W=lK(f.maxParallelToolCalls);return{sessionId:$.sessionId??f.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??f.systemPrompt,messageModelInfo:Q,model:$.model,modelOptions:J,tools:$.tools,hooks:Z,prepareTurn:$.prepareTurn,consumePendingUserMessage:f.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??f.logger,telemetry:$.telemetry??f.telemetry,initialMessages:$.initialMessages,completionPolicy:f.completionPolicy,maxIterations:f.maxIterations,toolExecution:W,toolPolicies:f.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:f.requestToolApproval}}function uK($){let f={};if($.thinking!==void 0)f.thinking=$.thinking;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)f.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)f.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(f).length>0?f:void 0}function dK($){let f=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:f}}function lK($){if($===void 0)return;return $>=2?"parallel":"sequential"}function pK(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function rK($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function f9($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(f9);let f={};for(let J of Object.keys($).sort())f[J]=f9($[J]);return f}function iK($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(f9($))}catch{return String($)}}function nK($,f,J,Q){if(f===$.lastToolName&&J===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=f,$.lastToolSignature=J,{softWarning:$.consecutiveIdenticalCount===Q.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Q.hardThreshold}}var e3={softThreshold:3,hardThreshold:5};class J9{config;state=pK();constructor($){this.config={softThreshold:$?.softThreshold??e3.softThreshold,hardThreshold:$?.hardThreshold??e3.hardThreshold}}inspect($){let f=iK($.input),J=nK(this.state,$.name,f,this.config);if(J.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(J.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){rK(this.state)}}class Q9{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let f=this.options.maxConsecutiveMistakes,J=$.forceAtLimit&&f?f:this.consecutiveMistakes+1;this.consecutiveMistakes=J;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:J,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!f||J<f)return{action:"continue"};let Z=await tK({iteration:$.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:f,reason:$.reason,details:$.details},this.options.onLimitReached);if(Z.action==="continue"){let W=Z.guidance?.trim();if(W)this.options.appendRecoveryNotice(W,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:W}}return{action:"stop",reason:Z.reason?.trim()||void 0,message:aK({iteration:$.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:f,reason:$.reason,details:$.details,stopReason:Z.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function aK($){let f=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],J=$.details?.trim();if(J)f.push(`Error: ${J}`);let Q=$.stopReason?.trim();if(Q)f.push(`Decision: ${Q}`);return f.push("Session state was preserved. Send a new prompt to resume from the latest state."),f.join(" ")}async function tK($,f){if(!f)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await f($)}catch(J){return{action:"stop",reason:J instanceof Error?J.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function sK($){let f=$.content.filter((J)=>J.type==="text");if(f.length===0)return;return f.map((J)=>J.text).join("")}function oK($){let f=$.content.filter((J)=>J.type==="reasoning");if(f.length===0)return;return{reasoning:f.map((J)=>J.text).join(""),redacted:f.some((J)=>J.redacted===!0)}}function eK($){return $.content.find((f)=>f.type==="tool-result")}function $G($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function fG($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class Z9{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let f=[],J=sK($);if(J!==void 0)f.push({type:"content_end",contentType:"text",text:J});let Q=oK($);if(Q!==void 0)f.push({type:"content_end",contentType:"reasoning",reasoning:Q.reasoning});return f}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let f=this.toolStartedAt.get($.toolCall.toolCallId),J=f===void 0?void 0:Date.now()-f;this.toolStartedAt.delete($.toolCall.toolCallId);let Q=eK($.message),Z=Q?.output,W=fG(Q);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:Z,error:W,durationMs:J}]}translateUsage($){let f=$.inputTokens-this.lastUsage.inputTokens,J=$.outputTokens-this.lastUsage.outputTokens,Q=$.cacheReadTokens-this.lastUsage.cacheReadTokens,Z=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,W=this.lastUsage.totalCost??0,X=($.totalCost??0)-W;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,f),outputTokens:Math.max(0,J),cacheReadTokens:Q===0?void 0:Math.max(0,Q),cacheWriteTokens:Z===0?void 0:Math.max(0,Z),cost:X===0?void 0:X,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let f={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:$G($.status),text:$.outputText,iterations:$.iterations,usage:f}]}}function YG($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function VG($){let J=(typeof $.content==="function"?await $.content():$.content).trim();return J.length>0?J:void 0}function AG($,f){let J=$.trim(),Q=f.map((Z)=>Z.trim()).filter(Boolean).join(`
130
132
 
131
- `);if(J&&W)return`${J}
133
+ `);if(J&&Q)return`${J}
132
134
 
133
- ${W}`;return J||W}function zV(f){let $=f.filter((J)=>J!==void 0);if($.length===0)return{};return{beforeRun:async(J)=>{for(let W of $){let H=await W.beforeRun?.(J);if(H?.stop)return H}return},afterRun:async(J)=>{for(let W of $)await W.afterRun?.(J)},beforeModel:async(J)=>{let W=J.request,H;for(let Q of $){let Z=await Q.beforeModel?.({...J,request:W});if(!Z)continue;if(Z.stop)return Z;H={...H,...Z,options:{...H?.options??{},...Z.options??{}}},W={...W,...Z.messages?{messages:Z.messages}:{},...Z.tools?{tools:Z.tools}:{},...Z.options?{options:{...W.options??{},...Z.options}}:{}}}return H},afterModel:async(J)=>{for(let W of $){let H=await W.afterModel?.(J);if(H?.stop)return H}return},beforeTool:async(J)=>{let W=J.input,H;for(let Q of $){let Z=await Q.beforeTool?.({...J,input:W});if(!Z)continue;if(Z.stop||Z.skip)return Z;if(H={...H,...Z},Object.hasOwn(Z,"input"))W=Z.input}return H},afterTool:async(J)=>{let W=J.result,H;for(let Q of $){let Z=await Q.afterTool?.({...J,result:W});if(!Z)continue;if(Z.stop)return Z;if(H={...H,...Z},Z.result)W=Z.result}return H},onEvent:async(J)=>{for(let W of $)await W.onEvent?.(J)}}}class c0{config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new x5;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor(f,$={}){this.config=f,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=f.parentAgentId,this.logger=$.logger??f.logger,this.telemetry=$.telemetry??f.telemetry,this.createAgentRuntimeImpl=$.createAgentRuntimeImpl??_V,this.conversation=new S5(f.initialMessages),this.messageBuilder=new C5,this.contributionRegistry=MV({extensions:f.extensions?[...f.extensions]:[],setupContext:{session:f.extensionContext?.session,client:f.extensionContext?.client,user:f.extensionContext?.user,workspaceInfo:f.extensionContext?.workspace,automation:f.extensionContext?.automation,logger:f.extensionContext?.logger??this.logger,telemetry:f.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let J=f.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new m5({maxConsecutiveMistakes:J,onLimitReached:f.onConsecutiveMistakeLimitReached,emit:(Q)=>this.emitLegacyEvent(Q),log:(Q,Z,j)=>NV(this.logger,Q,Z,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(Q,Z)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q}]})}});let W=f.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let H=W===!1||W===void 0?void 0:W;this.loopTracker=new I5(H)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools(f){if(f.length===0)return;let $=new Set(this.config.tools.map((W)=>W.name)),J=[...this.config.tools];for(let W of f)if(!$.has(W.name))J.push(W),$.add(W.name);this.config={...this.config,tools:J}}updateConnection(f){let $={...this.config};if(f.providerId!==void 0)$.providerId=f.providerId;if(f.modelId!==void 0)$.modelId=f.modelId;if(f.apiKey!==void 0)$.apiKey=f.apiKey;if(f.baseUrl!==void 0)$.baseUrl=f.baseUrl;if(f.headers!==void 0)$.headers=f.headers;if(f.providerConfig!==void 0)$.providerConfig=f.providerConfig;if(f.reasoningEffort!==void 0)$.reasoningEffort=f.reasoningEffort;if(f.thinking!==void 0)$.thinking=f.thinking;if(f.thinkingBudgetTokens!==void 0)$.thinkingBudgetTokens=f.thinkingBudgetTokens;this.config=$}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore(f){this.conversation.restore(f),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}abort(f){let $=typeof f==="string"?f:f instanceof Error?f.message:f===void 0?void 0:String(f);if(this.abortRequested=!0,this.abortReason=$,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort($)}async shutdown(f,$){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run(f,$,J){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:f,userImages:$,userFiles:J,isContinue:!1})}continue(f,$,J){return this.executeRun({userMessage:f,userImages:$,userFiles:J,isContinue:!0})}async composeSystemPrompt(){let f=[];for(let $ of this.contributionRegistry.getRegisteredRules()){let J=await hV($);if(J)f.push(J)}return OV(this.config.systemPrompt,f)}executeRun(f){let $;return $=this.executeRunInternal(f).finally(()=>{if(this.activeRunPromise===$)this.activeRunPromise=null}),this.activeRunPromise=$,$}async executeRunInternal(f){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let $=new Date,J=f.userMessage;if(J!==void 0){let F=await wV(J,f.userImages,f.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:F})}let W=await this.composeSystemPrompt(),H=TQ(this.config,this.logger),Q=this.contributionRegistry.getRegisteredTools(),Z=new Map;for(let F of Q)Z.set(F.name,F);for(let F of this.config.tools)Z.set(F.name,F);let j=this.conversation.getConversationId(),X=CQ(this.config),A=Array.from(Z.values()),P=v4(this.conversation.getMessages()),B=qQ({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:j,parentAgentId:this.parentAgentId,model:H,logger:this.logger,tools:A,toolContextMetadata:{modelSupportsImages:X?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(X,A),initialMessages:P,systemPrompt:W}),Y=this.createAgentRuntimeImpl(B);if(this.activeRuntime=Y,this.abortRequested)Y.abort(this.abortReason);let V=Y.subscribe((F)=>{this.handleRuntimeEvent(F)}),R,U;try{if(f.isContinue)R=await Y.continue(void 0);else R=await Y.run("")}catch(F){U=F instanceof Error?F:Error(String(F))}finally{V();try{await this.activeTrackerWork}catch(F){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:F})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(R&&R.messages.length>0){let F=P1(R.messages);this.conversation.replaceMessages(F)}let K=new Date;try{return this.buildLegacyResult({runResult:R,thrownError:U,startedAt:$,endedAt:K})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch(f){if(this.config.hookErrorMode==="throw")throw f;this.emitLegacyEvent({type:"error",error:f instanceof Error?f:Error(String(f)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let f=zV([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map(($)=>$.hooks)]);return{...f,beforeModel:async($)=>{let J=await f.beforeModel?.($);if(J?.stop)return J;let W=J?.messages??$.request.messages,H=await this.prepareMessagesForModelRequest(W);return{...J,messages:H}}}}createRuntimePrepareTurn(f,$){let J=this.config.prepareTurn;if(!J)return;return async(W)=>{let H=P1(W.messages),Q=await this.prepareProviderMessagesForApi(H),Z=await J({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:H,apiMessages:Q,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:$,model:{id:this.config.modelId,provider:this.config.providerId,info:f},emitStatusNotice:W.emitStatusNotice});if(!Z)return;return{...Z.messages?{messages:v4(Z.messages)}:{},...Z.systemPrompt!==void 0?{systemPrompt:Z.systemPrompt}:{}}}}async prepareMessagesForModelRequest(f){let $=await this.prepareProviderMessagesForApi(OQ(f));return v4($)}async prepareProviderMessagesForApi(f){let $=f,J=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of J)$=await W.build($);return this.messageBuilder.buildForApi($)}handleRuntimeEvent(f){switch(f.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage(f.snapshot.messages,[f.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set(f.toolCall.toolCallId,new Date),this.toolInputs.set(f.toolCall.toolCallId,f.toolCall.input),this.inspectLoopForToolCall(f.toolCall.toolName,f.toolCall.input,f.iteration);break}case"tool-finished":{let $=this.toolStartedAt.get(f.toolCall.toolCallId),J=new Date,W=this.toolInputs.get(f.toolCall.toolCallId);this.toolStartedAt.delete(f.toolCall.toolCallId),this.toolInputs.delete(f.toolCall.toolCallId);let H=f.message.content.find((X)=>X.type==="tool-result"),Q=H?.type==="tool-result"&&H.isError===!0,Z=Q?LV(H?.type==="tool-result"?H.output:void 0):void 0,j={id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:W,output:H?.type==="tool-result"?H.output:void 0,error:Z,durationMs:$===void 0?0:J.getTime()-$.getTime(),startedAt:$??J,endedAt:J};if(this.currentRunToolCalls.push(j),Q){if(this.currentTurnFailedTools+=1,Z)this.currentTurnFailureDetails.push(`[${f.toolCall.toolName}] ${Z}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let $=this.currentTurnFailedTools,J=this.currentTurnSuccessfulTools;if($>0&&J===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:f.iteration,reason:"tool_execution_failed",details:`${$} tool call(s) failed${W?`: ${W}`:""}`})}else if(J>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens>0?f.usage.cacheReadTokens:void 0,cacheWriteTokens:f.usage.cacheWriteTokens>0?f.usage.cacheWriteTokens:void 0,totalCost:f.usage.totalCost};break}default:break}for(let $ of this.eventAdapter.translate(f))this.emitLegacyEvent($)}syncConversationFromRuntimeMessage(f,$){if(f.length>0){this.conversation.replaceMessages(P1(f));return}if($.length===0)return;let J=new Set(this.conversation.getMessages().map((H)=>H.id).filter((H)=>typeof H==="string")),W=P1($).filter((H)=>!H.id||!J.has(H.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent(f){for(let $ of this.listeners)try{$(f)}catch(J){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:J})}}inspectLoopForToolCall(f,$,J){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:f,input:$});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:J,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${f}\`; stopping to avoid a loop.`})}enqueueMistakeRecord(f){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let $=await this.mistakeTracker.record(f);if($.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:$.message}]}),this.activeRuntime?.abort($.reason??$.message)})}buildLegacyResult(f){let{runResult:$,thrownError:J,startedAt:W,endedAt:H}=f,Q=H.getTime()-W.getTime(),Z=J?"error":qV($),j=$?.outputText||($?.status==="failed"?$.error?.message:void 0)||"",X=$?{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost}:this.currentRunUsage,A=$?P1($.messages):this.conversation.getMessages(),P=CQ(this.config);if(J)throw J;return{text:j,usage:X,messages:A,toolCalls:this.currentRunToolCalls,iterations:$?.iterations??0,finishReason:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:P},startedAt:W,endedAt:H,durationMs:Q}}}function NV(f,$,J,W){if(!f)return;if($==="debug"){f.debug(J,W);return}if($==="error"&&f.error){f.error(J,W);return}let H=$==="warn"?"warn":$==="error"?"error":"info";f.log(J,{...W,severity:H})}function qV(f){if(!f)return"error";switch(f.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function wV(f,$,J,W){let{buildInitialUserContent:H}=await Promise.resolve().then(() => bQ);return H(f,$,J,W)}function CQ(f){if(f.knownModels?.[f.modelId])return f.knownModels[f.modelId];let $=w5(f);if($?.[f.modelId])return $[f.modelId];return}import{buildClineSystemPrompt as EQ}from"@cline/shared";function SQ(f,$){let J=f.trim();if($.providerId.toLowerCase()!=="cline")return J;return EQ({ide:$.clineIdeName?.trim()||"Terminal",workspaceRoot:$.cwd?.trim()||"/",providerId:$.providerId,rules:`# Team Teammate Role
134
- ${J}`,platform:$.clinePlatform,metadata:$.workspaceMetadata})}function kQ(f,$){let J=f.trim();if($.providerId.toLowerCase()!=="cline")return J;return EQ({ide:$.clineIdeName||"Terminal",workspaceRoot:$.cwd?.trim()||"/",providerId:$.providerId,overridePrompt:J,metadata:$.workspaceMetadata,platform:$.clinePlatform})}function B1(f){let $={...f};return{getRuntimeConfig:()=>$,getConnectionConfig:()=>({providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking}),updateConnectionDefaults:(J)=>{$={...$,...J}}}}function T$(f){let $=f.configProvider.getRuntimeConfig(),J=f.kind==="teammate"?SQ(f.prompt,$):kQ(f.prompt,$);return{...f.configProvider.getConnectionConfig(),systemPrompt:J,tools:f.tools,maxIterations:f.maxIterations??$.maxIterations,parentAgentId:f.parentAgentId,abortSignal:f.abortSignal,onEvent:f.onEvent,hooks:$.hooks,extensions:$.extensions,hookErrorMode:f.hookErrorMode,toolPolicies:f.toolPolicies,requestToolApproval:f.requestToolApproval,logger:$.logger,role:f.role}}function Y1(f){let $=T$(f),J=new c0($);if($.onEvent)J.subscribeEvents($.onEvent);return J}var EV=g5.object({systemPrompt:g5.string().describe("System prompt defining the sub-agent's behavior"),task:g5.string().describe("Task for the sub-agent to complete")});function d0(f){return bV({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:CV(EV),execute:async($,J)=>{let W=f.createSubAgentTools?await f.createSubAgentTools($,J):f.subAgentTools??[],H=Y1({kind:"subagent",prompt:$.systemPrompt,configProvider:f.configProvider,tools:W,maxIterations:f.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:f.onSubAgentEvent,hookErrorMode:f.hookErrorMode,toolPolicies:f.toolPolicies,requestToolApproval:f.requestToolApproval}),Q=H.getAgentId(),Z=H.getConversationId(),j=J.agentId;if(f.onSubAgentStart)try{await f.onSubAgentStart({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$})}catch{}try{let X=await H.run($.task),A={text:X.text,iterations:X.iterations,finishReason:X.finishReason,usage:{inputTokens:X.usage.inputTokens,outputTokens:X.usage.outputTokens}};if(f.onSubAgentEnd)try{await f.onSubAgentEnd({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$,result:A,agentResult:X})}catch{}return A}catch(X){if(f.onSubAgentEnd)try{await f.onSubAgentEnd({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$,error:X instanceof Error?X:Error(String(X))})}catch{}throw X}},timeoutMs:300000,retryable:!1})}import{createTool as Zf,TEAM_AWAIT_TIMEOUT_MS as SV,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as kV,TEAM_RUN_TEXT_PREVIEW_LIMIT as IV,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as mV,TeamAttachOutcomeFragmentInputSchema as IQ,TeamAwaitRunsInputSchema as mQ,TeamBroadcastInputSchema as xQ,TeamBroadcastToolResultSchema as xV,TeamCancelRunInputSchema as gQ,TeamCancelRunToolResultSchema as gV,TeamCleanupInputSchema as vQ,TeamCleanupToolResultSchema as vV,TeamCreateOutcomeInputSchema as uQ,TeamCreateOutcomeToolResultSchema as uV,TeamFinalizeOutcomeInputSchema as cQ,TeamFinalizeOutcomeToolResultSchema as cV,TeamListOutcomesInputSchema as dQ,TeamListRunsInputSchema as rQ,TeamMailboxMessageToolResultSchema as dV,TeamMissionLogInputSchema as lQ,TeamMissionLogToolResultSchema as rV,TeamOutcomeFragmentToolResultSchema as pQ,TeamOutcomeToolResultSchema as lV,TeamReadMailboxInputSchema as iQ,TeamReviewOutcomeFragmentInputSchema as nQ,TeamRunTaskInputSchema as aQ,TeamRunTaskToolResultSchema as v5,TeamRunToolSummarySchema as u5,TeamSendMessageInputSchema as tQ,TeamSendMessageToolResultSchema as pV,TeamShutdownTeammateInputSchema as sQ,TeamSimpleAgentStatusToolResultSchema as oQ,TeamSpawnTeammateInputSchema as eQ,TeamStatusInputSchema as f7,TeamStatusToolResultSchema as iV,TeamTaskInputSchema as $7,TeamTaskToolResultSchema as v2,validateWithZod as b,zodToJsonSchema as jf}from"@cline/shared";function J7(f,$){let J=f.replace(/\s+/g," ").trim();if(J.length<=$)return J;return`${J.slice(0,Math.max(0,$-3)).trimEnd()}...`}function D$(f,$){if(f===void 0)throw Error(`Missing required field: ${$}`);return f}function nV(f){let $=f.result;if(!$)return;return{textPreview:J7($.text,IV),iterations:$.iterations,finishReason:$.finishReason,durationMs:$.durationMs,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost}}}function u4(f){return f?.toISOString()}function c5(f){return{id:f.id,agentId:f.agentId,taskId:f.taskId,status:f.status,messagePreview:J7(f.message,kV),priority:f.priority,retryCount:f.retryCount,maxRetries:f.maxRetries,nextAttemptAt:u4(f.nextAttemptAt),continueConversation:f.continueConversation,startedAt:f.startedAt.toISOString(),endedAt:u4(f.endedAt),leaseOwner:f.leaseOwner,heartbeatAt:u4(f.heartbeatAt),lastProgressAt:u4(f.lastProgressAt),lastProgressMessage:f.lastProgressMessage,currentActivity:f.currentActivity,error:f.error,resultSummary:nV(f)}}function aV(f){if(f.status==="failed")throw Error(`Run "${f.id}" failed${f.error?`: ${f.error}`:""}`);if(f.status==="cancelled")throw Error(`Run "${f.id}" was cancelled${f.error?`: ${f.error}`:""}`);if(f.status==="interrupted")throw Error(`Run "${f.id}" was interrupted${f.error?`: ${f.error}`:""}`)}var V1=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function W7(f){let $=[];if(f.createBaseTools)$.push(...f.createBaseTools());$.push(..._$({runtime:f.runtime,requesterId:f.spec.agentId,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,allowSpawn:!1})),f.runtime.spawnTeammate({agentId:f.spec.agentId,config:T$({kind:"teammate",prompt:f.spec.rolePrompt,role:f.spec.rolePrompt,configProvider:f.teammateConfigProvider,tools:$,maxIterations:f.spec.maxIterations,cwd:f.teammateConfigProvider.getRuntimeConfig().cwd})})}function R1(f){let $=f.leadAgentId??"lead",J=f.restoredFromPersistence===!0,W=_$({runtime:f.runtime,requesterId:$,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,allowSpawn:!0,includeSpawnTool:f.includeLeadSpawnTool,includeManagementTools:f.includeLeadManagementTools,onLeadToolsUnlocked:f.onLeadToolsUnlocked}),H=[];for(let Q of f.restoredTeammates??[]){if(f.runtime.isTeammateActive(Q.agentId))continue;W7({runtime:f.runtime,requesterId:$,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,spec:Q}),H.push(Q.agentId)}return{tools:W,restoredFromPersistence:J,restoredTeammates:H}}function _$(f){let $=f.allowSpawn??!0,J=f.includeSpawnTool??!0,W=f.includeManagementTools??!0,H=[];if(J)H.push(Zf({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:jf(eQ),execute:async(Z)=>{let j=b(eQ,Z);if(f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!$)throw Error("Spawning teammates is disabled in this context.");let X={agentId:j.agentId,rolePrompt:j.rolePrompt};if(W7({runtime:f.runtime,requesterId:f.requesterId,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,spec:X}),!W)f.onLeadToolsUnlocked?.(_$({...f,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return b(oQ,{agentId:j.agentId,status:"spawned"})}}));if(!W)return H;H.push(Zf({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:jf(sQ),execute:async(Z)=>{let j=b(sQ,Z);if(f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return f.runtime.shutdownTeammate(j.agentId,j.reason),b(oQ,{agentId:j.agentId,status:"stopped"})}})),H.push(Zf({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:jf(f7),execute:async(Z)=>{return b(f7,Z),b(iV,f.runtime.getSnapshot())}})),H.push(Zf({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:jf($7),execute:async(Z)=>{let j=b($7,Z);switch(j.action){case"create":{let X=new Set(mV.create??[]),A=Object.entries(Z).filter(([B,Y])=>X.has(B)&&Y!=null).map(([B])=>B),P=f.runtime.createTask({title:D$(j.title,"title"),description:D$(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:f.requesterId});return b(v2,{action:"create",taskId:P.id,status:P.status,...A.length>0?{ignoredFields:A,note:`Ignored fields for action=create: ${A.join(", ")}`}:{}})}case"list":return b(v2,{action:"list",tasks:f.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let X=f.runtime.claimTask(D$(j.taskId,"taskId"),f.requesterId);return b(v2,{action:"claim",taskId:X.id,status:X.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let X=f.runtime.completeTask(D$(j.taskId,"taskId"),f.requesterId,D$(j.summary,"summary"));return b(v2,{action:"complete",taskId:X.id,status:X.status})}case"block":{let X=f.runtime.blockTask(D$(j.taskId,"taskId"),f.requesterId,D$(j.reason,"reason"));return b(v2,{action:"block",taskId:X.id,status:X.status})}}}}));let Q=new Map;return H.push(Zf({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:jf(aQ),execute:async(Z)=>{let j=b(aQ,Z);if(j.runMode==="async"){let P=f.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:f.requesterId,continueConversation:j.continueConversation||void 0});return b(v5,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${P.id}.`,runId:P.id})}let X=Q.get(j.agentId);if(X){let P=await X;return b(v5,{...P,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let A=f.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:f.requesterId,continueConversation:j.continueConversation||void 0}).then((P)=>b(v5,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:P.text,iterations:P.iterations})).finally(()=>{Q.delete(j.agentId)});return Q.set(j.agentId,A),await A}})),H.push(Zf({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:jf(gQ),execute:async(Z)=>{let j=b(gQ,Z),X=f.runtime.cancelRun(j.runId,j.reason);return b(gV,{runId:X.id,status:X.status})}})),H.push(Zf({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:jf(rQ),execute:async(Z)=>b(u5.array(),f.runtime.listRuns(b(rQ,Z)).map(c5))})),H.push(Zf({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:jf(mQ),timeoutMs:SV,execute:async(Z)=>{let j=b(mQ,Z);if(j.runId){let P=await f.runtime.awaitRun(j.runId);return aV(P),b(u5,c5(P))}let X=await f.runtime.awaitAllRuns(),A=X.filter((P)=>["failed","cancelled","interrupted"].includes(P.status));if(A.length>0){let P=A.map((B)=>`${B.id}:${B.status}${B.error?`(${B.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${P}`)}return b(u5.array(),X.map(c5))}})),H.push(Zf({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:jf(tQ),execute:async(Z)=>{let j=b(tQ,Z),X=f.runtime.sendMessage(f.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return b(pV,{id:X.id,toAgentId:X.toAgentId})}})),H.push(Zf({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:jf(xQ),execute:async(Z)=>{let j=b(xQ,Z),X=f.runtime.broadcast(f.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return b(xV,{delivered:X.length})}})),H.push(Zf({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:jf(iQ),execute:async(Z)=>{let j=b(iQ,Z);return b(dV.array(),f.runtime.listMailbox(f.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),H.push(Zf({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:jf(lQ),execute:async(Z)=>{let j=b(lQ,Z),X=f.runtime.appendMissionLog({agentId:f.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return b(rV,{id:X.id})}})),H.push(Zf({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:jf(vQ),execute:async(Z)=>{if(b(vQ,Z),f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return f.runtime.cleanup(),b(vV,{status:"cleaned"})}})),H.push(Zf({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:jf(uQ),execute:async(Z)=>{let j=b(uQ,Z),X=f.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:f.requesterId});return b(uV,{outcomeId:X.id,status:X.status,requiredSections:X.requiredSections})}})),H.push(Zf({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:jf(IQ),execute:async(Z)=>{let j=b(IQ,Z),X=f.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:f.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return b(pQ,{fragmentId:X.id,status:X.status})}})),H.push(Zf({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:jf(nQ),execute:async(Z)=>{let j=b(nQ,Z),X=f.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:f.requesterId,approved:j.approved});return b(pQ,{fragmentId:X.id,status:X.status})}})),H.push(Zf({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:jf(cQ),execute:async(Z)=>{let j=b(cQ,Z),X=f.runtime.finalizeOutcome(j.outcomeId);return b(cV,{outcomeId:X.id,status:X.status})}})),H.push(Zf({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:jf(dQ),execute:async(Z)=>{return b(dQ,Z),b(lV.array(),f.runtime.listOutcomes())}})),H}function c4(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}function H7(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var tV=[{id:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:d0({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...V1]}],sV={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function oV(f){return f==="plan"||f==="yolo"?f:"act"}function Z7(f){let $=oV(f.mode),J=Ef[K0({mode:$})],W=A1(f.providerId??"",f.modelId??"",$,X1);return{mode:$,flags:{...J,...W,...typeof f.enableSpawnAgent==="boolean"?{enableSpawnAgent:f.enableSpawnAgent}:{},...typeof f.enableAgentTeams==="boolean"?{enableAgentTeams:f.enableAgentTeams}:{}}}}function Q7(f,$){if($.disabledToolIds?.has(f))return!1;let{flags:J}=Z7($);if(f==="spawn_agent")return J.enableSpawnAgent===!0;if(f==="teams")return J.enableAgentTeams===!0;if(f==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let W=sV[f];return W?J[W]===!0:!1}function eV(f,$){if(f.id==="editor"){let{flags:J}=Z7($),W=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...f,defaultEnabled:Q7(f.id,$),headlessToolNames:[W?"apply_patch":"editor"]}}return{...f,defaultEnabled:Q7(f.id,$)}}function M$(f={}){return tV.map(($)=>eV($,f))}function d4(f={}){return M$(f).filter(($)=>$.defaultEnabled).map(($)=>$.id)}function r4(f){if(!f.enabled)return new Set;let $=M$(f.availabilityContext),J=new Set($.map((W)=>W.id));if(!f.allowlist||f.allowlist.length===0)return new Set($.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of f.allowlist)if(!J.has(W))throw Error(`Unknown tool "${W}". Available tools: ${$.map((H)=>H.id).join(", ")}`);return new Set(f.allowlist)}function u2(f,$={}){return M$($).filter((J)=>f.has(J.id)).flatMap((J)=>J.headlessToolNames)}function l4(f,$={}){return u2(f,$)}function L$(f={}){let{executorOptions:$={},executors:J,...W}=f,H={...j1($),...J??{}};return v0({...W,executors:H})}import{mkdirSync as QR,writeFileSync as ZR}from"node:fs";import{dirname as jR}from"node:path";import{normalizeUserInput as XR}from"@cline/shared";import{nanoid as AR}from"nanoid";var X7={};N(X7,{sanitizeSessionToken:()=>h$,parseTeamTaskSubSessionId:()=>K1,parseSubSessionId:()=>d2,makeTeamTaskSubSessionId:()=>c2,makeSubSessionId:()=>F1,deriveSubsessionStatus:()=>r2});import{nanoid as JR}from"nanoid";function h$(f){return f.replace(/[^a-zA-Z0-9._-]+/g,"_")}function F1(f,$){let J=h$(f),W=h$($),H=`${J}__${W}`;return H.length>180?H.slice(0,180):H}function c2(f,$){let J=h$(f),W=h$($);return`${J}__teamtask__${W}__${JR(6)}`}function K1(f){let J=f.indexOf("__teamtask__");if(J<=0)return null;let W=f.slice(0,J),H=f.slice(J+12),Q=H.lastIndexOf("__");if(Q<=0)return null;let Z=H.slice(0,Q),j=H.slice(Q+2);if(!W||!Z||!j)return null;return{rootSessionId:W,agentId:Z,teamTaskId:j}}function d2(f){if(K1(f))return null;let $="__",J=f.indexOf($);if(J<=0)return null;let W=f.slice(0,J),H=f.slice(J+$.length);if(!W||!H)return null;return{rootSessionId:W,agentId:H}}function r2(f){switch(f.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let $=String(f.reason??"").toLowerCase();if($.includes("cancel")||$.includes("abort")||$.includes("interrupt"))return"cancelled";if($.includes("fail")||$.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var A7={};N(A7,{SessionSource:()=>Vf,SESSION_STATUSES:()=>l2});import{SESSION_STATUS_VALUES as WR}from"@cline/shared";var l2=WR,Vf={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var HR=a.enum(l2),Mf=a.object({version:a.literal(1),session_id:a.string().min(1),source:a.string().min(1),pid:a.number().int(),started_at:a.string().min(1),ended_at:a.string().min(1).optional(),exit_code:a.number().int().nullable().optional(),status:HR,interactive:a.boolean(),provider:a.string().min(1),model:a.string().min(1),cwd:a.string().min(1),workspace_root:a.string().min(1),team_name:a.string().min(1).optional(),enable_tools:a.boolean(),enable_spawn:a.boolean(),enable_teams:a.boolean(),prompt:a.string().optional(),metadata:a.record(a.string(),a.unknown()).optional(),messages_path:a.string().min(1).optional()});function P7(f){if(!f)return!1;return Object.values(f).some(($)=>typeof $==="function")}function r5(f,$){let J=[...f??[],...$??[]];if(J.length===0)return;let W=[],H=new Set;for(let Q of J){if(H.has(Q.name))continue;H.add(Q.name),W.push(Q)}return W}function B7(f){return JSON.stringify(f,($,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function y0(f){return typeof f==="string"&&f.trim()?f.trim():void 0}function d5(f,$){let J={...f};J.id=y0(J.id)??AR();let W=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,H={id:y0(W?.id)??y0(J.modelId)??y0($?.id),provider:y0(W?.provider)??y0(J.providerId)??y0($?.provider),family:y0(W?.family)??y0($?.family)};if(delete J.providerId,delete J.modelId,H.id&&H.provider)J.modelInfo={id:H.id,provider:H.provider,...H.family?{family:H.family}:{}};else delete J.modelInfo;return J}function p4(f){return f.map(($)=>d5($))}function i4(f,$,J=[]){let W=f.map((j,X)=>{let A=J[X],B=A?.role===j.role&&JSON.stringify(A.content)===JSON.stringify(j.content)?{...A,...j}:{...j};return d5(B)}),H=J.length,Q=[];for(let j=H;j<W.length;j+=1)if(W[j]?.role==="assistant")Q.push(j);if(Q.length===0){let j=[...W].reverse().findIndex((X)=>X.role==="assistant");if(j===-1)return W;Q.push(W.length-1-j)}let Z=Q[Q.length-1];for(let j of Q){let X=W[j],A=X.metrics;if(!A&&j===Z){let P=$.usage;A={inputTokens:P.inputTokens,outputTokens:P.outputTokens,cacheReadTokens:P.cacheReadTokens??0,cacheWriteTokens:P.cacheWriteTokens??0,cost:P.totalCost}}W[j]={...d5(X,{id:$.model.id,provider:$.model.provider,family:$.model.info?.family}),...A?{metrics:A}:{},ts:X.ts??$.endedAt.getTime()}}return W}function p2(f){return{sessionId:f.sessionId,source:f.source,pid:f.pid,startedAt:f.startedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,status:f.status,interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspaceRoot:f.workspaceRoot,teamName:f.teamName??void 0,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,parentSessionId:f.parentSessionId??void 0,parentAgentId:f.parentAgentId??void 0,agentId:f.agentId??void 0,conversationId:f.conversationId??void 0,isSubagent:f.isSubagent,prompt:f.prompt??void 0,metadata:f.metadata??void 0,messagesPath:f.messagesPath??void 0,updatedAt:f.updatedAt}}var PR=120;function O$(f){let $=f?.trim();return $?$.slice(0,PR):void 0}function l5(f){let $=XR(f??"").trim();if(!$)return;return O$($.split(`
135
- `)[0]?.trim())}function r0(f){if(!f)return;let $={...f},J=O$(typeof $.title==="string"?$.title:void 0);if(J)$.title=J;else delete $.title;return Object.keys($).length>0?$:void 0}function i2(f){let $=r0(f.metadata)??{},J=f.title!==void 0?O$(f.title):l5(f.prompt);if(J)$.title=J;return Object.keys($).length>0?$:void 0}function p5(f){let $=K1(f);if($)return{agent:"teammate",sessionId:$.rootSessionId,taskType:"team"};let J=d2(f);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:f}}function i5(f){return{version:1,updated_at:f.updatedAt,agent:f.context.agent,sessionId:f.context.sessionId,...f.context.taskType?{taskType:f.context.taskType}:{},messages:p4(f.messages),...f.systemPrompt?{system_prompt:f.systemPrompt}:{}}}function Y7(f,$,J){QR(jR(f),{recursive:!0}),ZR(f,`${JSON.stringify(i5({updatedAt:$,context:J,messages:[]}),null,2)}
136
- `,"utf8")}function V7(f,$){return Mf.parse({version:1,session_id:f.sessionId,source:f.source,pid:f.pid,started_at:f.startedAt,ended_at:$?.endedAt??f.endedAt??void 0,exit_code:$?.exitCode??f.exitCode??void 0,status:$?.status??f.status,interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspace_root:f.workspaceRoot,team_name:f.teamName??void 0,enable_tools:f.enableTools,enable_spawn:f.enableSpawn,enable_teams:f.enableTeams,prompt:f.prompt??void 0,metadata:$?.metadata??f.metadata??void 0,messages_path:f.messagesPath??void 0})}async function R7(f,$,J){let W=0;while(!0){let H=await f();if(H===void 0)return{updated:!1};let Q=await $(H);if(typeof Q==="object"&&Q!==null&&"updated"in Q&&Q.updated===!1){if(W+=1,W>=J)return Q;continue}return Q}}Lf();var G7={};N(G7,{summarizeUsageFromMessages:()=>G1,sumUsageTotals:()=>s2,getCurrentContextSize:()=>n5,createInitialAccumulatedUsage:()=>Pf,accumulateUsageTotals:()=>Xf});function Pf(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function Xf(f,$){return{inputTokens:f.inputTokens+Math.max(0,$.inputTokens??0),outputTokens:f.outputTokens+Math.max(0,$.outputTokens??0),cacheReadTokens:f.cacheReadTokens+Math.max(0,$.cacheReadTokens??0),cacheWriteTokens:f.cacheWriteTokens+Math.max(0,$.cacheWriteTokens??0),totalCost:f.totalCost+Math.max(0,$.totalCost??0)}}function s2(f){let $=Pf();for(let J of f)$=Xf($,J);return $}function U1(f){return typeof f==="number"&&Number.isFinite(f)?f:0}function G1(f){let $=Pf();for(let J of f){let W=J.metrics;if(!W)continue;$=Xf($,{inputTokens:U1(W.inputTokens),outputTokens:U1(W.outputTokens),cacheReadTokens:U1(W.cacheReadTokens),cacheWriteTokens:U1(W.cacheWriteTokens),totalCost:U1(W.cost)})}return $}function n5(f){for(let $=f.length-1;$>=0;$-=1){let J=f[$];if(J?.role!=="assistant")continue;let W=U1(J.metrics?.inputTokens);return W>0?W:void 0}return}function VR(f){if(!f||typeof f!=="object")return;let $=f,J=$.skill??$.skill_name??$.skillName;if(typeof J!=="string")return;let W=J.trim();return W.length>0?W:void 0}function a5(f){if(!f||typeof f!=="object")return{};let $=f;return{agentId:typeof $.agentId==="string"?$.agentId:void 0,conversationId:typeof $.conversationId==="string"?$.conversationId:void 0,parentAgentId:typeof $.parentAgentId==="string"?$.parentAgentId:void 0}}function _0(f){let $=f.agentId?.trim();if(!$)return;let J=f.parentAgentId?.trim()||void 0,W=f.teamRole,H="root";if(W==="teammate")H="team_teammate";else if(W==="lead")H="team_lead";else if(J)H="subagent";return{agentId:$,agentKind:H,conversationId:f.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:f.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:f.teamId?.trim()||void 0,teamName:f.teamName?.trim()||void 0,teamRole:W,teamAgentId:f.teamAgentId?.trim()||void 0}}function RR(f){return{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheWriteTokens:f.cacheWriteTokens,cacheReadTokens:f.cacheReadTokens,totalCost:f.cost}}function FR(f){let $=f.isPrimaryAgentEvent?[f.overrides?.agentId,f.eventMetadata.agentId,f.overrides?.teamAgentId]:[f.overrides?.teamAgentId,f.overrides?.agentId,f.eventMetadata.agentId,f.eventMetadata.conversationId];for(let J of $){let W=J?.trim();if(W)return W}return f.isPrimaryAgentEvent?"root":"unknown"}function t5(f,$,J){let{sessionId:W,config:H,liveSession:Q,emit:Z}=f,j=H.telemetry,X=Q?.runtime.teamRuntime,A=J?.isPrimaryAgentEvent??!0,P=a5($),B=_0({agentId:J?.agentId??P.agentId,conversationId:J?.conversationId??P.conversationId,parentAgentId:J?.parentAgentId??P.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??X?.getTeamId(),teamName:J?.teamName??X?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if($.type==="content_start"&&$.contentType==="tool"&&$.toolName==="skills"){let Y=VR($.input);if(Y)J6(j,{ulid:W,skillName:Y,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:H.providerId,modelId:H.modelId,...B})}if($.type==="content_end"&&$.contentType==="tool"){let Y=$.toolName??"unknown",V=!$.error;if($6(j,{ulid:W,tool:Y,autoApproved:void 0,success:V,modelId:H.modelId,provider:H.providerId,...B}),!V&&(Y==="editor"||Y==="apply_patch"))W6(j,{ulid:W,modelId:H.modelId,provider:H.providerId,errorType:$.error,...B})}if($.type==="notice"&&$.reason==="api_error")a2(j,{ulid:W,model:H.modelId,provider:H.providerId,errorMessage:$.message,...B});if($.type==="error")a2(j,{ulid:W,model:H.modelId,provider:H.providerId,errorMessage:$.error?.message??"unknown error",...B});if($.type==="usage"&&Q?.turnUsageBaseline){let Y=RR($);if(A){Q.turnPrimaryUsage=Xf(Q.turnPrimaryUsage??Pf(),Y);let R=Xf(Q.turnUsageBaseline,Q.turnPrimaryUsage);f.usageBySession.set(W,R),y1(j,{ulid:W,provider:H.providerId,model:H.modelId,source:"assistant",mode:H.mode,...B}),e4(j,{ulid:W,tokensIn:$.inputTokens,tokensOut:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost,model:H.modelId,...B})}else{let R=FR({isPrimaryAgentEvent:A,overrides:J,eventMetadata:P}),U=Q.turnUsageByAgent??new Map;Q.turnUsageByAgent=U,U.set(R,Xf(U.get(R)??Pf(),Y))}let V=Xf(Q.turnPrimaryUsage??Pf(),s2(Q.turnUsageByAgent?.values()??[]));f.aggregateUsageBySession.set(W,Xf(Q.turnAggregateUsageBaseline??Q.turnUsageBaseline,V))}if($.type==="iteration_end"&&A)f.persistMessages(W,Q?.agent.getMessages()??[],Q?.config.systemPrompt);Z({type:"agent_event",payload:{sessionId:W,event:$,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(A?"lead":void 0):void 0}}),Z({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:B7($),ts:Date.now()}})}function i0(f){return f.workspaceRoot??f.cwd}import{hasRuntimeConfigExtension as EK}from"@cline/shared";function T7(f){let $="";for(let J=0;J<f.length;J+=1)$+=String.fromCharCode(f[J]??0);return btoa($).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function KR(f){let J=new TextEncoder().encode(f),W=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(W)}function yR(f=32){let $=new Uint8Array(f);return crypto.getRandomValues($),T7($)}async function A6(){let f=yR(),$=T7(await KR(f));return{verifier:f,challenge:$}}function P6(f){return f.endsWith("/")?f.slice(0,-1):f}function z$(f,$){return new URL($,`${P6(f)}/`).toString()}function T1(f,$={}){let J=f.trim();if(!J)return{};try{let W=new URL(J);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:$.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if($.allowHashCodeState&&J.includes("#")){let[W,H]=J.split("#",2);return{code:W||void 0,state:H||void 0}}if(J.includes("code=")){let W=new URLSearchParams(J);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:$.includeProvider?W.get("provider")??void 0:void 0}}return{code:J}}function UR(f){if(typeof atob==="function")try{return atob(f)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from(f,"base64").toString("utf8")}catch{return null}return null}function Rf(f){if(!f)return null;try{let $=f.split(".");if($.length!==3)return null;let J=$[1];if(!J)return null;let W=J.replace(/-/g,"+").replace(/_/g,"/"),H=W.padEnd(W.length+(4-W.length%4)%4,"="),Q=UR(H);if(!Q)return null;return JSON.parse(Q)}catch{return null}}function D1(f){try{let $=JSON.parse(f),J=$.error,W=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,H=typeof $.error_description==="string"?$.error_description:typeof $.message==="string"?$.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:W,message:H}}catch{return{}}}function N$(f,$){return Date.now()>=f.expires-$}async function _1(f){if(!f.onManualCodeInput){let Q=await f.waitForCallback();return{code:Q?.code,state:Q?.state,provider:Q?.provider,error:Q?.error}}let $,J,W=f.onManualCodeInput().then((Q)=>{$=Q,f.cancelWait()}).catch((Q)=>{J=Q instanceof Error?Q:Error(String(Q)),f.cancelWait()}),H=await f.waitForCallback();if(J)throw J;if(H?.code||H?.error)return{code:H.code,state:H.state,provider:H.provider,error:H.error};if($)return T1($,f.parseOptions);if(await W,J)throw J;if($)return T1($,f.parseOptions);return{}}M0();import{existsSync as HF}from"node:fs";import{discoverPluginModulePaths as QF,resolveConfiguredPluginModulePaths as ZF,resolvePluginConfigSearchPaths as jF}from"@cline/shared/storage";import{resolve as xR}from"node:path";import{normalizePluginManifest as gR}from"@cline/shared";import{existsSync as Tf,readFileSync as L1}from"node:fs";import{builtinModules as MR,createRequire as w7}from"node:module";import{dirname as J8,extname as $W,isAbsolute as LR,resolve as d}from"node:path";import{fileURLToPath as b7}from"node:url";import{PLUGIN_FILE_EXTENSIONS as hR}from"@cline/shared";var C7=J8(b7(import.meta.url)),OR=w7(import.meta.url),zR=d(C7,"..","..","..","..",".."),o5=wR(zR),NR=["@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],JW=new Set(MR.flatMap((f)=>[f,f.replace(/^node:/,"")])),$8=new Set(hR),qR=["development","node","import","require","default"];function wR(f){let $={},J={"@cline/agents":d(f,"packages/agents/src/index.ts"),"@cline/core":d(f,"packages/core/src/index.ts"),"@cline/llms":d(f,"packages/llms/src/index.ts"),"@cline/shared":d(f,"packages/shared/src/index.ts"),"@cline/shared/storage":d(f,"packages/shared/src/storage/index.ts"),"@cline/shared/db":d(f,"packages/shared/src/db/index.ts")};for(let[W,H]of Object.entries(J))if(Tf(H))$[W]=H;for(let W of["agents","core","llms","shared"]){let H=d(f,"packages",W),Q=d(H,"package.json");if(!Tf(Q))continue;try{let Z=JSON.parse(L1(Q,"utf8"));if(typeof Z.name!=="string"||!Z.exports)continue;if(typeof Z.exports==="string"){let j=d(H,Z.exports);if(Tf(j))$[Z.name]=j;continue}if(typeof Z.exports!=="object")continue;for(let[j,X]of Object.entries(Z.exports)){let A=bR(H,X);if(!A)continue;let P=j==="."?Z.name:`${Z.name}/${j.replace(/^\.\//,"")}`;$[P]=A}}catch{}}return $}function bR(f,$){let J=WW($);if(!J)return null;let W=E7(f,J);for(let H of W)if(Tf(H))return H;return null}function WW(f,$=new Set){if(typeof f==="string")return f;if(!f||typeof f!=="object")return null;if($.has(f))return null;$.add(f);let J=f;for(let W of qR){let H=WW(J[W],$);if(H)return H}return null}function E7(f,$){let J=$.replace(/^\.\//,""),W=[d(f,$)];if(J.startsWith("dist/")){let H=J.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[d(f,`${H}.ts`),d(f,`${H}.tsx`),d(f,`${H}.mts`),d(f,`${H}.cts`),...W]}return W}function CR(f){return Object.fromEntries(Object.entries(f).sort(([$],[J])=>J.length-$.length))}function F6(f){return!(f.startsWith(".")||f.startsWith("/")||f.startsWith("file:")||f.startsWith("data:")||f.startsWith("http:")||f.startsWith("https:"))}function M1(f){if(f.startsWith("@")){let[$,J]=f.split("/",3);return J?`${$}/${J}`:f}return f.split("/",1)[0]??f}function ER(f){let $=M1(f);if(f===$)return".";return`.${f.slice($.length)}`}function S7(f){return M1(f).startsWith("@cline/")}function e5(f,$){let J=M1($),W=J8(f);while(!0){let H=d(W,"node_modules",J);if(Tf(H)||Tf(d(H,"package.json")))return!0;let Q=d(W,"..");if(Q===W)return!1;W=Q}}function q7(f){return fW(f)!==null}function fW(f){try{return OR.resolve(f)}catch{}return SR(f)}function SR(f){let $=M1(f),J=kR($);if(!J)return null;let W=d(J,"package.json");try{let H=JSON.parse(L1(W,"utf8")),Q=ER(f),Z=Q==="."&&typeof H.exports==="string"?H.exports:H.exports&&typeof H.exports==="object"&&Object.hasOwn(H.exports,Q)?H.exports[Q]:void 0,j=WW(Z)??(Q==="."&&typeof H.main==="string"?H.main:null);if(!j)return null;let X=d(J,j),A=[X,...E7(J,j).filter((P)=>P!==X)];for(let P of A)if(Tf(P))return P;return null}catch{return null}}function kR(f){let $=C7;while(!0){let J=d($,"package.json");if(Tf(J))try{if(JSON.parse(L1(J,"utf8")).name===f)return $}catch{}let W=d($,"node_modules",f,"package.json");if(Tf(W))return J8(W);let H=d($,"..");if(H===$)return null;$=H}}function IR(f){let J=J8(f);for(let W=0;W<4;W++){let H=d(J,"package.json");if(Tf(H))try{let Z=JSON.parse(L1(H,"utf8"));return Z!=null&&typeof Z==="object"&&"cline"in Z}catch{return!1}let Q=d(J,"..");if(Q===J)return!1;J=Q}return!1}function k7(f,$){let J=$.startsWith("file:")?b7($):LR($)?$:d(J8(f),$);if(Tf(J)&&$8.has($W(J)))return J;for(let W of $8){let H=`${J}${W}`;if(Tf(H))return H}for(let W of $8){let H=d(J,`index${W}`);if(Tf(H))return H}return null}function I7(f){let $=new Set,J=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of J)for(let H of f.matchAll(W)){let Q=H[1];if(Q)$.add(Q)}return[...$]}function m7(f,$,J=new Set){if(J.has(f)||!Tf(f))return;if(J.add(f),!$8.has($W(f)))return;let W=L1(f,"utf8");for(let H of I7(W)){if(H.startsWith("node:")||JW.has(H))continue;if(F6(H)){if(Object.hasOwn(o5,H)||Object.hasOwn(o5,M1(H))||e5(f,H)||S7(H)&&q7(H)||$&&q7(H))continue;throw Error(`Cannot find module '${M1(H)}'`)}let Q=k7(f,H);if(Q)m7(Q,$,J)}}function x7(f,$=new Set,J=new Set){if($.has(f)||!Tf(f))return J;if($.add(f),!$8.has($W(f)))return J;let W=L1(f,"utf8");for(let H of I7(W)){if(J.add(H),F6(H))continue;let Q=k7(f,H);if(Q)x7(Q,$,J)}return J}function mR(f,$){let J=w7(f),W={},H=x7(f),Q=new Set(NR);for(let[Z,j]of Object.entries(o5)){try{J.resolve(Z);continue}catch{}W[Z]=j}for(let Z of H)if(F6(Z)&&(S7(Z)||$))Q.add(Z);for(let Z of Q){if(Object.hasOwn(W,Z)||e5(f,Z))continue;let j=fW(Z);if(j)W[Z]=j}if(!$)return W;for(let Z of H){if(!F6(Z)||Object.hasOwn(W,Z)||e5(f,Z)||Z.startsWith("node:")||JW.has(Z))continue;let j=fW(Z);if(j)W[Z]=j}return W}async function g7(f,$={}){let J=!IR(f);m7(f,J);let W=mR(f,J),H=CR(W),Q=await import("jiti"),Z=typeof Q==="function"?Q:typeof Q.default==="function"?Q.default:void 0;if(!Z)throw Error("Unable to load jiti");return await Z(f,{alias:H,cache:$.useCache,requireCache:$.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...JW],transformModules:Object.keys(H)}).import(f,{})}function v7(f,$){if(!f)return!0;if(f.providerIds?.length){if(!$?.providerId||!f.providerIds.includes($.providerId))return!1}if(f.modelIds?.length){if(!$?.modelId||!f.modelIds.includes($.modelId))return!1}return!0}function u7(f){return typeof f==="object"&&f!==null}function HW(f){return Array.isArray(f)&&f.every(($)=>typeof $==="string")}function vR(f,$){if(!u7(f.manifest))throw Error(`Invalid plugin module at ${$}: missing required "manifest"`);if(!HW(f.manifest.capabilities))throw Error(`Invalid plugin module at ${$}: manifest.capabilities must be a string array`);if(f.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${$}: manifest.capabilities cannot be empty`);if(Object.hasOwn(f.manifest,"providerIds")&&!HW(f.manifest.providerIds))throw Error(`Invalid plugin module at ${$}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn(f.manifest,"modelIds")&&!HW(f.manifest.modelIds))throw Error(`Invalid plugin module at ${$}: manifest.modelIds must be a string array when provided`)}function uR(f,$){if(!u7(f))throw Error(`Invalid plugin module at ${$}: expected object export`);if(typeof f.name!=="string"||f.name.length===0)throw Error(`Invalid plugin module at ${$}: expected non-empty "name"`);if(!Object.hasOwn(f,"manifest"))throw Error(`Invalid plugin module at ${$}: missing required "manifest"`);vR(f,$)}async function W8(f,$={}){let J=xR($.cwd??process.cwd(),f),W=await g7(J,{useCache:$.useCache}),H=$.exportName??"plugin",Q=W.default??W[H];uR(Q,J);let Z=Q,j=Z.setup,X=j?(A,P)=>{let B={...$.session,...P.session},Y={...P,session:Object.keys(B).length>0?B:void 0,client:$.client??P.client,user:$.user??P.user,workspaceInfo:$.workspaceInfo??P.workspaceInfo,automation:$.automation??P.automation,logger:$.logger??P.logger,telemetry:$.telemetry??P.telemetry};return j(A,Y)}:void 0;return{...Z,manifest:gR(Z.manifest),setup:X}}async function K6(f,$={}){return(await L0(f,$)).plugins}async function L0(f,$={}){let J=[],W=[],H=new Map,Q=0;for(let Z of f)try{let j=await W8(Z,$);if(!v7(j.manifest,$))continue;let X=H.get(j.name);if(X)W.push({type:"duplicate_plugin_override",pluginName:j.name,pluginPath:Z,overriddenPluginPath:X.pluginPath,message:`Plugin "${j.name}" from ${Z} overrides ${X.pluginPath}`});H.set(j.name,{plugin:j,pluginPath:Z,order:Q++})}catch(j){let X=j instanceof Error?j.message:String(j);J.push({pluginPath:Z,phase:"load",message:X,stack:j instanceof Error?j.stack:void 0})}return{plugins:[...H.values()].sort((Z,j)=>Z.order-j.order).map((Z)=>Z.plugin),failures:J,warnings:W}}import{existsSync as pR}from"node:fs";import{createRequire as iR}from"node:module";import{dirname as nR,join as y6}from"node:path";import{fileURLToPath as aR}from"node:url";var p7={};N(p7,{resolveSubprocessRuntimeExecutable:()=>QW,buildSubprocessSandboxCommand:()=>l7,SubprocessSandbox:()=>h1,CLINE_JS_RUNTIME_PATH_ENV:()=>r7});import{spawn as cR}from"node:child_process";import{basename as dR}from"node:path";import{augmentNodeCommandForDebug as rR,withResolvedClineBuildEnv as lR}from"@cline/shared";function c7(f){if(f instanceof Error)return f;return Error(String(f))}var r7="CLINE_JS_RUNTIME_PATH";function d7(f){let $=f?.trim();if(!$)return!1;let J=dR($).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function QW(f={}){let $=f.env??process.env,J=f.runtimeExecutable?.trim()||$[r7]?.trim();if(J)return J;let W=f.execPath?.trim()||process.execPath;if(d7(W))return W;for(let H of[$.BUN_EXEC_PATH,$.npm_node_execpath,$.NODE]){let Q=H?.trim();if(Q&&d7(Q))return Q}return"node"}function l7(f,$={}){let J=QW({env:$.env,execPath:$.execPath,runtimeExecutable:$.runtimeExecutable});return rR([J,...f],{env:$.env,execArgv:$.execArgv,debugRole:$.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class h1{options;process=null;requestCounter=0;pending=new Map;constructor(f){this.options=f}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest(f){let $=this.pending.get(f);if(!$)return;if(this.pending.delete(f),$.timeout)clearTimeout($.timeout);return $}start(){if(this.process&&this.process.exitCode===null)return;let f=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],$=l7(f,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=cR($[0]??QW(this.options),$.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:lR(process.env)});this.process=J;let W="",H=(Q)=>{let Z=W+Q;W=Z.length>4000?Z.slice(-4000):Z};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(Q)=>{H(Q)}),J.on("message",(Q)=>{this.onMessage(Q)}),J.on("error",(Q)=>{this.failPending(Error(`${this.processLabel} process error: ${c7(Q).message}`))}),J.on("exit",(Q,Z)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(Q)}, signal=${String(Z)})${j?`: ${j}`:""}`))})}async call(f,$,J={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let H=`req_${++this.requestCounter}`,Q={type:"call",id:H,method:f,args:$};return await new Promise((Z,j)=>{let X={resolve:(A)=>Z(A),reject:j};if((J.timeoutMs??0)>0)X.timeout=setTimeout(()=>{this.clearPendingRequest(H),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${f}`))},J.timeoutMs);this.pending.set(H,X),W.send(Q,(A)=>{if(!A)return;let P=this.clearPendingRequest(H);if(!P)return;P.reject(Error(`${this.processLabel} failed to send call "${f}": ${c7(A).message}`))})})}async shutdown(){let f=this.process;if(this.process=null,!f||f.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise(($)=>{let J=setTimeout(()=>{try{f.kill("SIGKILL")}catch{}$()},300);f.once("exit",()=>{clearTimeout(J),$()});try{f.kill("SIGTERM")}catch{clearTimeout(J),$()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage(f){if(!f)return;if(f.type==="event"){if(typeof f.name==="string"&&f.name.length>0)this.options.onEvent?.({name:f.name,payload:f.payload});return}if(f.type!=="response"||!f.id)return;let $=this.clearPendingRequest(f.id);if(!$)return;if(f.ok){$.resolve(f.result);return}$.reject(Error(f.error?.message||`${this.processLabel} call failed`))}failPending(f){for(let[$,J]of this.pending.entries()){if(this.pending.delete($),J.timeout)clearTimeout(J.timeout);J.reject(f)}}}function tR(f){return{...f,contributions:{tools:f.contributions?.tools??[],commands:f.contributions?.commands??[],messageBuilders:f.contributions?.messageBuilders??[],providers:f.contributions?.providers??[],automationEventTypes:f.contributions?.automationEventTypes??[],shortcuts:f.contributions?.shortcuts??[],flags:f.contributions?.flags??[]}}}function U6(f){return(f instanceof Error?f.message:String(f)).includes("Unknown sandbox plugin id:")}function sR(){let f=nR(aR(import.meta.url)),$=iR(import.meta.url),J=[y6(f,"plugin-sandbox-bootstrap.js"),y6(f,"extensions","plugin-sandbox-bootstrap.js"),y6(f,"agents","plugin-sandbox-bootstrap.js")];for(let Q of J)if(pR(Q))return{file:Q};let W=y6(f,"plugin-sandbox-bootstrap.ts"),H="jiti";try{H=$.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(H)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
137
- `)}}var ZW=sR();function jW(f,$){return typeof f==="number"&&f>0?f:$}async function n7(f){let $=new h1({name:"plugin-sandbox",..."file"in ZW?{bootstrapFile:ZW.file}:{bootstrapScript:ZW.script},onEvent:f.onEvent}),J=jW(f.importTimeoutMs,4000),W=jW(f.hookTimeoutMs,3000),H=jW(f.contributionTimeoutMs,60000),Q={pluginPaths:f.pluginPaths,exportName:f.exportName,providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,loggerEnabled:Boolean(f.logger)},Z,j=()=>{return Z??=$.call("initialize",Q,{timeoutMs:J}).finally(()=>{Z=void 0}),Z},X;try{X=await $.call("initialize",Q,{timeoutMs:J})}catch(B){throw await $.shutdown().catch(()=>{}),B}return{extensions:X.plugins.map(tR).map((B)=>{let Y={name:B.name,manifest:B.manifest,setup:(V)=>{oR(V,$,B,H,j),eR(V,$,B,H,j),$F(V,$,B,H,j),fF(V,B)}};return Y.hooks=WF($,B,W,j),Y}),failures:X.failures,shutdown:async()=>{await $.shutdown()},warnings:X.warnings}}function oR(f,$,J,W,H){for(let Q of J.contributions?.tools??[]){let Z={name:Q.name,description:Q.description??"",inputSchema:Q.inputSchema??{type:"object",properties:{}},timeoutMs:Q.timeoutMs,retryable:Q.retryable,execute:async(j,X)=>{try{return await $.call("executeTool",{pluginId:J.pluginId,contributionId:Q.id,input:j,context:X},{timeoutMs:W})}catch(A){if(!U6(A))throw A;return await H(),await $.call("executeTool",{pluginId:J.pluginId,contributionId:Q.id,input:j,context:X},{timeoutMs:W})}}};f.registerTool(Z)}}function eR(f,$,J,W,H){for(let Q of J.contributions?.commands??[])f.registerCommand({name:Q.name,description:Q.description,handler:async(Z)=>{try{return await $.call("executeCommand",{pluginId:J.pluginId,contributionId:Q.id,input:Z},{timeoutMs:W})}catch(j){if(!U6(j))throw j;return await H(),await $.call("executeCommand",{pluginId:J.pluginId,contributionId:Q.id,input:Z},{timeoutMs:W})}}})}function fF(f,$){for(let J of $.contributions?.providers??[])f.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of $.contributions?.automationEventTypes??[])f.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function $F(f,$,J,W,H){for(let Q of J.contributions?.messageBuilders??[])f.registerMessageBuilder({name:Q.name,async build(Z){try{let j=await $.call("buildMessages",{pluginId:J.pluginId,contributionId:Q.id,messages:Z},{timeoutMs:W});return i7(j)?j:Z}catch(j){if(!U6(j))throw j;await H();let X=await $.call("buildMessages",{pluginId:J.pluginId,contributionId:Q.id,messages:Z},{timeoutMs:W});return i7(X)?X:Z}}})}function i7(f){return Array.isArray(f)&&f.every(($)=>typeof $==="object"&&$!==null&&("role"in $)&&("content"in $))}function JF(f,$,J,W,H){return async(Q)=>{try{return await f.call("invokeHook",{pluginId:$,hookName:J,payload:Q},{timeoutMs:W})}catch(Z){if(!U6(Z))throw Z;return await H(),await f.call("invokeHook",{pluginId:$,hookName:J,payload:Q},{timeoutMs:W})}}}function WF(f,$,J,W){let H={};for(let Q of $.hooks??[])H[Q]=JF(f,$.pluginId,Q,J,W);return Object.keys(H).length>0?H:void 0}function H8(f){return jF(f)}function Q8(f){return QF(f)}function b$(f={}){let $=f.cwd??process.cwd(),J=H8(f.workspacePath).flatMap((Z)=>Q8(Z)).filter((Z)=>HF(Z)),W=ZF(f.pluginPaths??[],$),H=[],Q=new Set;for(let Z of[...W,...J]){if(Q.has(Z))continue;Q.add(Z),H.push(Z)}return V6(H)}async function O1(f={}){let $=b$(f);if($.length===0)return{extensions:[],failures:[],warnings:[]};if(f.mode==="in_process"){let W=await L0($,{cwd:f.cwd,exportName:f.exportName,providerId:f.providerId,modelId:f.modelId,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,automation:f.automation,logger:f.logger,telemetry:f.telemetry});return{extensions:W.plugins,failures:W.failures,warnings:W.warnings}}let J=await n7({pluginPaths:$,exportName:f.exportName,importTimeoutMs:f.importTimeoutMs,hookTimeoutMs:f.hookTimeoutMs,contributionTimeoutMs:f.contributionTimeoutMs,onEvent:f.onEvent,providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,logger:f.logger});return{extensions:J.extensions??[],shutdown:J.shutdown,failures:J.failures,warnings:J.warnings}}import{execFile as XF}from"node:child_process";import{promisify as AF}from"node:util";var PF=AF(XF);function XW(f,$){f?.log($,{severity:"warn"})}function BF(f){let $=f?.checkpoint;if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;if(!J.latest||!Array.isArray(J.history))return;let W=J.latest,H=J.history.filter((Q)=>!!Q&&typeof Q==="object"&&typeof Q.ref==="string"&&typeof Q.createdAt==="number"&&typeof Q.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:H}}async function C$(f,$){let J=await PF("git",["-C",f,...$],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function AW(f,$){if(!f)return;let J=`refs/cline/checkpoints/${$}/`;try{let{stdout:W}=await C$(f,["for-each-ref","--format=%(refname)",J]),H=W.trim().split(`
138
- `).filter(Boolean);await Promise.allSettled(H.map((Q)=>C$(f,["update-ref","-d",Q])))}catch{}}async function a7(f,$,J){if(!f||J.length===0)return;await Promise.allSettled(J.map((W)=>C$(f,["update-ref",`refs/cline/checkpoints/${$}/${W.runCount}`,W.ref])))}function YF(f,$){let J=f.findIndex((W)=>W.runCount===$.runCount);if(J<0)return[...f,$];return f.map((W,H)=>H===J?$:W)}function t7(f){let $=f.initialRunCount??0,J,W=async()=>{if(J!==void 0)return J;try{J=(await C$(f.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{J=!1}return J},H=async()=>{if(f.createCheckpoint)return await f.createCheckpoint({cwd:f.cwd,sessionId:f.sessionId,runCount:$});if(!await W())return;let Q=async(A)=>{try{let B=(await C$(f.cwd,["rev-parse","HEAD"])).stdout.trim();if(!B)return;return{ref:B,createdAt:Date.now(),runCount:$,kind:"commit"}}catch(P){XW(f.logger,`${A}: ${P instanceof Error?P.message:String(P)}`);return}},Z=`cline checkpoint session=${f.sessionId} run=${$}`,j="";try{j=(await C$(f.cwd,["stash","create",Z])).stdout.trim()}catch(A){return XW(f.logger,`Checkpoint snapshot failed: ${A instanceof Error?A.message:String(A)}`),Q("Checkpoint HEAD fallback failed")}if(!j)return Q("Checkpoint HEAD fallback failed");let X=`refs/cline/checkpoints/${f.sessionId}/${$}`;try{await C$(f.cwd,["update-ref",X,j])}catch(A){XW(f.logger,`Checkpoint store failed: ${A instanceof Error?A.message:String(A)}`);return}return{ref:j,createdAt:Date.now(),runCount:$,kind:"stash"}};return{beforeRun:async({snapshot:Q})=>{if(Q.parentAgentId!=null)return;$+=1;return},beforeModel:async({snapshot:Q})=>{if(Q.parentAgentId!=null||Q.iteration!==1||$<1)return;let Z=await H();if(!Z)return;let j=await f.readSessionMetadata(),X=BF(j);if(X?.latest.ref===Z.ref)return;let A=YF(X?.history??[],Z);await f.writeSessionMetadata({...j??{},checkpoint:{latest:Z,history:A}});return}}}import{spawn as DF}from"node:child_process";import{appendFileSync as _F,readFileSync as MF}from"node:fs";import{join as LF}from"node:path";import{augmentNodeCommandForDebug as e7,withResolvedClineBuildEnv as YW}from"@cline/shared";import{ensureHookLogDir as s7}from"@cline/shared/storage";function z1(f,$){if(!$)return;return{name:f,manifest:{capabilities:["hooks"]},hooks:$}}import{existsSync as VF,readdirSync as RF}from"node:fs";import{basename as FF,extname as KF,join as yF}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as G6,resolveHooksConfigSearchPaths as UF}from"@cline/shared/storage";function Z8(f){return UF(f)}var N1;((P)=>{P.TaskStart="TaskStart";P.TaskResume="TaskResume";P.TaskCancel="TaskCancel";P.TaskComplete="TaskComplete";P.TaskError="TaskError";P.PreToolUse="PreToolUse";P.PostToolUse="PostToolUse";P.UserPromptSubmit="UserPromptSubmit";P.PreCompact="PreCompact";P.SessionShutdown="SessionShutdown"})(N1||={});var j8={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},GF=new Map(Object.values(N1).map((f)=>[f.toLowerCase(),f])),TF=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function X8(f){let $=KF(f).toLowerCase();if(!TF.has($))return;let J=FF(f,$).trim().toLowerCase();return GF.get(J)}function n0(f){let $=[],J=new Set,W=Z8(f).filter((H)=>VF(H));for(let H of W)try{for(let Q of RF(H,{withFileTypes:!0})){if(!Q.isFile())continue;let Z=X8(Q.name);if(!Z)continue;let j=yF(H,Q.name);if(J.has(j))continue;J.add(j),$.push({fileName:Z,hookEventName:j8[Z],path:j})}}catch{}return $.sort((H,Q)=>H.path.localeCompare(Q.path))}function D6(f){if(!f||typeof f!=="object")return{};let $={};for(let[J,W]of Object.entries(f))$[J]=typeof W==="string"?W:JSON.stringify(W);return $}function T6(f,$,J){let W=J instanceof Error?`: ${J.message}`:"",H=`${$}${W}`;if(f){try{f.log(H,{severity:"warn",...J!==void 0?{error:J}:{}})}catch{}return}console.warn(H)}function hF(f,$){if(!$)return f;if(!f)return{...$};let J=[f.context,$.context].filter((H)=>typeof H==="string"&&H.length>0).join(`
139
- `),W=[...f.appendMessages??[],...$.appendMessages??[]];return{cancel:f.cancel===!0||$.cancel===!0?!0:void 0,review:f.review===!0||$.review===!0?!0:void 0,context:J||void 0,overrideInput:$.overrideInput!==void 0?$.overrideInput:f.overrideInput,systemPrompt:$.systemPrompt!==void 0?$.systemPrompt:f.systemPrompt,appendMessages:W.length>0?W:void 0}}function OF(f){if(!f||typeof f!=="object")return;let $=f,J=typeof $.context==="string"?$.context:typeof $.contextModification==="string"?$.contextModification:typeof $.errorMessage==="string"?$.errorMessage:void 0;return{cancel:typeof $.cancel==="boolean"?$.cancel:void 0,review:typeof $.review==="boolean"?$.review:void 0,context:J,overrideInput:Object.hasOwn($,"overrideInput")?$.overrideInput:void 0}}function PW(f){let $=String(f??"").toLowerCase();return $.includes("cancel")||$.includes("abort")||$.includes("interrupt")}function Ff(f,$){let J=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:$.rootSessionId||f.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:f.conversationId,sessionContext:W,workspaceRoots:$.workspacePath?[$.workspacePath]:[],workspaceInfo:$.workspaceInfo,userId:J,agent_id:f.agentId,parent_agent_id:f.parentAgentId}}function zF(f){let $=f.trim();if(!$)return{};let W=$.split(`
140
- `).map((Q)=>Q.trim()).filter(Boolean).filter((Q)=>Q.startsWith("HOOK_CONTROL\t")).map((Q)=>Q.slice(13)),H=W.length>0?W[W.length-1]:$;try{return{parsedJson:JSON.parse(H)}}catch(Q){return{parseError:Q instanceof Error?Q.message:"Failed to parse hook stdout JSON"}}}async function NF(f,$){let J=f.stdin;if(!J)throw Error("hook command failed to create stdin");await new Promise((W,H)=>{let Q=!1,Z=()=>{J.off("error",X),J.off("finish",A),f.off("close",P)},j=(B)=>{if(Q)return;if(Q=!0,Z(),B){let Y=B.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){W();return}H(B);return}W()},X=(B)=>j(B),A=()=>j(),P=()=>j();J.on("error",X),J.once("finish",A),f.once("close",P);try{J.end($)}catch(B){j(B)}})}async function fZ(f,$){if($.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await o7(f,$)}catch(J){let W=bF($.command,process.platform,J);if(!W)throw J;return await o7(f,{...$,command:W})}}async function o7(f,$){let J=e7($.command,{env:$.env,debugRole:"hook"}),W=DF(J[0],J.slice(1),{cwd:$.cwd,env:YW($.env),stdio:$.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:$.detached}),H=new Promise((Y)=>{W.once("spawn",()=>Y())}),Q=new Promise((Y,V)=>{W.once("error",(R)=>V(R))}),Z=JSON.stringify(f);if(await Promise.race([H,Q]),await NF(W,Z),$.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",X="",A=!1,P;W.stdout.on("data",(Y)=>{j+=Y.toString()}),W.stderr.on("data",(Y)=>{X+=Y.toString()});let B=new Promise((Y)=>{if(($.timeoutMs??0)>0)P=setTimeout(()=>{A=!0,W.kill("SIGKILL")},$.timeoutMs);W.once("close",(V)=>{if(P)clearTimeout(P);let{parsedJson:R,parseError:U}=zF(j);Y({exitCode:V,stdout:j,stderr:X,parsedJson:R,parseError:U,timedOut:A})})});return await Promise.race([B,Q])}function qF(f){try{let J=MF(f,"utf8").split(/\r?\n/,1)[0]?.trim();if(!J?.startsWith("#!"))return;let W=J.slice(2).trim();if(!W)return;let H=W.split(/\s+/).filter(Boolean);return H.length>0?H:void 0}catch{return}}function wF(f){return!!(f&&typeof f==="object"&&("code"in f)&&f.code==="ENOENT")}function bF(f,$=process.platform,J){if($!=="win32"||!wF(J))return;if(f[0]!=="py"||f[1]!=="-3")return;return["python",...f.slice(2)]}function $Z(f){if(f.length===0)return;let[$,...J]=f,W=$.replace(/\\/g,"/").toLowerCase(),H=W.split("/").at(-1)??W;if(H==="env")return $Z(J);if(H==="bash"||H==="sh"||H==="zsh")return[H,...J];if(H==="python3"||H==="python")return process.platform==="win32"?["py","-3",...J]:[H,...J];return f}function CF(f){let $=qF(f);if($&&$.length>0)return[...$Z($)??$,f];let J=f.toLowerCase();if(J.endsWith(".sh")||J.endsWith(".bash")||J.endsWith(".zsh"))return["bash",f];if(J.endsWith(".js")||J.endsWith(".mjs")||J.endsWith(".cjs"))return e7(["node",f],{debugRole:"hook"});if(J.endsWith(".ts")||J.endsWith(".mts")||J.endsWith(".cts"))return["bun","run",f];if(J.endsWith(".py"))return process.platform==="win32"?["py","-3",f]:["python3",f];if(J.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",f];return["bash",f]}function EF(f){let $={};for(let J of n0(f)){if(!J.hookEventName)continue;let W=J.hookEventName,H=$[W]??[];H.push(CF(J.path)),$[W]=H}return $}async function SF(f){let $;for(let J of f.commands){let W=J.join(" ");try{let H=await fZ(f.payload,{command:J,cwd:f.cwd,env:YW(process.env),detached:!1,timeoutMs:f.timeoutMs});if(H?.timedOut){T6(f.logger,`hook command timed out: ${W}`);continue}if(H?.parseError){T6(f.logger,`hook command returned invalid JSON control output: ${W} (${H.parseError})`);continue}$=hF($,OF(H?.parsedJson))}catch(H){T6(f.logger,`hook command failed: ${W}`,H)}}return $}function E$(f){for(let $ of f.commands){let J=$.join(" ");fZ(f.payload,{command:$,cwd:f.cwd,env:YW(process.env),detached:!0}).catch((W)=>{T6(f.logger,`hook command failed: ${J}`,W)})}}function a0(f){return{agentId:f.agentId,conversationId:f.conversationId??f.runId??f.agentId,parentAgentId:f.parentAgentId??null}}function BW(f,$){return{...a0(f.snapshot),userMessage:$}}function JZ(f){return{...a0(f.snapshot),iteration:f.snapshot.iteration,call:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input}}}function WZ(f){return{...a0(f.snapshot),iteration:f.snapshot.iteration,record:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input,output:f.result.output,error:f.result.isError?String(f.result.output):void 0,durationMs:f.durationMs,startedAt:f.startedAt,endedAt:f.endedAt}}}function HZ(f){return f.filter(($)=>$.type==="text"&&typeof $.text==="string").map(($)=>$.text).join("")}function kF(f){if(!f)return;let $={};if(f.cancel===!0)$.stop=!0;if(f.overrideInput!==void 0)$.input=f.overrideInput;return Object.keys($).length>0?$:void 0}function q1(f){let $={cwd:f.workspacePath,workspacePath:f.workspacePath,rootSessionId:f.rootSessionId,workspaceInfo:f.workspaceInfo},J=(W)=>{let H=`${JSON.stringify({ts:new Date().toISOString(),...W})}
141
- `,Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??LF(s7(),"hooks.jsonl");s7(Z),_F(Z,H,"utf8")};return{beforeRun:async(W)=>{let H=BW(W,"");J({...Ff(H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let H=JZ(W);J({...Ff(H,$),hookName:"tool_call",iteration:H.iteration,tool_call:{id:H.call.id,name:H.call.name,input:H.call.input},preToolUse:{toolName:H.call.name,parameters:D6(H.call.input)}});return},afterTool:async(W)=>{let H=WZ(W);J({...Ff(H,$),hookName:"tool_result",iteration:H.iteration,tool_result:H.record,postToolUse:{toolName:H.record.name,parameters:D6(H.record.input),result:typeof H.record.output==="string"?H.record.output:JSON.stringify(H.record.output),success:!H.record.error,executionTimeMs:H.record.durationMs}});return},afterRun:async({snapshot:W,result:H})=>{let Q=a0(W);if(H.status==="completed"){J({...Ff(Q,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}});return}if(H.status==="aborted"||PW(H.error?.message)){J({...Ff(Q,$),hookName:"agent_abort",reason:H.error?.message,taskCancel:{taskMetadata:{}}});return}if(H.error)J({...Ff(Q,$),hookName:"agent_error",iteration:H.iterations,error:{name:H.error.name,message:H.error.message,stack:H.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let H=BW({snapshot:W.snapshot},HZ(W.message.content));J({...Ff(H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:H.userMessage,attachments:[]}})}}}function A8(f){let $=EF(f.workspacePath);if(!Object.values($).some((B)=>B.length>0))return;let W=async(B,Y)=>{let V=$[Y]??[];if(V.length===0)return;E$({commands:V,cwd:f.cwd,logger:f.logger,payload:Y==="agent_resume"?{...Ff(B,f),hookName:Y,taskResume:{taskMetadata:{},previousState:{}}}:{...Ff(B,f),hookName:Y,taskStart:{taskMetadata:{}}}})},H=async(B)=>{let Y=$.prompt_submit??[];if(Y.length>0)E$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Ff(B,f),hookName:"prompt_submit",userPromptSubmit:{prompt:B.userMessage,attachments:[]}}})},Q=async(B)=>{let Y=$.tool_call??[];if(Y.length===0)return;return SF({commands:Y,cwd:f.cwd,logger:f.logger,timeoutMs:f.toolCallTimeoutMs??120000,payload:{...Ff(B,f),hookName:"tool_call",iteration:B.iteration,tool_call:{id:B.call.id,name:B.call.name,input:B.call.input},preToolUse:{toolName:B.call.name,parameters:D6(B.call.input)}}})},Z=async(B)=>{let Y=$.tool_result??[];if(Y.length===0)return;E$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Ff(B,f),hookName:"tool_result",iteration:B.iteration,tool_result:B.record,postToolUse:{toolName:B.record.name,parameters:D6(B.record.input),result:typeof B.record.output==="string"?B.record.output:JSON.stringify(B.record.output),success:!B.record.error,executionTimeMs:B.record.durationMs}}})},j=async(B)=>{let Y=$.agent_end??[];if(Y.length===0)return;E$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Ff(B,f),hookName:"agent_end",iteration:B.iteration,turn:B.turn,taskComplete:{taskMetadata:{}}}})},X=async(B)=>{let Y=$.agent_error??[];if(Y.length===0)return;E$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Ff(B,f),hookName:"agent_error",iteration:B.iteration,error:{name:B.error.name,message:B.error.message,stack:B.error.stack}}})},A=async(B)=>{if(PW(B.reason)){let V=$.agent_abort??[];if(V.length>0)E$({commands:V,cwd:f.cwd,logger:f.logger,payload:{...Ff(B,f),hookName:"agent_abort",reason:B.reason,taskCancel:{taskMetadata:{}}}})}let Y=$.session_shutdown??[];if(Y.length===0)return;E$({commands:Y,cwd:f.cwd,logger:f.logger,payload:{...Ff(B,f),hookName:"session_shutdown",reason:B.reason}})},P={};if(($.agent_start?.length??0)>0||($.agent_resume?.length??0)>0||($.prompt_submit?.length??0)>0){if(($.agent_start?.length??0)>0||($.agent_resume?.length??0)>0)P.beforeRun=async(B)=>{let Y=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(a0(B.snapshot),Y);return};if(($.prompt_submit?.length??0)>0)P.onEvent=async(B)=>{if(B.type!=="message-added"||B.message.role!=="user")return;await H(BW({snapshot:B.snapshot},HZ(B.message.content)))}}if(($.tool_call?.length??0)>0)P.beforeTool=async(B)=>{let Y=await Q(JZ(B));return kF(Y)};if(($.tool_result?.length??0)>0)P.afterTool=async(B)=>{await Z(WZ(B));return};if(($.agent_end?.length??0)>0)P.afterRun=async({snapshot:B,result:Y})=>{if(Y.status!=="completed")return;await j({...a0(B),iteration:Y.iterations,turn:{outputText:Y.outputText,status:Y.status}})};if(($.agent_error?.length??0)>0||($.agent_abort?.length??0)>0||($.session_shutdown?.length??0)>0){let B=P.afterRun;P.afterRun=async(Y)=>{await B?.(Y);let{snapshot:V,result:R}=Y;if(R.status==="aborted"||PW(R.error?.message)){await A({...a0(V),reason:R.error?.message});return}if(R.error)await X({...a0(V),iteration:R.iterations,error:R.error})}}return P}function w1(f){return z1("core.hook_config_files",A8(f))}function S$(f,$){let J=f.map((W)=>W[$]).filter((W)=>typeof W==="function");if(J.length===0)return;return async(W)=>{let H;for(let Q of J){let Z=await Q(W);if(!Z||typeof Z!=="object")continue;let j=Z;H={...H??{},...j,stop:H?.stop===!0||j.stop===!0?!0:j.stop,options:H?.options||j.options?{...H?.options??{},...j.options??{}}:void 0}}return H}}function k$(f){let $=f.filter((J)=>J!==void 0);if($.length===0)return;return{beforeRun:S$($,"beforeRun"),afterRun:S$($,"afterRun"),beforeModel:S$($,"beforeModel"),afterModel:S$($,"afterModel"),beforeTool:S$($,"beforeTool"),afterTool:S$($,"afterTool"),onEvent:S$($,"onEvent")}}var QZ={};N(QZ,{normalizeRuntimeCapabilities:()=>Kf});function Kf(...f){let $,J;for(let H of f){if(!H)continue;if(H.toolExecutors)$={...$??{},...H.toolExecutors};if(H.requestToolApproval)J=H.requestToolApproval}let W=$&&Object.keys($).length>0;if(!W&&!J)return;return{...W?{toolExecutors:$}:{},...J?{requestToolApproval:J}:{}}}var qZ={};N(qZ,{toProviderConfig:()=>kf,emptyStoredProviderSettings:()=>e0,StoredProviderSettingsSchema:()=>S1,StoredProviderSettingsEntrySchema:()=>l6,ProviderSettingsSchemaTyped:()=>G8});import{z as o0}from"zod";var NZ={};N(NZ,{toProviderConfig:()=>kf,safeParseSettings:()=>r6,safeCreateProviderConfig:()=>qW,parseSettings:()=>d6,normalizeProviderId:()=>E1,isBuiltInProviderId:()=>zW,createProviderConfig:()=>NW,SapSettingsSchema:()=>v6,ReasoningSettingsSchema:()=>I6,ProviderSettingsSchema:()=>s0,ProviderProtocolSchema:()=>E6,ProviderIdSchema:()=>U8,ProviderClientSchema:()=>S6,OcaSettingsSchema:()=>u6,ModelCatalogSettingsSchema:()=>c6,GcpSettingsSchema:()=>x6,BUILT_IN_PROVIDER_IDS:()=>OW,BUILT_IN_PROVIDER:()=>y8,AzureSettingsSchema:()=>g6,AwsSettingsSchema:()=>m6,AuthSettingsSchema:()=>k6});import*as Sf from"@cline/llms";import{z as h}from"zod";Lf();var DZ={};N(DZ,{refreshOcaToken:()=>B8,loginOcaOAuth:()=>b1,getValidOcaCredentials:()=>Y8,generateOcaOpcRequestId:()=>h6,createOcaRequestHeaders:()=>KW,createOcaOAuthProvider:()=>FW,OCI_HEADER_OPC_REQUEST_ID:()=>RZ,DEFAULT_INTERNAL_OCA_BASE_URL:()=>_6,DEFAULT_INTERNAL_IDCS_URL:()=>AZ,DEFAULT_INTERNAL_IDCS_SCOPES:()=>PZ,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>XZ,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>M6,DEFAULT_EXTERNAL_IDCS_URL:()=>YZ,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>VZ,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>BZ});import{nanoid as jZ}from"nanoid";class VW{ttlMs;maxEntries;entries=new Map;constructor(f,$){this.ttlMs=f;this.maxEntries=$}get(f,$=Date.now()){this.pruneExpired($);let J=this.entries.get(f);if(!J)return;return this.entries.delete(f),this.entries.set(f,J),J.value}set(f,$,J=Date.now(),W=this.ttlMs){this.pruneExpired(J),this.entries.delete(f);while(this.entries.size>=this.maxEntries){let H=this.entries.keys().next().value;if(H===void 0)break;this.entries.delete(H)}this.entries.set(f,{value:$,expiresAt:J+W})}pruneExpired(f){for(let[$,J]of this.entries)if(J.expiresAt<=f)this.entries.delete($)}}var ZZ={};N(ZZ,{startLocalOAuthServer:()=>h0});function IF(){let f;return{promise:new Promise((J)=>{f=J}),resolve:f}}async function h0(f){let $=await import("node:http"),J=f.host??"127.0.0.1",W=f.timeoutMs??300000,H=f.successHtml??mF,Q=IF(),Z=!1,j=null,X=null,A=null,P=(V)=>{if(Z)return;Z=!0,Q.resolve(V)},B=()=>{if(j)clearTimeout(j),j=null;let V=A;if(A=null,X)X.close(),X=null;if(V!==null&&f.onClose)Promise.resolve(f.onClose({host:J,port:V})).catch(()=>{})},Y=async()=>{return j=setTimeout(()=>{B(),P(null)},W),Q.promise};for(let V of f.ports){let R=$.createServer((K,F)=>{try{let y=new URL(K.url||"",`http://${J}:${V}`);if(y.pathname!==f.callbackPath){F.statusCode=404,F.end("Not found");return}let D={url:y,code:y.searchParams.get("code")??void 0,state:y.searchParams.get("state")??void 0,provider:y.searchParams.get("provider")??void 0,error:y.searchParams.get("error")??void 0};if(D.error){F.statusCode=400,F.end(`Authentication failed: ${D.error}`),B(),P(D);return}if(!D.code){F.statusCode=400,F.end("Missing authorization code");return}if(f.expectedState&&D.state!==f.expectedState){F.statusCode=400,F.end("State mismatch");return}F.statusCode=200,F.setHeader("Content-Type","text/html; charset=utf-8"),F.end(H),B(),P(D)}catch{F.statusCode=500,F.end("Internal error")}}),U=await new Promise((K)=>{let F=(y)=>{R.off("error",F),K({bound:!1,error:y})};R.once("error",F),R.listen(V,J,()=>{R.off("error",F),X=R,K({bound:!0})})});if(U.error){if(U.error.code==="EADDRINUSE")continue;throw B(),U.error}if(U.bound){A=V;let K=`http://${J}:${V}${f.callbackPath}`;if(f.onListening)await Promise.resolve(f.onListening({host:J,port:V,callbackUrl:K})).catch(()=>{});return{callbackUrl:K,waitForCallback:Y,cancelWait:()=>{B(),P(null)},close:()=>{B(),P(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var mF=`<!DOCTYPE html>
135
+ ${Q}`;return J||Q}function BG($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return{};return{beforeRun:async(J)=>{for(let Q of f){let Z=await Q.beforeRun?.(J);if(Z?.stop)return Z}return},afterRun:async(J)=>{for(let Q of f)await Q.afterRun?.(J)},beforeModel:async(J)=>{let Q=J.request,Z;for(let W of f){let j=await W.beforeModel?.({...J,request:Q});if(!j)continue;if(j.stop)return j;Z={...Z,...j,options:{...Z?.options??{},...j.options??{}}},Q={...Q,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:{...Q.options??{},...j.options}}:{}}}return Z},afterModel:async(J)=>{for(let Q of f){let Z=await Q.afterModel?.(J);if(Z?.stop)return Z}return},beforeTool:async(J)=>{let Q=J.input,Z;for(let W of f){let j=await W.beforeTool?.({...J,input:Q});if(!j)continue;if(j.stop||j.skip)return j;if(Z={...Z,...j},Object.hasOwn(j,"input"))Q=j.input}return Z},afterTool:async(J)=>{let Q=J.result,Z;for(let W of f){let j=await W.afterTool?.({...J,result:Q});if(!j)continue;if(j.stop)return j;if(Z={...Z,...j},j.result)Q=j.result}return Z},onEvent:async(J)=>{for(let Q of f)await Q.onEvent?.(J)}}}class p${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new Z9;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,f={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=f.logger??$.logger,this.telemetry=f.telemetry??$.telemetry,this.createAgentRuntimeImpl=f.createAgentRuntimeImpl??XG,this.conversation=new $9($.initialMessages),this.messageBuilder=new o5,this.contributionRegistry=HG({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let J=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new Q9({maxConsecutiveMistakes:J,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(W)=>this.emitLegacyEvent(W),log:(W,j,X)=>KG(this.logger,W,j,X),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(W,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:W}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let Z=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new J9(Z)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let f=new Set(this.config.tools.map((Q)=>Q.name)),J=[...this.config.tools];for(let Q of $)if(!f.has(Q.name))J.push(Q),f.add(Q.name);this.config={...this.config,tools:J}}updateConnection($){let f={...this.config};if($.providerId!==void 0)f.providerId=$.providerId;if($.modelId!==void 0)f.modelId=$.modelId;if($.apiKey!==void 0)f.apiKey=$.apiKey;if($.baseUrl!==void 0)f.baseUrl=$.baseUrl;if($.headers!==void 0)f.headers=$.headers;if($.providerConfig!==void 0)f.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)f.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=f}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let f=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=f,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(f)}async shutdown($,f){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,f,J){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!1})}continue($,f,J){return this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let f of this.contributionRegistry.getRegisteredRules()){let J=await VG(f);if(J)$.push(J)}return AG(this.config.systemPrompt,$)}executeRun($){let f;return f=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===f)this.activeRunPromise=null}),this.activeRunPromise=f,f}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let f=new Date,J=$.userMessage;if(J!==void 0){let P=await PG(J,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:P})}let Q=await this.composeSystemPrompt(),Z=d3(this.config,this.logger,this.telemetry),W=this.contributionRegistry.getRegisteredTools(),j=new Map;for(let P of W)j.set(P.name,P);for(let P of this.config.tools)j.set(P.name,P);let X=this.conversation.getConversationId(),H=fW(this.config),Y=Array.from(j.values()),V=t4(this.conversation.getMessages()),A=o3({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:X,parentAgentId:this.parentAgentId,model:Z,logger:this.logger,telemetry:this.telemetry,tools:Y,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,Y),initialMessages:V,systemPrompt:Q}),B=this.createAgentRuntimeImpl(A);if(this.activeRuntime=B,this.abortRequested)B.abort(this.abortReason);let K=B.subscribe((P)=>{this.handleRuntimeEvent(P)}),G,R;try{if($.isContinue)G=await B.continue(void 0);else G=await B.run("")}catch(P){R=P instanceof Error?P:Error(String(P))}finally{K();try{await this.activeTrackerWork}catch(P){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:P})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(G&&G.messages.length>0){let P=Df(G.messages);this.conversation.replaceMessages(P)}let F=new Date;try{return this.buildLegacyResult({runResult:G,thrownError:R,startedAt:f,endedAt:F})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=BG([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((f)=>f.hooks)]);return{...$,beforeModel:async(f)=>{let J=await $.beforeModel?.(f);if(J?.stop)return J;let Q=J?.messages??f.request.messages,Z=await this.prepareMessagesForModelRequest(Q);return{...J,messages:Z}}}}createRuntimePrepareTurn($,f){let J=this.config.prepareTurn;if(!J)return;return async(Q)=>{let Z=Df(Q.messages),W=await this.prepareProviderMessagesForApi(Z),j=await J({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:Z,apiMessages:W,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:f,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!j)return;return{...j.messages?{messages:t4(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let f=await this.prepareProviderMessagesForApi(a3($));return t4(f)}async prepareProviderMessagesForApi($){let f=$,J=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of J)f=await Q.build(f);return this.messageBuilder.buildForApi(f)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let f=this.toolStartedAt.get($.toolCall.toolCallId),J=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let Z=$.message.content.find((H)=>H.type==="tool-result"),W=Z?.type==="tool-result"&&Z.isError===!0,j=W?YG(Z?.type==="tool-result"?Z.output:void 0):void 0,X={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:Z?.type==="tool-result"?Z.output:void 0,error:j,durationMs:f===void 0?0:J.getTime()-f.getTime(),startedAt:f??J,endedAt:J};if(this.currentRunToolCalls.push(X),W){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let f=this.currentTurnFailedTools,J=this.currentTurnSuccessfulTools;if(f>0&&J===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${f} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(J>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let f of this.eventAdapter.translate($))this.emitLegacyEvent(f)}syncConversationFromRuntimeMessage($,f){if($.length>0){this.conversation.replaceMessages(Df($));return}if(f.length===0)return;let J=new Set(this.conversation.getMessages().map((Z)=>Z.id).filter((Z)=>typeof Z==="string")),Q=Df(f).filter((Z)=>!Z.id||!J.has(Z.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let f of this.listeners)try{f($)}catch(J){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:J})}}inspectLoopForToolCall($,f,J){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:f});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:J,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let f=await this.mistakeTracker.record($);if(f.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:f.message}]}),this.activeRuntime?.abort(f.reason??f.message)})}buildLegacyResult($){let{runResult:f,thrownError:J,startedAt:Q,endedAt:Z}=$,W=Z.getTime()-Q.getTime(),j=J?"error":GG(f),X=f?.outputText||(f?.status==="failed"?f.error?.message:void 0)||"",H=f?{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens>0?f.usage.cacheReadTokens:void 0,cacheWriteTokens:f.usage.cacheWriteTokens>0?f.usage.cacheWriteTokens:void 0,totalCost:f.usage.totalCost}:this.currentRunUsage,Y=f?Df(f.messages):this.conversation.getMessages(),V=fW(this.config);if(J)throw J;return{text:X,usage:H,messages:Y,toolCalls:this.currentRunToolCalls,iterations:f?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:V},startedAt:Q,endedAt:Z,durationMs:W}}}function KG($,f,J,Q){if(!$)return;if(f==="debug"){$.debug(J,Q);return}if(f==="error"&&$.error){$.error(J,Q);return}let Z=f==="warn"?"warn":f==="error"?"error":"info";$.log(J,{...Q,severity:Z})}function GG($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function PG($,f,J,Q){let{buildInitialUserContent:Z}=await Promise.resolve().then(() => $W);return Z($,f,J,Q)}function fW($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let f=t5($);if(f?.[$.modelId])return f[$.modelId];return}import{buildClineSystemPrompt as JW}from"@cline/shared";function QW($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return JW({ide:f.clineIdeName?.trim()||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,rules:`# Team Teammate Role
136
+ ${J}`,platform:f.clinePlatform,metadata:f.workspaceMetadata})}function ZW($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return JW({ide:f.clineIdeName||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,overridePrompt:J,metadata:f.workspaceMetadata,platform:f.clinePlatform})}function Rf($){let f={...$};return{getRuntimeConfig:()=>f,getConnectionConfig:()=>({providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking}),updateConnectionDefaults:(J)=>{f={...f,...J}}}}function z1($){let f=$.configProvider.getRuntimeConfig(),J=$.kind==="teammate"?QW($.prompt,f):ZW($.prompt,f);return{...$.configProvider.getConnectionConfig(),systemPrompt:J,tools:$.tools,maxIterations:$.maxIterations??f.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:f.hooks,extensions:f.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:f.logger,role:$.role}}function Uf($){let f=z1($),J=new p$(f);if(f.onEvent)J.subscribeEvents(f.onEvent);return J}var RG=W9.object({systemPrompt:W9.string().describe("System prompt defining the sub-agent's behavior"),task:W9.string().describe("Task for the sub-agent to complete")});function r$($){return FG({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:DG(RG),execute:async(f,J)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(f,J):$.subAgentTools??[],Z=Uf({kind:"subagent",prompt:f.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),W=Z.getAgentId(),j=Z.getConversationId(),X=J.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:W,conversationId:j,parentAgentId:X,input:f})}catch{}try{let H=await Z.run(f.task),Y={text:H.text,iterations:H.iterations,finishReason:H.finishReason,usage:{inputTokens:H.usage.inputTokens,outputTokens:H.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,result:Y,agentResult:H})}catch{}return Y}catch(H){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,error:H instanceof Error?H:Error(String(H))})}catch{}throw H}},timeoutMs:300000,retryable:!1})}import{createTool as j0,TEAM_AWAIT_TIMEOUT_MS as UG,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as LG,TEAM_RUN_TEXT_PREVIEW_LIMIT as OG,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as zG,TeamAttachOutcomeFragmentInputSchema as WW,TeamAwaitRunsInputSchema as jW,TeamBroadcastInputSchema as XW,TeamBroadcastToolResultSchema as _G,TeamCancelRunInputSchema as HW,TeamCancelRunToolResultSchema as yG,TeamCleanupInputSchema as YW,TeamCleanupToolResultSchema as TG,TeamCreateOutcomeInputSchema as VW,TeamCreateOutcomeToolResultSchema as NG,TeamFinalizeOutcomeInputSchema as AW,TeamFinalizeOutcomeToolResultSchema as MG,TeamListOutcomesInputSchema as BW,TeamListRunsInputSchema as KW,TeamMailboxMessageToolResultSchema as qG,TeamMissionLogInputSchema as GW,TeamMissionLogToolResultSchema as wG,TeamOutcomeFragmentToolResultSchema as PW,TeamOutcomeToolResultSchema as SG,TeamReadMailboxInputSchema as FW,TeamReviewOutcomeFragmentInputSchema as DW,TeamRunTaskInputSchema as RW,TeamRunTaskToolResultSchema as j9,TeamRunToolSummarySchema as X9,TeamSendMessageInputSchema as UW,TeamSendMessageToolResultSchema as CG,TeamShutdownTeammateInputSchema as LW,TeamSimpleAgentStatusToolResultSchema as OW,TeamSpawnTeammateInputSchema as zW,TeamStatusInputSchema as _W,TeamStatusToolResultSchema as EG,TeamTaskInputSchema as yW,TeamTaskToolResultSchema as n2,validateWithZod as E,zodToJsonSchema as X0}from"@cline/shared";function TW($,f){let J=$.replace(/\s+/g," ").trim();if(J.length<=f)return J;return`${J.slice(0,Math.max(0,f-3)).trimEnd()}...`}function _1($,f){if($===void 0)throw Error(`Missing required field: ${f}`);return $}function hG($){let f=$.result;if(!f)return;return{textPreview:TW(f.text,OG),iterations:f.iterations,finishReason:f.finishReason,durationMs:f.durationMs,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost}}}function s4($){return $?.toISOString()}function H9($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:TW($.message,LG),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:s4($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:s4($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:s4($.heartbeatAt),lastProgressAt:s4($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:hG($)}}function bG($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var Lf=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function NW($){let f=[];if($.createBaseTools)f.push(...$.createBaseTools());f.push(...y1({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:z1({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:f,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function Of($){let f=$.leadAgentId??"lead",J=$.restoredFromPersistence===!0,Q=y1({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),Z=[];for(let W of $.restoredTeammates??[]){if($.runtime.isTeammateActive(W.agentId))continue;NW({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:W}),Z.push(W.agentId)}return{tools:Q,restoredFromPersistence:J,restoredTeammates:Z}}function y1($){let f=$.allowSpawn??!0,J=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,Z=[];if(J)Z.push(j0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:X0(zW),execute:async(j)=>{let X=E(zW,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!f)throw Error("Spawning teammates is disabled in this context.");let H={agentId:X.agentId,rolePrompt:X.rolePrompt};if(NW({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:H}),!Q)$.onLeadToolsUnlocked?.(y1({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return E(OW,{agentId:X.agentId,status:"spawned"})}}));if(!Q)return Z;Z.push(j0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:X0(LW),execute:async(j)=>{let X=E(LW,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(X.agentId,X.reason),E(OW,{agentId:X.agentId,status:"stopped"})}})),Z.push(j0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:X0(_W),execute:async(j)=>{return E(_W,j),E(EG,$.runtime.getSnapshot())}})),Z.push(j0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:X0(yW),execute:async(j)=>{let X=E(yW,j);switch(X.action){case"create":{let H=new Set(zG.create??[]),Y=Object.entries(j).filter(([A,B])=>H.has(A)&&B!=null).map(([A])=>A),V=$.runtime.createTask({title:_1(X.title,"title"),description:_1(X.description,"description"),dependsOn:X.dependsOn,assignee:X.assignee,createdBy:$.requesterId});return E(n2,{action:"create",taskId:V.id,status:V.status,...Y.length>0?{ignoredFields:Y,note:`Ignored fields for action=create: ${Y.join(", ")}`}:{}})}case"list":return E(n2,{action:"list",tasks:$.runtime.listTaskItems({status:X.status,assignee:X.assignee})});case"claim":{let H=$.runtime.claimTask(_1(X.taskId,"taskId"),$.requesterId);return E(n2,{action:"claim",taskId:H.id,status:H.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let H=$.runtime.completeTask(_1(X.taskId,"taskId"),$.requesterId,_1(X.summary,"summary"));return E(n2,{action:"complete",taskId:H.id,status:H.status})}case"block":{let H=$.runtime.blockTask(_1(X.taskId,"taskId"),$.requesterId,_1(X.reason,"reason"));return E(n2,{action:"block",taskId:H.id,status:H.status})}}}}));let W=new Map;return Z.push(j0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:X0(RW),execute:async(j)=>{let X=E(RW,j);if(X.runMode==="async"){let V=$.runtime.startTeammateRun(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0});return E(j9,{agentId:X.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${X.agentId} and queued as ${V.id}.`,runId:V.id})}let H=W.get(X.agentId);if(H){let V=await H;return E(j9,{...V,status:"joined",deduped:!0,message:`Task for ${X.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let Y=$.runtime.routeToTeammate(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0}).then((V)=>E(j9,{agentId:X.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${X.agentId} and completed in sync mode.`,text:V.text,iterations:V.iterations})).finally(()=>{W.delete(X.agentId)});return W.set(X.agentId,Y),await Y}})),Z.push(j0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:X0(HW),execute:async(j)=>{let X=E(HW,j),H=$.runtime.cancelRun(X.runId,X.reason);return E(yG,{runId:H.id,status:H.status})}})),Z.push(j0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:X0(KW),execute:async(j)=>E(X9.array(),$.runtime.listRuns(E(KW,j)).map(H9))})),Z.push(j0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:X0(jW),timeoutMs:UG,execute:async(j)=>{let X=E(jW,j);if(X.runId){let V=await $.runtime.awaitRun(X.runId);return bG(V),E(X9,H9(V))}let H=await $.runtime.awaitAllRuns(),Y=H.filter((V)=>["failed","cancelled","interrupted"].includes(V.status));if(Y.length>0){let V=Y.map((A)=>`${A.id}:${A.status}${A.error?`(${A.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${V}`)}return E(X9.array(),H.map(H9))}})),Z.push(j0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:X0(UW),execute:async(j)=>{let X=E(UW,j),H=$.runtime.sendMessage($.requesterId,X.toAgentId,X.subject,X.body,X.taskId??void 0);return E(CG,{id:H.id,toAgentId:H.toAgentId})}})),Z.push(j0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:X0(XW),execute:async(j)=>{let X=E(XW,j),H=$.runtime.broadcast($.requesterId,X.subject,X.body,{taskId:X.taskId??void 0});return E(_G,{delivered:H.length})}})),Z.push(j0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:X0(FW),execute:async(j)=>{let X=E(FW,j);return E(qG.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:X.unreadOnly,markRead:!0}))}})),Z.push(j0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:X0(GW),execute:async(j)=>{let X=E(GW,j),H=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:X.taskId||void 0,kind:X.kind,summary:X.summary,evidence:X.evidence?.length?X.evidence:void 0,nextAction:X.nextAction||void 0});return E(wG,{id:H.id})}})),Z.push(j0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:X0(YW),execute:async(j)=>{if(E(YW,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),E(TG,{status:"cleaned"})}})),Z.push(j0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:X0(VW),execute:async(j)=>{let X=E(VW,j),H=$.runtime.createOutcome({title:X.title,requiredSections:X.requiredSections,createdBy:$.requesterId});return E(NG,{outcomeId:H.id,status:H.status,requiredSections:H.requiredSections})}})),Z.push(j0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:X0(WW),execute:async(j)=>{let X=E(WW,j),H=$.runtime.attachOutcomeFragment({outcomeId:X.outcomeId,section:X.section,sourceAgentId:$.requesterId,sourceRunId:X.sourceRunId||void 0,content:X.content});return E(PW,{fragmentId:H.id,status:H.status})}})),Z.push(j0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:X0(DW),execute:async(j)=>{let X=E(DW,j),H=$.runtime.reviewOutcomeFragment({fragmentId:X.fragmentId,reviewedBy:$.requesterId,approved:X.approved});return E(PW,{fragmentId:H.id,status:H.status})}})),Z.push(j0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:X0(AW),execute:async(j)=>{let X=E(AW,j),H=$.runtime.finalizeOutcome(X.outcomeId);return E(MG,{outcomeId:H.id,status:H.status})}})),Z.push(j0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:X0(BW),execute:async(j)=>{return E(BW,j),E(SG.array(),$.runtime.listOutcomes())}})),Z}function o4($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}function MW($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var kG=[{id:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:r$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...Lf]}],IG={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function xG($){return $==="plan"||$==="yolo"?$:"act"}function wW($){let f=xG($.mode),J=b0[R$({mode:f})],Q=Ff($.providerId??"",$.modelId??"",f,Pf);return{mode:f,flags:{...J,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function qW($,f){if(f.disabledToolIds?.has($))return!1;let{flags:J}=wW(f);if($==="spawn_agent")return J.enableSpawnAgent===!0;if($==="teams")return J.enableAgentTeams===!0;if($==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let Q=IG[$];return Q?J[Q]===!0:!1}function gG($,f){if($.id==="editor"){let{flags:J}=wW(f),Q=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...$,defaultEnabled:qW($.id,f),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:qW($.id,f)}}function T1($={}){return kG.map((f)=>gG(f,$))}function e4($={}){return T1($).filter((f)=>f.defaultEnabled).map((f)=>f.id)}function $6($){if(!$.enabled)return new Set;let f=T1($.availabilityContext),J=new Set(f.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(f.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!J.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${f.map((Z)=>Z.id).join(", ")}`);return new Set($.allowlist)}function a2($,f={}){return T1(f).filter((J)=>$.has(J.id)).flatMap((J)=>J.headlessToolNames)}function f6($,f={}){return a2($,f)}function N1($={}){let{executorOptions:f={},executors:J,...Q}=$,Z={...Gf(f),...J??{}};return d$({...Q,executors:Z})}import{mkdirSync as lG,writeFileSync as pG}from"node:fs";import{dirname as rG}from"node:path";import{normalizeUserInput as iG}from"@cline/shared";import{nanoid as nG}from"nanoid";var CW={};q(CW,{sanitizeSessionToken:()=>M1,parseTeamTaskSubSessionId:()=>_f,parseSubSessionId:()=>s2,makeTeamTaskSubSessionId:()=>t2,makeSubSessionId:()=>zf,deriveSubsessionStatus:()=>o2});import{nanoid as cG}from"nanoid";function M1($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function zf($,f){let J=M1($),Q=M1(f),Z=`${J}__${Q}`;return Z.length>180?Z.slice(0,180):Z}function t2($,f){let J=M1($),Q=M1(f);return`${J}__teamtask__${Q}__${cG(6)}`}function _f($){let J=$.indexOf("__teamtask__");if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+12),W=Z.lastIndexOf("__");if(W<=0)return null;let j=Z.slice(0,W),X=Z.slice(W+2);if(!Q||!j||!X)return null;return{rootSessionId:Q,agentId:j,teamTaskId:X}}function s2($){if(_f($))return null;let f="__",J=$.indexOf(f);if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+f.length);if(!Q||!Z)return null;return{rootSessionId:Q,agentId:Z}}function o2($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let f=String($.reason??"").toLowerCase();if(f.includes("cancel")||f.includes("abort")||f.includes("interrupt"))return"cancelled";if(f.includes("fail")||f.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var EW={};q(EW,{SessionSource:()=>K0,SESSION_STATUSES:()=>e2});import{SESSION_STATUS_VALUES as uG}from"@cline/shared";var e2=uG,K0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var dG=a.enum(e2),y0=a.object({version:a.literal(1),session_id:a.string().min(1),source:a.string().min(1),pid:a.number().int(),started_at:a.string().min(1),ended_at:a.string().min(1).optional(),exit_code:a.number().int().nullable().optional(),status:dG,interactive:a.boolean(),provider:a.string().min(1),model:a.string().min(1),cwd:a.string().min(1),workspace_root:a.string().min(1),team_name:a.string().min(1).optional(),enable_tools:a.boolean(),enable_spawn:a.boolean(),enable_teams:a.boolean(),prompt:a.string().optional(),metadata:a.record(a.string(),a.unknown()).optional(),messages_path:a.string().min(1).optional()});function hW($){if(!$)return!1;return Object.values($).some((f)=>typeof f==="function")}function V9($,f){let J=[...$??[],...f??[]];if(J.length===0)return;let Q=[],Z=new Set;for(let W of J){if(Z.has(W.name))continue;Z.add(W.name),Q.push(W)}return Q}function bW($){return JSON.stringify($,(f,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function U$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function Y9($,f){let J={...$};J.id=U$(J.id)??nG();let Q=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,Z={id:U$(Q?.id)??U$(J.modelId)??U$(f?.id),provider:U$(Q?.provider)??U$(J.providerId)??U$(f?.provider),family:U$(Q?.family)??U$(f?.family)};if(delete J.providerId,delete J.modelId,Z.id&&Z.provider)J.modelInfo={id:Z.id,provider:Z.provider,...Z.family?{family:Z.family}:{}};else delete J.modelInfo;return J}function J6($){return $.map((f)=>Y9(f))}function Q6($,f,J=[]){let Q=$.map((X,H)=>{let Y=J[H],A=Y?.role===X.role&&JSON.stringify(Y.content)===JSON.stringify(X.content)?{...Y,...X}:{...X};return Y9(A)}),Z=J.length,W=[];for(let X=Z;X<Q.length;X+=1)if(Q[X]?.role==="assistant")W.push(X);if(W.length===0){let X=[...Q].reverse().findIndex((H)=>H.role==="assistant");if(X===-1)return Q;W.push(Q.length-1-X)}let j=W[W.length-1];for(let X of W){let H=Q[X],Y=H.metrics;if(!Y&&X===j){let V=f.usage;Y={inputTokens:V.inputTokens,outputTokens:V.outputTokens,cacheReadTokens:V.cacheReadTokens??0,cacheWriteTokens:V.cacheWriteTokens??0,cost:V.totalCost}}Q[X]={...Y9(H,{id:f.model.id,provider:f.model.provider,family:f.model.info?.family}),...Y?{metrics:Y}:{},ts:H.ts??f.endedAt.getTime()}}return Q}function $8($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var aG=120;function q1($){let f=$?.trim();return f?f.slice(0,aG):void 0}function A9($){let f=iG($??"").trim();if(!f)return;return q1(f.split(`
137
+ `)[0]?.trim())}function i$($){if(!$)return;let f={...$},J=q1(typeof f.title==="string"?f.title:void 0);if(J)f.title=J;else delete f.title;return Object.keys(f).length>0?f:void 0}function f8($){let f=i$($.metadata)??{},J=$.title!==void 0?q1($.title):A9($.prompt);if(J)f.title=J;return Object.keys(f).length>0?f:void 0}function B9($){let f=_f($);if(f)return{agent:"teammate",sessionId:f.rootSessionId,taskType:"team"};let J=s2($);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function K9($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:J6($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function kW($,f,J){lG(rG($),{recursive:!0}),pG($,`${JSON.stringify(K9({updatedAt:f,context:J,messages:[]}),null,2)}
138
+ `,"utf8")}function IW($,f){return y0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:f?.endedAt??$.endedAt??void 0,exit_code:f?.exitCode??$.exitCode??void 0,status:f?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:f?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function xW($,f,J){let Q=0;while(!0){let Z=await $();if(Z===void 0)return{updated:!1};let W=await f(Z);if(typeof W==="object"&&W!==null&&"updated"in W&&W.updated===!1){if(Q+=1,Q>=J)return W;continue}return W}}T0();var uW={};q(uW,{summarizeUsageFromMessages:()=>Nf,sumUsageTotals:()=>W8,getCurrentContextSize:()=>G9,createInitialAccumulatedUsage:()=>V0,accumulateUsageTotals:()=>H0});function V0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function H0($,f){return{inputTokens:$.inputTokens+Math.max(0,f.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,f.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,f.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,f.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,f.totalCost??0)}}function W8($){let f=V0();for(let J of $)f=H0(f,J);return f}function Tf($){return typeof $==="number"&&Number.isFinite($)?$:0}function Nf($){let f=V0();for(let J of $){let Q=J.metrics;if(!Q)continue;f=H0(f,{inputTokens:Tf(Q.inputTokens),outputTokens:Tf(Q.outputTokens),cacheReadTokens:Tf(Q.cacheReadTokens),cacheWriteTokens:Tf(Q.cacheWriteTokens),totalCost:Tf(Q.cost)})}return f}function G9($){for(let f=$.length-1;f>=0;f-=1){let J=$[f];if(J?.role!=="assistant")continue;let Q=Tf(J.metrics?.inputTokens);return Q>0?Q:void 0}return}function $P($){if(!$||typeof $!=="object")return;let f=$,J=f.skill??f.skill_name??f.skillName;if(typeof J!=="string")return;let Q=J.trim();return Q.length>0?Q:void 0}function P9($){if(!$||typeof $!=="object")return{};let f=$;return{agentId:typeof f.agentId==="string"?f.agentId:void 0,conversationId:typeof f.conversationId==="string"?f.conversationId:void 0,parentAgentId:typeof f.parentAgentId==="string"?f.parentAgentId:void 0}}function y$($){let f=$.agentId?.trim();if(!f)return;let J=$.parentAgentId?.trim()||void 0,Q=$.teamRole,Z="root";if(Q==="teammate")Z="team_teammate";else if(Q==="lead")Z="team_lead";else if(J)Z="subagent";return{agentId:f,agentKind:Z,conversationId:$.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:$.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function fP($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function JP($){let f=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let J of f){let Q=J?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function F9($,f,J){let{sessionId:Q,config:Z,liveSession:W,emit:j}=$,X=Z.telemetry,H=W?.runtime.teamRuntime,Y=J?.isPrimaryAgentEvent??!0,V=P9(f),A=y$({agentId:J?.agentId??V.agentId,conversationId:J?.conversationId??V.conversationId,parentAgentId:J?.parentAgentId??V.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??H?.getTeamId(),teamName:J?.teamName??H?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if(f.type==="content_start"&&f.contentType==="tool"&&f.toolName==="skills"){let B=$P(f.input);if(B)B6(X,{ulid:Q,skillName:B,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:Z.providerId,modelId:Z.modelId,...A})}if(f.type==="content_end"&&f.contentType==="tool"){let B=f.toolName??"unknown",K=!f.error;if(A6(X,{ulid:Q,tool:B,autoApproved:void 0,success:K,modelId:Z.modelId,provider:Z.providerId,...A}),!K&&(B==="editor"||B==="apply_patch"))K6(X,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,errorType:f.error,...A})}if(f.type==="notice"&&f.reason==="api_error")Q8(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.message,...A});if(f.type==="error")Q8(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.error?.message??"unknown error",...A});if(f.type==="usage"&&W?.turnUsageBaseline){let B=fP(f);if(Y){W.turnPrimaryUsage=H0(W.turnPrimaryUsage??V0(),B);let G=H0(W.turnUsageBaseline,W.turnPrimaryUsage);$.usageBySession.set(Q,G),yf(X,{ulid:Q,provider:Z.providerId,model:Z.modelId,source:"assistant",mode:Z.mode,...A}),Y6(X,{ulid:Q,tokensIn:f.inputTokens,tokensOut:f.outputTokens,cacheWriteTokens:f.cacheWriteTokens,cacheReadTokens:f.cacheReadTokens,totalCost:f.cost,model:Z.modelId,...A})}else{let G=JP({isPrimaryAgentEvent:Y,overrides:J,eventMetadata:V}),R=W.turnUsageByAgent??new Map;W.turnUsageByAgent=R,R.set(G,H0(R.get(G)??V0(),B))}let K=H0(W.turnPrimaryUsage??V0(),W8(W.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,H0(W.turnAggregateUsageBaseline??W.turnUsageBaseline,K))}if(f.type==="iteration_end"&&Y)$.persistMessages(Q,W?.agent.getMessages()??[],W?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:Q,event:f,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(Y?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:bW(f),ts:Date.now()}})}function t$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as OD}from"@cline/shared";function dW($){let f="";for(let J=0;J<$.length;J+=1)f+=String.fromCharCode($[J]??0);return btoa(f).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function QP($){let J=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(Q)}function ZP($=32){let f=new Uint8Array($);return crypto.getRandomValues(f),dW(f)}async function U6(){let $=ZP(),f=dW(await QP($));return{verifier:$,challenge:f}}function L6($){return $.endsWith("/")?$.slice(0,-1):$}function w1($,f){return new URL(f,`${L6($)}/`).toString()}function Mf($,f={}){let J=$.trim();if(!J)return{};try{let Q=new URL(J);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:f.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(f.allowHashCodeState&&J.includes("#")){let[Q,Z]=J.split("#",2);return{code:Q||void 0,state:Z||void 0}}if(J.includes("code=")){let Q=new URLSearchParams(J);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:f.includeProvider?Q.get("provider")??void 0:void 0}}return{code:J}}function WP($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function G0($){if(!$)return null;try{let f=$.split(".");if(f.length!==3)return null;let J=f[1];if(!J)return null;let Q=J.replace(/-/g,"+").replace(/_/g,"/"),Z=Q.padEnd(Q.length+(4-Q.length%4)%4,"="),W=WP(Z);if(!W)return null;return JSON.parse(W)}catch{return null}}function qf($){try{let f=JSON.parse($),J=f.error,Q=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,Z=typeof f.error_description==="string"?f.error_description:typeof f.message==="string"?f.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:Q,message:Z}}catch{return{}}}function S1($,f){return Date.now()>=$.expires-f}async function wf($){if(!$.onManualCodeInput){let W=await $.waitForCallback();return{code:W?.code,state:W?.state,provider:W?.provider,error:W?.error}}let f,J,Q=$.onManualCodeInput().then((W)=>{f=W,$.cancelWait()}).catch((W)=>{J=W instanceof Error?W:Error(String(W)),$.cancelWait()}),Z=await $.waitForCallback();if(J)throw J;if(Z?.code||Z?.error)return{code:Z.code,state:Z.state,provider:Z.provider,error:Z.error};if(f)return Mf(f,$.parseOptions);if(await Q,J)throw J;if(f)return Mf(f,$.parseOptions);return{}}T$();import{existsSync as rP}from"node:fs";import{discoverPluginModulePaths as iP,resolveConfiguredPluginModulePaths as nP,resolvePluginConfigSearchPaths as aP}from"@cline/shared/storage";import{resolve as NP}from"node:path";import{normalizePluginManifest as MP}from"@cline/shared";import{existsSync as L0,readFileSync as Cf}from"node:fs";import{builtinModules as VP,createRequire as eW}from"node:module";import{dirname as V8,extname as N6,isAbsolute as AP,resolve as l}from"node:path";import{fileURLToPath as $j}from"node:url";import{PLUGIN_FILE_EXTENSIONS as BP}from"@cline/shared";var fj=V8($j(import.meta.url)),KP=eW(import.meta.url),GP=l(fj,"..","..","..","..",".."),R9=DP(GP),PP=["@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],O9=new Set(VP.flatMap(($)=>[$,$.replace(/^node:/,"")])),Y8=new Set(BP),FP=["development","node","import","require","default"];function DP($){let f={},J={"@cline/agents":l($,"packages/agents/src/index.ts"),"@cline/core":l($,"packages/core/src/index.ts"),"@cline/llms":l($,"packages/llms/src/index.ts"),"@cline/shared":l($,"packages/shared/src/index.ts"),"@cline/shared/storage":l($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":l($,"packages/shared/src/db/index.ts")};for(let[Q,Z]of Object.entries(J))if(L0(Z))f[Q]=Z;for(let Q of["agents","core","llms","shared"]){let Z=l($,"packages",Q),W=l(Z,"package.json");if(!L0(W))continue;try{let j=JSON.parse(Cf(W,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let X=l(Z,j.exports);if(L0(X))f[j.name]=X;continue}if(typeof j.exports!=="object")continue;for(let[X,H]of Object.entries(j.exports)){let Y=RP(Z,H);if(!Y)continue;let V=X==="."?j.name:`${j.name}/${X.replace(/^\.\//,"")}`;f[V]=Y}}catch{}}return f}function RP($,f){let J=z9(f);if(!J)return null;let Q=Jj($,J);for(let Z of Q)if(L0(Z))return Z;return null}function z9($,f=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(f.has($))return null;f.add($);let J=$;for(let Q of FP){let Z=z9(J[Q],f);if(Z)return Z}return null}function Jj($,f){let J=f.replace(/^\.\//,""),Q=[l($,f)];if(J.startsWith("dist/")){let Z=J.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[l($,`${Z}.ts`),l($,`${Z}.tsx`),l($,`${Z}.mts`),l($,`${Z}.cts`),...Q]}return Q}function UP($){return Object.fromEntries(Object.entries($).sort(([f],[J])=>J.length-f.length))}function T6($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function Sf($){if($.startsWith("@")){let[f,J]=$.split("/",3);return J?`${f}/${J}`:$}return $.split("/",1)[0]??$}function LP($){let f=Sf($);if($===f)return".";return`.${$.slice(f.length)}`}function Qj($){return Sf($).startsWith("@cline/")}function U9($,f){let J=Sf(f),Q=V8($);while(!0){let Z=l(Q,"node_modules",J);if(L0(Z)||L0(l(Z,"package.json")))return!0;let W=l(Q,"..");if(W===Q)return!1;Q=W}}function oW($){return L9($)!==null}function L9($){try{return KP.resolve($)}catch{}return OP($)}function OP($){let f=Sf($),J=zP(f);if(!J)return null;let Q=l(J,"package.json");try{let Z=JSON.parse(Cf(Q,"utf8")),W=LP($),j=W==="."&&typeof Z.exports==="string"?Z.exports:Z.exports&&typeof Z.exports==="object"&&Object.hasOwn(Z.exports,W)?Z.exports[W]:void 0,X=z9(j)??(W==="."&&typeof Z.main==="string"?Z.main:null);if(!X)return null;let H=l(J,X),Y=[H,...Jj(J,X).filter((V)=>V!==H)];for(let V of Y)if(L0(V))return V;return null}catch{return null}}function zP($){let f=fj;while(!0){let J=l(f,"package.json");if(L0(J))try{if(JSON.parse(Cf(J,"utf8")).name===$)return f}catch{}let Q=l(f,"node_modules",$,"package.json");if(L0(Q))return V8(Q);let Z=l(f,"..");if(Z===f)return null;f=Z}}function _P($){let J=V8($);for(let Q=0;Q<4;Q++){let Z=l(J,"package.json");if(L0(Z))try{let j=JSON.parse(Cf(Z,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let W=l(J,"..");if(W===J)return!1;J=W}return!1}function Zj($,f){let J=f.startsWith("file:")?$j(f):AP(f)?f:l(V8($),f);if(L0(J)&&Y8.has(N6(J)))return J;for(let Q of Y8){let Z=`${J}${Q}`;if(L0(Z))return Z}for(let Q of Y8){let Z=l(J,`index${Q}`);if(L0(Z))return Z}return null}function Wj($){let f=new Set,J=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of J)for(let Z of $.matchAll(Q)){let W=Z[1];if(W)f.add(W)}return[...f]}function yP($){return N6($)!==".ts"}function jj($,f,J=new Set){if(J.has($)||!L0($))return;if(J.add($),!Y8.has(N6($)))return;let Q=Cf($,"utf8"),Z=yP($);for(let W of Wj(Q)){if(W.startsWith("node:")||O9.has(W))continue;if(T6(W)){if(!Z)continue;if(Object.hasOwn(R9,W)||Object.hasOwn(R9,Sf(W))||U9($,W)||Qj(W)&&oW(W)||f&&oW(W))continue;throw Error(`Cannot find module '${Sf(W)}'`)}let j=Zj($,W);if(j)jj(j,f,J)}}function Xj($,f=new Set,J=new Set){if(f.has($)||!L0($))return J;if(f.add($),!Y8.has(N6($)))return J;let Q=Cf($,"utf8");for(let Z of Wj(Q)){if(J.add(Z),T6(Z))continue;let W=Zj($,Z);if(W)Xj(W,f,J)}return J}function TP($,f){let J=eW($),Q={},Z=Xj($),W=new Set(PP);for(let[j,X]of Object.entries(R9)){try{J.resolve(j);continue}catch{}Q[j]=X}for(let j of Z)if(T6(j)&&(Qj(j)||f))W.add(j);for(let j of W){if(Object.hasOwn(Q,j)||U9($,j))continue;let X=L9(j);if(X)Q[j]=X}if(!f)return Q;for(let j of Z){if(!T6(j)||Object.hasOwn(Q,j)||U9($,j)||j.startsWith("node:")||O9.has(j))continue;let X=L9(j);if(X)Q[j]=X}return Q}async function Hj($,f={}){let J=!_P($);jj($,J);let Q=TP($,J),Z=UP(Q),W=await import("jiti"),j=typeof W==="function"?W:typeof W.default==="function"?W.default:void 0;if(!j)throw Error("Unable to load jiti");return await j($,{alias:Z,cache:f.useCache,requireCache:f.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...O9],transformModules:Object.keys(Z)}).import($,{})}function Yj($,f){if(!$)return!0;if($.providerIds?.length){if(!f?.providerId||!$.providerIds.includes(f.providerId))return!1}if($.modelIds?.length){if(!f?.modelId||!$.modelIds.includes(f.modelId))return!1}return!0}function Vj($){return typeof $==="object"&&$!==null}function _9($){return Array.isArray($)&&$.every((f)=>typeof f==="string")}function qP($,f){if(!Vj($.manifest))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);if(!_9($.manifest.capabilities))throw Error(`Invalid plugin module at ${f}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${f}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!_9($.manifest.providerIds))throw Error(`Invalid plugin module at ${f}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!_9($.manifest.modelIds))throw Error(`Invalid plugin module at ${f}: manifest.modelIds must be a string array when provided`)}function wP($,f){if(!Vj($))throw Error(`Invalid plugin module at ${f}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${f}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);qP($,f)}async function A8($,f={}){let J=NP(f.cwd??process.cwd(),$),Q=await Hj(J,{useCache:f.useCache}),Z=f.exportName??"plugin",W=Q.default??Q[Z];wP(W,J);let j=W,X=j.setup,H=X?(Y,V)=>{let A={...f.session,...V.session},B={...V,session:Object.keys(A).length>0?A:void 0,client:f.client??V.client,user:f.user??V.user,workspaceInfo:f.workspaceInfo??V.workspaceInfo,automation:f.automation??V.automation,logger:f.logger??V.logger,telemetry:f.telemetry??V.telemetry};return X(Y,B)}:void 0;return{...j,manifest:MP(j.manifest),setup:H}}async function M6($,f={}){return(await N$($,f)).plugins}async function N$($,f={}){let J=[],Q=[],Z=new Map,W=0;for(let j of $)try{let X=await A8(j,f);if(!Yj(X.manifest,f))continue;let H=Z.get(X.name);if(H)Q.push({type:"duplicate_plugin_override",pluginName:X.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${X.name}" from ${j} overrides ${H.pluginPath}`});Z.set(X.name,{plugin:X,pluginPath:j,order:W++})}catch(X){let H=X instanceof Error?X.message:String(X);J.push({pluginPath:j,phase:"load",message:H,stack:X instanceof Error?X.stack:void 0})}return{plugins:[...Z.values()].sort((j,X)=>j.order-X.order).map((j)=>j.plugin),failures:J,warnings:Q}}import{existsSync as bP}from"node:fs";import{createRequire as kP}from"node:module";import{dirname as IP,join as q6}from"node:path";import{fileURLToPath as xP}from"node:url";var Pj={};q(Pj,{resolveSubprocessRuntimeExecutable:()=>y9,buildSubprocessSandboxCommand:()=>Gj,SubprocessSandbox:()=>Ef,CLINE_JS_RUNTIME_PATH_ENV:()=>Kj});import{spawn as SP}from"node:child_process";import{basename as CP}from"node:path";import{augmentNodeCommandForDebug as EP,withResolvedClineBuildEnv as hP}from"@cline/shared";function Aj($){if($ instanceof Error)return $;return Error(String($))}var Kj="CLINE_JS_RUNTIME_PATH";function Bj($){let f=$?.trim();if(!f)return!1;let J=CP(f).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function y9($={}){let f=$.env??process.env,J=$.runtimeExecutable?.trim()||f[Kj]?.trim();if(J)return J;let Q=$.execPath?.trim()||process.execPath;if(Bj(Q))return Q;for(let Z of[f.BUN_EXEC_PATH,f.npm_node_execpath,f.NODE]){let W=Z?.trim();if(W&&Bj(W))return W}return"node"}function Gj($,f={}){let J=y9({env:f.env,execPath:f.execPath,runtimeExecutable:f.runtimeExecutable});return EP([J,...$],{env:f.env,execArgv:f.execArgv,debugRole:f.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class Ef{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let f=this.pending.get($);if(!f)return;if(this.pending.delete($),f.timeout)clearTimeout(f.timeout);return f}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],f=Gj($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=SP(f[0]??y9(this.options),f.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:hP(process.env)});this.process=J;let Q="",Z=(W)=>{let j=Q+W;Q=j.length>4000?j.slice(-4000):j};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(W)=>{Z(W)}),J.on("message",(W)=>{this.onMessage(W)}),J.on("error",(W)=>{this.failPending(Error(`${this.processLabel} process error: ${Aj(W).message}`))}),J.on("exit",(W,j)=>{this.process=null;let X=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(W)}, signal=${String(j)})${X?`: ${X}`:""}`))})}async call($,f,J={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let Z=`req_${++this.requestCounter}`,W={type:"call",id:Z,method:$,args:f};return await new Promise((j,X)=>{let H={resolve:(Y)=>j(Y),reject:X};if((J.timeoutMs??0)>0)H.timeout=setTimeout(()=>{this.clearPendingRequest(Z),this.shutdown().catch(()=>{}),X(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${$}`))},J.timeoutMs);this.pending.set(Z,H),Q.send(W,(Y)=>{if(!Y)return;let V=this.clearPendingRequest(Z);if(!V)return;V.reject(Error(`${this.processLabel} failed to send call "${$}": ${Aj(Y).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((f)=>{let J=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}f()},300);$.once("exit",()=>{clearTimeout(J),f()});try{$.kill("SIGTERM")}catch{clearTimeout(J),f()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let f=this.clearPendingRequest($.id);if(!f)return;if($.ok){f.resolve($.result);return}f.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[f,J]of this.pending.entries()){if(this.pending.delete(f),J.timeout)clearTimeout(J.timeout);J.reject($)}}}function gP($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function w6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function mP(){let $=IP(xP(import.meta.url)),f=kP(import.meta.url),J=[q6($,"plugin-sandbox-bootstrap.js"),q6($,"extensions","plugin-sandbox-bootstrap.js"),q6($,"agents","plugin-sandbox-bootstrap.js")];for(let W of J)if(bP(W))return{file:W};let Q=q6($,"plugin-sandbox-bootstrap.ts"),Z="jiti";try{Z=f.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(Z)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
139
+ `)}}var T9=mP();function N9($,f){return typeof $==="number"&&$>0?$:f}async function Dj($){let f=new Ef({name:"plugin-sandbox",..."file"in T9?{bootstrapFile:T9.file}:{bootstrapScript:T9.script},onEvent:$.onEvent}),J=N9($.importTimeoutMs,4000),Q=N9($.hookTimeoutMs,3000),Z=N9($.contributionTimeoutMs,60000),W={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},j,X=()=>{return j??=f.call("initialize",W,{timeoutMs:J}).finally(()=>{j=void 0}),j},H;try{H=await f.call("initialize",W,{timeoutMs:J})}catch(A){throw await f.shutdown().catch(()=>{}),A}return{extensions:H.plugins.map(gP).map((A)=>{let B={name:A.name,manifest:A.manifest,setup:(K)=>{vP(K,f,A,Z,X),cP(K,f,A,Z,X),dP(K,f,A,Z,X),uP(K,A)}};return B.hooks=pP(f,A,Q,X),B}),failures:H.failures,shutdown:async()=>{await f.shutdown()},warnings:H.warnings}}function vP($,f,J,Q,Z){for(let W of J.contributions?.tools??[]){let j={name:W.name,description:W.description??"",inputSchema:W.inputSchema??{type:"object",properties:{}},timeoutMs:W.timeoutMs,retryable:W.retryable,execute:async(X,H)=>{try{return await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}catch(Y){if(!w6(Y))throw Y;return await Z(),await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}}};$.registerTool(j)}}function cP($,f,J,Q,Z){for(let W of J.contributions?.commands??[])$.registerCommand({name:W.name,description:W.description,handler:async(j)=>{try{return await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}catch(X){if(!w6(X))throw X;return await Z(),await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}}})}function uP($,f){for(let J of f.contributions?.providers??[])$.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of f.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function dP($,f,J,Q,Z){for(let W of J.contributions?.messageBuilders??[])$.registerMessageBuilder({name:W.name,async build(j){try{let X=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return Fj(X)?X:j}catch(X){if(!w6(X))throw X;await Z();let H=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return Fj(H)?H:j}}})}function Fj($){return Array.isArray($)&&$.every((f)=>typeof f==="object"&&f!==null&&("role"in f)&&("content"in f))}function lP($,f,J,Q,Z){return async(W)=>{try{return await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}catch(j){if(!w6(j))throw j;return await Z(),await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}}}function pP($,f,J,Q){let Z={};for(let W of f.hooks??[])Z[W]=lP($,f.pluginId,W,J,Q);return Object.keys(Z).length>0?Z:void 0}function B8($){return aP($)}function K8($){return iP($)}function h1($={}){let f=$.cwd??process.cwd(),J=B8($.workspacePath).flatMap((j)=>K8(j)).filter((j)=>rP(j)),Q=nP($.pluginPaths??[],f),Z=[],W=new Set;for(let j of[...Q,...J]){if(W.has(j))continue;W.add(j),Z.push(j)}return _6(Z)}async function hf($={}){let f=h1($);if(f.length===0)return{extensions:[],failures:[],warnings:[]};if($.mode==="in_process"){let Q=await N$(f,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,warnings:Q.warnings}}let J=await Dj({pluginPaths:f,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:J.extensions??[],shutdown:J.shutdown,failures:J.failures,warnings:J.warnings}}import{execFile as tP}from"node:child_process";import{promisify as sP}from"node:util";var oP=sP(tP);function M9($,f){$?.log(f,{severity:"warn"})}function eP($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!J.latest||!Array.isArray(J.history))return;let Q=J.latest,Z=J.history.filter((W)=>!!W&&typeof W==="object"&&typeof W.ref==="string"&&typeof W.createdAt==="number"&&typeof W.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:Z}}async function b1($,f){let J=await oP("git",["-C",$,...f],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function q9($,f){if(!$)return;let J=`refs/cline/checkpoints/${f}/`;try{let{stdout:Q}=await b1($,["for-each-ref","--format=%(refname)",J]),Z=Q.trim().split(`
140
+ `).filter(Boolean);await Promise.allSettled(Z.map((W)=>b1($,["update-ref","-d",W])))}catch{}}async function Rj($,f,J){if(!$||J.length===0)return;await Promise.allSettled(J.map((Q)=>b1($,["update-ref",`refs/cline/checkpoints/${f}/${Q.runCount}`,Q.ref])))}function $F($,f){let J=$.findIndex((Q)=>Q.runCount===f.runCount);if(J<0)return[...$,f];return $.map((Q,Z)=>Z===J?f:Q)}function Uj($){let f=$.initialRunCount??0,J,Q=async()=>{if(J!==void 0)return J;try{J=(await b1($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{J=!1}return J},Z=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:f});if(!await Q())return;let W=async(Y)=>{try{let A=(await b1($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!A)return;return{ref:A,createdAt:Date.now(),runCount:f,kind:"commit"}}catch(V){M9($.logger,`${Y}: ${V instanceof Error?V.message:String(V)}`);return}},j=`cline checkpoint session=${$.sessionId} run=${f}`,X="";try{X=(await b1($.cwd,["stash","create",j])).stdout.trim()}catch(Y){return M9($.logger,`Checkpoint snapshot failed: ${Y instanceof Error?Y.message:String(Y)}`),W("Checkpoint HEAD fallback failed")}if(!X)return W("Checkpoint HEAD fallback failed");let H=`refs/cline/checkpoints/${$.sessionId}/${f}`;try{await b1($.cwd,["update-ref",H,X])}catch(Y){M9($.logger,`Checkpoint store failed: ${Y instanceof Error?Y.message:String(Y)}`);return}return{ref:X,createdAt:Date.now(),runCount:f,kind:"stash"}};return{beforeRun:async({snapshot:W})=>{if(W.parentAgentId!=null)return;f+=1;return},beforeModel:async({snapshot:W})=>{if(W.parentAgentId!=null||W.iteration!==1||f<1)return;let j=await Z();if(!j)return;let X=await $.readSessionMetadata(),H=eP(X);if(H?.latest.ref===j.ref)return;let Y=$F(H?.history??[],j);await $.writeSessionMetadata({...X??{},checkpoint:{latest:j,history:Y}});return}}}import{spawn as YF}from"node:child_process";import{appendFileSync as VF,readFileSync as AF}from"node:fs";import{join as BF}from"node:path";import{augmentNodeCommandForDebug as zj,withResolvedClineBuildEnv as C9}from"@cline/shared";import{ensureHookLogDir as Lj}from"@cline/shared/storage";function bf($,f){if(!f)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:f}}import{existsSync as fF,readdirSync as JF}from"node:fs";import{basename as QF,extname as ZF,join as WF}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as S6,resolveHooksConfigSearchPaths as jF}from"@cline/shared/storage";function G8($){return jF($)}var kf;((V)=>{V.TaskStart="TaskStart";V.TaskResume="TaskResume";V.TaskCancel="TaskCancel";V.TaskComplete="TaskComplete";V.TaskError="TaskError";V.PreToolUse="PreToolUse";V.PostToolUse="PostToolUse";V.UserPromptSubmit="UserPromptSubmit";V.PreCompact="PreCompact";V.SessionShutdown="SessionShutdown"})(kf||={});var P8={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},XF=new Map(Object.values(kf).map(($)=>[$.toLowerCase(),$])),HF=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function F8($){let f=ZF($).toLowerCase();if(!HF.has(f))return;let J=QF($,f).trim().toLowerCase();return XF.get(J)}function s$($){let f=[],J=new Set,Q=G8($).filter((Z)=>fF(Z));for(let Z of Q)try{for(let W of JF(Z,{withFileTypes:!0})){if(!W.isFile())continue;let j=F8(W.name);if(!j)continue;let X=WF(Z,W.name);if(J.has(X))continue;J.add(X),f.push({fileName:j,hookEventName:P8[j],path:X})}}catch{}return f.sort((Z,W)=>Z.path.localeCompare(W.path))}function E6($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))f[J]=typeof Q==="string"?Q:JSON.stringify(Q);return f}function C6($,f,J){let Q=J instanceof Error?`: ${J.message}`:"",Z=`${f}${Q}`;if($){try{$.log(Z,{severity:"warn",...J!==void 0?{error:J}:{}})}catch{}return}console.warn(Z)}function KF($,f){if(!f)return $;if(!$)return{...f};let J=[$.context,f.context].filter((Z)=>typeof Z==="string"&&Z.length>0).join(`
141
+ `),Q=[...$.appendMessages??[],...f.appendMessages??[]];return{cancel:$.cancel===!0||f.cancel===!0?!0:void 0,review:$.review===!0||f.review===!0?!0:void 0,context:J||void 0,overrideInput:f.overrideInput!==void 0?f.overrideInput:$.overrideInput,systemPrompt:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function GF($){if(!$||typeof $!=="object")return;let f=$,J=typeof f.context==="string"?f.context:typeof f.contextModification==="string"?f.contextModification:typeof f.errorMessage==="string"?f.errorMessage:void 0;return{cancel:typeof f.cancel==="boolean"?f.cancel:void 0,review:typeof f.review==="boolean"?f.review:void 0,context:J,overrideInput:Object.hasOwn(f,"overrideInput")?f.overrideInput:void 0}}function w9($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function P0($,f){let J=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:f.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:f.workspacePath?[f.workspacePath]:[],workspaceInfo:f.workspaceInfo,userId:J,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function PF($){let f=$.trim();if(!f)return{};let Q=f.split(`
142
+ `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse hook stdout JSON"}}}async function FF($,f){let J=$.stdin;if(!J)throw Error("hook command failed to create stdin");await new Promise((Q,Z)=>{let W=!1,j=()=>{J.off("error",H),J.off("finish",Y),$.off("close",V)},X=(A)=>{if(W)return;if(W=!0,j(),A){let B=A.code;if(B==="EPIPE"||B==="ERR_STREAM_DESTROYED"){Q();return}Z(A);return}Q()},H=(A)=>X(A),Y=()=>X(),V=()=>X();J.on("error",H),J.once("finish",Y),$.once("close",V);try{J.end(f)}catch(A){X(A)}})}async function _j($,f){if(f.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await Oj($,f)}catch(J){let Q=UF(f.command,process.platform,J);if(!Q)throw J;return await Oj($,{...f,command:Q})}}async function Oj($,f){let J=zj(f.command,{env:f.env,debugRole:"hook"}),Q=YF(J[0],J.slice(1),{cwd:f.cwd,env:C9(f.env),stdio:f.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:f.detached}),Z=new Promise((B)=>{Q.once("spawn",()=>B())}),W=new Promise((B,K)=>{Q.once("error",(G)=>K(G))}),j=JSON.stringify($);if(await Promise.race([Z,W]),await FF(Q,j),f.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let X="",H="",Y=!1,V;Q.stdout.on("data",(B)=>{X+=B.toString()}),Q.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Q.kill("SIGKILL")},f.timeoutMs);Q.once("close",(K)=>{if(V)clearTimeout(V);let{parsedJson:G,parseError:R}=PF(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([A,W])}function DF($){try{let J=AF($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!J?.startsWith("#!"))return;let Q=J.slice(2).trim();if(!Q)return;let Z=Q.split(/\s+/).filter(Boolean);return Z.length>0?Z:void 0}catch{return}}function RF($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function UF($,f=process.platform,J){if(f!=="win32"||!RF(J))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function yj($){if($.length===0)return;let[f,...J]=$,Q=f.replace(/\\/g,"/").toLowerCase(),Z=Q.split("/").at(-1)??Q;if(Z==="env")return yj(J);if(Z==="bash"||Z==="sh"||Z==="zsh")return[Z,...J];if(Z==="python3"||Z==="python")return process.platform==="win32"?["py","-3",...J]:[Z,...J];return $}function LF($){let f=DF($);if(f&&f.length>0)return[...yj(f)??f,$];let J=$.toLowerCase();if(J.endsWith(".sh")||J.endsWith(".bash")||J.endsWith(".zsh"))return["bash",$];if(J.endsWith(".js")||J.endsWith(".mjs")||J.endsWith(".cjs"))return zj(["node",$],{debugRole:"hook"});if(J.endsWith(".ts")||J.endsWith(".mts")||J.endsWith(".cts"))return["bun","run",$];if(J.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(J.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function OF($){let f={};for(let J of s$($)){if(!J.hookEventName)continue;let Q=J.hookEventName,Z=f[Q]??[];Z.push(LF(J.path)),f[Q]=Z}return f}async function zF($){let f;for(let J of $.commands){let Q=J.join(" ");try{let Z=await _j($.payload,{command:J,cwd:$.cwd,env:C9(process.env),detached:!1,timeoutMs:$.timeoutMs});if(Z?.timedOut){C6($.logger,`hook command timed out: ${Q}`);continue}if(Z?.parseError){C6($.logger,`hook command returned invalid JSON control output: ${Q} (${Z.parseError})`);continue}f=KF(f,GF(Z?.parsedJson))}catch(Z){C6($.logger,`hook command failed: ${Q}`,Z)}}return f}function k1($){for(let f of $.commands){let J=f.join(" ");_j($.payload,{command:f,cwd:$.cwd,env:C9(process.env),detached:!0}).catch((Q)=>{C6($.logger,`hook command failed: ${J}`,Q)})}}function o$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function S9($,f){return{...o$($.snapshot),userMessage:f}}function Tj($){return{...o$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function Nj($){return{...o$($.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 Mj($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function _F($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}function If($){let f={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},J=(Q)=>{let Z=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
143
+ `,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??BF(Lj(),"hooks.jsonl");Lj(j),VF(j,Z,"utf8")};return{beforeRun:async(Q)=>{let Z=S9(Q,"");J({...P0(Z,f),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let Z=Tj(Q);J({...P0(Z,f),hookName:"tool_call",iteration:Z.iteration,tool_call:{id:Z.call.id,name:Z.call.name,input:Z.call.input},preToolUse:{toolName:Z.call.name,parameters:E6(Z.call.input)}});return},afterTool:async(Q)=>{let Z=Nj(Q);J({...P0(Z,f),hookName:"tool_result",iteration:Z.iteration,tool_result:Z.record,postToolUse:{toolName:Z.record.name,parameters:E6(Z.record.input),result:typeof Z.record.output==="string"?Z.record.output:JSON.stringify(Z.record.output),success:!Z.record.error,executionTimeMs:Z.record.durationMs}});return},afterRun:async({snapshot:Q,result:Z})=>{let W=o$(Q);if(Z.status==="completed"){J({...P0(W,f),hookName:"agent_end",iteration:Z.iterations,turn:{outputText:Z.outputText,status:Z.status},taskComplete:{taskMetadata:{}}});return}if(Z.status==="aborted"||w9(Z.error?.message)){J({...P0(W,f),hookName:"agent_abort",reason:Z.error?.message,taskCancel:{taskMetadata:{}}});return}if(Z.error)J({...P0(W,f),hookName:"agent_error",iteration:Z.iterations,error:{name:Z.error.name,message:Z.error.message,stack:Z.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let Z=S9({snapshot:Q.snapshot},Mj(Q.message.content));J({...P0(Z,f),hookName:"prompt_submit",userPromptSubmit:{prompt:Z.userMessage,attachments:[]}})}}}function D8($){let f=OF($.workspacePath);if(!Object.values(f).some((A)=>A.length>0))return;let Q=async(A,B)=>{let K=f[B]??[];if(K.length===0)return;k1({commands:K,cwd:$.cwd,logger:$.logger,payload:B==="agent_resume"?{...P0(A,$),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...P0(A,$),hookName:B,taskStart:{taskMetadata:{}}}})},Z=async(A)=>{let B=f.prompt_submit??[];if(B.length>0)k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"prompt_submit",userPromptSubmit:{prompt:A.userMessage,attachments:[]}}})},W=async(A)=>{let B=f.tool_call??[];if(B.length===0)return;return zF({commands:B,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...P0(A,$),hookName:"tool_call",iteration:A.iteration,tool_call:{id:A.call.id,name:A.call.name,input:A.call.input},preToolUse:{toolName:A.call.name,parameters:E6(A.call.input)}}})},j=async(A)=>{let B=f.tool_result??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"tool_result",iteration:A.iteration,tool_result:A.record,postToolUse:{toolName:A.record.name,parameters:E6(A.record.input),result:typeof A.record.output==="string"?A.record.output:JSON.stringify(A.record.output),success:!A.record.error,executionTimeMs:A.record.durationMs}}})},X=async(A)=>{let B=f.agent_end??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_end",iteration:A.iteration,turn:A.turn,taskComplete:{taskMetadata:{}}}})},H=async(A)=>{let B=f.agent_error??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_error",iteration:A.iteration,error:{name:A.error.name,message:A.error.message,stack:A.error.stack}}})},Y=async(A)=>{if(w9(A.reason)){let K=f.agent_abort??[];if(K.length>0)k1({commands:K,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_abort",reason:A.reason,taskCancel:{taskMetadata:{}}}})}let B=f.session_shutdown??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"session_shutdown",reason:A.reason}})},V={};if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0||(f.prompt_submit?.length??0)>0){if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0)V.beforeRun=async(A)=>{let B=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(o$(A.snapshot),B);return};if((f.prompt_submit?.length??0)>0)V.onEvent=async(A)=>{if(A.type!=="message-added"||A.message.role!=="user")return;await Z(S9({snapshot:A.snapshot},Mj(A.message.content)))}}if((f.tool_call?.length??0)>0)V.beforeTool=async(A)=>{let B=await W(Tj(A));return _F(B)};if((f.tool_result?.length??0)>0)V.afterTool=async(A)=>{await j(Nj(A));return};if((f.agent_end?.length??0)>0)V.afterRun=async({snapshot:A,result:B})=>{if(B.status!=="completed")return;await X({...o$(A),iteration:B.iterations,turn:{outputText:B.outputText,status:B.status}})};if((f.agent_error?.length??0)>0||(f.agent_abort?.length??0)>0||(f.session_shutdown?.length??0)>0){let A=V.afterRun;V.afterRun=async(B)=>{await A?.(B);let{snapshot:K,result:G}=B;if(G.status==="aborted"||w9(G.error?.message)){await Y({...o$(K),reason:G.error?.message});return}if(G.error)await H({...o$(K),iteration:G.iterations,error:G.error})}}return V}function xf($){return bf("core.hook_config_files",D8($))}function I1($,f){let J=$.map((Q)=>Q[f]).filter((Q)=>typeof Q==="function");if(J.length===0)return;return async(Q)=>{let Z;for(let W of J){let j=await W(Q);if(!j||typeof j!=="object")continue;let X=j;Z={...Z??{},...X,stop:Z?.stop===!0||X.stop===!0?!0:X.stop,options:Z?.options||X.options?{...Z?.options??{},...X.options??{}}:void 0}}return Z}}function x1($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return;return{beforeRun:I1(f,"beforeRun"),afterRun:I1(f,"afterRun"),beforeModel:I1(f,"beforeModel"),afterModel:I1(f,"afterModel"),beforeTool:I1(f,"beforeTool"),afterTool:I1(f,"afterTool"),onEvent:I1(f,"onEvent")}}var qj={};q(qj,{normalizeRuntimeCapabilities:()=>F0});function F0(...$){let f,J;for(let Z of $){if(!Z)continue;if(Z.toolExecutors)f={...f??{},...Z.toolExecutors};if(Z.requestToolApproval)J=Z.requestToolApproval}let Q=f&&Object.keys(f).length>0;if(!Q&&!J)return;return{...Q?{toolExecutors:f}:{},...J?{requestToolApproval:J}:{}}}var oj={};q(oj,{toProviderConfig:()=>I0,emptyStoredProviderSettings:()=>J1,StoredProviderSettingsSchema:()=>cf,StoredProviderSettingsEntrySchema:()=>JJ,ProviderSettingsSchemaTyped:()=>M8});import{z as f1}from"zod";var sj={};q(sj,{toProviderConfig:()=>I0,safeParseSettings:()=>fJ,safeCreateProviderConfig:()=>n9,parseSettings:()=>$J,normalizeProviderId:()=>vf,isBuiltInProviderId:()=>r9,createProviderConfig:()=>i9,SapSettingsSchema:()=>s6,ReasoningSettingsSchema:()=>i6,ProviderSettingsSchema:()=>$1,ProviderProtocolSchema:()=>l6,ProviderIdSchema:()=>N8,ProviderClientSchema:()=>p6,OcaSettingsSchema:()=>o6,ModelCatalogSettingsSchema:()=>e6,GcpSettingsSchema:()=>a6,BUILT_IN_PROVIDER_IDS:()=>p9,BUILT_IN_PROVIDER:()=>T8,AzureSettingsSchema:()=>t6,AwsSettingsSchema:()=>n6,AuthSettingsSchema:()=>r6});import*as k0 from"@cline/llms";import{z as T}from"zod";T0();var lj={};q(lj,{refreshOcaToken:()=>U8,loginOcaOAuth:()=>gf,getValidOcaCredentials:()=>L8,generateOcaOpcRequestId:()=>I6,createOcaRequestHeaders:()=>k9,createOcaOAuthProvider:()=>b9,OCI_HEADER_OPC_REQUEST_ID:()=>xj,DEFAULT_INTERNAL_OCA_BASE_URL:()=>h6,DEFAULT_INTERNAL_IDCS_URL:()=>Ej,DEFAULT_INTERNAL_IDCS_SCOPES:()=>hj,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>Cj,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>b6,DEFAULT_EXTERNAL_IDCS_URL:()=>kj,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>Ij,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>bj});import{nanoid as Sj}from"nanoid";class E9{ttlMs;maxEntries;entries=new Map;constructor($,f){this.ttlMs=$;this.maxEntries=f}get($,f=Date.now()){this.pruneExpired(f);let J=this.entries.get($);if(!J)return;return this.entries.delete($),this.entries.set($,J),J.value}set($,f,J=Date.now(),Q=this.ttlMs){this.pruneExpired(J),this.entries.delete($);while(this.entries.size>=this.maxEntries){let Z=this.entries.keys().next().value;if(Z===void 0)break;this.entries.delete(Z)}this.entries.set($,{value:f,expiresAt:J+Q})}pruneExpired($){for(let[f,J]of this.entries)if(J.expiresAt<=$)this.entries.delete(f)}}var wj={};q(wj,{startLocalOAuthServer:()=>a0});function yF(){let $;return{promise:new Promise((J)=>{$=J}),resolve:$}}async function a0($){let f=await import("node:http"),J=$.host??"127.0.0.1",Q=$.timeoutMs??300000,Z=$.successHtml??TF,W=yF(),j=!1,X=null,H=null,Y=null,V=(K)=>{if(j)return;j=!0,W.resolve(K)},A=()=>{if(X)clearTimeout(X),X=null;let K=Y;if(Y=null,H)H.close(),H=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:J,port:K})).catch(()=>{})},B=async()=>{return X=setTimeout(()=>{A(),V(null)},Q),W.promise};for(let K of $.ports){let G=f.createServer((F,P)=>{try{let D=new URL(F.url||"",`http://${J}:${K}`);if(D.pathname!==$.callbackPath){P.statusCode=404,P.end("Not found");return}let O={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(O.error){P.statusCode=400,P.end(`Authentication failed: ${O.error}`),A(),V(O);return}if(!O.code){P.statusCode=400,P.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){P.statusCode=400,P.end("State mismatch");return}P.statusCode=200,P.setHeader("Content-Type","text/html; charset=utf-8"),P.end(Z),A(),V(O)}catch{P.statusCode=500,P.end("Internal error")}}),R=await new Promise((F)=>{let P=(D)=>{G.off("error",P),F({bound:!1,error:D})};G.once("error",P),G.listen(K,J,()=>{G.off("error",P),H=G,F({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw A(),R.error}if(R.bound){Y=K;let F=`http://${J}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:J,port:K,callbackUrl:F})).catch(()=>{});return{callbackUrl:F,waitForCallback:B,cancelWait:()=>{A(),V(null)},close:()=>{A(),V(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var TF=`<!DOCTYPE html>
142
144
  <html lang="en">
143
145
  <head>
144
146
  <meta charset="utf-8">
@@ -179,59 +181,65 @@ ${J}`,platform:$.clinePlatform,metadata:$.workspaceMetadata})}function kQ(f,$){l
179
181
  </div>
180
182
  <script>setTimeout(() => window.close(), 3000);</script>
181
183
  </body>
182
- </html>`;var XZ="a8331954c0cf48ba99b5dd223a14c6ea",AZ="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",PZ="openid offline_access",_6="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",BZ="c1aba3deed5740659981a752714eba33",YZ="https://login-ext.identity.oraclecloud.com",VZ="openid offline_access",M6="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",RZ="opc-request-id",xF="/auth/oca",gF=Array.from({length:11},(f,$)=>48801+$),vF=300000,uF=30000,FZ=30000,cF=600000;class L6 extends Error{status;errorCode;constructor(f,$){super(f);this.name="OcaOAuthTokenError",this.status=$?.status,this.errorCode=$?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var t0={internal:{clientId:XZ,idcsUrl:AZ,scopes:PZ,baseUrl:_6},external:{clientId:BZ,idcsUrl:YZ,scopes:VZ,baseUrl:M6}},P8=new Map,dF=86400000,rF=300000,lF=32,RW=new VW(dF,lF);function KZ(f){if(typeof f==="function")return f();return f??"internal"}function yZ(f){return{internal:{clientId:f?.internal?.clientId??t0.internal.clientId,idcsUrl:f?.internal?.idcsUrl??t0.internal.idcsUrl,scopes:f?.internal?.scopes??t0.internal.scopes,baseUrl:f?.internal?.baseUrl??t0.internal.baseUrl},external:{clientId:f?.external?.clientId??t0.external.clientId,idcsUrl:f?.external?.idcsUrl??t0.external.idcsUrl,scopes:f?.external?.scopes??t0.external.scopes,baseUrl:f?.external?.baseUrl??t0.external.baseUrl}}}function pF(f=Date.now()){let $=f-cF;for(let[J,W]of P8.entries())if(W.createdAt<$)P8.delete(J)}function iF(f,$,J){if(typeof f.expires_in==="number"&&f.expires_in>0)return Date.now()+f.expires_in*1000;let H=Rf($)?.exp;if(typeof H==="number"&&H>0)return H*1000;let Z=Rf(J)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return Date.now()+3600000}function UZ(f,$,J){let W=f.access_token;if(!W)throw Error("Token response did not include an access token");let H=f.refresh_token??J?.refresh;if(!H)throw Error("Token response did not include a refresh token");let Q=Rf(f.id_token),Z=Rf(W),j=Q?.sub??Z?.sub,X=Q?.email??Z?.email;return{access:W,refresh:H,expires:iF(f,W,f.id_token),accountId:j??J?.accountId,email:X??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:$,subject:j,idToken:f.id_token}}}async function GZ(f,$){let J=P6(f),W=RW.get(J);if(W)return W;let H=`${J}/.well-known/openid-configuration`,Q=await fetch(H,{method:"GET",signal:AbortSignal.timeout($)});if(!Q.ok){let X=`${J}/oauth2/v1/token`;return RW.set(J,X,Date.now(),rF),X}let j=(await Q.json()).token_endpoint||`${J}/oauth2/v1/token`;return RW.set(J,j),j}function TZ(f){return{code:f.error,message:f.error_description}}async function nF(f){let $=P8.get(f.state);if(!$)throw Error("No PKCE verifier found for this state");P8.delete(f.state);let J=f.mode==="external"?f.config.external:f.config.internal,W=await GZ(J.idcsUrl,f.requestTimeoutMs),H=new URLSearchParams({grant_type:"authorization_code",code:f.code,redirect_uri:$.redirectUri,client_id:J.clientId,code_verifier:$.verifier}),Q=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(f.requestTimeoutMs)}),Z=await Q.json();if(!Q.ok){let X=TZ(Z);throw new L6(`Token exchange failed: ${Q.status}${X.message?` - ${X.message}`:""}`,{status:Q.status,errorCode:X.code})}let j=Rf(Z.id_token);if(!Z.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==$.nonce)throw Error("OIDC nonce verification failed");return UZ(Z,f.mode)}function aF(f){let $=f.mode==="external"?f.config.external:f.config.internal,J=new URL(`${P6($.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",$.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",$.scopes),J.searchParams.set("code_challenge",f.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",f.callbackUrl),J.searchParams.set("state",f.state),J.searchParams.set("nonce",f.nonce),J.toString()}async function b1(f){U0(f.telemetry,"oca");let $=yZ(f.config),J=KZ(f.mode),W=f.callbackPorts?.length?f.callbackPorts:gF,H=f.callbackPath??xF,Q=f.requestTimeoutMs??FZ,Z=await h0({ports:W,callbackPath:H,onListening:f.callbacks.onServerListening,onClose:f.callbacks.onServerClose}),j=Z.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let X=jZ(16),A=jZ(16),{verifier:P,challenge:B}=await A6();pF(),P8.set(X,{verifier:P,nonce:A,mode:J,redirectUri:j,createdAt:Date.now()});let Y=aF({callbackUrl:j,mode:J,state:X,nonce:A,challenge:B,config:$});f.callbacks.onAuth({url:Y,instructions:"Continue the authentication process in your browser."});try{let V=await _1({waitForCallback:Z.waitForCallback,cancelWait:Z.cancelWait,onManualCodeInput:f.callbacks.onManualCodeInput}),R=V.code,U=V.state;if(V.error)throw Error(`OAuth error: ${V.error}`);if(!R){if(!f.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!U||U!==X)throw Error("State mismatch");let K=await nF({code:R,state:U,mode:J,config:$,requestTimeoutMs:Q});return G0(f.telemetry,"oca"),D0(f.telemetry,{id:K.accountId,email:K.email,provider:"oca"}),K}catch(V){throw T0(f.telemetry,"oca",V instanceof Error?V.message:String(V)),V}finally{Z.close()}}async function B8(f,$={}){let J=yZ($.config),W=$.requestTimeoutMs??FZ,H=f.metadata?.mode,Q=H==="internal"||H==="external"?H:KZ($.mode),Z=Q==="external"?J.external:J.internal,j=await GZ(Z.idcsUrl,W),X=new URLSearchParams({grant_type:"refresh_token",refresh_token:f.refresh,client_id:Z.clientId}),A=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:X,signal:AbortSignal.timeout(W)}),P=await A.json();if(!A.ok){let B=TZ(P);throw new L6(`Token refresh failed: ${A.status}${B.message?` - ${B.message}`:""}`,{status:A.status,errorCode:B.code})}return UZ(P,Q,f)}async function Y8(f,$,J){if(!f)return null;let W=$?.refreshBufferMs??J?.refreshBufferMs??vF,H=$?.retryableTokenGraceMs??J?.retryableTokenGraceMs??uF;if($?.forceRefresh!==!0&&!N$(f,W))return f;try{return await B8(f,J)}catch(Z){if(Z instanceof L6&&Z.isLikelyInvalidGrant())return l0(J?.telemetry,"oca","invalid_grant"),null;if(f.expires-Date.now()>H)return f;return null}}function FW(f={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login($){return b1({...f,callbacks:$})},async refreshToken($){return B8($,f)},getApiKey($){return $.access}}}async function h6(f,$){let J=new TextEncoder,W=async(A)=>{let P=await crypto.subtle.digest("SHA-256",J.encode(A));return Array.from(new Uint8Array(P).slice(0,4),(B)=>B.toString(16).padStart(2,"0")).join("")},[H,Q]=await Promise.all([W($),W(f)]),Z=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),j=new Uint32Array(1);crypto.getRandomValues(j);let X=(j[0]??0).toString(16).padStart(8,"0");return H+Q+Z+X}async function KW(f){let $=await h6(f.taskId,f.accessToken);return{Authorization:`Bearer ${f.accessToken}`,"Content-Type":"application/json",client:f.metadata?.client??"Cline","client-version":f.metadata?.clientVersion??"unknown","client-ide":f.metadata?.clientIde??"unknown","client-ide-version":f.metadata?.clientIdeVersion??"unknown",[RZ]:$}}var zZ={};N(zZ,{resolveProviderConfig:()=>K8,getProviderConfig:()=>C6,getLiveModelsCatalog:()=>C1,clearPublicModelsCatalogCache:()=>UK,clearPrivateModelsCatalogCache:()=>hW,clearLiveModelsCatalogCache:()=>LW,OPENAI_COMPATIBLE_PROVIDERS:()=>F8,DEFAULT_MODELS_CATALOG_URL:()=>b6});import*as ff from"@cline/llms";function yW(f){if(!Array.isArray(f))return[];return f.map(($)=>{if(typeof $==="string")return $.trim();if($&&typeof $==="object"){let J=$;for(let W of[J.id,J.name,J.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter(($)=>$.length>0)}function tF(f,$){let J=yW(f);if(J.length>0)return J;if(!f||typeof f!=="object")return[];let W=f,H=yW(W.data??W.models);if(H.length>0)return H;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Z=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Z.length>0)return Z}let Q=W.providers?.[$];if(Q&&typeof Q==="object"){let j=yW(Q.models??Q);if(j.length>0)return j}return[]}async function O6(f,$){let J=await fetch(f,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${f}: HTTP ${J.status}`);return tF(await J.json(),$)}function _Z(f){return f.replace(/\/+$/,"")}function z6(f,$,J){let W=J?.trim();if(!W)return;let H=f?.trim();if(!H||!$?.trim())return W;try{let Q=new URL(W),Z=new URL($),j=new URL(H);if(Q.origin!==Z.origin)return W;let X=_Z(Z.pathname),A=_Z(j.pathname);if(X&&Q.pathname.startsWith(`${X}/`)){let P=Q.pathname.slice(X.length);j.pathname=`${A}${P}`}else j.pathname=Q.pathname;return j.search=Q.search,j.hash=Q.hash,j.toString()}catch{return W}}function sF(f){return Object.fromEntries(Object.entries(f).map(([$,J])=>[$,{...J}]))}function oF(f){if(f.baseUrl.length===0)return!1;switch(f.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return f.protocol==="openai-chat"}}var eF=Object.values(ff.MODEL_COLLECTIONS_BY_PROVIDER_ID).map((f)=>({id:f.provider.id,baseUrl:f.provider.baseUrl??"",modelsSourceUrl:f.provider.modelsSourceUrl,modelId:f.provider.defaultModelId,knownModels:sF(f.models),capabilities:f.provider.capabilities?[...f.provider.capabilities]:void 0,env:f.provider.env?[...f.provider.env]:void 0,client:f.provider.client,protocol:f.provider.protocol})),MZ=Object.fromEntries(eF.map((f)=>[f.id,f]));function fK(f){return MZ[f]}function $K(){return Object.fromEntries(Object.entries(MZ).filter(([,f])=>oF(f)))}function LZ(f=[]){let $=f.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return $.length>0?$:void 0}var b6="https://models.dev/api.json",JK=600000,hZ=300000,WK=5000,w6=new Map,V8=new Map,GW=new Map,N6=new Map;async function HK(){return ff.getGeneratedProviderModels()}async function QK(f,$={},J={},W={},H={},Q={}){let Z=await HK(),j=ff.resolveProviderModelCatalogKeys(f),X=Object.assign({},...j.map((Y)=>Z[Y]??{})),A=Boolean(ff.MODEL_COLLECTIONS_BY_PROVIDER_ID[f]?.provider.modelsSourceUrl),P=Object.keys(H).length>0;if(A&&P)return ff.sortModelsByReleaseDate({...H,...Q});let B=Object.keys(W).length>0;if(f==="openai-codex"&&B)return ff.sortModelsByReleaseDate({...W,...Q});return ff.sortModelsByReleaseDate({...X,...$,...J,...W,...H,...Q})}function ZK(f,$){let J=ff.resolveProviderModelCatalogKeys(f);return Object.assign({},...J.map((W)=>$[W]??{}))}function DW(f){let $=f?.trim();return $&&$.length>0?$:""}function _W(f){let $=f.apiKey?.trim()||f.accessToken?.trim();return $&&$.length>0?$:void 0}function jK(f){let $=2166136261;for(let J=0;J<f.length;J+=1)$^=f.charCodeAt(J),$+=($<<1)+($<<4)+($<<7)+($<<8)+($<<24);return($>>>0).toString(16)}function XK(f,$){return`${f}:${DW($.baseUrl)}:${jK(_W($)??"")}`}function AK(f){let $=f?.trim();if(!$)return;let J=Rf($),W=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let H=J?.organizations?.[0]?.id;if(typeof H==="string"&&H.length>0)return H;let Q=J?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;return}async function MW(f,$,J=WK){let W=new AbortController,H=setTimeout(()=>W.abort(),J);try{return await fetch(f,{...$,signal:W.signal})}finally{clearTimeout(H)}}function UW(f,$,J){if(J&&!f.includes($))f.push($)}function R8(f,$){let J=["streaming","tools"];return UW(J,"images",Boolean($.supportsImages)),UW(J,"prompt-cache",Boolean($.supportsPromptCache)),UW(J,"reasoning",Boolean($.supportsReasoning)),{id:f,name:$.name??f,contextWindow:$.contextWindow,maxTokens:$.maxTokens,capabilities:J,releaseDate:$.releaseDate,status:"active"}}function PK(f){let $=ff.getGeneratedModelsForProvider("openai")[f.id];if($)return{...$,id:f.id,name:f.name??$.name??f.id};return R8(f.id,{name:f.name??f.id})}async function BK(f,$){let J=await MW("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${$}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let H=(await J.json())?.data??[],Q={};for(let Z of H){let j=Z.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let X=Z.supported_features??[];Q[j]=R8(j,{name:j,contextWindow:Z.context_length,maxTokens:Z.max_completion_tokens,supportsReasoning:X.includes("reasoning")||X.includes("reasoning_effort"),supportsImages:!1})}return Q}async function YK(f,$){let J=await MW("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":$}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let H=(await J.json())?.data??[],Q={};for(let Z of H){let j=Z.id?.trim();if(!j)continue;Q[j]=R8(j,{name:j,contextWindow:128000,supportsImages:!0,supportsPromptCache:!0})}return Q}function VK(f){let $=DW(f);if(!$)return"http://localhost:4000";return $.endsWith("/v1")?$.slice(0,-3):$}async function RK(f,$){let W=`${VK(f.baseUrl)}/v1/model/info`,H=async(A)=>MW(W,{method:"GET",headers:{accept:"application/json",...A}}),Q=await H({"x-litellm-api-key":$});if(!Q.ok)Q=await H({Authorization:`Bearer ${$}`});if(!Q.ok)throw Error(`LiteLLM model refresh failed: HTTP ${Q.status}`);let j=(await Q.json())?.data??[],X={};for(let A of j){let P=A.model_name?.trim(),Y=A.litellm_params?.model?.trim()||P;if(!Y)continue;let V=A.model_info,R=R8(Y,{name:P??Y,maxTokens:V?.max_output_tokens??V?.max_tokens,contextWindow:V?.max_input_tokens??V?.max_tokens,supportsImages:V?.supports_vision,supportsPromptCache:V?.supports_prompt_caching,supportsReasoning:V?.supports_reasoning});if(X[Y]=R,P)X[P]={...R,id:P,name:P}}return X}async function FK(f,$){let J=await ff.listOpenAICodexModels({accessToken:$,accountId:f.accountId??AK($),cwd:typeof f.codex?.defaultSettings?.cwd==="string"?f.codex.defaultSettings.cwd:void 0,codexPath:typeof f.codex?.defaultSettings?.codexPath==="string"?f.codex.defaultSettings.codexPath:void 0,env:f.codex?.defaultSettings?.env&&typeof f.codex.defaultSettings.env==="object"&&!Array.isArray(f.codex.defaultSettings.env)?f.codex.defaultSettings.env:void 0});return Object.fromEntries(J.map((W)=>[W.id,PK(W)]))}var OZ={baseten:BK,hicap:YK,litellm:RK,"openai-codex":FK},TW=new Map,q6=new Map;function KK(f,$){return`${f}:${DW($.baseUrl)}`}async function yK(f,$,J){let W=ff.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],H=z6(J.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!H)return{};let Q=$?.cacheTtlMs??hZ,Z=KK(f,J),j=Date.now(),X=TW.get(Z);if(X&&X.expiresAt>j)return X.data;let A=q6.get(Z);if(A)return A;let P=O6(H,f).then((B)=>{let Y=Object.fromEntries(B.map((V)=>[V,R8(V,{name:V})]));return TW.set(Z,{data:Y,expiresAt:j+Q}),Y}).finally(()=>{q6.delete(Z)});return q6.set(Z,P),P}function UK(){TW.clear(),q6.clear()}async function GK(f,$){let J=_W($);if(!J)return{};let W=OZ[f];if(!W)return{};return W($,J)}function TK(f,$,J){if(!J)return!1;if(!OZ[f])return!1;if($?.loadPrivateOnAuth===!1)return!1;return Boolean(_W(J))}async function DK(f,$,J){let W=$?.cacheTtlMs??hZ,H=XK(f,J),Q=Date.now(),Z=GW.get(H);if(Z&&Z.expiresAt>Q)return Z.data;let j=N6.get(H);if(j)return j;let X=GK(f,J).then((A)=>{return GW.set(H,{data:A,expiresAt:Q+W}),A}).finally(()=>{N6.delete(H)});return N6.set(H,X),X}async function _K(f){return ff.fetchModelsDevProviderModels(f)}async function C1(f={}){let $=f.url??b6,J=f.cacheTtlMs??JK,W=Date.now(),H=w6.get($);if(H&&H.expiresAt>W)return H.data;let Q=V8.get($);if(Q)return Q;let Z=_K($).then((j)=>{return w6.set($,{data:j,expiresAt:W+J}),j}).finally(()=>{V8.delete($)});return V8.set($,Z),Z}function LW(f){if(f){w6.delete(f),V8.delete(f);return}w6.clear(),V8.clear()}function hW(){GW.clear(),N6.clear()}function MK(f){return Object.fromEntries(Object.entries(f).map(([$,J])=>[$,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:LZ(J.capabilities)}]))}var F8=MK($K());function C6(f){let $=fK(f);if(!$||!$.baseUrl)return;return{baseUrl:$.baseUrl,modelId:$.modelId,knownModels:$.knownModels,capabilities:LZ($.capabilities)}}async function K8(f,$,J){let W=C6(f);if(!W)return;try{let H=$?.loadLatestOnInit?await C1($):void 0,Q=H?ZK(f,H):{},Z=J&&TK(f,$,J)?await DK(f,$,J):{},X=Boolean(ff.MODEL_COLLECTIONS_BY_PROVIDER_ID[f]?.provider.modelsSourceUrl)?J??{providerId:f,modelId:W.modelId,baseUrl:W.baseUrl}:J,A=X?await yK(f,$,X).catch(()=>({})):{},P=await QK(f,W.knownModels,Q,Z,A,J?.knownModels);return{...W,knownModels:P}}catch(H){if($?.failOnError)throw H;return W}}var y8=Sf.BUILT_IN_PROVIDER,OW=Sf.BUILT_IN_PROVIDER_IDS,zW=Sf.isBuiltInProviderId,E1=Sf.normalizeProviderId,U8=h.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),E6=h.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),S6=h.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),k6=h.object({apiKey:h.string().optional(),accessToken:h.string().optional(),refreshToken:h.string().optional(),expiresAt:h.number().int().positive().optional(),accountId:h.string().optional()}),LK=h.enum(["none","low","medium","high","xhigh"]),I6=h.object({enabled:h.boolean().optional(),effort:LK.optional(),budgetTokens:h.number().int().positive().optional()}),m6=h.object({accessKey:h.string().optional(),secretKey:h.string().optional(),sessionToken:h.string().optional(),region:h.string().optional(),profile:h.string().optional(),authentication:h.enum(["iam","api-key","profile"]).optional(),usePromptCache:h.boolean().optional(),useCrossRegionInference:h.boolean().optional(),useGlobalInference:h.boolean().optional(),endpoint:h.string().url().optional(),customModelBaseId:h.string().optional()}),x6=h.object({projectId:h.string().optional(),region:h.string().optional()}),g6=h.object({apiVersion:h.string().optional(),useIdentity:h.boolean().optional()}),v6=h.object({clientId:h.string().optional(),clientSecret:h.string().optional(),tokenUrl:h.string().url().optional(),resourceGroup:h.string().optional(),deploymentId:h.string().optional(),useOrchestrationMode:h.boolean().optional(),api:h.enum(["orchestration","foundation-models"]).optional(),defaultSettings:h.record(h.string(),h.unknown()).optional()}),u6=h.object({mode:h.enum(["internal","external"]).optional(),usePromptCache:h.boolean().optional()}),c6=h.object({loadLatestOnInit:h.boolean().optional(),loadPrivateOnAuth:h.boolean().optional(),url:h.string().url().optional(),cacheTtlMs:h.number().int().positive().optional(),failOnError:h.boolean().optional()}),s0=h.object({provider:U8,apiKey:h.string().optional(),auth:k6.optional(),model:h.string().optional(),protocol:E6.optional(),client:S6.optional(),routingProviderId:U8.optional(),maxTokens:h.number().int().positive().optional(),contextWindow:h.number().int().positive().optional(),baseUrl:h.string().url().optional(),headers:h.record(h.string(),h.string()).optional(),timeout:h.number().int().positive().optional(),reasoning:I6.optional(),aws:m6.optional(),gcp:x6.optional(),azure:g6.optional(),sap:v6.optional(),oca:u6.optional(),region:h.string().optional(),apiLine:h.enum(["china","international"]).optional(),capabilities:h.array(h.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth"])).optional(),modelCatalog:c6.optional()});function d6(f){return s0.parse(f)}function r6(f){return s0.safeParse(f)}function hK(f){return f.protocol==="openai-responses"||f.client==="openai"}function kf(f,$={}){let J=f.provider,W=E1(J),H=$.includeKnownModels!==!1,Q=f.reasoning?.effort||"none",Z=Q==="none"?void 0:Q,j=F8[W],X=Object.assign({},...Sf.resolveProviderModelCatalogKeys(W).map((U)=>Sf.getGeneratedModelsForProvider(U))),A=Object.keys(X)[0],P=f.auth?.accessToken??f.apiKey??f.auth?.apiKey,B=f.baseUrl??(W==="oca"?f.oca?.mode==="internal"?_6:M6:j?.baseUrl),Y=f.routingProviderId??(hK(f)&&W!==y8.OPENAI_NATIVE?y8.OPENAI_NATIVE:void 0),V=H?j?.knownModels??(Object.keys(X).length>0?X:void 0):void 0,R={providerId:J,clientType:f.client,routingProviderId:Y,modelId:f.model??j?.modelId??A??"default",...H?{knownModels:V}:{},apiKey:P,accessToken:f.auth?.accessToken,refreshToken:f.auth?.refreshToken,accountId:f.auth?.accountId,baseUrl:B,headers:f.headers,timeoutMs:f.timeout,maxOutputTokens:f.maxTokens,maxContextTokens:f.contextWindow,thinking:f.reasoning?.enabled,reasoningEffort:Z,thinkingBudgetTokens:f.reasoning?.budgetTokens,region:f.region??f.aws?.region??f.gcp?.region,apiLine:f.apiLine,useCrossRegionInference:f.aws?.useCrossRegionInference,useGlobalInference:f.aws?.useGlobalInference,aws:f.aws?{accessKey:f.aws.accessKey,secretKey:f.aws.secretKey,sessionToken:f.aws.sessionToken,authentication:f.aws.authentication,profile:f.aws.profile,usePromptCache:f.aws.usePromptCache,endpoint:f.aws.endpoint,customModelBaseId:f.aws.customModelBaseId}:void 0,gcp:f.gcp?{projectId:f.gcp.projectId,region:f.gcp.region}:void 0,azure:f.azure,sap:f.sap,oca:f.oca,capabilities:f.capabilities??j?.capabilities,modelCatalog:f.modelCatalog?{loadLatestOnInit:f.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:f.modelCatalog.loadPrivateOnAuth,url:f.modelCatalog.url,cacheTtlMs:f.modelCatalog.cacheTtlMs,failOnError:f.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(R).filter(([U,K])=>K!==void 0))}function NW(f){let $=d6(f);return kf($)}function qW(f){let $=r6(f);if($.success)return{success:!0,config:kf($.data)};return{success:!1,error:$.error}}var G8=s0;var l6=o0.object({settings:s0,updatedAt:o0.string().datetime(),tokenSource:o0.enum(["manual","oauth","migration"]).default("manual")}),S1=o0.object({version:o0.literal(1),lastUsedProvider:o0.string().min(1).optional(),providers:o0.record(o0.string(),l6)});function e0(){return{version:1,providers:{}}}M0();var EZ={};N(EZ,{InMemoryWorkspaceManager:()=>I1});import{upsertWorkspaceInfo as qK,WorkspaceManifestSchema as bW}from"@cline/shared";var CZ={};N(CZ,{normalizeWorkspacePath:()=>O0,generateWorkspaceInfoWithDiagnostics:()=>T8,generateWorkspaceInfo:()=>k1,buildWorkspaceMetadataWithInfo:()=>wW,buildWorkspaceMetadata:()=>D8});import{basename as OK,resolve as zK}from"node:path";import{performance as wZ}from"node:perf_hooks";import{processWorkspaceInfo as bZ}from"@cline/shared";import NK from"simple-git";function O0(f){return zK(f)}async function k1(f){return(await T8(f)).info}function p6(f){if(f instanceof Error)return{errorType:f.name?.trim()||f.constructor.name||"Error",message:f.message};return{errorType:"Error",message:String(f)}}async function T8(f){let $=O0(f),J={rootPath:$,hint:OK($)},W;try{let H=NK({baseDir:$});if(!await H.checkIsRepo())return{info:J,vcsType:"none"};try{let Z=await H.getRemotes(!0);if(Z.length>0){let j=Z.map((X)=>{let A=X.refs.fetch||X.refs.push;return`${X.name}: ${A}`});J.associatedRemoteUrls=j}}catch(Z){W??=p6(Z)}try{let Z=(await H.revparse(["HEAD"])).trim();if(Z.length>0)J.latestGitCommitHash=Z}catch(Z){W??=p6(Z)}try{let Z=(await H.branch()).current.trim();if(Z.length>0)J.latestGitBranchName=Z}catch(Z){W??=p6(Z)}return{info:J,vcsType:"git",error:W}}catch(H){return{info:J,vcsType:"none",error:p6(H)}}}async function D8(f){let $=await k1(f);return bZ($)}async function wW(f){let $=wZ.now(),J=await T8(f),W=wZ.now()-$,H=J.info;return{workspaceInfo:H,workspaceMetadata:bZ(H),durationMs:W,vcsType:J.vcsType,initError:J.error}}class I1{manifest;listeners=new Set;constructor(f){this.manifest=bW.parse(f??{workspaces:{}})}async addWorkspacePath(f){let $=await k1(f);return this.manifest=qK(this.manifest,$),this.emit({type:"workspace_added",workspace:$}),$}async switchWorkspace(f){let $=O0(f),J=this.manifest.workspaces[$];if(J)return this.manifest=bW.parse({...this.manifest,currentWorkspacePath:$}),this.emit({type:"workspace_switched",workspace:J}),J;let W=await this.addWorkspacePath($);return this.manifest=bW.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}getCurrentWorkspace(){let f=this.manifest.currentWorkspacePath;if(!f)return;return this.manifest.workspaces[f]}getWorkspace(f){let $=O0(f);return this.manifest.workspaces[$]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit(f){for(let $ of this.listeners)$(f)}}Lf();import{createHash as wK}from"node:crypto";var SZ=new Set,kZ=new Set;function bK(f){return wK("sha256").update(f).digest("hex")}function CK(f){if(f.vcsTypes&&f.vcsTypes.length>0)return f.vcsTypes;return[f.vcsType==="git"?"git":"none"]}function IZ(f){if(!f.telemetry)return;let $=bK(f.rootPath),J=f.rootCount??1;if(!SZ.has($))SZ.add($),a4(f.telemetry,{root_count:J,vcs_types:CK(f),init_duration_ms:f.durationMs,feature_flag_enabled:f.featureFlagEnabled??!0,is_remote_workspace:f.isRemoteWorkspace});if(f.initError&&!kZ.has($)){kZ.add($);let W=Error(f.initError.message);W.name=f.initError.errorType||"Error",t4(f.telemetry,W,{fallback_to_single_root:!0,workspace_count:J})}}function SK(f){return`${f.pluginName??f.pluginPath}: ${f.message}`}function kK(f,$,J){if($.length>0)for(let Q of $)J?.log(Q.message,{severity:"warn"});if(f.length===0)return;let W=f.slice(0,3).map(SK).join("; "),H=f.length>3?`; and ${f.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${W}${H}. Use --verbose for more details.`,{severity:"warn"});for(let Q of f)J?.log(`Plugin initialization failed (${Q.phase}) for ${Q.pluginPath}`,{severity:"warn",stack:Q.stack,pluginPath:Q.pluginPath,pluginName:Q.pluginName})}function IK(f,$){let J=typeof f.thinking==="boolean",W=typeof f.reasoningEffort==="string";if(!J&&!W)return $;return{...$??{},...J?{enabled:f.thinking}:{},...W?{effort:f.reasoningEffort}:{}}}function mK(f,$){return EK(f,$)}function xK(f){let $=0;for(let J of f??[]){if(J.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0)?.kind==="recovery_notice")continue;$+=1}return $}function gK(f){let $={...f.storedHeaders??{},...f.configHeaders??{}},J=f.accountId?.trim()||vK(f.accessToken);if($.originator="cline",$.session_id=f.sessionId,$["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)$["ChatGPT-Account-Id"]=J;return $}function vK(f){let $=f?.trim();if(!$)return;let J=Rf($),W=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let H=J?.organizations?.[0]?.id;if(typeof H==="string"&&H.length>0)return H;let Q=J?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;return}function uK(f,$,J,W,H){let Q=J.getProviderSettings(f.providerId),Z=W||Q?.modelCatalog?{...W??{},...Q?.modelCatalog??{}}:void 0,j={...Q??{},provider:f.providerId,model:f.modelId,apiKey:f.apiKey??Q?.apiKey,baseUrl:f.baseUrl??Q?.baseUrl,headers:f.providerId==="openai-codex"?gK({sessionId:$,configHeaders:f.headers,storedHeaders:Q?.headers,accountId:Q?.auth?.accountId,accessToken:f.apiKey??Q?.auth?.accessToken??Q?.apiKey}):f.headers??Q?.headers,reasoning:IK(f,Q?.reasoning),modelCatalog:Z},X=kf(j);if(f.knownModels)X.knownModels=f.knownModels;if(f.extensionContext)X.extensionContext=f.extensionContext;let P=f.fetch??X.fetch??H;if(P)X.fetch=P;return X}async function mZ(f){let{input:$,sessionId:J,providerSettingsManager:W,defaultTelemetry:H,defaultCapabilities:Q,defaultToolPolicies:Z,defaultFetch:j,onPluginEvent:X,onTeamEvent:A,createSpawnTool:P,localRuntime:B,readSessionMetadata:Y,writeSessionMetadata:V}=f,R=i0($.config),{modelCatalogDefaults:U,userInstructionService:K,configExtensions:F,onTeamRestored:y,...D}=B??{},M=Object.keys(D).length>0?D:void 0,{workspaceInfo:T,workspaceMetadata:_,durationMs:L,vcsType:q,initError:Wf}=await wW(R),Hf=M?.extensionContext,o={...Hf??{},workspace:{...T,...Hf?.workspace??{}},session:{...Hf?.session??{},sessionId:J},logger:Hf?.logger??M?.logger,telemetry:Hf?.telemetry??M?.telemetry??H};IZ({telemetry:o.telemetry,rootPath:T.rootPath,workspaceInfo:T,rootCount:1,vcsType:q,durationMs:L,initError:Wf,featureFlagEnabled:!0});let c=w1({cwd:$.config.cwd,workspacePath:R,rootSessionId:J,logger:M?.logger,workspaceInfo:T}),Gf=P7(M?.hooks)?void 0:q1({rootSessionId:J,workspacePath:R,workspaceInfo:T}),E0=k$([M?.hooks,Gf]),i;if(mK(F,"plugins"))try{i=await O1({pluginPaths:M?.pluginPaths,workspacePath:R,cwd:$.config.cwd,onEvent:X,providerId:$.config.providerId,modelId:$.config.modelId,workspaceInfo:T,session:o.session,client:o.client,user:o.user,logger:o.logger,telemetry:o.telemetry,automation:o.automation}),kK(i.failures,i.warnings,M?.logger)}catch(U2){let r=U2 instanceof Error?U2.message:String(U2);M?.logger?.log?.(`plugin loading failed; continuing without plugins (${r})`)}let S=r5(c?[c]:void 0,r5(M?.extensions,R6(i?.extensions))),n={...$.config,...M??{},sessionId:J,hooks:E0,extensions:S,extensionContext:o,telemetry:o.telemetry},B0=uK(n,J,W,U,j),Y0=k$([n.hooks,n.checkpoint?.enabled===!0?t7({cwd:n.cwd,sessionId:J,logger:n.logger,createCheckpoint:n.checkpoint?.createCheckpoint,initialRunCount:xK($.initialMessages),readSessionMetadata:Y,writeSessionMetadata:V}):void 0]),V$={...n,providerConfig:B0,workspaceMetadata:_,hooks:Y0},$1=$.toolPolicies??n.toolPolicies??Z,y2=Kf(Q,$.capabilities),C4=y2?.requestToolApproval,Z5=y2?.toolExecutors,J1=new I1({currentWorkspacePath:T.rootPath,workspaces:{[T.rootPath]:T}});return{effectiveInput:$,config:V$,providerConfig:B0,workspaceMetadata:_,workspaceInfo:T,extensions:S,hooks:Y0,toolPolicies:$1,requestToolApproval:C4,pluginSandboxShutdown:i?.shutdown,runtimeBuilderInput:{config:V$,hooks:Y0,extensions:S,onTeamEvent:A,createSpawnTool:P,onTeamRestored:y,userInstructionService:K,configExtensions:F,toolExecutors:Z5,workspaceManager:J1,logger:V$.logger,telemetry:V$.telemetry}}}import{existsSync as n6,mkdirSync as cK,readdirSync as dK,rmdirSync as rK,rmSync as lK,unlinkSync as pK}from"node:fs";import{dirname as xZ,join as i6}from"node:path";function s(){return new Date().toISOString()}function _8(f){if(!f||!n6(f))return;try{pK(f)}catch{}}function iK(f){let $=K1(f);if($)return{rootSessionId:$.rootSessionId,fileStem:`${$.agentId}__${$.teamTaskId}`};let J=d2(f);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:f,fileStem:f}}class CW{ensureSessionsDir;constructor(f){this.ensureSessionsDir=f}sessionArtifactsDir(f){return i6(this.ensureSessionsDir(),f)}ensureSessionArtifactsDir(f){let $=this.sessionArtifactsDir(f);if(!n6($))cK($,{recursive:!0});return $}sessionMessagesPath(f){return i6(this.sessionArtifactsDir(f),`${f}.messages.json`)}sessionManifestPath(f,$=!1){let J=$?this.ensureSessionArtifactsDir(f):this.sessionArtifactsDir(f);return i6(J,`${f}.json`)}removeSessionDirIfEmpty(f){let $=this.sessionArtifactsDir(f),J=this.ensureSessionsDir();while($.startsWith(J)&&$!==J){if(!n6($)){$=xZ($);continue}try{if(dK($).length>0)break;rK($)}catch{break}$=xZ($)}}removeSessionDir(f){this.removeDir(this.sessionArtifactsDir(f))}removeDir(f){if(!n6(f))return;try{lK(f,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths(f,$,J){let{rootSessionId:W,fileStem:H}=iK(f),Q=this.sessionArtifactsDir(W);return{messagesPath:i6(Q,`${H}.messages.json`)}}}import{resolveDocumentsExtensionPath as nK}from"@cline/shared/storage";Lf();function gZ(f,$,J,W,H){if(J)o4(f.telemetry,{ulid:$,apiProvider:f.providerId,...H});else s4(f.telemetry,{ulid:$,apiProvider:f.providerId,...H});aK(f.telemetry,{workspacePath:W})}function aK(f,$){let J=nK("Hooks"),W=n0($.workspacePath),H=new Map;for(let Q of W){let Z=Q.hookEventName??"unknown",j=H.get(Z)??{global:0,workspace:0};if(Q.path===J||Q.path.startsWith(`${J}/`))j.global+=1;else j.workspace+=1;H.set(Z,j)}for(let[Q,Z]of H.entries())X6(f,Q,Z.global,Z.workspace)}function vZ(f,$){for(let J of $.mentions)Z6(f,J,$.matchedFiles.includes(J)?1:0,"file",!$.matchedFiles.includes(J));for(let J of $.matchedFiles)H6(f,"file",J.length);for(let J of $.ignoredMentions)Q6(f,"file","not_found",J)}var FB={};N(FB,{ProviderSettingsManager:()=>A0});import{chmodSync as yB,existsSync as P3,mkdirSync as FO,readFileSync as KO,writeFileSync as yO}from"node:fs";import{basename as UB,dirname as B3}from"node:path";import{resolveProviderSettingsPath as UO}from"@cline/shared/storage";var O={};N(O,{writeHubDiscovery:()=>FJ,writeGlobalSettings:()=>q$,withHubStartupLock:()=>KJ,verifyHubConnection:()=>J0,updateLocalProvider:()=>aJ,truncateNotificationBody:()=>D4,toggleDisabledTool:()=>Y6,toTeamProgressLifecycleEvent:()=>a1,toProviderConfig:()=>kf,toHubHealthUrl:()=>h9,toHookConfigFileName:()=>X8,summarizeUsageFromMessages:()=>G1,stopLocalHubServerGracefully:()=>m9,startLocalOAuthServer:()=>h0,startHubWebSocketServer:()=>o$,startHubServer:()=>TP,startClineDeviceAuth:()=>xW,splitCoreSessionConfig:()=>l8,spawnDetachedHubServerWithRetry:()=>r1,spawnDetachedHubServer:()=>b9,setTelemetryOptOutGlobally:()=>L7,setDisabledTools:()=>s5,setDisabledPlugin:()=>N7,sendHubCommand:()=>OA,saveLocalProviderSettings:()=>pH,saveLocalProviderOAuthCredentials:()=>tH,sanitizeSessionToken:()=>h$,safeParseSettings:()=>r6,safeCreateProviderConfig:()=>qW,runSubprocessEvent:()=>W2,runHook:()=>Q2,reviveTeamStateDates:()=>c4,restartLocalHubIfIdleAfterStartupTimeout:()=>GJ,resolveWorkspaceHubOwnerContext:()=>KX,resolveWorkflowsConfigSearchPaths:()=>x8,resolveSkillsConfigSearchPaths:()=>I8,resolveSharedHubOwnerContext:()=>Af,resolveSessionBackend:()=>WH,resolveRulesConfigSearchPaths:()=>m8,resolveProviderConfig:()=>K8,resolvePluginConfigSearchPaths:()=>H8,resolveMcpServerRegistrations:()=>K4,resolveLocalClineAuthToken:()=>sH,resolveHubUrl:()=>PH,resolveHubOwnerContext:()=>z0,resolveHubEndpointOptions:()=>gf,resolveHubBuildId:()=>Z$,resolveHooksConfigSearchPaths:()=>Z8,resolveDisabledToolNames:()=>nf,resolveDisabledPluginPaths:()=>f8,resolveDefaultMcpSettingsPath:()=>P$,resolveDefaultHubPort:()=>d1,resolveDefaultHubPathname:()=>w9,resolveDefaultHubHost:()=>q9,resolveCoreSelectedToolIds:()=>r4,resolveCompatibleLocalHubUrl:()=>Q4,resolveClineDir:()=>YX,resolveClineDataDir:()=>$4,resolveAndLoadAgentPlugins:()=>O1,resolveAgentPluginPaths:()=>b$,requestHubShutdown:()=>H4,requestDesktopToolApproval:()=>xH,rememberRecoverableLocalHubUrl:()=>j$,registerRemoteConfigSessionBlobUpload:()=>cJ,registerMcpServersFromSettingsFile:()=>$2,registerDisposable:()=>YO,refreshProviderModelsFromSource:()=>iH,refreshOpenAICodexToken:()=>N8,refreshOcaToken:()=>B8,refreshClineToken:()=>O8,readSessionCheckpointHistory:()=>_4,readRemoteConfigSessionBlobUploadMetadata:()=>NH,readHubDiscovery:()=>Bf,readGlobalSettings:()=>f0,probeHubServer:()=>Uf,probeHubConnection:()=>hA,prewarmFileIndex:()=>I4,prewarmDetachedHubServer:()=>yJ,prepareRemoteConfigCoreIntegration:()=>wH,parseWorkflowConfigFromMarkdown:()=>k8,parseUserCommandEnvelope:()=>BO,parseSkillConfigFromMarkdown:()=>E8,parseSettings:()=>d6,parseRuleConfigFromMarkdown:()=>S8,parseHookEventPayload:()=>H2,openaiCodexOAuthProvider:()=>dW,normalizeWorkspacePath:()=>O0,normalizeUserInput:()=>PO,normalizeRuntimeCapabilities:()=>Kf,normalizeProviderId:()=>E1,normalizeOpenAICodexCredentials:()=>cW,normalizeOAuthProvider:()=>nH,normalizeHubWebSocketUrl:()=>X$,noopBasicLogger:()=>AO,migrateLegacyProviderSettings:()=>q4,mergeRulesForSystemPrompt:()=>c1,mergeAgentHooks:()=>k$,makeTeamTaskSubSessionId:()=>c2,makeSubSessionId:()=>F1,loginOpenAICodex:()=>g1,loginOcaOAuth:()=>b1,loginLocalProvider:()=>aH,loginClineOAuth:()=>x1,loadOpenTelemetryAdapter:()=>eh,loadMcpSettingsFile:()=>F4,loadLlmsConfigFromFile:()=>j3,loadAgentPluginsFromPathsWithDiagnostics:()=>L0,loadAgentPluginsFromPaths:()=>K6,loadAgentPluginFromPath:()=>W8,listSessionHistoryFromBackend:()=>D9,listPluginTools:()=>r8,listLocalProviders:()=>rH,listHookConfigFiles:()=>n0,isToolDisabledGlobally:()=>h7,isTelemetryOptedOutGlobally:()=>B6,isRuleEnabled:()=>QJ,isPluginDisabledGlobally:()=>z7,isOpenAICodexTokenExpired:()=>uW,isHubReconnectableTransportError:()=>k9,isHubCommandTimeoutError:()=>UJ,isDiscoveryFilePresent:()=>RX,isClineAccountActionRequest:()=>a6,isBuiltInProviderId:()=>zW,identifyAccount:()=>D0,hasMcpSettingsFile:()=>f2,getValidOpenAICodexCredentials:()=>q8,getValidOcaCredentials:()=>Y8,getValidClineCredentials:()=>z8,getProviderConfigFields:()=>oH,getProviderConfig:()=>C6,getLocalProviderModels:()=>lH,getLiveModelsCatalog:()=>C1,getFileIndex:()=>F0,getCurrentContextSize:()=>n5,getCoreHeadlessToolNames:()=>u2,getCoreDefaultEnabledToolIds:()=>d4,getCoreBuiltinToolCatalog:()=>M$,getCoreAcpToolNames:()=>l4,getClineDefaultSystemPrompt:()=>$O,generateWorkspaceInfoWithDiagnostics:()=>T8,generateWorkspaceInfo:()=>k1,generateOcaOpcRequestId:()=>h6,formatRulesForSystemPrompt:()=>u1,formatDisplayUserInput:()=>XO,filterExtensionToolRegistrations:()=>R6,filterDisabledTools:()=>w$,filterDisabledPluginPaths:()=>V6,fetchClineRecommendedModels:()=>Q3,executeClineAccountAction:()=>t6,ensureHubWebSocketServer:()=>xJ,ensureHubServer:()=>DP,ensureDetachedHubServer:()=>UX,ensureCustomProvidersLoaded:()=>nJ,ensureCompatibleLocalHubUrl:()=>c$,enrichPromptWithMentions:()=>Z1,emptyWorkspaceManifest:()=>jO,emptyStoredProviderSettings:()=>e0,discoverPluginModulePaths:()=>Q8,deriveSubsessionStatus:()=>r2,deleteLocalProvider:()=>tJ,defineLlmsConfig:()=>Z3,createWorkflowsConfigDefinition:()=>u8,createUserInstructionConfigService:()=>$$,createToolPoliciesWithPreset:()=>x4,createTool:()=>ZO,createTeamName:()=>dJ,createSubprocessHooks:()=>qJ,createSpawnAgentTool:()=>d0,createSkillsConfigDefinition:()=>g8,createSessionHost:()=>o1,createRuntimeHost:()=>o1,createRulesConfigDefinition:()=>v8,createRemoteConfigSessionMessagesArtifactUploader:()=>qH,createProviderConfig:()=>NW,createOpenTelemetryTelemetryService:()=>T4,createOcaRequestHeaders:()=>KW,createOcaOAuthProvider:()=>FW,createOAuthClientCallbacks:()=>h8,createMcpTools:()=>J2,createLocalHubScheduleRuntimeHandlers:()=>gJ,createLlmsSdk:()=>A3,createInitialAccumulatedUsage:()=>Pf,createInMemoryHubOwnerContext:()=>VX,createHubServerUrl:()=>af,createHubAuthToken:()=>RJ,createHookConfigFileHooks:()=>A8,createHookConfigFileExtension:()=>w1,createHookAuditHooks:()=>q1,createDisabledMcpToolPolicy:()=>y4,createDisabledMcpToolPolicies:()=>OJ,createDelegatedAgentConfigProvider:()=>B1,createDelegatedAgent:()=>Y1,createDefaultToolsWithPreset:()=>g4,createDefaultTools:()=>v0,createDefaultMcpServerClientFactory:()=>e1,createDefaultExecutors:()=>j1,createCoreSettingsService:()=>x$,createCoreSessionSnapshot:()=>W0,createContributionRegistry:()=>QO,createContextCompactionPrepareTurn:()=>M2,createConfiguredTelemetryService:()=>C0,createConfiguredTelemetryHandle:()=>P2,createClineTelemetryServiceMetadata:()=>HO,createClineTelemetryServiceConfig:()=>WO,createClineOAuthProvider:()=>vW,createBuiltinTools:()=>L$,createAgentTeamsTools:()=>_$,createAgentRuntime:()=>RO,createAgentHooksExtension:()=>z1,connectToHub:()=>EJ,completeClineDeviceAuth:()=>gW,clearPrivateModelsCatalogCache:()=>hW,clearLiveModelsCatalogCache:()=>LW,clearHubDiscovery:()=>xf,captureWorkspacePathResolved:()=>y7,captureWorkspaceInitialized:()=>a4,captureWorkspaceInitError:()=>t4,captureToolUsage:()=>$6,captureTokenUsage:()=>e4,captureTaskRestarted:()=>o4,captureTaskCreated:()=>s4,captureTaskCompleted:()=>n2,captureSubagentExecution:()=>t2,captureSkillUsed:()=>J6,captureProviderApiError:()=>a2,captureModeSwitch:()=>f6,captureMentionUsed:()=>H6,captureMentionSearchResults:()=>Z6,captureMentionFailed:()=>Q6,captureHookDiscovery:()=>X6,captureExtensionActivated:()=>K7,captureDiffEditFailure:()=>W6,captureConversationTurnEvent:()=>y1,captureAuthSucceeded:()=>G0,captureAuthStarted:()=>U0,captureAuthLoggedOut:()=>l0,captureAuthFailed:()=>T0,captureAgentTeamCreated:()=>j6,captureAgentCreated:()=>p0,buildWorkspaceMetadata:()=>D8,buildTeamProgressSummary:()=>n1,buildRemoteConfigSessionBlobUploadMetadata:()=>vJ,buildDelegatedAgentConfig:()=>T$,bootstrapAgentTeams:()=>R1,addLocalProvider:()=>dH,accumulateUsageTotals:()=>Xf,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>C8,UnifiedConfigFileWatcher:()=>I$,ToolPresets:()=>Ef,TelemetryService:()=>X2,TelemetryLoggerSink:()=>G4,TEAM_TOOL_NAMES:()=>V1,SubprocessSandbox:()=>h1,StoredProviderSettingsSchema:()=>S1,StoredProviderSettingsEntrySchema:()=>l6,SqliteTeamStore:()=>e$,SqliteSessionStore:()=>Q0,SessionVersioningService:()=>Y$,SessionVersioningError:()=>zf,SessionSource:()=>Vf,SapSettingsSchema:()=>v6,SKILLS_CONFIG_DIRECTORY_NAME:()=>b8,SESSION_STATUSES:()=>l2,RpcClineAccountService:()=>L8,RemoteRuntimeHost:()=>i1,ReasoningSettingsSchema:()=>I6,RULES_CONFIG_DIRECTORY_NAME:()=>HJ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>uJ,ProviderSettingsSchema:()=>s0,ProviderSettingsManager:()=>A0,ProviderProtocolSchema:()=>E6,ProviderIdSchema:()=>U8,ProviderClientSchema:()=>S6,OpenTelemetryProvider:()=>A2,OcaSettingsSchema:()=>u6,OPENAI_COMPATIBLE_PROVIDERS:()=>F8,NodeHubClient:()=>tf,NativeHubTransportAdapter:()=>O4,ModelCatalogSettingsSchema:()=>c6,LocalRuntimeHost:()=>X0,Llms:()=>fO,InMemoryWorkspaceManager:()=>I1,InMemoryMcpManager:()=>i$,HubUIClient:()=>YH,HubTransportError:()=>Df,HubSessionClient:()=>BH,HubServerTransport:()=>Y2,HubScheduleService:()=>j2,HubScheduleCommandService:()=>Z2,HubRuntimeHost:()=>N0,HubCommandError:()=>l1,HookEventPayloadSchema:()=>NJ,HookEventNameSchema:()=>zJ,HookConfigFileName:()=>N1,HOOK_CONFIG_FILE_EVENT_MAP:()=>j8,HOOKS_CONFIG_DIRECTORY_NAME:()=>G6,GlobalSettingsSchema:()=>e2,GcpSettingsSchema:()=>x6,FileTeamPersistenceStore:()=>sJ,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>W5,DefaultToolNames:()=>Jf,DefaultRuntimeBuilder:()=>F2,DefaultLlmsSdk:()=>w4,DEFAULT_MODELS_CATALOG_URL:()=>b6,DEFAULT_HUB_PORT:()=>z9,DEFAULT_HUB_PATHNAME:()=>N9,DEFAULT_HUB_HOST:()=>O9,CoreSettingsService:()=>J$,CoreSessionService:()=>j0,ContributionRegistry:()=>JO,ClineCore:()=>V4,ClineAccountService:()=>M8,ChatViewStateSchema:()=>W3,ChatSummarySchema:()=>J5,ChatSessionStatusSchema:()=>eJ,ChatSessionConfigSchema:()=>oJ,ChatMessageSchema:()=>$5,ChatMessageRoleSchema:()=>f5,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>H3,BrowserWebSocketHubAdapter:()=>h4,BUILT_IN_PROVIDER_IDS:()=>OW,BUILT_IN_PROVIDER:()=>y8,AzureSettingsSchema:()=>g6,AwsSettingsSchema:()=>m6,AuthSettingsSchema:()=>k6,AgentTeamsRuntime:()=>p$,AgentTeam:()=>s1,Agent:()=>VO,ALL_DEFAULT_TOOL_NAMES:()=>k0});z(O,Xv);import*as fO from"@cline/llms";import{buildClineSystemPrompt as $O,ContributionRegistry as JO,createClineTelemetryServiceConfig as WO,createClineTelemetryServiceMetadata as HO,createContributionRegistry as QO,createTool as ZO,emptyWorkspaceManifest as jO,formatDisplayUserInput as XO,noopBasicLogger as AO,normalizeUserInput as PO,parseUserCommandEnvelope as BO,registerDisposable as YO}from"@cline/shared";import"@cline/shared/storage";var cZ={};N(cZ,{isClineAccountActionRequest:()=>a6,executeClineAccountAction:()=>t6,RpcClineAccountService:()=>L8,ClineAccountService:()=>M8});function tK(f){if(typeof f!=="object"||f===null||!("error"in f))return;let $=f.error;return typeof $==="string"&&$.trim()?$:void 0}function uZ(f,$,J){let W=tK(J);if(W)return W;let H=$.trim();if(H){let Q=H.length>200?`${H.slice(0,200)}...`:H;return`Cline account request failed with status ${f}: ${Q}`}return`Cline account request failed with status ${f}`}class M8{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor(f){let $=f.apiBaseUrl.trim();if(!$)throw Error("apiBaseUrl is required");this.apiBaseUrl=$,this.getAuthTokenFn=f.getAuthToken,this.getCurrentUserIdFn=f.getCurrentUserId,this.getOrganizationMemberIdFn=f.getOrganizationMemberId,this.getHeadersFn=f.getHeaders,this.requestTimeoutMs=f.requestTimeoutMs??30000,this.fetchImpl=f.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance(f){let $=await this.resolveUserId(f);return this.request(`/api/v1/users/${encodeURIComponent($)}/balance`)}async fetchUsageTransactions(f){let $=await this.resolveUserId(f);return(await this.request(`/api/v1/users/${encodeURIComponent($)}/usages`)).items??[]}async fetchPaymentTransactions(f){let $=await this.resolveUserId(f);return(await this.request(`/api/v1/users/${encodeURIComponent($)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent($)}`)}async fetchOrganizationBalance(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent($)}/balance`)}async fetchOrganizationUsageTransactions(f){let $=f.organizationId.trim();if(!$)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId($,f.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent($)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount(f){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:f?.trim()||null},expectNoContent:!0})}async resolveUserId(f){let $=f?.trim();if($)return $;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let H=await this.fetchMe();if(!H.id?.trim())throw Error("Unable to resolve current user id");return H.id}async resolveOrganizationMemberId(f,$){let J=$?.trim();if(J)return J;let H=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn(f):void 0)?.trim();if(H)return H;let Z=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===f)?.memberId;if(!Z?.trim())throw Error(`Unable to resolve memberId for organization ${f}`);return Z}async request(f,$){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},H=new AbortController,Q=setTimeout(()=>H.abort(),this.requestTimeoutMs);try{let Z=await this.fetchImpl(new URL(f,this.apiBaseUrl),{method:$?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...W??{}},body:$?.body!==void 0?JSON.stringify($.body):void 0,signal:H.signal});if(Z.status===204||$?.expectNoContent){if(!Z.ok)throw Error(`Cline account request failed with status ${Z.status}`);return}let j=await Z.text(),X;if(j.trim())try{X=JSON.parse(j)}catch{if(!Z.ok)throw Error(uZ(Z.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Z.ok)throw Error(uZ(Z.status,j,X));if(typeof X==="object"&&X!==null){let A=X;if(typeof A.success==="boolean"){if(!A.success)throw Error(A.error||"Cline account request failed");if(A.data!==void 0)return A.data}}if(X===void 0||X===null)throw Error("Cline account response payload was empty");return X}finally{clearTimeout(Q)}}}function a6(f){return f.action==="clineAccount"}async function t6(f,$){switch(f.operation){case"fetchMe":return $.fetchMe();case"fetchBalance":return $.fetchBalance(f.userId);case"fetchUsageTransactions":return $.fetchUsageTransactions(f.userId);case"fetchPaymentTransactions":return $.fetchPaymentTransactions(f.userId);case"fetchUserOrganizations":return $.fetchUserOrganizations();case"fetchOrganizationBalance":return $.fetchOrganizationBalance(f.organizationId);case"fetchOrganizationUsageTransactions":return $.fetchOrganizationUsageTransactions({organizationId:f.organizationId,memberId:f.memberId});case"switchAccount":return await $.switchAccount(f.organizationId),{updated:!0};case"fetchFeaturebaseToken":return $.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String(f)}`)}}class L8{executor;constructor(f){this.executor=f}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance(f){return this.request({action:"clineAccount",operation:"fetchBalance",...f?.trim()?{userId:f.trim()}:{}})}async fetchUsageTransactions(f){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...f?.trim()?{userId:f.trim()}:{}})}async fetchPaymentTransactions(f){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...f?.trim()?{userId:f.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:$})}async fetchOrganizationUsageTransactions(f){let $=f.organizationId.trim();if(!$)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:$,...f.memberId?.trim()?{memberId:f.memberId.trim()}:{}})}async switchAccount(f){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:f?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request(f){return(await this.executor.runProviderAction(f)).result}}var dZ={};N(dZ,{createOAuthClientCallbacks:()=>h8});function h8(f){return{onAuth:({url:$,instructions:J})=>{if(f.onOutput?.(J??"Complete sign-in in your browser."),f.openUrl)try{Promise.resolve(f.openUrl($)).catch((W)=>{f.onOpenUrlError?.({url:$,error:W})})}catch(W){f.onOpenUrlError?.({url:$,error:W})}f.onOutput?.($)},onPrompt:f.onPrompt,onServerListening:f.onServerListening,onServerClose:f.onServerClose}}Lf();var sZ={};N(sZ,{startClineDeviceAuth:()=>xW,refreshClineToken:()=>O8,loginClineOAuth:()=>x1,getValidClineCredentials:()=>z8,createClineOAuthProvider:()=>vW,completeClineDeviceAuth:()=>gW});import{getClineEnvironmentConfig as EW}from"@cline/shared";var s6={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},iZ={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},SW="https://api.workos.com",sK="/auth",rZ=Array.from({length:11},(f,$)=>48801+$),oK=300000,eK=30000,m1=30000,fy=300,$y=5;class f$ extends Error{status;errorCode;constructor(f,$){super(f);this.name="ClineOAuthTokenError",this.status=$?.status,this.errorCode=$?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function Jy(f){let $=Date.parse(f);if(Number.isNaN($))throw Error(`Invalid expiresAt value: ${f}`);return $}function kW(f,$,J={}){let W=f.userInfo.clineUserId??J.accountId,H=f.refreshToken??J.refresh;if(!H)throw Error("Token response did not include a refresh token");return{access:f.accessToken,refresh:H,expires:Jy(f.expiresAt),accountId:W??void 0,email:f.userInfo.email||J.email,metadata:{provider:$,tokenType:f.tokenType,userInfo:f.userInfo}}}async function IW(f){if(!f)return{};return typeof f==="function"?await f():f}function lZ(f,$){if(typeof f!=="number"||!Number.isFinite(f)||f<=0)return $;return Math.floor(f)}async function pZ(f){await new Promise(($)=>setTimeout($,f))}function mW(f,$){if(!f.success||!f.data?.accessToken)throw Error($);return f.data}async function nZ(f,$){let J=await fetch(z$(SW,iZ.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:f}),signal:AbortSignal.timeout($?.requestTimeoutMs??m1)}),W=await J.json().catch(()=>({}));if(!J.ok)throw new f$(`Device authorization failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:lZ(W.expires_in,fy),pollIntervalSeconds:lZ(W.interval,$y)}}async function aZ(f){let $=Date.now()+f.expiresInSeconds*1000,J=Math.max(1,f.initialPollIntervalSeconds);while(Date.now()<=$){let W=await fetch(z$(f.workosApiBaseUrl,iZ.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:f.deviceCode,client_id:f.clientId}),signal:AbortSignal.timeout(f.requestTimeoutMs)}),H=await W.json().catch(()=>({}));if(W.ok){if(!H.access_token||!H.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:H.access_token,refreshToken:H.refresh_token,tokenType:H.token_type??"Bearer"}}switch(H.error){case"authorization_pending":{await pZ(J*1000);break}case"slow_down":{J+=1,await pZ(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new f$(H.error_description||"WorkOS authorization failed",{status:W.status,errorCode:H.error});default:throw new f$(`WorkOS token polling failed: ${W.status}${H.error_description?` - ${H.error_description}`:""}`,{status:W.status,errorCode:H.error})}f.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function tZ(f,$,J){let W={accessToken:f.accessToken,refreshToken:f.refreshToken},H=await fetch(z$($.apiBaseUrl,s6.register),{method:"POST",headers:{"Content-Type":"application/json",...await IW($.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout($.requestTimeoutMs??m1)});if(!H.ok){let Z=await H.text().catch(()=>""),j=D1(Z);throw new f$(`Token registration failed: ${H.status}${j.message?` - ${j.message}`:""}`,{status:H.status,errorCode:j.code})}let Q=await H.json();return kW(mW(Q,"Invalid token exchange response"),J??$.provider)}async function Wy(f,$,J,W){let H={grant_type:"authorization_code",code:f,client_type:"extension",redirect_uri:$,provider:W??J.provider},Q=await fetch(z$(J.apiBaseUrl,s6.token),{method:"POST",headers:{"Content-Type":"application/json",...await IW(J.headers)},body:JSON.stringify(H),signal:AbortSignal.timeout(J.requestTimeoutMs??m1)});if(!Q.ok){let j=await Q.text().catch(()=>""),X=D1(j);throw new f$(`Token exchange failed: ${Q.status}${X.message?` - ${X.message}`:""}`,{status:Q.status,errorCode:X.code})}let Z=await Q.json();return kW(mW(Z,"Invalid token exchange response"),W??J.provider)}async function x1(f){U0(f.telemetry,f.provider??"cline");let $=f.useWorkOSDeviceAuth??!0,J=f.callbackPorts?.length?f.callbackPorts:rZ,W=f.callbackPath??sK,H=$?null:await h0({ports:J,callbackPath:W,onListening:f.callbacks.onServerListening,onClose:f.callbacks.onServerClose}),Q=H?.callbackUrl||`http://127.0.0.1:${J[0]??rZ[0]}${W}`;try{let Z;if($){let j=EW().workOsClientId,X=await nZ(j,f);f.callbacks.onAuth({url:X.verificationUriComplete??X.verificationUri,instructions:`Enter this code in your browser: ${X.userCode}`});let A=await aZ({clientId:j,deviceCode:X.deviceCode,expiresInSeconds:X.expiresInSeconds,initialPollIntervalSeconds:X.pollIntervalSeconds,requestTimeoutMs:f.requestTimeoutMs??m1,workosApiBaseUrl:SW,onProgress:f.callbacks.onProgress});Z=await tZ(A,f,f.provider)}else{let j=new URL(z$(f.apiBaseUrl,s6.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",Q),j.searchParams.set("redirect_uri",Q),f.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let X,A=f.provider,P=await _1({waitForCallback:H?.waitForCallback??(async()=>null),cancelWait:H?.cancelWait??(()=>{}),onManualCodeInput:f.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(P.error)throw Error(`OAuth error: ${P.error}`);if(X=P.code,A=P.provider??A,!X){let B=await f.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),Y=T1(B,{includeProvider:!0});X=Y.code,A=Y.provider??A}if(!X)throw Error("Missing authorization code");Z=await Wy(X,Q,f,A)}return G0(f.telemetry,f.provider??"cline"),D0(f.telemetry,{id:Z.accountId,email:Z.email,provider:f.provider??"cline"}),Z}catch(Z){throw T0(f.telemetry,f.provider??"cline",Z instanceof Error?Z.message:String(Z)),Z}finally{H?.close()}}async function xW(f){return await nZ(EW().workOsClientId,f)}async function gW(f){let $=f.provider??"cline";U0(f.telemetry,$);try{let J=await aZ({clientId:EW().workOsClientId,deviceCode:f.deviceCode,expiresInSeconds:f.expiresInSeconds,initialPollIntervalSeconds:f.pollIntervalSeconds,requestTimeoutMs:f.requestTimeoutMs??m1,workosApiBaseUrl:SW}),W=await tZ(J,{apiBaseUrl:f.apiBaseUrl,headers:f.headers,requestTimeoutMs:f.requestTimeoutMs,provider:f.provider},f.provider);return G0(f.telemetry,$),D0(f.telemetry,{id:W.accountId,email:W.email,provider:$}),W}catch(J){throw T0(f.telemetry,$,J instanceof Error?J.message:String(J)),J}}async function O8(f,$){let J=await fetch(z$($.apiBaseUrl,s6.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await IW($.headers)},body:JSON.stringify({refreshToken:f.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout($.requestTimeoutMs??m1)});if(!J.ok){let Q=await J.text().catch(()=>""),Z=D1(Q);throw new f$(`Token refresh failed: ${J.status}${Z.message?` - ${Z.message}`:""}`,{status:J.status,errorCode:Z.code})}let W=await J.json(),H=f.metadata?.provider??$.provider;return kW(mW(W,"Invalid token refresh response"),H,f)}async function z8(f,$,J){if(!f)return null;let W=J?.refreshBufferMs??oK,H=J?.retryableTokenGraceMs??eK;if(J?.forceRefresh!==!0&&!N$(f,W))return f;try{return await O8(f,$)}catch(Z){if(Z instanceof f$&&Z.isLikelyInvalidGrant())return l0($.telemetry,$.provider??"cline","invalid_grant"),null;if(f.expires-Date.now()>H)return f;return null}}function vW(f){return{id:"cline",name:"Cline Account",usesCallbackServer:!(f.useWorkOSDeviceAuth??!0),async login($){return x1({...f,callbacks:$})},async refreshToken($){return O8($,f)},getApiKey($){return`workos:${$.access}`}}}Lf();var fj={};N(fj,{refreshOpenAICodexToken:()=>N8,openaiCodexOAuthProvider:()=>dW,normalizeOpenAICodexCredentials:()=>cW,loginOpenAICodex:()=>g1,isOpenAICodexTokenExpired:()=>uW,getValidOpenAICodexCredentials:()=>q8,OPENAI_CODEX_OAUTH_CONFIG:()=>e});import{nanoid as Hy}from"nanoid";var e={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class o6 extends Error{status;errorCode;constructor(f,$){super(f);this.name="OpenAICodexOAuthTokenError",this.status=$?.status,this.errorCode=$?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function Qy(f,$,J=e.redirectUri){let W=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:f,code_verifier:$,redirect_uri:J}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let H=await W.json();if(!H.access_token||!H.refresh_token||typeof H.expires_in!=="number")return{type:"failed"};return{type:"success",access:H.access_token,refresh:H.refresh_token,expires:Date.now()+H.expires_in*1000,email:H.email,idToken:H.id_token}}async function Zy(f){try{let $=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:f,client_id:e.clientId}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!$.ok){let W=await $.text().catch(()=>""),H=D1(W);throw new o6(`Token refresh failed: ${$.status}${H.message?` - ${H.message}`:""}`,{status:$.status,errorCode:H.code})}let J=await $.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}catch($){if($ instanceof o6)throw $;return{type:"failed"}}}async function jy(f="pi"){let{verifier:$,challenge:J}=await A6(),W=Hy(32),H=new URL(e.authorizationEndpoint);return H.searchParams.set("response_type","code"),H.searchParams.set("client_id",e.clientId),H.searchParams.set("redirect_uri",e.redirectUri),H.searchParams.set("scope",e.scopes),H.searchParams.set("code_challenge",J),H.searchParams.set("code_challenge_method","S256"),H.searchParams.set("state",W),H.searchParams.set("id_token_add_organizations","true"),H.searchParams.set("codex_cli_simplified_flow","true"),H.searchParams.set("originator",f),{verifier:$,state:W,url:H.toString()}}function Xy(){try{let f=new URL(e.redirectUri),$=f.port.length>0?Number.parseInt(f.port,10):e.callbackPort;return{host:f.hostname||"localhost",port:Number.isFinite($)?$:e.callbackPort,callbackPath:f.pathname||"/auth/callback",redirectUri:f.toString()}}catch{return{host:"localhost",port:e.callbackPort,callbackPath:"/auth/callback",redirectUri:e.redirectUri}}}function oZ(f,$){let J=$?Rf($):Rf(f),W=J?J:Rf(f),Q=W?.[e.jwtClaimPath]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=W?.organizations;if(Array.isArray(Z)&&Z.length>0){let X=Z[0];if(typeof X?.id==="string"&&X.id.length>0)return X.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function eZ(f,$){let J=oZ(f.access,f.idToken)??$?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:f.access,refresh:f.refresh||$?.refresh||"",expires:f.expires,accountId:J,email:f.email??$?.email,metadata:{...$?.metadata??{},provider:"openai-codex"}}}async function g1(f){U0(f.telemetry,"openai-codex");let $=Xy(),{verifier:J,state:W,url:H}=await jy(f.originator),Q=await h0({host:$.host,ports:[$.port],callbackPath:$.callbackPath,expectedState:W});f.onAuth({url:H,instructions:"Continue the authentication process in your browser."});let Z;try{let j=await _1({waitForCallback:Q.waitForCallback,cancelWait:Q.cancelWait,onManualCodeInput:f.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Z=j.code,!Z){let P=await f.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=T1(P,{allowHashCodeState:!0});if(B.state&&B.state!==W)throw Error("State mismatch");Z=B.code}if(!Z)throw Error("Missing authorization code");let X=await Qy(Z,J,$.redirectUri);if(X.type!=="success")throw Error("Token exchange failed");let A=eZ(X);return G0(f.telemetry,"openai-codex"),D0(f.telemetry,{id:A.accountId,email:A.email,provider:"openai-codex"}),A}catch(j){throw T0(f.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{Q.close()}}async function N8(f,$){let J=await Zy(f);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=eZ(J,$);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function q8(f,$){if(!f)return null;let J=$?.refreshBufferMs??e.refreshBufferMs,W=$?.retryableTokenGraceMs??e.retryableTokenGraceMs;if($?.forceRefresh!==!0&&!N$(f,J))return f;try{return await N8(f.refresh,f)}catch(Q){if(Q instanceof o6&&Q.isLikelyInvalidGrant())return l0($?.telemetry,"openai-codex","invalid_grant"),null;if(f.expires-Date.now()>W)return f;return null}}function uW(f,$=e.refreshBufferMs){return N$(f,$)}function cW(f){let $=f.accountId??oZ(f.access);if(!$)throw Error("Failed to extract accountId from token");return{...f,accountId:$,metadata:{...f.metadata??{},provider:"openai-codex"}}}var dW={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login(f){return g1({onAuth:f.onAuth,onPrompt:f.onPrompt,onProgress:f.onProgress,onManualCodeInput:f.onManualCodeInput})},async refreshToken(f){return N8(f.refresh,f)},getApiKey(f){return f.access}};var ZA={};N(ZA,{ClineCore:()=>V4});function $j(f){if(f===!0)return{};if(!f)return;return f}function Jj(f){if(f==="user")return"global";return f}class rW{getService;constructor(f){this.getService=f}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent(f){let $=this.getService().ingestEvent(f);return{event:$.event,duplicate:$.duplicate,matchedSpecIds:$.matchedSpecs.map((J)=>J.specId),queuedRuns:$.queuedRuns,suppressions:$.suppressions}}listEvents(f){return this.getService().listEventLogs(f)}getEvent(f){return this.getService().getEventLog(f)}listSpecs(f){return this.getService().listSpecs(f)}listRuns(f){return this.getService().listRuns(f)}}function Wj(f){let{host:$}=f;return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),H=await $.startSession({source:J.source?.trim()||Vf.CLI,interactive:!1,config:{providerId:E1(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:By(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{extensionContext:f.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:H.sessionId,startResult:{sessionId:H.sessionId,manifestPath:H.manifestPath,messagesPath:H.messagesPath}}},async sendSession(J,W){let H=await $.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((Q)=>Q.content),delivery:W.delivery});if(!H)throw Error("ClineCore automation runtime returned no result");return{result:Py(H)}},async abortSession(J){return await $.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await $.stopSession(J),{applied:!0}}}}function e6(f){let $=Ay(f.automationService,f.automation),J=f.context?.client??(f.clientName?{name:f.clientName}:void 0),W=f.context?.user??(f.distinctId?{distinctId:f.distinctId}:void 0),H=f.context?.logger??f.logger,Q=f.context?.telemetry??f.telemetry;if(!$&&!J&&!W&&!H&&!Q)return f.context;return{...f.context??{},...J?{client:J}:{},...W?{user:W}:{},...H?{logger:H}:{},...Q?{telemetry:Q}:{},...$?{automation:$}:{}}}function Ay(f,$){if(!f)return;return{ingestEvent:(J)=>{$.ingestEvent(J)}}}function Py(f){return{text:f.text,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost},inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,iterations:f.iterations,finishReason:f.finishReason,toolCalls:f.toolCalls.map(($)=>({name:$.name,input:$.input,output:$.output,error:$.error,durationMs:$.durationMs}))}}function By(f){return f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"}var hj={};N(hj,{createCoreSettingsService:()=>x$,CoreSettingsService:()=>J$});import{existsSync as sW}from"node:fs";import{basename as _j,isAbsolute as gy,relative as vy}from"node:path";var yj={};N(yj,{resolveWorkflowsConfigSearchPaths:()=>x8,resolveSkillsConfigSearchPaths:()=>I8,resolveRulesConfigSearchPaths:()=>m8,parseWorkflowConfigFromMarkdown:()=>k8,parseSkillConfigFromMarkdown:()=>E8,parseRuleConfigFromMarkdown:()=>S8,createWorkflowsConfigDefinition:()=>u8,createUserInstructionConfigService:()=>$$,createSkillsConfigDefinition:()=>g8,createRulesConfigDefinition:()=>v8,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>C8,UnifiedConfigFileWatcher:()=>I$,SKILLS_CONFIG_DIRECTORY_NAME:()=>b8,RULES_CONFIG_DIRECTORY_NAME:()=>HJ});import{createHash as Yy}from"node:crypto";import{watch as Vy}from"node:fs";import{readdir as Ry,readFile as Fy}from"node:fs/promises";import{join as Ky}from"node:path";function yy(f){return Yy("sha1").update(f).digest("hex")}function Zj(f){return Boolean(f&&typeof f==="object"&&"code"in f)}function Hj(f){return Zj(f)&&f.code==="ENOENT"}function Qj(f){return Zj(f)&&(f.code==="EACCES"||f.code==="EPERM")}class I${definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor(f,$){if(f.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=f,this.debounceMs=$?.debounceMs??75,this.emitParseErrors=$?.emitParseErrors??!1;for(let J of f){if(this.definitionsByType.has(J.type))throw Error(`Duplicate unified config definition type '${J.type}'.`);this.definitionsByType.set(J.type,J),this.recordsByType.set(J.type,new Map),this.discoveredDirectoriesByType.set(J.type,new Set);for(let W of J.directories){let H=this.baseTypesByDirectory.get(W);if(H)H.add(J.type);else this.baseTypesByDirectory.set(W,new Set([J.type]))}}}subscribe(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let f of this.watchersByDirectory.values())f.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let f of this.definitions)await this.refreshTypeInternal(f)})}async refreshType(f){let $=this.definitionsByType.get(f);if(!$)throw Error(`Unknown unified config type '${f}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal($)})}getSnapshot(f){let $=this.recordsByType.get(f);return new Map([...$?.entries()??[]].map(([J,W])=>[J,{...W}]))}getAllSnapshots(){let f=new Map;for(let[$,J]of this.recordsByType.entries())f.set($,new Map([...J.entries()].map(([W,H])=>[W,{...H}])));return f}emit(f){for(let $ of this.listeners)$(f)}enqueueRefresh(f){return this.refreshQueue=this.refreshQueue.then(f,f),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let f=this.buildDesiredTypesByDirectory();for(let[$,J]of this.watchersByDirectory.entries()){if(f.has($))continue;J.close(),this.watchersByDirectory.delete($)}this.watchedTypesByDirectory=f;for(let $ of f.keys()){if(this.watchersByDirectory.has($))continue;try{let J=Vy($,()=>{let W=this.watchedTypesByDirectory.get($);if(!W)return;for(let H of W)this.pendingTypes.add(H);this.scheduleFlush()});this.watchersByDirectory.set($,J),J.on("error",(W)=>{let H=this.watchedTypesByDirectory.get($);if(!H)return;for(let Q of H)this.emit({kind:"error",type:Q,error:W,filePath:$})})}catch(J){if(!Hj(J)&&!Qj(J)){let W=f.get($);if(!W)continue;for(let H of W)this.emit({kind:"error",type:H,error:J,filePath:$})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let f=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let $ of f){let J=this.definitionsByType.get($);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal(f){let{records:$,discoveredDirectories:J}=await this.loadDefinition(f),W=this.recordsByType.get(f.type)??new Map;for(let[H,Q]of W.entries()){if($.has(H))continue;this.emit({kind:"remove",type:f.type,id:H,filePath:Q.filePath})}for(let[H,Q]of $.entries()){let Z=W.get(H);if(Z&&Z.filePath===Q.filePath&&Z.fingerprint===Q.fingerprint)continue;this.emit({kind:"upsert",record:{type:Q.type,id:H,item:Q.item,filePath:Q.filePath}})}if(this.recordsByType.set(f.type,$),this.discoveredDirectoriesByType.set(f.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition(f){let $=new Map,J=new Set;for(let W of f.directories){J.add(W);let H=f.discoverFiles?await f.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let Q of H){let{fileName:Z,filePath:j}=Q;if(J.add(Q.directoryPath),f.includeFile&&!f.includeFile(Z,j))continue;try{let X=await Fy(j,"utf8"),A={type:f.type,directoryPath:Q.directoryPath,fileName:Z,filePath:j,content:X},P=f.parseFile(A),B=f.resolveId(P,A).trim();if(!B)continue;$.set(B,{type:f.type,id:B,item:P,filePath:j,fingerprint:yy(X)})}catch(X){if(this.emitParseErrors)this.emit({kind:"error",type:f.type,error:X,filePath:j})}}}return{records:$,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let f=new Map;for(let[$,J]of this.baseTypesByDirectory.entries())f.set($,new Set(J));for(let[$,J]of this.discoveredDirectoriesByType.entries())for(let W of J){let H=f.get(W);if(H)H.add($);else f.set(W,new Set([$]))}return f}async readDirectoryFileCandidates(f){try{return(await Ry(f,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:f,fileName:J.name,filePath:Ky(f,J.name)})).sort((J,W)=>J.fileName.localeCompare(W.fileName))}catch($){if(Hj($)||Qj($))return[];throw $}}}import{readdir as lW,readFile as Uy,stat as jj}from"node:fs/promises";import{basename as m$,dirname as Gy,extname as pW,join as hf}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as HJ,resolveRulesConfigSearchPaths as Ty,resolveSkillsConfigSearchPaths as Dy,resolveWorkflowsConfigSearchPaths as _y,SKILLS_CONFIG_DIRECTORY_NAME as b8,WORKFLOWS_CONFIG_DIRECTORY_NAME as C8}from"@cline/shared/storage";import My from"yaml";var fJ="SKILL.md",Ly="managed.json",hy=new Set([".md",".markdown",".txt"]);function iW(f){return f.trim().toLowerCase()}function w8(f){let $=f;return $?.code==="ENOENT"||$?.code==="EACCES"||$?.code==="EPERM"}function $J(f){return hy.has(pW(f).toLowerCase())}async function nW(f){try{let $=await lW(f,{withFileTypes:!0}),J=[];for(let W of $){if(!W.isDirectory())continue;let H=hf(f,W.name),Q=hf(H,Ly);try{let Z=await Uy(Q,"utf8"),j=JSON.parse(Z);if(j&&typeof j==="object")J.push(H)}catch(Z){if(w8(Z))continue;if(Z?.name==="SyntaxError")continue;throw Z}}return J.sort((W,H)=>W.localeCompare(H))}catch($){if(w8($))return[];throw $}}function aW(f){let $=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=f.match($);if(!J)return{data:{},body:f,hadFrontmatter:!1};let[,W,H]=J;try{let Q=My.parse(W);return{data:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{},body:H,hadFrontmatter:!0}}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);return{data:{},body:f,hadFrontmatter:!0,parseError:Z}}}function JJ(f,$,J){if(f===void 0||f===null){if(J)throw Error(`Missing required frontmatter field '${$}'.`);return}if(typeof f!=="string")throw Error(`Frontmatter field '${$}' must be a string.`);let W=f.trim();if(!W&&J)throw Error(`Frontmatter field '${$}' cannot be empty.`);return W||void 0}function v1(f,$){if(f===void 0||f===null)return;if(typeof f!=="boolean")throw Error(`Frontmatter field '${$}' must be a boolean.`);return f}function E8(f,$){let{data:J,body:W,parseError:H}=aW(f);if(H)throw Error(`Failed to parse YAML frontmatter: ${H}`);let Q=W.trim();if(!Q)throw Error("Missing instructions body in skill file.");let j=JJ(J.name,"name",!1)??$.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:JJ(J.description,"description",!1),disabled:v1(J.disabled,"disabled")??(v1(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function S8(f,$){let{data:J,body:W,parseError:H}=aW(f);if(H)throw Error(`Failed to parse YAML frontmatter: ${H}`);let Q=W.trim();if(!Q)throw Error("Missing instructions body in rule file.");let Z=JJ(J.name,"name",!1)??$.trim();if(!Z)throw Error("Missing rule name.");return{name:Z,disabled:v1(J.disabled,"disabled")??(v1(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function k8(f,$){let{data:J,body:W,parseError:H}=aW(f);if(H)throw Error(`Failed to parse YAML frontmatter: ${H}`);let Q=W.trim();if(!Q)throw Error("Missing instructions body in workflow file.");let Z=JJ(J.name,"name",!1)??$.trim();if(!Z)throw Error("Missing workflow name.");return{name:Z,disabled:v1(J.disabled,"disabled")??(v1(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function I8(f){return Dy(f)}function m8(f){return Ty(f)}function x8(f){return _y(f)}async function Xj(f){if(m$(f)===".cline"){let $=await nW(f);return(await Promise.all($.map((W)=>Xj(hf(W,b8))))).flat()}try{let $=await lW(f,{withFileTypes:!0}),J=[];for(let W of $){if(W.isFile()&&W.name===fJ){J.push({directoryPath:f,fileName:W.name,filePath:hf(f,W.name)});continue}if(W.isDirectory())J.push({directoryPath:hf(f,W.name),fileName:fJ,filePath:hf(f,W.name,fJ)})}return J}catch($){if(w8($))return[];throw $}}async function WJ(f){if(m$(f)===".cline"){let $=await nW(f);return(await Promise.all($.map((W)=>WJ(hf(W,"rules.md"))))).flat()}try{if((await jj(f)).isFile())return[{directoryPath:Gy(f),fileName:m$(f),filePath:f}]}catch($){if(!w8($))throw $}try{let J=(await lW(f,{withFileTypes:!0})).filter((H)=>H.isFile()&&$J(H.name)).map((H)=>({directoryPath:f,fileName:H.name,filePath:hf(f,H.name)})),W=hf(f,"AGENTS.md");try{if((await jj(W)).isFile()){if(!J.some((Z)=>Z.fileName==="AGENTS.md"))J.push({directoryPath:f,fileName:"AGENTS.md",filePath:W})}}catch{}return J}catch($){if(w8($))return[];throw $}}async function Oy(f){if(m$(f)===".cline"){let $=await nW(f);return(await Promise.all($.map((W)=>WJ(hf(W,C8))))).flat()}return WJ(f)}function g8(f){let $=f?.directories??I8(f?.workspacePath),J=f?.workspacePath?hf(f.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...$,J]:$,discoverFiles:Xj,includeFile:(W)=>W===fJ,parseFile:(W)=>E8(W.content,m$(W.directoryPath)),resolveId:(W)=>iW(W.name)}}function v8(f){let $=f?.directories??m8(f?.workspacePath),J=f?.workspacePath?hf(f.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...$,J]:$,discoverFiles:WJ,includeFile:(W,H)=>W===".clinerules"||$J(W)||$J(H),parseFile:(W)=>S8(W.content,m$(W.filePath,pW(W.filePath))),resolveId:(W)=>iW(W.name)}}function u8(f){let $=f?.directories??x8(f?.workspacePath),J=f?.workspacePath?hf(f.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...$,J]:$,discoverFiles:Oy,includeFile:(W)=>$J(W),parseFile:(W)=>k8(W.content,m$(W.filePath,pW(W.filePath))),resolveId:(W)=>iW(W.name)}}function Aj(f){let $=[g8(f?.skills),v8(f?.rules),u8(f?.workflows)];return new I$($,{debounceMs:f?.debounceMs,emitParseErrors:f?.emitParseErrors})}import{truncateSplit as Pj}from"@cline/shared";function zy(f,$){if(f.description?.trim())return Pj(f.description,".");if($==="workflow")return;return Pj(f.instructions,".")}function Ny(f){return f.disabled!==!0}function Bj(f,$){return[...f.getSnapshot($).entries()].map(([J,W])=>({id:J,record:W})).filter(({record:J})=>Ny(J.item)).map(({id:J,record:W})=>({id:J,name:W.item.name,instructions:W.item.instructions,description:zy(W.item,$),kind:$})).sort((J,W)=>J.name.localeCompare(W.name))}function c8(f){let $=new Map;for(let J of[...Bj(f,"workflow"),...Bj(f,"skill")])if(!$.has(J.name))$.set(J.name,J);return[...$.values()].sort((J,W)=>J.name.localeCompare(W.name))}function Yj(f,$){if(!f.startsWith("/")||f.length<2)return f;let J=f.match(/^\/(\S+)/);if(!J)return f;let W=J[1];if(!W)return f;let H=W.length+1,Q=f.slice(H),Z=c8($).find((j)=>j.name===W);return Z?`${Z.instructions}${Q}`:f}var Rj={};N(Rj,{mergeRulesForSystemPrompt:()=>c1,loadRulesForSystemPromptFromWatcher:()=>tW,listEnabledRulesFromWatcher:()=>Vj,isRuleEnabled:()=>QJ,formatRulesForSystemPrompt:()=>u1});function QJ(f){return f.disabled!==!0}function u1(f){if(f.length===0)return"";return`
184
+ </html>`;var Cj="a8331954c0cf48ba99b5dd223a14c6ea",Ej="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",hj="openid offline_access",h6="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",bj="c1aba3deed5740659981a752714eba33",kj="https://login-ext.identity.oraclecloud.com",Ij="openid offline_access",b6="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",xj="opc-request-id",NF="/auth/oca",MF=Array.from({length:11},($,f)=>48801+f),qF=300000,wF=30000,gj=30000,SF=600000;class k6 extends Error{status;errorCode;constructor($,f){super($);this.name="OcaOAuthTokenError",this.status=f?.status,this.errorCode=f?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var e$={internal:{clientId:Cj,idcsUrl:Ej,scopes:hj,baseUrl:h6},external:{clientId:bj,idcsUrl:kj,scopes:Ij,baseUrl:b6}},R8=new Map,CF=86400000,EF=300000,hF=32,h9=new E9(CF,hF);function mj($){if(typeof $==="function")return $();return $??"internal"}function vj($){return{internal:{clientId:$?.internal?.clientId??e$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??e$.internal.idcsUrl,scopes:$?.internal?.scopes??e$.internal.scopes,baseUrl:$?.internal?.baseUrl??e$.internal.baseUrl},external:{clientId:$?.external?.clientId??e$.external.clientId,idcsUrl:$?.external?.idcsUrl??e$.external.idcsUrl,scopes:$?.external?.scopes??e$.external.scopes,baseUrl:$?.external?.baseUrl??e$.external.baseUrl}}}function bF($=Date.now()){let f=$-SF;for(let[J,Q]of R8.entries())if(Q.createdAt<f)R8.delete(J)}function kF($,f,J){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let Z=G0(f)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;let j=G0(J)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function cj($,f,J){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let Z=$.refresh_token??J?.refresh;if(!Z)throw Error("Token response did not include a refresh token");let W=G0($.id_token),j=G0(Q),X=W?.sub??j?.sub,H=W?.email??j?.email;return{access:Q,refresh:Z,expires:kF($,Q,$.id_token),accountId:X??J?.accountId,email:H??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:f,subject:X,idToken:$.id_token}}}async function uj($,f){let J=L6($),Q=h9.get(J);if(Q)return Q;let Z=`${J}/.well-known/openid-configuration`,W=await fetch(Z,{method:"GET",signal:AbortSignal.timeout(f)});if(!W.ok){let H=`${J}/oauth2/v1/token`;return h9.set(J,H,Date.now(),EF),H}let X=(await W.json()).token_endpoint||`${J}/oauth2/v1/token`;return h9.set(J,X),X}function dj($){return{code:$.error,message:$.error_description}}async function IF($){let f=R8.get($.state);if(!f)throw Error("No PKCE verifier found for this state");R8.delete($.state);let J=$.mode==="external"?$.config.external:$.config.internal,Q=await uj(J.idcsUrl,$.requestTimeoutMs),Z=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:f.redirectUri,client_id:J.clientId,code_verifier:f.verifier}),W=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Z,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await W.json();if(!W.ok){let H=dj(j);throw new k6(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let X=G0(j.id_token);if(!j.id_token||!X)throw Error("No ID token received from OCA");if(X.nonce!==f.nonce)throw Error("OIDC nonce verification failed");return cj(j,$.mode)}function xF($){let f=$.mode==="external"?$.config.external:$.config.internal,J=new URL(`${L6(f.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",f.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",f.scopes),J.searchParams.set("code_challenge",$.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",$.callbackUrl),J.searchParams.set("state",$.state),J.searchParams.set("nonce",$.nonce),J.toString()}async function gf($){L$($.telemetry,"oca");let f=vj($.config),J=mj($.mode),Q=$.callbackPorts?.length?$.callbackPorts:MF,Z=$.callbackPath??NF,W=$.requestTimeoutMs??gj,j=await a0({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=j.callbackUrl;if(!X)throw Error("Unable to bind local OAuth callback server");let H=Sj(16),Y=Sj(16),{verifier:V,challenge:A}=await U6();bF(),R8.set(H,{verifier:V,nonce:Y,mode:J,redirectUri:X,createdAt:Date.now()});let B=xF({callbackUrl:X,mode:J,state:H,nonce:Y,challenge:A,config:f});$.callbacks.onAuth({url:B,instructions:"Continue the authentication process in your browser."});try{let K=await wf({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),G=K.code,R=K.state;if(K.error)throw Error(`OAuth error: ${K.error}`);if(!G){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!R||R!==H)throw Error("State mismatch");let F=await IF({code:G,state:R,mode:J,config:f,requestTimeoutMs:W});return O$($.telemetry,"oca"),_$($.telemetry,{id:F.accountId,email:F.email,provider:"oca"}),F}catch(K){throw z$($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{j.close()}}async function U8($,f={}){let J=vj(f.config),Q=f.requestTimeoutMs??gj,Z=$.metadata?.mode,W=Z==="internal"||Z==="external"?Z:mj(f.mode),j=W==="external"?J.external:J.internal,X=await uj(j.idcsUrl,Q),H=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),Y=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(Q)}),V=await Y.json();if(!Y.ok){let A=dj(V);throw new k6(`Token refresh failed: ${Y.status}${A.message?` - ${A.message}`:""}`,{status:Y.status,errorCode:A.code})}return cj(V,W,$)}async function L8($,f,J){if(!$)return null;let Q=f?.refreshBufferMs??J?.refreshBufferMs??qF,Z=f?.retryableTokenGraceMs??J?.retryableTokenGraceMs??wF;if(f?.forceRefresh!==!0&&!S1($,Q))return $;try{return await U8($,J)}catch(j){if(j instanceof k6&&j.isLikelyInvalidGrant())return n$(J?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function b9($={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login(f){return gf({...$,callbacks:f})},async refreshToken(f){return U8(f,$)},getApiKey(f){return f.access}}}async function I6($,f){let J=new TextEncoder,Q=async(Y)=>{let V=await crypto.subtle.digest("SHA-256",J.encode(Y));return Array.from(new Uint8Array(V).slice(0,4),(A)=>A.toString(16).padStart(2,"0")).join("")},[Z,W]=await Promise.all([Q(f),Q($)]),j=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),X=new Uint32Array(1);crypto.getRandomValues(X);let H=(X[0]??0).toString(16).padStart(8,"0");return Z+W+j+H}async function k9($){let f=await I6($.taskId,$.accessToken);return{Authorization:`Bearer ${$.accessToken}`,"Content-Type":"application/json",client:$.metadata?.client??"Cline","client-version":$.metadata?.clientVersion??"unknown","client-ide":$.metadata?.clientIde??"unknown","client-ide-version":$.metadata?.clientIdeVersion??"unknown",[xj]:f}}var tj={};q(tj,{resolveProviderConfig:()=>y8,getProviderConfig:()=>d6,getLiveModelsCatalog:()=>mf,clearPublicModelsCatalogCache:()=>jD,clearPrivateModelsCatalogCache:()=>l9,clearLiveModelsCatalogCache:()=>d9,OPENAI_COMPATIBLE_PROVIDERS:()=>_8,DEFAULT_MODELS_CATALOG_URL:()=>u6});import*as $0 from"@cline/llms";function I9($){if(!Array.isArray($))return[];return $.map((f)=>{if(typeof f==="string")return f.trim();if(f&&typeof f==="object"){let J=f;for(let Q of[J.id,J.name,J.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((f)=>f.length>0)}function gF($,f){let J=I9($);if(J.length>0)return J;if(!$||typeof $!=="object")return[];let Q=$,Z=I9(Q.data??Q.models);if(Z.length>0)return Z;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let j=Object.keys(Q.models).filter((X)=>X.trim().length>0);if(j.length>0)return j}let W=Q.providers?.[f];if(W&&typeof W==="object"){let X=I9(W.models??W);if(X.length>0)return X}return[]}async function x6($,f){let J=await fetch($,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${$}: HTTP ${J.status}`);return gF(await J.json(),f)}function pj($){return $.replace(/\/+$/,"")}function g6($,f,J){let Q=J?.trim();if(!Q)return;let Z=$?.trim();if(!Z||!f?.trim())return Q;try{let W=new URL(Q),j=new URL(f),X=new URL(Z);if(W.origin!==j.origin)return Q;let H=pj(j.pathname),Y=pj(X.pathname);if(H&&W.pathname.startsWith(`${H}/`)){let V=W.pathname.slice(H.length);X.pathname=`${Y}${V}`}else X.pathname=W.pathname;return X.search=W.search,X.hash=W.hash,X.toString()}catch{return Q}}function mF($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{...J}]))}function vF($){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 cF=Object.values($0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:mF($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),rj=Object.fromEntries(cF.map(($)=>[$.id,$]));function uF($){return rj[$]}function dF(){return Object.fromEntries(Object.entries(rj).filter(([,$])=>vF($)))}function ij($=[]){let f=$.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return f.length>0?f:void 0}var u6="https://models.dev/api.json",lF=600000,nj=300000,pF=5000,c6=new Map,O8=new Map,g9=new Map,m6=new Map;async function rF(){return $0.getGeneratedProviderModels()}async function iF($,f={},J={},Q={},Z={},W={}){let j=await rF(),X=$0.resolveProviderModelCatalogKeys($),H=Object.assign({},...X.map((B)=>j[B]??{})),Y=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),V=Object.keys(Z).length>0;if(Y&&V)return $0.sortModelsByReleaseDate({...Z,...W});let A=Object.keys(Q).length>0;if($==="openai-codex"&&A)return $0.sortModelsByReleaseDate({...Q,...W});return $0.sortModelsByReleaseDate({...H,...f,...J,...Q,...Z,...W})}function nF($,f){let J=$0.resolveProviderModelCatalogKeys($);return Object.assign({},...J.map((Q)=>f[Q]??{}))}function v9($){let f=$?.trim();return f&&f.length>0?f:""}function c9($){let f=$.apiKey?.trim()||$.accessToken?.trim();return f&&f.length>0?f:void 0}function aF($){let f=2166136261;for(let J=0;J<$.length;J+=1)f^=$.charCodeAt(J),f+=(f<<1)+(f<<4)+(f<<7)+(f<<8)+(f<<24);return(f>>>0).toString(16)}function tF($,f){return`${$}:${v9(f.baseUrl)}:${aF(c9(f)??"")}`}function sF($){let f=$?.trim();if(!f)return;let J=G0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}async function u9($,f,J=pF){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await fetch($,{...f,signal:Q.signal})}finally{clearTimeout(Z)}}function x9($,f,J){if(J&&!$.includes(f))$.push(f)}function z8($,f){let J=["streaming","tools"];return x9(J,"images",Boolean(f.supportsImages)),x9(J,"prompt-cache",Boolean(f.supportsPromptCache)),x9(J,"reasoning",Boolean(f.supportsReasoning)),{id:$,name:f.name??$,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxTokens:f.maxTokens,capabilities:J,releaseDate:f.releaseDate,status:"active"}}function oF($){let f=$0.getGeneratedModelsForProvider("openai-native")[$.id];if(f)return{...f,id:$.id,name:$.name??f.name??$.id};return z8($.id,{name:$.name??$.id})}async function eF($,f){let J=await u9("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;if(X.includes("whisper")||X.includes("tts")||X.includes("embedding"))continue;let H=j.supported_features??[];W[X]=z8(X,{name:X,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:H.includes("reasoning")||H.includes("reasoning_effort"),supportsImages:!1})}return W}async function $D($,f){let J=await u9("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":f}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;W[X]=z8(X,{name:X,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}function fD($){let f=v9($);if(!f)return"http://localhost:4000";return f.endsWith("/v1")?f.slice(0,-3):f}async function JD($,f){let Q=`${fD($.baseUrl)}/v1/model/info`,Z=async(Y)=>u9(Q,{method:"GET",headers:{accept:"application/json",...Y}}),W=await Z({"x-litellm-api-key":f});if(!W.ok)W=await Z({Authorization:`Bearer ${f}`});if(!W.ok)throw Error(`LiteLLM model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],H={};for(let Y of X){let V=Y.model_name?.trim(),B=Y.litellm_params?.model?.trim()||V;if(!B)continue;let K=Y.model_info,G=z8(B,{name:V??B,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(H[B]=G,V)H[V]={...G,id:V,name:V}}return H}async function QD($,f){let J=await $0.listOpenAICodexModels({accessToken:f,accountId:$.accountId??sF(f),cwd:typeof $.codex?.defaultSettings?.cwd==="string"?$.codex.defaultSettings.cwd:void 0,codexPath:typeof $.codex?.defaultSettings?.codexPath==="string"?$.codex.defaultSettings.codexPath:void 0,env:$.codex?.defaultSettings?.env&&typeof $.codex.defaultSettings.env==="object"&&!Array.isArray($.codex.defaultSettings.env)?$.codex.defaultSettings.env:void 0});return Object.fromEntries(J.map((Q)=>[Q.id,oF(Q)]))}var aj={baseten:eF,hicap:$D,litellm:JD,"openai-codex":QD},m9=new Map,v6=new Map;function ZD($,f){return`${$}:${v9(f.baseUrl)}`}async function WD($,f,J){let Q=$0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],Z=g6(J.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!Z)return{};let W=f?.cacheTtlMs??nj,j=ZD($,J),X=Date.now(),H=m9.get(j);if(H&&H.expiresAt>X)return H.data;let Y=v6.get(j);if(Y)return Y;let V=x6(Z,$).then((A)=>{let B=Object.fromEntries(A.map((K)=>[K,z8(K,{name:K})]));return m9.set(j,{data:B,expiresAt:X+W}),B}).finally(()=>{v6.delete(j)});return v6.set(j,V),V}function jD(){m9.clear(),v6.clear()}async function XD($,f){let J=c9(f);if(!J)return{};let Q=aj[$];if(!Q)return{};return Q(f,J)}function HD($,f,J){if(!J)return!1;if(!aj[$])return!1;if(f?.loadPrivateOnAuth===!1)return!1;return Boolean(c9(J))}async function YD($,f,J){let Q=f?.cacheTtlMs??nj,Z=tF($,J),W=Date.now(),j=g9.get(Z);if(j&&j.expiresAt>W)return j.data;let X=m6.get(Z);if(X)return X;let H=XD($,J).then((Y)=>{return g9.set(Z,{data:Y,expiresAt:W+Q}),Y}).finally(()=>{m6.delete(Z)});return m6.set(Z,H),H}async function VD($){return $0.fetchModelsDevProviderModels($)}async function mf($={}){let f=$.url??u6,J=$.cacheTtlMs??lF,Q=Date.now(),Z=c6.get(f);if(Z&&Z.expiresAt>Q)return Z.data;let W=O8.get(f);if(W)return W;let j=VD(f).then((X)=>{return c6.set(f,{data:X,expiresAt:Q+J}),X}).finally(()=>{O8.delete(f)});return O8.set(f,j),j}function d9($){if($){c6.delete($),O8.delete($);return}c6.clear(),O8.clear()}function l9(){g9.clear(),m6.clear()}function AD($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:ij(J.capabilities)}]))}var _8=AD(dF());function d6($){let f=uF($);if(!f||!f.baseUrl)return;return{baseUrl:f.baseUrl,modelId:f.modelId,knownModels:f.knownModels,capabilities:ij(f.capabilities)}}async function y8($,f,J){let Q=d6($);if(!Q)return;try{let Z=f?.loadLatestOnInit?await mf(f):void 0,W=Z?nF($,Z):{},j=J&&HD($,f,J)?await YD($,f,J):{},H=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?J??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:J,Y=H?await WD($,f,H).catch(()=>({})):{},V=await iF($,Q.knownModels,W,j,Y,J?.knownModels);return{...Q,knownModels:V}}catch(Z){if(f?.failOnError)throw Z;return Q}}var T8=k0.BUILT_IN_PROVIDER,p9=k0.BUILT_IN_PROVIDER_IDS,r9=k0.isBuiltInProviderId,vf=k0.normalizeProviderId,N8=T.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),l6=T.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),p6=T.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),r6=T.object({apiKey:T.string().optional(),accessToken:T.string().optional(),refreshToken:T.string().optional(),expiresAt:T.number().int().positive().optional(),accountId:T.string().optional()}),BD=T.enum(["none","low","medium","high","xhigh"]),i6=T.object({enabled:T.boolean().optional(),effort:BD.optional(),budgetTokens:T.number().int().positive().optional()}),n6=T.object({accessKey:T.string().optional(),secretKey:T.string().optional(),sessionToken:T.string().optional(),region:T.string().optional(),profile:T.string().optional(),authentication:T.enum(["iam","api-key","profile"]).optional(),usePromptCache:T.boolean().optional(),useCrossRegionInference:T.boolean().optional(),useGlobalInference:T.boolean().optional(),endpoint:T.string().url().optional(),customModelBaseId:T.string().optional()}),a6=T.object({projectId:T.string().optional(),region:T.string().optional()}),t6=T.object({apiVersion:T.string().optional(),useIdentity:T.boolean().optional()}),s6=T.object({clientId:T.string().optional(),clientSecret:T.string().optional(),tokenUrl:T.string().url().optional(),resourceGroup:T.string().optional(),deploymentId:T.string().optional(),useOrchestrationMode:T.boolean().optional(),api:T.enum(["orchestration","foundation-models"]).optional(),defaultSettings:T.record(T.string(),T.unknown()).optional()}),o6=T.object({mode:T.enum(["internal","external"]).optional(),usePromptCache:T.boolean().optional()}),e6=T.object({loadLatestOnInit:T.boolean().optional(),loadPrivateOnAuth:T.boolean().optional(),url:T.string().url().optional(),cacheTtlMs:T.number().int().positive().optional(),failOnError:T.boolean().optional()}),$1=T.object({provider:N8,apiKey:T.string().optional(),auth:r6.optional(),model:T.string().optional(),protocol:l6.optional(),client:p6.optional(),routingProviderId:N8.optional(),maxTokens:T.number().int().positive().optional(),contextWindow:T.number().int().positive().optional(),baseUrl:T.string().url().optional(),headers:T.record(T.string(),T.string()).optional(),timeout:T.number().int().positive().optional(),reasoning:i6.optional(),aws:n6.optional(),gcp:a6.optional(),azure:t6.optional(),sap:s6.optional(),oca:o6.optional(),region:T.string().optional(),apiLine:T.enum(["china","international"]).optional(),capabilities:T.array(T.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:e6.optional()});function $J($){return $1.parse($)}function fJ($){return $1.safeParse($)}function KD($){return $.protocol==="openai-responses"||$.client==="openai"}function I0($,f={}){let J=$.provider,Q=vf(J),Z=f.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,X=_8[Q],H=Object.assign({},...k0.resolveProviderModelCatalogKeys(Q).map((R)=>k0.getGeneratedModelsForProvider(R))),Y=Object.keys(H)[0],V=$.auth?.accessToken??$.apiKey??$.auth?.apiKey,A=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?h6:b6:X?.baseUrl),B=$.routingProviderId??(KD($)&&Q!==T8.OPENAI_NATIVE?T8.OPENAI_NATIVE:void 0),K=Z?X?.knownModels??(Object.keys(H).length>0?H:void 0):void 0,G={providerId:J,clientType:$.client,routingProviderId:B,modelId:$.model??X?.modelId??Y??"default",...Z?{knownModels:K}:{},apiKey:V,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:A,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??X?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(G).filter(([R,F])=>F!==void 0))}function i9($){let f=$J($);return I0(f)}function n9($){let f=fJ($);if(f.success)return{success:!0,config:I0(f.data)};return{success:!1,error:f.error}}var M8=$1;var JJ=f1.object({settings:$1,updatedAt:f1.string().datetime(),tokenSource:f1.enum(["manual","oauth","migration"]).default("manual")}),cf=f1.object({version:f1.literal(1),lastUsedProvider:f1.string().min(1).optional(),providers:f1.record(f1.string(),JJ)});function J1(){return{version:1,providers:{}}}T$();var JX={};q(JX,{InMemoryWorkspaceManager:()=>df});import{upsertWorkspaceInfo as DD,WorkspaceManifestSchema as t9}from"@cline/shared";var fX={};q(fX,{normalizeWorkspacePath:()=>M$,generateWorkspaceInfoWithDiagnostics:()=>q8,generateWorkspaceInfo:()=>uf,buildWorkspaceMetadataWithInfo:()=>a9,buildWorkspaceMetadata:()=>w8});import{basename as GD,resolve as PD}from"node:path";import{performance as ej}from"node:perf_hooks";import{processWorkspaceInfo as $X}from"@cline/shared";import FD from"simple-git";function M$($){return PD($)}async function uf($){return(await q8($)).info}function QJ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function q8($){let f=M$($),J={rootPath:f,hint:GD(f)},Q;try{let Z=FD({baseDir:f});if(!await Z.checkIsRepo())return{info:J,vcsType:"none"};try{let j=await Z.getRemotes(!0);if(j.length>0){let X=j.map((H)=>{let Y=H.refs.fetch||H.refs.push;return`${H.name}: ${Y}`});J.associatedRemoteUrls=X}}catch(j){Q??=QJ(j)}try{let j=(await Z.revparse(["HEAD"])).trim();if(j.length>0)J.latestGitCommitHash=j}catch(j){Q??=QJ(j)}try{let j=(await Z.branch()).current.trim();if(j.length>0)J.latestGitBranchName=j}catch(j){Q??=QJ(j)}return{info:J,vcsType:"git",error:Q}}catch(Z){return{info:J,vcsType:"none",error:QJ(Z)}}}async function w8($){let f=await uf($);return $X(f)}async function a9($){let f=ej.now(),J=await q8($),Q=ej.now()-f,Z=J.info;return{workspaceInfo:Z,workspaceMetadata:$X(Z),durationMs:Q,vcsType:J.vcsType,initError:J.error}}class df{manifest;listeners=new Set;constructor($){this.manifest=t9.parse($??{workspaces:{}})}async addWorkspacePath($){let f=await uf($);return this.manifest=DD(this.manifest,f),this.emit({type:"workspace_added",workspace:f}),f}async switchWorkspace($){let f=M$($),J=this.manifest.workspaces[f];if(J)return this.manifest=t9.parse({...this.manifest,currentWorkspacePath:f}),this.emit({type:"workspace_switched",workspace:J}),J;let Q=await this.addWorkspacePath(f);return this.manifest=t9.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let f=M$($);return this.manifest.workspaces[f]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let f of this.listeners)f($)}}T0();import{createHash as RD}from"node:crypto";var QX=new Set,ZX=new Set;function UD($){return RD("sha256").update($).digest("hex")}function LD($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function WX($){if(!$.telemetry)return;let f=UD($.rootPath),J=$.rootCount??1;if(!QX.has(f))QX.add(f),W6($.telemetry,{root_count:J,vcs_types:LD($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!ZX.has(f)){ZX.add(f);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",j6($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:J})}}function zD($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function _D($,f,J){if(f.length>0)for(let W of f)J?.log(W.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(zD).join("; "),Z=$.length>3?`; and ${$.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${Q}${Z}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)J?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function yD($,f){let J=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!J&&!Q)return f;return{...f??{},...J?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function TD($,f){return OD($,f)}function ND($){let f=0;for(let J of $??[]){if(J.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0)?.kind==="recovery_notice")continue;f+=1}return f}function MD($){let f={...$.storedHeaders??{},...$.configHeaders??{}},J=$.accountId?.trim()||qD($.accessToken);if(f.originator="cline",f.session_id=$.sessionId,f["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)f["ChatGPT-Account-Id"]=J;return f}function qD($){let f=$?.trim();if(!f)return;let J=G0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}function wD($,f,J,Q,Z){let W=J.getProviderSettings($.providerId),j=Q||W?.modelCatalog?{...Q??{},...W?.modelCatalog??{}}:void 0,X={...W??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.providerId==="openai-codex"?MD({sessionId:f,configHeaders:$.headers,storedHeaders:W?.headers,accountId:W?.auth?.accountId,accessToken:$.apiKey??W?.auth?.accessToken??W?.apiKey}):$.headers??W?.headers,reasoning:yD($,W?.reasoning),modelCatalog:j},H=I0(X);if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let V=$.fetch??H.fetch??Z;if(V)H.fetch=V;return H}async function jX($){let{input:f,sessionId:J,providerSettingsManager:Q,defaultTelemetry:Z,defaultCapabilities:W,defaultToolPolicies:j,defaultFetch:X,onPluginEvent:H,onTeamEvent:Y,createSpawnTool:V,localRuntime:A,readSessionMetadata:B,writeSessionMetadata:K}=$,G=t$(f.config),{modelCatalogDefaults:R,userInstructionService:F,configExtensions:P,onTeamRestored:D,...O}=A??{},_=Object.keys(O).length>0?O:void 0,{workspaceInfo:L,workspaceMetadata:z,durationMs:y,vcsType:w,initError:Q0}=await a9(G),Z0=_?.extensionContext,o={...Z0??{},workspace:{...L,...Z0?.workspace??{}},session:{...Z0?.session??{},sessionId:J},logger:Z0?.logger??_?.logger,telemetry:Z0?.telemetry??_?.telemetry??Z};WX({telemetry:o.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:w,durationMs:y,initError:Q0,featureFlagEnabled:!0});let u=xf({cwd:f.config.cwd,workspacePath:G,rootSessionId:J,logger:_?.logger,workspaceInfo:L}),U0=hW(_?.hooks)?void 0:If({rootSessionId:J,workspacePath:G,workspaceInfo:L}),k$=x1([_?.hooks,U0]),d;if(TD(P,"plugins"))try{d=await hf({pluginPaths:_?.pluginPaths,workspacePath:G,cwd:f.config.cwd,onEvent:H,providerId:f.config.providerId,modelId:f.config.modelId,workspaceInfo:L,session:o.session,client:o.client,user:o.user,logger:o.logger,telemetry:o.telemetry,automation:o.automation}),_D(d.failures,d.warnings,_?.logger)}catch(T2){let p=T2 instanceof Error?T2.message:String(T2);_?.logger?.log?.(`plugin loading failed; continuing without plugins (${p})`)}let k=V9(u?[u]:void 0,V9(_?.extensions,y6(d?.extensions))),n={...f.config,..._??{},sessionId:J,hooks:k$,extensions:k,extensionContext:o,telemetry:o.telemetry},G$=wD(n,J,Q,R,X),e0=x1([n.hooks,n.checkpoint?.enabled===!0?Uj({cwd:n.cwd,sessionId:J,logger:n.logger,createCheckpoint:n.checkpoint?.createCheckpoint,initialRunCount:ND(f.initialMessages),readSessionMetadata:B,writeSessionMetadata:K}):void 0]),P1={...n,providerConfig:G$,workspaceMetadata:z,hooks:e0},Yf=f.toolPolicies??n.toolPolicies??j,y2=F0(W,f.capabilities),c4=y2?.requestToolApproval,y5=y2?.toolExecutors,Vf=new df({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:f,config:P1,providerConfig:G$,workspaceMetadata:z,workspaceInfo:L,extensions:k,hooks:e0,toolPolicies:Yf,requestToolApproval:c4,pluginSandboxShutdown:d?.shutdown,runtimeBuilderInput:{config:P1,hooks:e0,extensions:k,onTeamEvent:Y,createSpawnTool:V,onTeamRestored:D,userInstructionService:F,configExtensions:P,toolExecutors:y5,workspaceManager:Vf,logger:P1.logger,telemetry:P1.telemetry}}}import{existsSync as WJ,mkdirSync as SD,readdirSync as CD,rmdirSync as ED,rmSync as hD,unlinkSync as bD}from"node:fs";import{dirname as XX,join as ZJ}from"node:path";function s(){return new Date().toISOString()}function S8($){if(!$||!WJ($))return;try{bD($)}catch{}}function kD($){let f=_f($);if(f)return{rootSessionId:f.rootSessionId,fileStem:`${f.agentId}__${f.teamTaskId}`};let J=s2($);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:$,fileStem:$}}class s9{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return ZJ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let f=this.sessionArtifactsDir($);if(!WJ(f))SD(f,{recursive:!0});return f}sessionMessagesPath($){return ZJ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,f=!1){let J=f?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return ZJ(J,`${$}.json`)}removeSessionDirIfEmpty($){let f=this.sessionArtifactsDir($),J=this.ensureSessionsDir();while(f.startsWith(J)&&f!==J){if(!WJ(f)){f=XX(f);continue}try{if(CD(f).length>0)break;ED(f)}catch{break}f=XX(f)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!WJ($))return;try{hD($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,f,J){let{rootSessionId:Q,fileStem:Z}=kD($),W=this.sessionArtifactsDir(Q);return{messagesPath:ZJ(W,`${Z}.messages.json`)}}}import{resolveDocumentsExtensionPath as ID}from"@cline/shared/storage";T0();function HX($,f,J,Q,Z){if(J)H6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});else X6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});xD($.telemetry,{workspacePath:Q})}function xD($,f){let J=ID("Hooks"),Q=s$(f.workspacePath),Z=new Map;for(let W of Q){let j=W.hookEventName??"unknown",X=Z.get(j)??{global:0,workspace:0};if(W.path===J||W.path.startsWith(`${J}/`))X.global+=1;else X.workspace+=1;Z.set(j,X)}for(let[W,j]of Z.entries())R6($,W,j.global,j.workspace)}function YX($,f){for(let J of f.mentions)F6($,J,f.matchedFiles.includes(J)?1:0,"file",!f.matchedFiles.includes(J));for(let J of f.matchedFiles)G6($,"file",J.length);for(let J of f.ignoredMentions)P6($,"file","not_found",J)}var iA={};q(iA,{ProviderSettingsManager:()=>B$});import{chmodSync as aA,existsSync as wZ,mkdirSync as wM,readFileSync as SM,writeFileSync as CM}from"node:fs";import{basename as tA,dirname as SZ}from"node:path";import{resolveProviderSettingsPath as EM}from"@cline/shared/storage";var N={};q(N,{writeHubDiscovery:()=>hJ,writeGlobalSettings:()=>C1,withHubStartupLock:()=>bJ,verifyHubConnection:()=>W$,updateMcpServerOAuthState:()=>d1,updateLocalProvider:()=>K5,truncateNotificationBody:()=>S4,toggleDisabledTool:()=>z6,toTeamProgressLifecycleEvent:()=>j2,toProviderConfig:()=>I0,toHubHealthUrl:()=>i7,toHookConfigFileName:()=>F8,summarizeUsageFromMessages:()=>Nf,stopLocalHubServerGracefully:()=>WQ,startLocalOAuthServer:()=>a0,startHubWebSocketServer:()=>Wf,startHubServer:()=>oV,startClineDeviceAuth:()=>Q7,splitCoreSessionConfig:()=>Q4,spawnDetachedHubServerWithRetry:()=>f2,spawnDetachedHubServer:()=>e7,setTelemetryOptOutGlobally:()=>iW,setMcpServerDisabled:()=>c1,setDisabledTools:()=>D9,setDisabledPlugin:()=>sW,sendHubCommand:()=>ZV,saveLocalProviderSettings:()=>AZ,saveLocalProviderOAuthCredentials:()=>PZ,sanitizeSessionToken:()=>M1,safeParseSettings:()=>fJ,safeCreateProviderConfig:()=>n9,runSubprocessEvent:()=>V2,runHook:()=>B2,reviveTeamStateDates:()=>o4,restartLocalHubIfIdleAfterStartupTimeout:()=>xJ,resolveWorkspaceHubOwnerContext:()=>QY,resolveWorkflowsConfigSearchPaths:()=>r8,resolveSkillsConfigSearchPaths:()=>l8,resolveSharedHubOwnerContext:()=>Y0,resolveSessionBackend:()=>yQ,resolveRulesConfigSearchPaths:()=>p8,resolveProviderConfig:()=>y8,resolvePluginConfigSearchPaths:()=>B8,resolveMcpServerRegistrations:()=>Q$,resolveLocalClineAuthToken:()=>FZ,resolveHubUrl:()=>qQ,resolveHubOwnerContext:()=>w$,resolveHubEndpointOptions:()=>c0,resolveHubBuildId:()=>Y1,resolveHooksConfigSearchPaths:()=>G8,resolveDisabledToolNames:()=>n0,resolveDisabledPluginPaths:()=>H8,resolveDefaultMcpSettingsPath:()=>O0,resolveDefaultHubPort:()=>$2,resolveDefaultHubPathname:()=>o7,resolveDefaultHubHost:()=>s7,resolveCoreSelectedToolIds:()=>$6,resolveCompatibleLocalHubUrl:()=>R4,resolveClineDir:()=>eH,resolveClineDataDir:()=>G4,resolveAndLoadAgentPlugins:()=>hf,resolveAgentPluginPaths:()=>h1,requestHubShutdown:()=>D4,requestDesktopToolApproval:()=>QZ,rememberRecoverableLocalHubUrl:()=>V1,registerRemoteConfigSessionBlobUpload:()=>j5,registerMcpServersFromSettingsFile:()=>l1,registerDisposable:()=>TM,refreshProviderModelsFromSource:()=>BZ,refreshOpenAICodexToken:()=>I8,refreshOcaToken:()=>U8,refreshClineToken:()=>b8,readSessionCheckpointHistory:()=>C4,readRemoteConfigSessionBlobUploadMetadata:()=>iQ,readHubDiscovery:()=>A0,readGlobalSettings:()=>J$,probeHubServer:()=>R0,probeHubConnection:()=>QV,prewarmFileIndex:()=>r4,prewarmDetachedHubServer:()=>kJ,prepareRemoteConfigCoreIntegration:()=>aQ,parseWorkflowConfigFromMarkdown:()=>d8,parseUserCommandEnvelope:()=>yM,parseSkillConfigFromMarkdown:()=>c8,parseSettings:()=>$J,parseRuleConfigFromMarkdown:()=>u8,parseHookEventPayload:()=>A2,openaiCodexOAuthProvider:()=>H7,normalizeWorkspacePath:()=>M$,normalizeUserInput:()=>_M,normalizeSdkError:()=>zM,normalizeRuntimeCapabilities:()=>F0,normalizeProviderId:()=>vf,normalizeOpenAICodexCredentials:()=>X7,normalizeOAuthProvider:()=>KZ,normalizeHubWebSocketUrl:()=>A1,noopBasicLogger:()=>OM,migrateLegacyProviderSettings:()=>g4,mergeRulesForSystemPrompt:()=>tf,mergeAgentHooks:()=>x1,makeTeamTaskSubSessionId:()=>t2,makeSubSessionId:()=>zf,loginOpenAICodex:()=>rf,loginOcaOAuth:()=>gf,loginLocalProvider:()=>GZ,loginClineOAuth:()=>pf,loadOpenTelemetryAdapter:()=>YM,loadMcpSettingsFile:()=>v1,loadLlmsConfigFromFile:()=>NZ,loadAgentPluginsFromPathsWithDiagnostics:()=>N$,loadAgentPluginsFromPaths:()=>M6,loadAgentPluginFromPath:()=>A8,listSessionHistoryFromBackend:()=>d7,listPluginTools:()=>f4,listMcpServerOAuthStatuses:()=>e8,listLocalProviders:()=>YZ,listHookConfigFiles:()=>s$,isToolDisabledGlobally:()=>nW,isTelemetryOptedOutGlobally:()=>O6,isRuleEnabled:()=>FJ,isPluginDisabledGlobally:()=>tW,isOpenAICodexTokenExpired:()=>j7,isHubReconnectableTransportError:()=>QQ,isHubCommandTimeoutError:()=>IJ,isDiscoveryFilePresent:()=>fY,isClineAccountActionRequest:()=>jJ,isBuiltInProviderId:()=>r9,identifyAccount:()=>_$,hasMcpSettingsFile:()=>q$,getValidOpenAICodexCredentials:()=>x8,getValidOcaCredentials:()=>L8,getValidClineCredentials:()=>k8,getProviderConfigFields:()=>DZ,getProviderConfig:()=>d6,getMcpServerOAuthState:()=>u1,getLocalProviderModels:()=>VZ,getLiveModelsCatalog:()=>mf,getFileIndex:()=>D$,getCurrentContextSize:()=>G9,getCoreHeadlessToolNames:()=>a2,getCoreDefaultEnabledToolIds:()=>e4,getCoreBuiltinToolCatalog:()=>T1,getCoreAcpToolNames:()=>f6,getClineDefaultSystemPrompt:()=>AM,generateWorkspaceInfoWithDiagnostics:()=>q8,generateWorkspaceInfo:()=>uf,generateOcaOpcRequestId:()=>I6,formatRulesForSystemPrompt:()=>af,formatDisplayUserInput:()=>LM,filterExtensionToolRegistrations:()=>y6,filterDisabledTools:()=>E1,filterDisabledPluginPaths:()=>_6,fetchClineRecommendedModels:()=>yZ,executeClineAccountAction:()=>XJ,ensureHubWebSocketServer:()=>J5,ensureHubServer:()=>eV,ensureDetachedHubServer:()=>WY,ensureCustomProvidersLoaded:()=>B5,ensureCompatibleLocalHubUrl:()=>t1,enrichPromptWithMentions:()=>Kf,emptyWorkspaceManifest:()=>UM,emptyStoredProviderSettings:()=>J1,discoverPluginModulePaths:()=>K8,deriveSubsessionStatus:()=>o2,deleteLocalProvider:()=>G5,defineLlmsConfig:()=>TZ,createWorkflowsConfigDefinition:()=>a8,createUserInstructionConfigService:()=>Z1,createToolPoliciesWithPreset:()=>n4,createTool:()=>RM,createTeamName:()=>X5,createSubprocessHooks:()=>rJ,createSpawnAgentTool:()=>r$,createSkillsConfigDefinition:()=>i8,createSessionHost:()=>Y2,createRuntimeHost:()=>Y2,createRulesConfigDefinition:()=>n8,createRemoteConfigSessionMessagesArtifactUploader:()=>nQ,createProviderConfig:()=>i9,createOpenTelemetryTelemetryService:()=>w4,createOcaRequestHeaders:()=>k9,createOcaOAuthProvider:()=>b9,createOAuthClientCallbacks:()=>h8,createMcpTools:()=>ef,createLocalHubScheduleRuntimeHandlers:()=>Q5,createLlmsSdk:()=>qZ,createInitialAccumulatedUsage:()=>V0,createInMemoryHubOwnerContext:()=>$Y,createHubServerUrl:()=>t0,createHubAuthToken:()=>EJ,createHookConfigFileHooks:()=>D8,createHookConfigFileExtension:()=>xf,createHookAuditHooks:()=>If,createDisabledMcpToolPolicy:()=>$4,createDisabledMcpToolPolicies:()=>yJ,createDelegatedAgentConfigProvider:()=>Rf,createDelegatedAgent:()=>Uf,createDefaultToolsWithPreset:()=>a4,createDefaultTools:()=>d$,createDefaultMcpServerClientFactory:()=>of,createDefaultExecutors:()=>Gf,createCoreSettingsService:()=>r1,createCoreSessionSnapshot:()=>j$,createContributionRegistry:()=>DM,createContextCompactionPrepareTurn:()=>C2,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,createClineTelemetryServiceMetadata:()=>FM,createClineTelemetryServiceConfig:()=>PM,createClineOAuthProvider:()=>W7,createBuiltinTools:()=>N1,createAgentTeamsTools:()=>y1,createAgentRuntime:()=>qM,createAgentHooksExtension:()=>bf,connectToHub:()=>tJ,completeClineDeviceAuth:()=>Z7,clearPrivateModelsCatalogCache:()=>l9,clearLiveModelsCatalogCache:()=>d9,clearHubDiscovery:()=>v0,captureWorkspacePathResolved:()=>vW,captureWorkspaceInitialized:()=>W6,captureWorkspaceInitError:()=>j6,captureToolUsage:()=>A6,captureTokenUsage:()=>Y6,captureTaskRestarted:()=>H6,captureTaskCreated:()=>X6,captureTaskCompleted:()=>J8,captureSubagentExecution:()=>Z8,captureSkillUsed:()=>B6,captureSdkError:()=>GM,captureProviderApiError:()=>Q8,captureModeSwitch:()=>V6,captureMentionUsed:()=>G6,captureMentionSearchResults:()=>F6,captureMentionFailed:()=>P6,captureHookDiscovery:()=>R6,captureExtensionActivated:()=>mW,captureDiffEditFailure:()=>K6,captureConversationTurnEvent:()=>yf,captureAuthSucceeded:()=>O$,captureAuthStarted:()=>L$,captureAuthLoggedOut:()=>n$,captureAuthFailed:()=>z$,captureAgentTeamCreated:()=>D6,captureAgentCreated:()=>a$,buildWorkspaceMetadata:()=>w8,buildTeamProgressSummary:()=>W2,buildSdkErrorProperties:()=>BM,buildRemoteConfigSessionBlobUploadMetadata:()=>Z5,buildDelegatedAgentConfig:()=>z1,bootstrapAgentTeams:()=>Of,authorizeMcpServerOAuth:()=>OJ,addLocalProvider:()=>HZ,accumulateUsageTotals:()=>H0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>v8,UnifiedConfigFileWatcher:()=>g1,ToolPresets:()=>b0,TelemetryService:()=>P2,TelemetryLoggerSink:()=>q4,TEAM_TOOL_NAMES:()=>Lf,SubprocessSandbox:()=>Ef,StoredProviderSettingsSchema:()=>cf,StoredProviderSettingsEntrySchema:()=>JJ,SqliteTeamStore:()=>jf,SqliteSessionStore:()=>H$,SessionVersioningService:()=>G1,SessionVersioningError:()=>q0,SessionSource:()=>K0,SapSettingsSchema:()=>s6,SKILLS_CONFIG_DIRECTORY_NAME:()=>m8,SESSION_STATUSES:()=>e2,SDK_ERROR_TELEMETRY_EVENT:()=>NM,RpcClineAccountService:()=>E8,RemoteRuntimeHost:()=>Z2,ReasoningSettingsSchema:()=>i6,RULES_CONFIG_DIRECTORY_NAME:()=>PJ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W5,ProviderSettingsSchema:()=>$1,ProviderSettingsManager:()=>B$,ProviderProtocolSchema:()=>l6,ProviderIdSchema:()=>N8,ProviderClientSchema:()=>p6,OpenTelemetryProvider:()=>F2,OcaSettingsSchema:()=>o6,OPENAI_COMPATIBLE_PROVIDERS:()=>_8,NodeHubClient:()=>s0,NativeHubTransportAdapter:()=>k4,ModelCatalogSettingsSchema:()=>e6,LocalRuntimeHost:()=>A$,Llms:()=>VM,InMemoryWorkspaceManager:()=>df,InMemoryMcpManager:()=>p1,HubUIClient:()=>SQ,HubTransportError:()=>z0,HubSessionClient:()=>wQ,HubServerTransport:()=>U2,HubScheduleService:()=>G2,HubScheduleCommandService:()=>K2,HubRuntimeHost:()=>S$,HubCommandError:()=>J2,HookEventPayloadSchema:()=>pJ,HookEventNameSchema:()=>lJ,HookConfigFileName:()=>kf,HOOK_CONFIG_FILE_EVENT_MAP:()=>P8,HOOKS_CONFIG_DIRECTORY_NAME:()=>S6,GlobalSettingsSchema:()=>X8,GcpSettingsSchema:()=>a6,FileTeamPersistenceStore:()=>P5,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>O5,DefaultToolNames:()=>J0,DefaultRuntimeBuilder:()=>z2,DefaultLlmsSdk:()=>m4,DEFAULT_MODELS_CATALOG_URL:()=>u6,DEFAULT_HUB_PORT:()=>a7,DEFAULT_HUB_PATHNAME:()=>t7,DEFAULT_HUB_HOST:()=>n7,CoreSettingsService:()=>W1,CoreSessionService:()=>V$,ContributionRegistry:()=>KM,ClineCore:()=>N4,ClineAccountService:()=>C8,ChatViewStateSchema:()=>zZ,ChatSummarySchema:()=>L5,ChatSessionStatusSchema:()=>D5,ChatSessionConfigSchema:()=>F5,ChatMessageSchema:()=>U5,ChatMessageRoleSchema:()=>R5,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>_Z,BrowserWebSocketHubAdapter:()=>b4,BUILT_IN_PROVIDER_IDS:()=>p9,BUILT_IN_PROVIDER:()=>T8,AzureSettingsSchema:()=>t6,AwsSettingsSchema:()=>n6,AuthSettingsSchema:()=>r6,AgentTeamsRuntime:()=>$f,AgentTeam:()=>H2,Agent:()=>MM,ALL_DEFAULT_TOOL_NAMES:()=>g$});M(N,gc);import*as VM from"@cline/llms";import{buildClineSystemPrompt as AM,buildSdkErrorProperties as BM,ContributionRegistry as KM,captureSdkError as GM,createClineTelemetryServiceConfig as PM,createClineTelemetryServiceMetadata as FM,createContributionRegistry as DM,createTool as RM,emptyWorkspaceManifest as UM,formatDisplayUserInput as LM,noopBasicLogger as OM,normalizeSdkError as zM,normalizeUserInput as _M,parseUserCommandEnvelope as yM,registerDisposable as TM,SDK_ERROR_TELEMETRY_EVENT as NM}from"@cline/shared";import"@cline/shared/storage";var AX={};q(AX,{isClineAccountActionRequest:()=>jJ,executeClineAccountAction:()=>XJ,RpcClineAccountService:()=>E8,ClineAccountService:()=>C8});function gD($){if(typeof $!=="object"||$===null||!("error"in $))return;let f=$.error;return typeof f==="string"&&f.trim()?f:void 0}function VX($,f,J){let Q=gD(J);if(Q)return Q;let Z=f.trim();if(Z){let W=Z.length>200?`${Z.slice(0,200)}...`:Z;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class C8{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let f=$.apiBaseUrl.trim();if(!f)throw Error("apiBaseUrl is required");this.apiBaseUrl=f,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let f=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(f)}/balance`)}async fetchUsageTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/usages`)).items??[]}async fetchPaymentTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}`)}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}/balance`)}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId(f,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(f)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let f=$?.trim();if(f)return f;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let Z=await this.fetchMe();if(!Z.id?.trim())throw Error("Unable to resolve current user id");return Z.id}async resolveOrganizationMemberId($,f){let J=f?.trim();if(J)return J;let Z=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(Z)return Z;let j=(await this.fetchUserOrganizations()).find((X)=>X.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,f){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},Z=new AbortController,W=setTimeout(()=>Z.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:f?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...Q??{}},body:f?.body!==void 0?JSON.stringify(f.body):void 0,signal:Z.signal});if(j.status===204||f?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let X=await j.text(),H;if(X.trim())try{H=JSON.parse(X)}catch{if(!j.ok)throw Error(VX(j.status,X,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(VX(j.status,X,H));if(typeof H==="object"&&H!==null){let Y=H;if(typeof Y.success==="boolean"){if(!Y.success)throw Error(Y.error||"Cline account request failed");if(Y.data!==void 0)return Y.data}}if(H===void 0||H===null)throw Error("Cline account response payload was empty");return H}finally{clearTimeout(W)}}}function jJ($){return $.action==="clineAccount"}async function XJ($,f){switch($.operation){case"fetchMe":return f.fetchMe();case"fetchBalance":return f.fetchBalance($.userId);case"fetchUsageTransactions":return f.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return f.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return f.fetchUserOrganizations();case"fetchOrganizationBalance":return f.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return f.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await f.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return f.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class E8{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:f})}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:f,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var BX={};q(BX,{createOAuthClientCallbacks:()=>h8});function h8($){return{onAuth:({url:f,instructions:J})=>{if($.onOutput?.(J??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(f)).catch((Q)=>{$.onOpenUrlError?.({url:f,error:Q})})}catch(Q){$.onOpenUrlError?.({url:f,error:Q})}$.onOutput?.(f)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}T0();var LX={};q(LX,{startClineDeviceAuth:()=>Q7,refreshClineToken:()=>b8,loginClineOAuth:()=>pf,getValidClineCredentials:()=>k8,createClineOAuthProvider:()=>W7,completeClineDeviceAuth:()=>Z7});import{getClineEnvironmentConfig as o9}from"@cline/shared";var HJ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},FX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},e9="https://api.workos.com",mD="/auth",KX=Array.from({length:11},($,f)=>48801+f),vD=300000,cD=30000,lf=30000,uD=300,dD=5;class Q1 extends Error{status;errorCode;constructor($,f){super($);this.name="ClineOAuthTokenError",this.status=f?.status,this.errorCode=f?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function lD($){let f=Date.parse($);if(Number.isNaN(f))throw Error(`Invalid expiresAt value: ${$}`);return f}function $7($,f,J={}){let Q=$.userInfo.clineUserId??J.accountId,Z=$.refreshToken??J.refresh;if(!Z)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:Z,expires:lD($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||J.email,metadata:{provider:f,tokenType:$.tokenType,userInfo:$.userInfo}}}async function f7($){if(!$)return{};return typeof $==="function"?await $():$}function GX($,f){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return f;return Math.floor($)}async function PX($){await new Promise((f)=>setTimeout(f,$))}function J7($,f){if(!$.success||!$.data?.accessToken)throw Error(f);return $.data}async function DX($,f){let J=await fetch(w1(e9,FX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(f?.requestTimeoutMs??lf)}),Q=await J.json().catch(()=>({}));if(!J.ok)throw new Q1(`Device authorization failed: ${J.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:J.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:GX(Q.expires_in,uD),pollIntervalSeconds:GX(Q.interval,dD)}}async function RX($){let f=Date.now()+$.expiresInSeconds*1000,J=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=f){let Q=await fetch(w1($.workosApiBaseUrl,FX.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),Z=await Q.json().catch(()=>({}));if(Q.ok){if(!Z.access_token||!Z.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:Z.access_token,refreshToken:Z.refresh_token,tokenType:Z.token_type??"Bearer"}}switch(Z.error){case"authorization_pending":{await PX(J*1000);break}case"slow_down":{J+=1,await PX(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new Q1(Z.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:Z.error});default:throw new Q1(`WorkOS token polling failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function UX($,f,J){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},Z=await fetch(w1(f.apiBaseUrl,HJ.register),{method:"POST",headers:{"Content-Type":"application/json",...await f7(f.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(f.requestTimeoutMs??lf)});if(!Z.ok){let j=await Z.text().catch(()=>""),X=qf(j);throw new Q1(`Token registration failed: ${Z.status}${X.message?` - ${X.message}`:""}`,{status:Z.status,errorCode:X.code})}let W=await Z.json();return $7(J7(W,"Invalid token exchange response"),J??f.provider)}async function pD($,f,J,Q){let Z={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:f,provider:Q??J.provider},W=await fetch(w1(J.apiBaseUrl,HJ.token),{method:"POST",headers:{"Content-Type":"application/json",...await f7(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??lf)});if(!W.ok){let X=await W.text().catch(()=>""),H=qf(X);throw new Q1(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let j=await W.json();return $7(J7(j,"Invalid token exchange response"),Q??J.provider)}async function pf($){L$($.telemetry,$.provider??"cline");let f=$.useWorkOSDeviceAuth??!0,J=$.callbackPorts?.length?$.callbackPorts:KX,Q=$.callbackPath??mD,Z=f?null:await a0({ports:J,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),W=Z?.callbackUrl||`http://127.0.0.1:${J[0]??KX[0]}${Q}`;try{let j;if(f){let X=o9().workOsClientId,H=await DX(X,$);$.callbacks.onAuth({url:H.verificationUriComplete??H.verificationUri,instructions:`Enter this code in your browser: ${H.userCode}`});let Y=await RX({clientId:X,deviceCode:H.deviceCode,expiresInSeconds:H.expiresInSeconds,initialPollIntervalSeconds:H.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??lf,workosApiBaseUrl:e9,onProgress:$.callbacks.onProgress});j=await UX(Y,$,$.provider)}else{let X=new URL(w1($.apiBaseUrl,HJ.authorize));X.searchParams.set("client_type","extension"),X.searchParams.set("callback_url",W),X.searchParams.set("redirect_uri",W),$.callbacks.onAuth({url:X.toString(),instructions:"Continue the authentication process in your browser."});let H,Y=$.provider,V=await wf({waitForCallback:Z?.waitForCallback??(async()=>null),cancelWait:Z?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(V.error)throw Error(`OAuth error: ${V.error}`);if(H=V.code,Y=V.provider??Y,!H){let A=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=Mf(A,{includeProvider:!0});H=B.code,Y=B.provider??Y}if(!H)throw Error("Missing authorization code");j=await pD(H,W,$,Y)}return O$($.telemetry,$.provider??"cline"),_$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw z$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j)),j}finally{Z?.close()}}async function Q7($){return await DX(o9().workOsClientId,$)}async function Z7($){let f=$.provider??"cline";L$($.telemetry,f);try{let J=await RX({clientId:o9().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??lf,workosApiBaseUrl:e9}),Q=await UX(J,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return O$($.telemetry,f),_$($.telemetry,{id:Q.accountId,email:Q.email,provider:f}),Q}catch(J){throw z$($.telemetry,f,J instanceof Error?J.message:String(J)),J}}async function b8($,f){let J=await fetch(w1(f.apiBaseUrl,HJ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await f7(f.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(f.requestTimeoutMs??lf)});if(!J.ok){let W=await J.text().catch(()=>""),j=qf(W);throw new Q1(`Token refresh failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let Q=await J.json(),Z=$.metadata?.provider??f.provider;return $7(J7(Q,"Invalid token refresh response"),Z,$)}async function k8($,f,J){if(!$)return null;let Q=J?.refreshBufferMs??vD,Z=J?.retryableTokenGraceMs??cD;if(J?.forceRefresh!==!0&&!S1($,Q))return $;try{return await b8($,f)}catch(j){if(j instanceof Q1&&j.isLikelyInvalidGrant())return n$(f.telemetry,f.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function W7($){return{id:"cline",name:"Cline Account",usesCallbackServer:!($.useWorkOSDeviceAuth??!0),async login(f){return pf({...$,callbacks:f})},async refreshToken(f){return b8(f,$)},getApiKey(f){return`workos:${f.access}`}}}T0();var _X={};q(_X,{refreshOpenAICodexToken:()=>I8,openaiCodexOAuthProvider:()=>H7,normalizeOpenAICodexCredentials:()=>X7,loginOpenAICodex:()=>rf,isOpenAICodexTokenExpired:()=>j7,getValidOpenAICodexCredentials:()=>x8,OPENAI_CODEX_OAUTH_CONFIG:()=>e});import{nanoid as rD}from"nanoid";var e={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class YJ extends Error{status;errorCode;constructor($,f){super($);this.name="OpenAICodexOAuthTokenError",this.status=f?.status,this.errorCode=f?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function iD($,f,J=e.redirectUri){let Q=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:$,code_verifier:f,redirect_uri:J}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let Z=await Q.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}async function nD($){try{let f=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:e.clientId}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!f.ok){let Q=await f.text().catch(()=>""),Z=qf(Q);throw new YJ(`Token refresh failed: ${f.status}${Z.message?` - ${Z.message}`:""}`,{status:f.status,errorCode:Z.code})}let J=await f.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}catch(f){if(f instanceof YJ)throw f;return{type:"failed"}}}async function aD($="pi"){let{verifier:f,challenge:J}=await U6(),Q=rD(32),Z=new URL(e.authorizationEndpoint);return Z.searchParams.set("response_type","code"),Z.searchParams.set("client_id",e.clientId),Z.searchParams.set("redirect_uri",e.redirectUri),Z.searchParams.set("scope",e.scopes),Z.searchParams.set("code_challenge",J),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("state",Q),Z.searchParams.set("id_token_add_organizations","true"),Z.searchParams.set("codex_cli_simplified_flow","true"),Z.searchParams.set("originator",$),{verifier:f,state:Q,url:Z.toString()}}function tD(){try{let $=new URL(e.redirectUri),f=$.port.length>0?Number.parseInt($.port,10):e.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(f)?f:e.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:e.callbackPort,callbackPath:"/auth/callback",redirectUri:e.redirectUri}}}function OX($,f){let J=f?G0(f):G0($),Q=J?J:G0($),W=Q?.[e.jwtClaimPath]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.organizations;if(Array.isArray(j)&&j.length>0){let H=j[0];if(typeof H?.id==="string"&&H.id.length>0)return H.id}let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return null}function zX($,f){let J=OX($.access,$.idToken)??f?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||f?.refresh||"",expires:$.expires,accountId:J,email:$.email??f?.email,metadata:{...f?.metadata??{},provider:"openai-codex"}}}async function rf($){L$($.telemetry,"openai-codex");let f=tD(),{verifier:J,state:Q,url:Z}=await aD($.originator),W=await a0({host:f.host,ports:[f.port],callbackPath:f.callbackPath,expectedState:Q});$.onAuth({url:Z,instructions:"Continue the authentication process in your browser."});let j;try{let X=await wf({waitForCallback:W.waitForCallback,cancelWait:W.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(X.state&&X.state!==Q)throw Error("State mismatch");if(j=X.code,!j){let V=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=Mf(V,{allowHashCodeState:!0});if(A.state&&A.state!==Q)throw Error("State mismatch");j=A.code}if(!j)throw Error("Missing authorization code");let H=await iD(j,J,f.redirectUri);if(H.type!=="success")throw Error("Token exchange failed");let Y=zX(H);return O$($.telemetry,"openai-codex"),_$($.telemetry,{id:Y.accountId,email:Y.email,provider:"openai-codex"}),Y}catch(X){throw z$($.telemetry,"openai-codex",X instanceof Error?X.message:String(X)),X}finally{W.close()}}async function I8($,f){let J=await nD($);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=zX(J,f);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function x8($,f){if(!$)return null;let J=f?.refreshBufferMs??e.refreshBufferMs,Q=f?.retryableTokenGraceMs??e.retryableTokenGraceMs;if(f?.forceRefresh!==!0&&!S1($,J))return $;try{return await I8($.refresh,$)}catch(W){if(W instanceof YJ&&W.isLikelyInvalidGrant())return n$(f?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}function j7($,f=e.refreshBufferMs){return S1($,f)}function X7($){let f=$.accountId??OX($.access);if(!f)throw Error("Failed to extract accountId from token");return{...$,accountId:f,metadata:{...$.metadata??{},provider:"openai-codex"}}}var H7={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login($){return rf({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput})},async refreshToken($){return I8($.refresh,$)},getApiKey($){return $.access}};var nY={};q(nY,{ClineCore:()=>N4});function yX($){if($===!0)return{};if(!$)return;return $}function TX($){if($==="user")return"global";return $}class Y7{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let f=this.getService().ingestEvent($);return{event:f.event,duplicate:f.duplicate,matchedSpecIds:f.matchedSpecs.map((J)=>J.specId),queuedRuns:f.queuedRuns,suppressions:f.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function NX($){let{host:f}=$;return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||K0.CLI,interactive:!1,config:{providerId:vf(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:eD(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content),delivery:Q.delivery});if(!Z)throw Error("ClineCore automation runtime returned no result");return{result:oD(Z)}},async abortSession(J){return await f.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}function VJ($){let f=sD($.automationService,$.automation),J=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),Z=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!f&&!J&&!Q&&!Z&&!W)return $.context;return{...$.context??{},...J?{client:J}:{},...Q?{user:Q}:{},...Z?{logger:Z}:{},...W?{telemetry:W}:{},...f?{automation:f}:{}}}function sD($,f){if(!$)return;return{ingestEvent:(J)=>{f.ingestEvent(J)}}}function oD($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function eD($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var BH={};q(BH,{createCoreSettingsService:()=>r1,CoreSettingsService:()=>W1});import{existsSync as TJ}from"node:fs";import{basename as YH,isAbsolute as KU,relative as GU}from"node:path";var vX={};q(vX,{resolveWorkflowsConfigSearchPaths:()=>r8,resolveSkillsConfigSearchPaths:()=>l8,resolveRulesConfigSearchPaths:()=>p8,parseWorkflowConfigFromMarkdown:()=>d8,parseSkillConfigFromMarkdown:()=>c8,parseRuleConfigFromMarkdown:()=>u8,createWorkflowsConfigDefinition:()=>a8,createUserInstructionConfigService:()=>Z1,createSkillsConfigDefinition:()=>i8,createRulesConfigDefinition:()=>n8,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>v8,UnifiedConfigFileWatcher:()=>g1,SKILLS_CONFIG_DIRECTORY_NAME:()=>m8,RULES_CONFIG_DIRECTORY_NAME:()=>PJ});import{createHash as $R}from"node:crypto";import{watch as fR}from"node:fs";import{readdir as JR,readFile as QR}from"node:fs/promises";import{join as ZR}from"node:path";function WR($){return $R("sha1").update($).digest("hex")}function wX($){return Boolean($&&typeof $==="object"&&"code"in $)}function MX($){return wX($)&&$.code==="ENOENT"}function qX($){return wX($)&&($.code==="EACCES"||$.code==="EPERM")}class g1{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,f){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=f?.debounceMs??75,this.emitParseErrors=f?.emitParseErrors??!1;for(let J of $){if(this.definitionsByType.has(J.type))throw Error(`Duplicate unified config definition type '${J.type}'.`);this.definitionsByType.set(J.type,J),this.recordsByType.set(J.type,new Map),this.discoveredDirectoriesByType.set(J.type,new Set);for(let Q of J.directories){let Z=this.baseTypesByDirectory.get(Q);if(Z)Z.add(J.type);else this.baseTypesByDirectory.set(Q,new Set([J.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let f=this.definitionsByType.get($);if(!f)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(f)})}getSnapshot($){let f=this.recordsByType.get($);return new Map([...f?.entries()??[]].map(([J,Q])=>[J,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[f,J]of this.recordsByType.entries())$.set(f,new Map([...J.entries()].map(([Q,Z])=>[Q,{...Z}])));return $}emit($){for(let f of this.listeners)f($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[f,J]of this.watchersByDirectory.entries()){if($.has(f))continue;J.close(),this.watchersByDirectory.delete(f)}this.watchedTypesByDirectory=$;for(let f of $.keys()){if(this.watchersByDirectory.has(f))continue;try{let J=fR(f,()=>{let Q=this.watchedTypesByDirectory.get(f);if(!Q)return;for(let Z of Q)this.pendingTypes.add(Z);this.scheduleFlush()});this.watchersByDirectory.set(f,J),J.on("error",(Q)=>{let Z=this.watchedTypesByDirectory.get(f);if(!Z)return;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:f})})}catch(J){if(!MX(J)&&!qX(J)){let Q=$.get(f);if(!Q)continue;for(let Z of Q)this.emit({kind:"error",type:Z,error:J,filePath:f})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let f of $){let J=this.definitionsByType.get(f);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal($){let{records:f,discoveredDirectories:J}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[Z,W]of Q.entries()){if(f.has(Z))continue;this.emit({kind:"remove",type:$.type,id:Z,filePath:W.filePath})}for(let[Z,W]of f.entries()){let j=Q.get(Z);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:Z,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,f),this.discoveredDirectoriesByType.set($.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let f=new Map,J=new Set;for(let Q of $.directories){J.add(Q);let Z=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let W of Z){let{fileName:j,filePath:X}=W;if(J.add(W.directoryPath),$.includeFile&&!$.includeFile(j,X))continue;try{let H=await QR(X,"utf8"),Y={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:X,content:H},V=$.parseFile(Y),A=$.resolveId(V,Y).trim();if(!A)continue;f.set(A,{type:$.type,id:A,item:V,filePath:X,fingerprint:WR(H)})}catch(H){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:H,filePath:X})}}}return{records:f,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let $=new Map;for(let[f,J]of this.baseTypesByDirectory.entries())$.set(f,new Set(J));for(let[f,J]of this.discoveredDirectoriesByType.entries())for(let Q of J){let Z=$.get(Q);if(Z)Z.add(f);else $.set(Q,new Set([f]))}return $}async readDirectoryFileCandidates($){try{return(await JR($,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:$,fileName:J.name,filePath:ZR($,J.name)})).sort((J,Q)=>J.fileName.localeCompare(Q.fileName))}catch(f){if(MX(f)||qX(f))return[];throw f}}}import{readdir as V7,readFile as jR,stat as SX}from"node:fs/promises";import{basename as m1,dirname as XR,extname as A7,join as N0}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as PJ,resolveRulesConfigSearchPaths as HR,resolveSkillsConfigSearchPaths as YR,resolveWorkflowsConfigSearchPaths as VR,SKILLS_CONFIG_DIRECTORY_NAME as m8,WORKFLOWS_CONFIG_DIRECTORY_NAME as v8}from"@cline/shared/storage";import AR from"yaml";var AJ="SKILL.md",BR="managed.json",KR=new Set([".md",".markdown",".txt"]);function B7($){return $.trim().toLowerCase()}function g8($){let f=$;return f?.code==="ENOENT"||f?.code==="EACCES"||f?.code==="EPERM"}function BJ($){return KR.has(A7($).toLowerCase())}async function K7($){try{let f=await V7($,{withFileTypes:!0}),J=[];for(let Q of f){if(!Q.isDirectory())continue;let Z=N0($,Q.name),W=N0(Z,BR);try{let j=await jR(W,"utf8"),X=JSON.parse(j);if(X&&typeof X==="object")J.push(Z)}catch(j){if(g8(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return J.sort((Q,Z)=>Q.localeCompare(Z))}catch(f){if(g8(f))return[];throw f}}function G7($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J;try{let W=AR.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}catch(W){let j=W instanceof Error?W.message:String(W);return{data:{},body:$,hadFrontmatter:!0,parseError:j}}}function KJ($,f,J){if($===void 0||$===null){if(J)throw Error(`Missing required frontmatter field '${f}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${f}' must be a string.`);let Q=$.trim();if(!Q&&J)throw Error(`Frontmatter field '${f}' cannot be empty.`);return Q||void 0}function nf($,f){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${f}' must be a boolean.`);return $}function c8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in skill file.");let X=KJ(J.name,"name",!1)??f.trim();if(!X)throw Error("Missing skill name.");return{name:X,description:KJ(J.description,"description",!1),disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function u8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=KJ(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function d8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=KJ(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function l8($){return YR($)}function p8($){return HR($)}function r8($){return VR($)}async function CX($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>CX(N0(Q,m8))))).flat()}try{let f=await V7($,{withFileTypes:!0}),J=[];for(let Q of f){if(Q.isFile()&&Q.name===AJ){J.push({directoryPath:$,fileName:Q.name,filePath:N0($,Q.name)});continue}if(Q.isDirectory())J.push({directoryPath:N0($,Q.name),fileName:AJ,filePath:N0($,Q.name,AJ)})}return J}catch(f){if(g8(f))return[];throw f}}async function GJ($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>GJ(N0(Q,"rules.md"))))).flat()}try{if((await SX($)).isFile())return[{directoryPath:XR($),fileName:m1($),filePath:$}]}catch(f){if(!g8(f))throw f}try{let J=(await V7($,{withFileTypes:!0})).filter((Z)=>Z.isFile()&&BJ(Z.name)).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:N0($,Z.name)})),Q=N0($,"AGENTS.md");try{if((await SX(Q)).isFile()){if(!J.some((j)=>j.fileName==="AGENTS.md"))J.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return J}catch(f){if(g8(f))return[];throw f}}async function GR($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>GJ(N0(Q,v8))))).flat()}return GJ($)}function i8($){let f=$?.directories??l8($?.workspacePath),J=$?.workspacePath?N0($.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...f,J]:f,discoverFiles:CX,includeFile:(Q)=>Q===AJ,parseFile:(Q)=>c8(Q.content,m1(Q.directoryPath)),resolveId:(Q)=>B7(Q.name)}}function n8($){let f=$?.directories??p8($?.workspacePath),J=$?.workspacePath?N0($.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...f,J]:f,discoverFiles:GJ,includeFile:(Q,Z)=>Q===".clinerules"||BJ(Q)||BJ(Z),parseFile:(Q)=>u8(Q.content,m1(Q.filePath,A7(Q.filePath))),resolveId:(Q)=>B7(Q.name)}}function a8($){let f=$?.directories??r8($?.workspacePath),J=$?.workspacePath?N0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...f,J]:f,discoverFiles:GR,includeFile:(Q)=>BJ(Q),parseFile:(Q)=>d8(Q.content,m1(Q.filePath,A7(Q.filePath))),resolveId:(Q)=>B7(Q.name)}}function EX($){let f=[i8($?.skills),n8($?.rules),a8($?.workflows)];return new g1(f,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as hX}from"@cline/shared";function PR($,f){if($.description?.trim())return hX($.description,".");if(f==="workflow")return;return hX($.instructions,".")}function FR($){return $.disabled!==!0}function bX($,f){return[...$.getSnapshot(f).entries()].map(([J,Q])=>({id:J,record:Q})).filter(({record:J})=>FR(J.item)).map(({id:J,record:Q})=>({id:J,name:Q.item.name,instructions:Q.item.instructions,description:PR(Q.item,f),kind:f})).sort((J,Q)=>J.name.localeCompare(Q.name))}function t8($){let f=new Map;for(let J of[...bX($,"workflow"),...bX($,"skill")])if(!f.has(J.name))f.set(J.name,J);return[...f.values()].sort((J,Q)=>J.name.localeCompare(Q.name))}function kX($,f){if(!$.startsWith("/")||$.length<2)return $;let J=$.match(/^\/(\S+)/);if(!J)return $;let Q=J[1];if(!Q)return $;let Z=Q.length+1,W=$.slice(Z),j=t8(f).find((X)=>X.name===Q);return j?`${j.instructions}${W}`:$}var xX={};q(xX,{mergeRulesForSystemPrompt:()=>tf,loadRulesForSystemPromptFromWatcher:()=>P7,listEnabledRulesFromWatcher:()=>IX,isRuleEnabled:()=>FJ,formatRulesForSystemPrompt:()=>af});function FJ($){return $.disabled!==!0}function af($){if($.length===0)return"";return`
183
185
 
184
186
  # Rules
185
- ${f.map((J)=>`## ${J.name}
187
+ ${$.map((J)=>`## ${J.name}
186
188
  ${J.instructions}`).join(`
187
189
 
188
- `)}`}function c1(f,$){let J=f?.trim(),W=$?.trim();if(J&&W)return`${J}
190
+ `)}`}function tf($,f){let J=$?.trim(),Q=f?.trim();if(J&&Q)return`${J}
189
191
 
190
- ${W}`;return J||W||void 0}function Vj(f){return[...f.getSnapshot("rule").values()].map((J)=>J.item).filter(QJ).sort((J,W)=>J.name.localeCompare(W.name))}function tW(f){return u1(Vj(f))}function ZJ(f){return f.trim().replace(/^\/+/,"").toLowerCase()}function qy(f){if(!f||f.length===0)return;let $=f.map(ZJ).filter((J)=>J.length>0);return $.length>0?new Set($):void 0}function wy(f,$,J){if(!J)return!0;let W=ZJ(f),H=ZJ($),Q=W.includes(":")?W.split(":").at(-1)??W:W,Z=H.includes(":")?H.split(":").at(-1)??H:H;return J.has(W)||J.has(H)||J.has(Q)||J.has(Z)}function d8(f,$){let J=qy($);return[...f.getSnapshot("skill").entries()].map(([H,Q])=>{let Z=Q.item;return{id:H,name:Z.name.trim(),description:Z.description?.trim(),disabled:Z.disabled===!0,skill:Z}}).filter((H)=>wy(H.id,H.name,J))}function by(f,$){return d8(f,$).filter((J)=>!J.disabled).map((J)=>J.name.trim()).filter((J)=>J.length>0).sort((J,W)=>J.localeCompare(W))}function Cy(f,$,J){let W=ZJ($);if(!W)return{error:"Missing skill name."};let H=d8(f,J),Q=H.find((P)=>P.id===W);if(Q){let{skill:P}=Q;if(P.disabled===!0)return{error:`Skill "${P.name}" is configured but disabled.`};return{id:Q.id,skill:P}}let Z=W.includes(":")?W.split(":").at(-1)??W:W,j=H.filter(({id:P})=>{if(P===Z)return!0;return P.endsWith(`:${Z}`)}),X=j.filter(({skill:P})=>P.disabled!==!0);if(X.length===1){let{id:P,skill:B}=X[0];return{id:P,skill:B}}if(X.length>1)return{error:`Skill "${$}" is ambiguous. Use one of: ${X.map(({id:P})=>P).join(", ")}`};if(j.length===1){let{skill:P}=j[0];return{error:`Skill "${P.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${$}" is ambiguous, and all matches are disabled: ${j.map(({id:P})=>P).join(", ")}`};let A=by(f,J);return{error:A.length>0?`Skill "${$}" not found. Available skills: ${A.join(", ")}`:"No skills are currently available."}}function Ey(f,$=Promise.resolve(),J){let W=new Set,H=async(Q,Z)=>{await $;let j=Cy(f,Q,J);if("error"in j)return j.error;let{id:X,skill:A}=j;if(W.has(X))return`Skill "${A.name}" is already running.`;W.add(X);try{let P=Z?.trim(),B=P?`
191
- <command-args>${P}</command-args>`:"",Y=A.description?.trim()?`Description: ${A.description.trim()}
192
+ ${Q}`;return J||Q||void 0}function IX($){return[...$.getSnapshot("rule").values()].map((J)=>J.item).filter(FJ).sort((J,Q)=>J.name.localeCompare(Q.name))}function P7($){return af(IX($))}function DJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function DR($){if(!$||$.length===0)return;let f=$.map(DJ).filter((J)=>J.length>0);return f.length>0?new Set(f):void 0}function RR($,f,J){if(!J)return!0;let Q=DJ($),Z=DJ(f),W=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=Z.includes(":")?Z.split(":").at(-1)??Z:Z;return J.has(Q)||J.has(Z)||J.has(W)||J.has(j)}function s8($,f){let J=DR(f);return[...$.getSnapshot("skill").entries()].map(([Z,W])=>{let j=W.item;return{id:Z,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((Z)=>RR(Z.id,Z.name,J))}function UR($,f){return s8($,f).filter((J)=>!J.disabled).map((J)=>J.name.trim()).filter((J)=>J.length>0).sort((J,Q)=>J.localeCompare(Q))}function LR($,f,J){let Q=DJ(f);if(!Q)return{error:"Missing skill name."};let Z=s8($,J),W=Z.find((V)=>V.id===Q);if(W){let{skill:V}=W;if(V.disabled===!0)return{error:`Skill "${V.name}" is configured but disabled.`};return{id:W.id,skill:V}}let j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=Z.filter(({id:V})=>{if(V===j)return!0;return V.endsWith(`:${j}`)}),H=X.filter(({skill:V})=>V.disabled!==!0);if(H.length===1){let{id:V,skill:A}=H[0];return{id:V,skill:A}}if(H.length>1)return{error:`Skill "${f}" is ambiguous. Use one of: ${H.map(({id:V})=>V).join(", ")}`};if(X.length===1){let{skill:V}=X[0];return{error:`Skill "${V.name}" is configured but disabled.`}}if(X.length>1)return{error:`Skill "${f}" is ambiguous, and all matches are disabled: ${X.map(({id:V})=>V).join(", ")}`};let Y=UR($,J);return{error:Y.length>0?`Skill "${f}" not found. Available skills: ${Y.join(", ")}`:"No skills are currently available."}}function OR($,f=Promise.resolve(),J){let Q=new Set,Z=async(W,j)=>{await f;let X=LR($,W,J);if("error"in X)return X.error;let{id:H,skill:Y}=X;if(Q.has(H))return`Skill "${Y.name}" is already running.`;Q.add(H);try{let V=j?.trim(),A=V?`
193
+ <command-args>${V}</command-args>`:"",B=Y.description?.trim()?`Description: ${Y.description.trim()}
192
194
 
193
- `:"";return`<command-name>${A.name}</command-name>${B}
195
+ `:"";return`<command-name>${Y.name}</command-name>${A}
194
196
  <command-instructions>
195
- ${Y}${A.instructions}
196
- </command-instructions>`}finally{W.delete(X)}};return Object.defineProperty(H,"configuredSkills",{get:()=>d8(f,J).map(({skill:Q,...Z})=>Z),enumerable:!0,configurable:!1}),H}function Fj(f){let $=f.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[f.includeRules?"rules":void 0,f.registerSkillsTool?"tools":void 0,f.includeSkills||f.includeWorkflows?"commands":void 0].filter((W)=>Boolean(W))},async setup(W){if(await $,f.includeRules)W.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>tW(f.watcher)});if(f.registerSkillsTool)W.registerTool(K$(Ey(f.watcher,$,f.allowedSkillNames)));for(let H of c8(f.watcher).filter((Q)=>Q.kind==="skill"&&f.includeSkills||Q.kind==="workflow"&&f.includeWorkflows))W.registerCommand({name:H.name,description:H.description,handler:(Q)=>{let Z=Q.trim();return Z?`${H.instructions}
197
+ ${B}${Y.instructions}
198
+ </command-instructions>`}finally{Q.delete(H)}};return Object.defineProperty(Z,"configuredSkills",{get:()=>s8($,J).map(({skill:W,...j})=>j),enumerable:!0,configurable:!1}),Z}function gX($){let f=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Q)=>Boolean(Q))},async setup(Q){if(await f,$.includeRules)Q.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>P7($.watcher)});if($.registerSkillsTool)Q.registerTool(R1(OR($.watcher,f,$.allowedSkillNames)));for(let Z of t8($.watcher).filter((W)=>W.kind==="skill"&&$.includeSkills||W.kind==="workflow"&&$.includeWorkflows))Q.registerCommand({name:Z.name,description:Z.description,handler:(W)=>{let j=W.trim();return j?`${Z.instructions}
197
199
 
198
- ${Z}`:H.instructions}})}}}class Kj{watcher;ready;stopped=!1;constructor(f){this.watcher=Aj(f)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType(f){await this.start(),await this.watcher.refreshType(f)}listRecords(f){return[...this.watcher.getSnapshot(f).entries()].map(([$,J])=>({type:f,id:$,filePath:J.filePath,item:J.item}))}listRuntimeCommands(){return c8(this.watcher)}resolveRuntimeSlashCommand(f){return Yj(f,this.watcher)}hasConfiguredSkills(f){return d8(this.watcher,f).length>0}createExtension(f){return Fj({...f,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function $$(f){return new Kj(f)}import{readFile as Sy,writeFile as ky}from"node:fs/promises";import Gj from"yaml";function Iy(f){let $=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=f.match($);if(!J)return{data:{},body:f,hadFrontmatter:!1};let[,W,H]=J,Q=Gj.parse(W);return{data:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{},body:H,hadFrontmatter:!0}}function Uj(f,$){return`---
199
- ${Gj.stringify(f).trimEnd()}
200
+ ${j}`:Z.instructions}})}}}class mX{watcher;ready;stopped=!1;constructor($){this.watcher=EX($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([f,J])=>({type:$,id:f,filePath:J.filePath,item:J.item}))}listRuntimeCommands(){return t8(this.watcher)}resolveRuntimeSlashCommand($){return kX($,this.watcher)}hasConfiguredSkills($){return s8(this.watcher,$).length>0}createExtension($){return gX({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function Z1($){return new mX($)}import{readFile as zR,writeFile as _R}from"node:fs/promises";import uX from"yaml";function yR($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J,W=uX.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}function cX($,f){return`---
201
+ ${uX.stringify($).trimEnd()}
200
202
  ---
201
- ${$}`}function my(f,$){let{data:J,body:W,hadFrontmatter:H}=Iy(f);if(!H&&$)return f;if($){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return W;return Uj(J,W)}return J.disabled=!0,Uj(J,W)}async function Tj({filePath:f,enabled:$}){let J=await Sy(f,"utf8"),W=my(J,$);return await ky(f,W),{filePath:f,enabled:$,disabled:!$}}M0();var Dj={};N(Dj,{listPluginTools:()=>r8});M0();function xy(f,$){if(!f.setup)return[];let J=[],W={registerTool:(H)=>J.push(H),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return f.setup(W,{workspaceInfo:$}),J}async function r8(f){let $=b$({workspacePath:f.workspacePath,cwd:f.cwd}),J=nf(f.disabledToolNames),W=[];for(let H of $){let Q=await L0([H],{cwd:f.cwd,providerId:f.providerId,modelId:f.modelId});for(let Z of Q.plugins)for(let j of xy(Z,{rootPath:f.workspacePath}))W.push({name:j.name,pluginName:Z.name,path:H,source:H.startsWith(f.workspacePath)?"workspace-plugin":"global-plugin",enabled:!J.has(j.name),description:j.description?.trim()||void 0})}return W.sort((H,Q)=>{let Z=H.name.localeCompare(Q.name);if(Z!==0)return Z;return H.path.localeCompare(Q.path)})}function oW(f,$){if(!$)return"global";let J=vy($,f);return!J.startsWith("..")&&!gy(J)?"workspace":"global"}function jJ(f){return[...f].sort(($,J)=>{let W=(H)=>{switch(H){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if($.source!==J.source)return W($.source)-W(J.source);return $.name.localeCompare(J.name)})}function Lj(f){return f.workspaceRoot?.trim()||f.cwd?.trim()||""}async function Mj(f,$){if(f.userInstructionService)return await $(f.userInstructionService);let J=Lj(f);if(!J)return await $(void 0);let W=$$({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await W.start(),await $(W)}finally{W.stop()}}function uy(f,$){if(!f)return;let J=f.listRecords("skill");if($.id){let W=J.find((H)=>H.id===$.id);if(W)return W}for(let W of J)if(W.filePath===$.path||W.item.name===$.name||W.id===$.name)return W;return}class J${async list(f={}){return await Mj(f,async($)=>{let J=Lj(f),W=[],H=[],Q=[],Z=[];if($){for(let j of $.listRecords("workflow")){let X=j.item;W.push({id:j.id,name:X.name,path:j.filePath,enabled:X.disabled!==!0,kind:"workflow",source:oW(j.filePath,J),description:X.instructions,toggleable:!1})}for(let j of $.listRecords("rule")){let X=j.item;H.push({id:j.id,name:X.name,path:j.filePath,enabled:X.disabled!==!0,kind:"rule",source:oW(j.filePath,J),description:X.instructions,toggleable:!1})}for(let j of $.listRecords("skill")){let X=j.item;Q.push({id:j.id,name:X.name,path:j.filePath,enabled:X.disabled!==!0,kind:"skill",source:oW(j.filePath,J),description:X.description,toggleable:!0})}}if(J)try{for(let j of await r8({workspacePath:J,cwd:f.cwd,providerId:f.availabilityContext?.providerId,modelId:f.availabilityContext?.modelId}))Z.push({id:`${j.pluginName}:${j.name}:${j.path}`,name:j.name,path:j.path,enabled:j.enabled,kind:"tool",source:j.source,description:j.description,toggleable:!0})}catch{}return{workflows:jJ(W.filter((j)=>sW(j.path))),rules:jJ(H.filter((j)=>sW(j.path))),skills:jJ(Q.filter((j)=>sW(j.path))),tools:jJ(Z)}})}async toggle(f){if(f.type==="skills")return await Mj(f,async($)=>{let J=uy($,f),W=J?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${f.id??f.name??_j(f.path??"")}'.`);let H=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,Q=f.enabled??(H!==void 0?!H:void 0);if(Q===void 0)throw Error(`Cannot determine toggle state for skill '${f.id??f.name??_j(f.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await Tj({filePath:W,enabled:Q}),await $?.refreshType("skill"),{snapshot:await this.list({...f,userInstructionService:$}),changedTypes:["skills"]}});if(f.type==="tools"){if(!f.name?.trim())throw Error("Tool settings toggle requires a tool name.");if(f.enabled===void 0)Y6(f.name);else O7(f.name,!f.enabled);return{snapshot:await this.list(f),changedTypes:["tools"]}}throw Error(`Settings type '${f.type}' does not support toggles.`)}}function x$(){return new J$}function Oj(f){return{async list($){let J=f;if(J.listSettings)return await J.listSettings($);return await x$().list($)},async toggle($){let J=f;if(J.toggleSetting)return await J.toggleSetting($);return await x$().toggle($)}}}function zj(f){function $(){let J=f.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return $().list(J)},update(J){return $().update(J)},delete(J){return $().delete(J)}}}var Nj={};N(Nj,{splitCoreSessionConfig:()=>l8});function l8(f){let{hooks:$,logger:J,telemetry:W,extensionContext:H,extraTools:Q,extensions:Z,onTeamEvent:j,onConsecutiveMistakeLimitReached:X,checkpoint:A,compaction:P,...B}=f,Y={};if($)Y.hooks=$;if(J)Y.logger=J;if(W)Y.telemetry=W;if(H)Y.extensionContext=H;if(Q)Y.extraTools=Q;if(Z)Y.extensions=Z;if(j)Y.onTeamEvent=j;if(X)Y.onConsecutiveMistakeLimitReached=X;if(A?.createCheckpoint)Y.checkpoint=A;if(P?.compact)Y.compaction=P;let V=Object.keys(Y).length>0?Y:void 0;return{config:{...B,...A?{checkpoint:{enabled:A.enabled}}:{},...P?{compaction:{enabled:P.enabled,strategy:P.strategy,thresholdRatio:P.thresholdRatio,reserveTokens:P.reserveTokens,preserveRecentTokens:P.preserveRecentTokens,contextWindowTokens:P.contextWindowTokens,summarizer:P.summarizer}}:{}},...V?{localRuntime:V}:{}}}function qj(f){let $=f.config;return"providerId"in $?{...f,config:{...$,...cy(f.localRuntime)},localRuntime:f.localRuntime}:f}function eW(f,$={}){let J=l8(f.config),W=Kf($.defaultCapabilities,f.capabilities),H=dy(J.localRuntime,f.localRuntime),Q=$.withExtensionContext?.(H?.extensionContext);if(Q)H={...H??{},extensionContext:Q};return{...f,...J,...H?{localRuntime:H}:{},...W?{capabilities:W}:{}}}function cy(f){if(!f)return{};let{modelCatalogDefaults:$,userInstructionService:J,configExtensions:W,onTeamRestored:H,...Q}=f;return Q}function dy(...f){let $={};for(let J of f)if(J)Object.assign($,J);return Object.keys($).length>0?$:void 0}Lf();function wj(f){let $=f.input.config.telemetry??f.telemetry;if(!$)return;$.capture({event:v.SESSION.STARTED,properties:{sessionId:f.sessionId,source:f.input.source??Vf.CORE,providerId:f.input.config.providerId,modelId:f.input.config.modelId,enableTools:f.input.config.enableTools,enableSpawnAgent:f.input.config.enableSpawnAgent,enableAgentTeams:f.input.config.enableAgentTeams,clientName:f.clientName,runtimeAddress:f.runtimeAddress}})}function p8(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function f9(f){let $=f?.trim();return $?$:void 0}function ry(f,$){let J=f?.trim();if(!J)return $;let W=Date.parse(J);if(!Number.isFinite(W))return $;return new Date(W).toISOString()}function bj(f,$){return new Date(new Date(f).getTime()+Math.max(0,Math.floor($))*1000).toISOString()}function Cj(f,$){return new Date(new Date(f).getTime()-Math.max(0,Math.floor($))*1000).toISOString()}function ly(f,$){if(!f)return $;return new Date(f).getTime()>=new Date($).getTime()?f:$}function py(f,$){let J=f.eventId.trim(),W=f.eventType.trim(),H=f.source.trim(),Q=f9(f.subject),Z=f9(f.dedupeKey)??`${W}:${H}:${Q??J}`;return{eventId:J,eventType:W,source:H,subject:Q,occurredAt:ry(f.occurredAt,$),workspaceRoot:f9(f.workspaceRoot),payload:p8(f.payload)?f.payload:void 0,attributes:p8(f.attributes)?f.attributes:void 0,dedupeKey:Z}}function $9(f,$){if(!$)return;let J=$.split("."),W=f;for(let H of J){if(!p8(W))return;W=W[H]}return W}function iy(f,$){if(f.attributes&&Object.hasOwn(f.attributes,$))return f.attributes[$];if(f.payload&&Object.hasOwn(f.payload,$))return f.payload[$];let J={eventId:f.eventId,eventType:f.eventType,source:f.source,subject:f.subject,occurredAt:f.occurredAt,workspaceRoot:f.workspaceRoot,dedupeKey:f.dedupeKey,attributes:f.attributes,payload:f.payload},W=$9(J,$);if(W!==void 0)return W;if(f.attributes){let H=$9(f.attributes,$);if(H!==void 0)return H}if(f.payload)return $9(f.payload,$);return}function XJ(f,$){if(Array.isArray($))return $.some((J)=>XJ(f,J));if(Array.isArray(f))return f.some((J)=>XJ(J,$));if(p8($)){if(!p8(f))return!1;return Object.entries($).every(([J,W])=>XJ(f[J],W))}return Object.is(f,$)}function ny(f,$){if(!$||Object.keys($).length===0)return!0;return Object.entries($).every(([J,W])=>XJ(iy(f,J),W))}class J9{store;nowFn;logger;constructor(f){this.store=f.store,this.nowFn=f.now??(()=>Date.now()),this.logger=f.logger}ingestEvent(f){let $=new Date(this.nowFn()).toISOString(),J=py(f,$),W=this.store.insertEventLog(J,{receivedAtIso:$});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let H=this.store.listEventSpecsForType(J.eventType),Q=[],Z=[],j=[];for(let P of H){if(!ny(J,P.filters)){Q.push({specId:P.specId,externalId:P.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}Z.push(P);let B=this.materializeForSpec(P,J,W.record.receivedAt);if(B.run)j.push(B.run);else Q.push({specId:P.specId,externalId:P.externalId,reason:B.reason,dedupeKey:J.dedupeKey})}let X=Z.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:X,matchedSpecCount:Z.length,queuedRunCount:j.length,suppressedCount:Q.filter((P)=>P.reason!=="filter_mismatch").length});let A=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:X,matchedSpecCount:Z.length,queuedRunCount:j.length}),{event:A??W.record,duplicate:!1,matchedSpecs:Z,queuedRuns:j,suppressions:Q}}catch(H){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:H instanceof Error?H.message:String(H)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:H});throw H}}materializeForSpec(f,$,J){let W=$.dedupeKey??$.eventId,H=f.debounceSeconds??0;if(H>0){let X=this.store.findQueuedEventRunForDedupe({specId:f.specId,dedupeKey:W});if(X){let A=ly(X.scheduledFor,bj(J,H)),P=this.store.updateQueuedEventRunForDebounce({runId:X.runId,triggerEventId:$.eventId,scheduledFor:A});if(P)return{run:P,reason:"dedupe_window"}}}let Q=f.dedupeWindowSeconds??0;if(Q>0&&this.store.hasRecentEventRunForDedupe({specId:f.specId,dedupeKey:W,sinceIso:Cj(J,Q)}))return{reason:"dedupe_window"};let Z=f.cooldownSeconds??0;if(Z>0&&this.store.hasRecentEventRunForSpec({specId:f.specId,sinceIso:Cj(J,Z)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:f.specId,specRevision:f.revision,triggerKind:"event",triggerEventId:$.eventId,scheduledFor:H>0?bj(J,H):J}),reason:"dedupe_window"}}}class i8{store;nowFn;constructor(f){this.store=f.store,this.nowFn=f.now??(()=>Date.now())}materializeAll(){let f={oneOffQueued:0,scheduleQueued:0},$=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of $)if(this.materializeOneOff(W))f.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of J)try{if(this.materializeSchedule(W))f.scheduleQueued+=1}catch{}return f}materializeOneOff(f){if(f.triggerKind!=="one_off")return!1;if(!f.enabled||f.removed)return!1;if(this.store.hasOneOffRunForRevision(f.specId,f.revision))return!1;return this.store.enqueueRun({specId:f.specId,specRevision:f.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule(f){if(f.triggerKind!=="schedule")return!1;if(!f.enabled||f.removed)return!1;if(!f.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:f.specId,nowMs:this.nowFn()}).queued}}import{basename as $U}from"node:path";import{buildClineSystemPrompt as JU}from"@cline/shared";import{nowIso as Ej}from"@cline/shared/db";import{mkdirSync as ay,writeFileSync as ty}from"node:fs";import{join as sy}from"node:path";import{resolveCronReportsDir as oy}from"@cline/shared/storage";function W$(f){if(/[:#\n]/.test(f)||f.includes('"'))return JSON.stringify(f);return f}function g$(f,$){if($===void 0||$===null)return;return`${f}: ${W$($)}`}function ey(f,$,J){let W=[`runId: ${W$(f.runId)}`,`specId: ${W$($.specId)}`,`externalId: ${W$($.externalId)}`,`title: ${W$($.title)}`,`triggerKind: ${W$(f.triggerKind)}`,`status: ${W$(f.status)}`,`sourcePath: ${W$($.sourcePath)}`],H=[g$("sessionId",f.sessionId),g$("startedAt",f.startedAt),g$("completedAt",f.completedAt),g$("triggerEventId",f.triggerEventId),g$("triggerEventType",J?.eventType),g$("triggerEventSource",J?.source),g$("triggerEventSubject",J?.subject)];for(let Q of H)if(Q)W.push(Q);return`---
202
- ${W.join(`
203
+ ${f}`}function TR($,f){let{data:J,body:Q,hadFrontmatter:Z}=yR($);if(!Z&&f)return $;if(f){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return Q;return cX(J,Q)}return J.disabled=!0,cX(J,Q)}async function dX({filePath:$,enabled:f}){let J=await zR($,"utf8"),Q=TR(J,f);return await _R($,Q),{filePath:$,enabled:f,disabled:!f}}var XH={};q(XH,{updateMcpServerOAuthState:()=>d1,setMcpServerDisabled:()=>c1,resolveMcpServerRegistrations:()=>Q$,resolveDefaultMcpSettingsPath:()=>O0,registerMcpServersFromSettingsFile:()=>l1,loadMcpSettingsFile:()=>v1,listMcpServerOAuthStatuses:()=>e8,hasMcpSettingsFile:()=>q$,getMcpServerOAuthState:()=>u1,createMcpTools:()=>ef,createDisabledMcpToolPolicy:()=>$4,createDisabledMcpToolPolicies:()=>yJ,createDefaultMcpServerClientFactory:()=>of,authorizeMcpServerOAuth:()=>OJ,InMemoryMcpManager:()=>p1});import{spawn as oR}from"node:child_process";import{StringDecoder as JH}from"node:string_decoder";import{UnauthorizedError as oX}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as eR}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as uR}from"node:crypto";import{UnauthorizedError as dR}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as lR}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as pR}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as rR}from"@modelcontextprotocol/sdk/client/streamableHttp.js";RJ();var iR="/mcp/oauth/callback",nR=[1456,1457,1458],aR=300000;function tR($){if($ instanceof Error){let f=$.message.trim();if(f.length>0)return f}return String($)}function sR($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function LJ($){let f={};try{f=u1($.serverName,{filePath:$.settingsPath})??{}}catch{f={}}let J,Q,Z=async(j)=>{let X=sf(j(f))??{};try{f=d1($.serverName,()=>X,{filePath:$.settingsPath})}catch{f=X}};return{provider:{get redirectUrl(){return f.redirectUrl??$.redirectUrl},get clientMetadata(){return sR(f.redirectUrl??$.redirectUrl)},state:()=>{return Q=uR(),Q},clientInformation:()=>f.clientInformation,saveClientInformation:async(j)=>{await Z((X)=>({...X,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>f.tokens,saveTokens:async(j)=>{await Z((X)=>({...X,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(j)=>{J=j.toString(),await $.onAuthorizationUrl?.(J)},saveCodeVerifier:async(j)=>{await Z((X)=>({...X,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!f.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return f.codeVerifier},invalidateCredentials:async(j)=>{await Z((X)=>{if(j==="all")return{lastError:X.lastError,redirectUrl:X.redirectUrl};return{...X,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await Z((X)=>({...X,discoveryState:j}))},discoveryState:()=>f.discoveryState},getLastAuthorizationUrl:()=>J,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await Z((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await Z((X)=>({...X,lastError:j}))},clearError:async()=>{await Z((j)=>({...j,lastError:void 0}))}}}function UJ($){let f=$.registration.transport;if(f.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let J=f.headers?{headers:f.headers}:void 0;if(f.type==="sse")return new pR(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch});return new rR(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch})}function sX($){return new lR({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function OJ($){let f=$.serverName.trim();if(!f)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:J}=await Promise.resolve().then(() => (RJ(),tX)),Q=J({filePath:$.filePath}).find((H)=>H.name===f);if(!Q)throw Error(`MCP server "${f}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${f}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${f}" uses stdio transport and does not support OAuth browser flow.`);let Z=await a0({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:nR,callbackPath:$.callbackPath??iR,timeoutMs:$.timeoutMs??aR,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!Z.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let W=LJ({settingsPath:$.filePath,serverName:f,redirectUrl:Z.callbackUrl,onAuthorizationUrl:async(H)=>{await $.openUrl?.(H)}});await W.resetInteractiveState();let j=sX($),X;try{let H=UJ({registration:Q,oauthProvider:W.provider,fetch:$.fetch});try{return await j.connect(H),await j.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" is already authorized.`}}catch(Y){if(!(Y instanceof dR))throw Y;if(!W.getLastAuthorizationUrl())throw Error(`MCP server "${f}" did not provide an authorization URL.`);let A=await Z.waitForCallback();if(!A)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(A.error)throw Error(`OAuth authorization failed: ${A.error}`);if(!A.code)throw Error("OAuth callback did not include an authorization code.");let B=W.getLastOAuthState();if(!B)throw Error(`MCP server "${f}" did not start an OAuth stateful authorization flow.`);if(A.state!==B)throw Error("OAuth authorization failed: state mismatch.");await H.finishAuth(A.code),X=sX($);let K=UJ({registration:Q,oauthProvider:W.provider,fetch:$.fetch});return await X.connect(K),await X.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" OAuth authorization completed.`}}}catch(H){let Y=tR(H);throw await W.markError(Y),Error(Y)}finally{await j.close().catch(()=>{return}),await X?.close().catch(()=>{return}),Z.close()}}var $U="2024-11-05",fU=5000,JU=1500,eX="http://127.0.0.1:1456/mcp/oauth/callback";function zJ($){return $ instanceof Error?$.message:String($)}function $H($){let f=Buffer.from(JSON.stringify($),"utf8"),J=Buffer.from(`Content-Length: ${f.byteLength}\r
204
+ \r
205
+ `,"utf8");return Buffer.concat([J,f])}function fH($){return Buffer.from(`${JSON.stringify($)}
206
+ `,"utf8")}class U7{buffer="";decoder=new JH("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`\r
207
+ \r
208
+ `);if(J<0)break;let Z=this.buffer.slice(0,J).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!Z)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let W=Number.parseInt(Z[1],10),j=J+4,X=j+W;if(this.buffer.length<X)break;f.push(this.buffer.slice(j,X)),this.buffer=this.buffer.slice(X)}return f}}class L7{buffer="";decoder=new JH("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`
209
+ `);if(J<0)break;let Q=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),Q.length>0)f.push(Q)}return f}}class QH{registration;process;nextRequestId=1;pending=new Map;framedParser=new U7;newlineParser=new L7;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],f;for(let J of $){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:$U,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},JU),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(Q){f=Q instanceof Error?Q:Error(String(Q))}}throw f??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((f)=>typeof f?.name==="string"&&typeof f.inputSchema==="object"&&f.inputSchema!==null).map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let f=this.registration.transport;if(f.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${f.type}`);this.framedParser=new U7,this.newlineParser=new L7,this.stderrBuffer="",this.protocolMode=$;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=oR(f.command,f.args??[],{cwd:f.cwd,env:{...process.env,...f.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=Q,Q.stdout.on("data",(Z)=>this.handleStdout(Z)),Q.stderr.on("data",(Z)=>{if(this.process!==Q)return;if(this.stderrBuffer+=Z.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(Z)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${zJ(Z)}`))}),Q.once("exit",(Z,W)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${Z??"null"}, signal=${W??"null"}).${j}`))})}handleStdout($){try{let f=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let J of f){let Q=JSON.parse(J);if(typeof Q.id!=="number")continue;let Z=this.pending.get(Q.id);if(!Z)continue;if(this.pending.delete(Q.id),clearTimeout(Z.timeout),Q.error){let W=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;Z.reject(Error(W));continue}Z.resolve(Q.result)}}catch(f){this.handleProtocolFailure(f)}}handleProtocolFailure($){let f=this.process;if(!f)return;this.connected=!1,this.process=void 0;let J=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${zJ($)}.${J}`)),f.kill()}async request($,f,J=fU){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let Z=this.nextRequestId++,W={jsonrpc:"2.0",id:Z,method:$,...f?{params:f}:{}},j=new Promise((X,H)=>{let Y=setTimeout(()=>{this.pending.delete(Z),H(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},J);this.pending.set(Z,{resolve:X,reject:H,timeout:Y})});try{Q.stdin.write(this.protocolMode==="framed"?$H(W):fH(W))}catch(X){let H=this.pending.get(Z);if(H)clearTimeout(H.timeout),this.pending.delete(Z);throw X}return j}notify($,f){let J=this.process;if(!J?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...f?{params:f}:{}};J.stdin.write(this.protocolMode==="framed"?$H(Q):fH(Q))}failAllPending($){for(let[f,J]of this.pending)clearTimeout(J.timeout),this.pending.delete(f),J.reject($)}}class ZH{registration;options;client;authContext;constructor($,f){this.registration=$;this.options=f}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=LJ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eX});this.authContext=$;try{let f=new eR({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),J=UJ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await f.connect(J),await $.clearError(),this.client=f}catch(f){let J=f instanceof oX?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):zJ(f);throw await $.markError(J),Error(J)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema&&typeof J.inputSchema==="object"&&!Array.isArray(J.inputSchema)?J.inputSchema:{}}))}catch(f){return await this.handleOperationError(f)}}async callTool($){let f=await this.ensureConnectedClient();try{return await f.callTool({name:$.name,arguments:$.arguments??{}})}catch(J){return await this.handleOperationError(J)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let f=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${f} Run authorizeMcpServerOAuth for this server.`;return`${f} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let f=this.authContext??LJ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eX}),J=$ instanceof oX?this.formatUnauthorizedMessage(f.getLastAuthorizationUrl()):zJ($);throw await f.markError(J),Error(J)}}function of($={}){return(f)=>f.transport.type==="stdio"?new QH(f):new ZH(f,$)}RJ();function x0(){return Date.now()}function QU($){return $.map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}class p1{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let f=this.servers.get($.name);if(!f){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:x0()});return}let J=JSON.stringify(f.registration.transport)!==JSON.stringify($.transport);if(f.registration={...$},f.updatedAt=x0(),J)await this.disconnectState(f),f.client=void 0,f.toolCache=void 0,f.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.connectState(f)})}async disconnectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f)})}async setServerDisabled($,f){await this.runExclusive($,async()=>{let J=this.requireServer($);if(J.registration={...J.registration,disabled:f},J.updatedAt=x0(),f)await this.disconnectState(J)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,f)=>$.name.localeCompare(f.name))}async listTools($){let f=this.requireServer($),J=f.toolCacheUpdatedAt??0;if(f.toolCache&&x0()-J<=this.toolsCacheTtlMs)return f.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let f=this.requireServer($),Q=await(await this.ensureConnectedClient(f)).listTools(),Z=QU(Q);return f.toolCache=Z,f.toolCacheUpdatedAt=x0(),f.updatedAt=x0(),Z})}async callTool($){return this.runExclusive($.serverName,async()=>{let f=this.requireServer($.serverName),J=await this.ensureConnectedClient(f);return f.updatedAt=x0(),J.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let f of $)await this.unregisterServer(f)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=x0();try{let f=$.client??await this.clientFactory($.registration);await f.connect(),$.client=f,$.status="connected",$.lastError=void 0,$.updatedAt=x0()}catch(f){throw $.status="disconnected",$.lastError=f instanceof Error?f.message:String(f),$.updatedAt=x0(),f}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=x0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=x0()}}requireServer($){let f=this.servers.get($);if(!f)throw Error(`Unknown MCP server: ${$}`);return f}async runExclusive($,f){let J=this.operationLocks.get($)??Promise.resolve(),Q,Z=new Promise((j)=>{Q=j}),W=J.catch(()=>{return}).then(()=>Z);this.operationLocks.set($,W),await J.catch(()=>{return});try{return await f()}finally{if(Q?.(),this.operationLocks.get($)===W)this.operationLocks.delete($)}}}import{createHash as ZU}from"node:crypto";var WH=128,WU=/[^a-zA-Z0-9_-]+/g,jH=8,jU=1,XU="mcp_tool";function HU($){return ZU("sha1").update($).digest("hex").slice(0,jH)}function YU($){return $.replace(WU,"_")}var _J=({serverName:$,toolName:f})=>{let J=`${$}__${f}`,Q=YU(J);if(Q===J&&J.length<=WH)return J;let Z=HU(J),W=WH-jU-jH;return`${Q.slice(0,W)||XU}_${Z}`};function $4($){return{[($.nameTransform??_J)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function yJ($){let f={};for(let J of $.toolNames)Object.assign(f,$4({serverName:$.serverName,toolName:J,nameTransform:$.nameTransform}));return f}import{createTool as VU}from"@cline/shared";function AU($,f){let J=f.description?.trim();if(J)return J;return`Execute MCP tool "${f.name}" from server "${$}".`}async function ef($){let f=await $.provider.listTools($.serverName),J=$.nameTransform??_J;return f.map((Q)=>{let Z=J({serverName:$.serverName,toolName:Q.name});return VU({name:Z,description:AU($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(W,j)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:W&&typeof W==="object"&&!Array.isArray(W)?W:void 0,context:j})})})}T$();var HH={};q(HH,{listPluginTools:()=>f4});T$();function BU($,f){if(!$.setup)return[];let J=[],Q={registerTool:(Z)=>J.push(Z),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return $.setup(Q,{workspaceInfo:f}),J}async function f4($){let f=h1({workspacePath:$.workspacePath,cwd:$.cwd}),J=n0($.disabledToolNames),Q=[];for(let Z of f){let W=await N$([Z],{cwd:$.cwd,providerId:$.providerId,modelId:$.modelId});for(let j of W.plugins)for(let X of BU(j,{rootPath:$.workspacePath}))Q.push({name:X.name,pluginName:j.name,path:Z,source:Z.startsWith($.workspacePath)?"workspace-plugin":"global-plugin",enabled:!J.has(X.name),description:X.description?.trim()||void 0})}return Q.sort((Z,W)=>{let j=Z.name.localeCompare(W.name);if(j!==0)return j;return Z.path.localeCompare(W.path)})}function NJ($,f){if(!f)return"global";let J=GU(f,$);return!J.startsWith("..")&&!KU(J)?"workspace":"global"}function J4($){return[...$].sort((f,J)=>{let Q=(Z)=>{switch(Z){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(f.source!==J.source)return Q(f.source)-Q(J.source);return f.name.localeCompare(J.name)})}function AH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function VH($,f){if($.userInstructionService)return await f($.userInstructionService);let J=AH($);if(!J)return await f(void 0);let Q=Z1({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await Q.start(),await f(Q)}finally{Q.stop()}}function PU($,f){if(!$)return;let J=$.listRecords("skill");if(f.id){let Q=J.find((Z)=>Z.id===f.id);if(Q)return Q}for(let Q of J)if(Q.filePath===f.path||Q.item.name===f.name||Q.id===f.name)return Q;return}class W1{async list($={}){return await VH($,async(f)=>{let J=AH($),Q=[],Z=[],W=[],j=[],X=[];if(f){for(let Y of f.listRecords("workflow")){let V=Y.item;Q.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"workflow",source:NJ(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("rule")){let V=Y.item;Z.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"rule",source:NJ(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("skill")){let V=Y.item;W.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"skill",source:NJ(Y.filePath,J),description:V.description,toggleable:!0})}}if(J)try{for(let Y of await f4({workspacePath:J,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${Y.pluginName}:${Y.name}:${Y.path}`,name:Y.name,path:Y.path,enabled:Y.enabled,kind:"tool",source:Y.source,description:Y.description,toggleable:!0})}catch{}let H=O0();if(q$({filePath:H}))try{for(let Y of Q$({filePath:H}))X.push({id:Y.name,name:Y.name,path:H,enabled:Y.disabled!==!0,kind:"mcp",source:NJ(H,J),description:Y.transport.type,toggleable:!0})}catch{}return{workflows:J4(Q.filter((Y)=>TJ(Y.path))),rules:J4(Z.filter((Y)=>TJ(Y.path))),skills:J4(W.filter((Y)=>TJ(Y.path))),tools:J4(j),mcp:J4(X.filter((Y)=>TJ(Y.path)))}})}async toggle($){if($.type==="skills")return await VH($,async(f)=>{let J=PU(f,$),Q=J?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??YH($.path??"")}'.`);let Z=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,W=$.enabled??(Z!==void 0?!Z:void 0);if(W===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??YH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await dX({filePath:Q,enabled:W}),await f?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:f}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)z6($.name);else aW($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let f=$.name?.trim()||$.id?.trim();if(!f)throw Error("MCP server settings toggle requires a server name.");let J=$.path?.trim()||O0(),Q=$.enabled;if(Q===void 0){let Z=Q$({filePath:J}).find((W)=>W.name===f);if(!Z)throw Error(`Unknown MCP server: ${f}`);Q=Z.disabled===!0}return c1({filePath:J,name:f,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function r1(){return new W1}function KH($){return{async list(f){let J=$;if(J.listSettings)return await J.listSettings(f);return await r1().list(f)},async toggle(f){let J=$;if(J.toggleSetting)return await J.toggleSetting(f);return await r1().toggle(f)}}}function GH($){function f(){let J=$.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return f().list(J)},update(J){return f().update(J)},delete(J){return f().delete(J)}}}var PH={};q(PH,{splitCoreSessionConfig:()=>Q4});function Q4($){let{hooks:f,logger:J,telemetry:Q,extensionContext:Z,extraTools:W,extensions:j,onTeamEvent:X,onConsecutiveMistakeLimitReached:H,checkpoint:Y,compaction:V,...A}=$,B={};if(f)B.hooks=f;if(J)B.logger=J;if(Q)B.telemetry=Q;if(Z)B.extensionContext=Z;if(W)B.extraTools=W;if(j)B.extensions=j;if(X)B.onTeamEvent=X;if(H)B.onConsecutiveMistakeLimitReached=H;if(Y?.createCheckpoint)B.checkpoint=Y;if(V?.compact)B.compaction=V;let K=Object.keys(B).length>0?B:void 0;return{config:{...A,...Y?{checkpoint:{enabled:Y.enabled}}:{},...V?{compaction:{enabled:V.enabled,strategy:V.strategy,thresholdRatio:V.thresholdRatio,reserveTokens:V.reserveTokens,preserveRecentTokens:V.preserveRecentTokens,maxInputTokens:V.maxInputTokens,summarizer:V.summarizer}}:{}},...K?{localRuntime:K}:{}}}function FH($){let f=$.config;return"providerId"in f?{...$,config:{...f,...FU($.localRuntime)},localRuntime:$.localRuntime}:$}function O7($,f={}){let J=Q4($.config),Q=F0(f.defaultCapabilities,$.capabilities),Z=DU(J.localRuntime,$.localRuntime),W=f.withExtensionContext?.(Z?.extensionContext);if(W)Z={...Z??{},extensionContext:W};return{...$,...J,...Z?{localRuntime:Z}:{},...Q?{capabilities:Q}:{}}}function FU($){if(!$)return{};let{modelCatalogDefaults:f,userInstructionService:J,configExtensions:Q,onTeamRestored:Z,...W}=$;return W}function DU(...$){let f={};for(let J of $)if(J)Object.assign(f,J);return Object.keys(f).length>0?f:void 0}T0();function DH($){let f=$.input.config.telemetry??$.telemetry;if(!f)return;f.capture({event:v.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??K0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function Z4($){return!!$&&typeof $==="object"&&!Array.isArray($)}function z7($){let f=$?.trim();return f?f:void 0}function RU($,f){let J=$?.trim();if(!J)return f;let Q=Date.parse(J);if(!Number.isFinite(Q))return f;return new Date(Q).toISOString()}function RH($,f){return new Date(new Date($).getTime()+Math.max(0,Math.floor(f))*1000).toISOString()}function UH($,f){return new Date(new Date($).getTime()-Math.max(0,Math.floor(f))*1000).toISOString()}function UU($,f){if(!$)return f;return new Date($).getTime()>=new Date(f).getTime()?$:f}function LU($,f){let J=$.eventId.trim(),Q=$.eventType.trim(),Z=$.source.trim(),W=z7($.subject),j=z7($.dedupeKey)??`${Q}:${Z}:${W??J}`;return{eventId:J,eventType:Q,source:Z,subject:W,occurredAt:RU($.occurredAt,f),workspaceRoot:z7($.workspaceRoot),payload:Z4($.payload)?$.payload:void 0,attributes:Z4($.attributes)?$.attributes:void 0,dedupeKey:j}}function _7($,f){if(!f)return;let J=f.split("."),Q=$;for(let Z of J){if(!Z4(Q))return;Q=Q[Z]}return Q}function OU($,f){if($.attributes&&Object.hasOwn($.attributes,f))return $.attributes[f];if($.payload&&Object.hasOwn($.payload,f))return $.payload[f];let J={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=_7(J,f);if(Q!==void 0)return Q;if($.attributes){let Z=_7($.attributes,f);if(Z!==void 0)return Z}if($.payload)return _7($.payload,f);return}function MJ($,f){if(Array.isArray(f))return f.some((J)=>MJ($,J));if(Array.isArray($))return $.some((J)=>MJ(J,f));if(Z4(f)){if(!Z4($))return!1;return Object.entries(f).every(([J,Q])=>MJ($[J],Q))}return Object.is($,f)}function zU($,f){if(!f||Object.keys(f).length===0)return!0;return Object.entries(f).every(([J,Q])=>MJ(OU($,J),Q))}class y7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let f=new Date(this.nowFn()).toISOString(),J=LU($,f),Q=this.store.insertEventLog(J,{receivedAtIso:f});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let Z=this.store.listEventSpecsForType(J.eventType),W=[],j=[],X=[];for(let V of Z){if(!zU(J,V.filters)){W.push({specId:V.specId,externalId:V.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}j.push(V);let A=this.materializeForSpec(V,J,Q.record.receivedAt);if(A.run)X.push(A.run);else W.push({specId:V.specId,externalId:V.externalId,reason:A.reason,dedupeKey:J.dedupeKey})}let H=j.length===0?"unmatched":X.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:H,matchedSpecCount:j.length,queuedRunCount:X.length,suppressedCount:W.filter((V)=>V.reason!=="filter_mismatch").length});let Y=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:H,matchedSpecCount:j.length,queuedRunCount:X.length}),{event:Y??Q.record,duplicate:!1,matchedSpecs:j,queuedRuns:X,suppressions:W}}catch(Z){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:Z instanceof Error?Z.message:String(Z)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:Z});throw Z}}materializeForSpec($,f,J){let Q=f.dedupeKey??f.eventId,Z=$.debounceSeconds??0;if(Z>0){let H=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(H){let Y=UU(H.scheduledFor,RH(J,Z)),V=this.store.updateQueuedEventRunForDebounce({runId:H.runId,triggerEventId:f.eventId,scheduledFor:Y});if(V)return{run:V,reason:"dedupe_window"}}}let W=$.dedupeWindowSeconds??0;if(W>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:UH(J,W)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:UH(J,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:f.eventId,scheduledFor:Z>0?RH(J,Z):J}),reason:"dedupe_window"}}}class W4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},f=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of f)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of J)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as wU}from"node:path";import{buildClineSystemPrompt as SU}from"@cline/shared";import{nowIso as LH}from"@cline/shared/db";import{mkdirSync as _U,writeFileSync as yU}from"node:fs";import{join as TU}from"node:path";import{resolveCronReportsDir as NU}from"@cline/shared/storage";function j1($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function i1($,f){if(f===void 0||f===null)return;return`${$}: ${j1(f)}`}function MU($,f,J){let Q=[`runId: ${j1($.runId)}`,`specId: ${j1(f.specId)}`,`externalId: ${j1(f.externalId)}`,`title: ${j1(f.title)}`,`triggerKind: ${j1($.triggerKind)}`,`status: ${j1($.status)}`,`sourcePath: ${j1(f.sourcePath)}`],Z=[i1("sessionId",$.sessionId),i1("startedAt",$.startedAt),i1("completedAt",$.completedAt),i1("triggerEventId",$.triggerEventId),i1("triggerEventType",J?.eventType),i1("triggerEventSource",J?.source),i1("triggerEventSubject",J?.subject)];for(let W of Z)if(W)Q.push(W);return`---
210
+ ${Q.join(`
203
211
  `)}
204
212
  ---
205
- `}function fU(f){let $=[];if(f.triggerEvent){let J=f.triggerEvent,W=[`- eventId: ${J.eventId}`,`- eventType: ${J.eventType}`,`- source: ${J.source}`,J.subject?`- subject: ${J.subject}`:"",`- occurredAt: ${J.occurredAt}`,J.dedupeKey?`- dedupeKey: ${J.dedupeKey}`:"",J.attributes?`- attributes: ${JSON.stringify(J.attributes)}`:""].filter((H)=>H.length>0);$.push(`## Trigger Event
213
+ `}function qU($){let f=[];if($.triggerEvent){let J=$.triggerEvent,Q=[`- eventId: ${J.eventId}`,`- eventType: ${J.eventType}`,`- source: ${J.source}`,J.subject?`- subject: ${J.subject}`:"",`- occurredAt: ${J.occurredAt}`,J.dedupeKey?`- dedupeKey: ${J.dedupeKey}`:"",J.attributes?`- attributes: ${JSON.stringify(J.attributes)}`:""].filter((Z)=>Z.length>0);f.push(`## Trigger Event
206
214
 
207
- ${W.join(`
215
+ ${Q.join(`
208
216
  `)}
209
- `)}if(f.error)$.push(`## Error
217
+ `)}if($.error)f.push(`## Error
210
218
 
211
- ${f.error}
212
- `);if(f.finalText&&f.finalText.trim().length>0)$.push(`## Summary
219
+ ${$.error}
220
+ `);if($.finalText&&$.finalText.trim().length>0)f.push(`## Summary
213
221
 
214
- ${f.finalText.trim()}
215
- `);if(f.usage){let J=f.usage,W=[J.inputTokens!==void 0?`- inputTokens: ${J.inputTokens}`:"",J.outputTokens!==void 0?`- outputTokens: ${J.outputTokens}`:"",J.cacheReadTokens!==void 0?`- cacheReadTokens: ${J.cacheReadTokens}`:"",J.cacheWriteTokens!==void 0?`- cacheWriteTokens: ${J.cacheWriteTokens}`:"",J.totalCost!==void 0?`- totalCostUsd: ${J.totalCost}`:"",f.durationMs!==void 0?`- durationMs: ${f.durationMs}`:""].filter((H)=>H.length>0);if(W.length>0)$.push(`## Usage
222
+ ${$.finalText.trim()}
223
+ `);if($.usage){let J=$.usage,Q=[J.inputTokens!==void 0?`- inputTokens: ${J.inputTokens}`:"",J.outputTokens!==void 0?`- outputTokens: ${J.outputTokens}`:"",J.cacheReadTokens!==void 0?`- cacheReadTokens: ${J.cacheReadTokens}`:"",J.cacheWriteTokens!==void 0?`- cacheWriteTokens: ${J.cacheWriteTokens}`:"",J.totalCost!==void 0?`- totalCostUsd: ${J.totalCost}`:"",$.durationMs!==void 0?`- durationMs: ${$.durationMs}`:""].filter((Z)=>Z.length>0);if(Q.length>0)f.push(`## Usage
216
224
 
217
- ${W.join(`
225
+ ${Q.join(`
218
226
  `)}
219
- `)}if(f.toolCalls&&f.toolCalls.length>0){let J=f.toolCalls.map((W)=>{let H=[`- ${W.name}`];if(W.durationMs!==void 0)H.push(`(${W.durationMs}ms)`);if(W.error)H.push(`error: ${W.error}`);return H.join(" ")});$.push(`## Tool Calls
227
+ `)}if($.toolCalls&&$.toolCalls.length>0){let J=$.toolCalls.map((Q)=>{let Z=[`- ${Q.name}`];if(Q.durationMs!==void 0)Z.push(`(${Q.durationMs}ms)`);if(Q.error)Z.push(`error: ${Q.error}`);return Z.join(" ")});f.push(`## Tool Calls
220
228
 
221
229
  ${J.join(`
222
230
  `)}
223
- `)}return $.join(`
224
- `)}function W9(f){let $=oy(f.specs);ay($,{recursive:!0});let J=sy($,`${f.run.runId}.md`),W=`${ey(f.run,f.spec,f.data.triggerEvent)}
225
- ${fU(f.data)}`;return ty(J,W,"utf8"),J}class H9{globalMaxConcurrency;activeExecutions=new Map;constructor(f){this.globalMaxConcurrency=Math.max(1,Math.floor(f))}acquire(f,$,J){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(J)),H=this.activeExecutions.get(f)??new Set;if(H.size>=W)return!1;return H.add($),this.activeExecutions.set(f,H),!0}release(f,$){let J=this.activeExecutions.get(f);if(!J)return;if(J.delete($),J.size===0)this.activeExecutions.delete(f)}getGlobalActiveCount(){let f=0;for(let $ of this.activeExecutions.values())f+=$.size;return f}}var WU=15000,HU=90,Sj=["rules","skills","plugins"];function QU(f,$){return new Set(f.extensions??Sj).has($)}function ZU(f,$){if(f.tools===void 0)return{"*":{autoApprove:!0}};let J={"*":{enabled:!1,autoApprove:!0}};for(let W of f.tools)J[W]={enabled:!0,autoApprove:!0};if($==="yolo")J[Jf.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function jU(f){let $=f?.trim();if(!$)return;return["# Notes Directory",`Use ${$} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
226
- `)}class Q9 extends Error{constructor(f){super(f);this.name="TimeoutError"}}async function XU(f,$){if($<=0)return f;let J,W=new Promise((H,Q)=>{J=setTimeout(()=>{Q(new Q9("cron run timed out"))},$)});try{return await Promise.race([f,W])}finally{if(J)clearTimeout(J)}}class n8{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor(f){this.store=f.store,this.materializer=f.materializer,this.options=f,this.limiter=new H9(f.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,(f.claimLeaseSeconds??HU)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let f=Math.max(2000,this.options.pollIntervalMs??WU);await this.tick(),this.timer=setInterval(()=>void this.tick(),f)}async stop(){let f=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!f)return;let $=[...this.activeRuns.entries()];await Promise.all($.map(async([J,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:J,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let f=this.store.claimDueRuns({nowIso:Ej(),leaseMs:this.claimLeaseMs});await Promise.allSettled(f.map(($)=>this.executeClaim($)))}catch(f){let $=this.options.logger;if($)if($.error)$.error("cron.runner.tick.failed",{error:f});else $.log("cron.runner.tick.failed",{error:f})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([f,$])=>{let J=this.store.getRun(f);return J?[{...J,...$}]:[]})}async executeClaim(f){let $=f.run,J=this.store.getSpec($.specId);if(!J){this.store.completeRun($.runId,{status:"failed",error:"spec not found",claimToken:f.claimToken});return}if(!J.enabled||J.removed){this.store.completeRun($.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:f.claimToken});return}let W=J.maxParallel&&J.maxParallel>0?J.maxParallel:1;if(!this.limiter.acquire(J.specId,$.runId,W)){this.store.requeueRun({runId:$.runId,claimToken:f.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(J.specId,$.runId),this.store.requeueRun({runId:$.runId,claimToken:f.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set($.runId,{claimToken:f.claimToken});let Q=$.triggerEventId?this.store.getEventLog($.triggerEventId):void 0,Z,j,X=Date.now(),A;if(J.timeoutSeconds&&J.timeoutSeconds>0)A=X+J.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat(f);let P=await this.buildStartRequest(J);if(Z=(await this.options.runtimeHandlers.startSession(P)).sessionId.trim(),!Z)throw Error("runtime returned empty sessionId");this.activeRuns.set($.runId,{claimToken:f.claimToken,sessionId:Z}),this.store.attachSessionIdToRun($.runId,Z);let Y={config:P,prompt:this.buildPrompt(J,Q)},V=this.options.runtimeHandlers.sendSession(Z,Y),R=A?Math.max(1,A-Date.now()):0,K=(await XU(V,R)).result,F=Date.now(),y=W9({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...$,sessionId:Z,status:"done"},spec:J,data:{finalText:K.text,usage:K.usage,toolCalls:K.toolCalls,durationMs:F-X,triggerEvent:Q}});this.store.completeRun($.runId,{status:"done",sessionId:Z,reportPath:y,claimToken:f.claimToken}),this.store.updateSpecLastRunAt(J.specId,Ej())}catch(P){let B=P instanceof Q9;if(Z&&B)try{await this.options.runtimeHandlers.abortSession(Z)}catch{}let Y=P instanceof Error?P.message:String(P),V=Date.now(),R=W9({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...$,sessionId:Z,status:"failed"},spec:J,data:{error:Y,durationMs:V-X,triggerEvent:Q}});this.store.completeRun($.runId,{status:"failed",sessionId:Z,reportPath:R,error:Y,claimToken:f.claimToken})}finally{if(j?.(),Z)try{await this.options.runtimeHandlers.stopSession(Z)}catch{}this.activeRuns.delete($.runId),this.limiter.release(J.specId,$.runId)}}buildPrompt(f,$){let J=f.prompt??"";if(!$)return J;let W={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload};return`${J}
231
+ `)}return f.join(`
232
+ `)}function T7($){let f=NU($.specs);_U(f,{recursive:!0});let J=TU(f,`${$.run.runId}.md`),Q=`${MU($.run,$.spec,$.data.triggerEvent)}
233
+ ${qU($.data)}`;return yU(J,Q,"utf8"),J}class N7{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,f,J){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(J)),Z=this.activeExecutions.get($)??new Set;if(Z.size>=Q)return!1;return Z.add(f),this.activeExecutions.set($,Z),!0}release($,f){let J=this.activeExecutions.get($);if(!J)return;if(J.delete(f),J.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let f of this.activeExecutions.values())$+=f.size;return $}}var CU=15000,EU=90,OH=["rules","skills","plugins"];function hU($,f){return new Set($.extensions??OH).has(f)}function bU($,f){if($.tools===void 0)return{"*":{autoApprove:!0}};let J={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)J[Q]={enabled:!0,autoApprove:!0};if(f==="yolo")J[J0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function kU($){let f=$?.trim();if(!f)return;return["# Notes Directory",`Use ${f} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
234
+ `)}class M7 extends Error{constructor($){super($);this.name="TimeoutError"}}async function IU($,f){if(f<=0)return $;let J,Q=new Promise((Z,W)=>{J=setTimeout(()=>{W(new M7("cron run timed out"))},f)});try{return await Promise.race([$,Q])}finally{if(J)clearTimeout(J)}}class j4{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new N7($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??EU)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??CU);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let f=[...this.activeRuns.entries()];await Promise.all(f.map(async([J,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:J,claimToken:Q.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:LH(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((f)=>this.executeClaim(f)))}catch($){let f=this.options.logger;if(f)if(f.error)f.error("cron.runner.tick.failed",{error:$});else f.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,f])=>{let J=this.store.getRun($);return J?[{...J,...f}]:[]})}async executeClaim($){let f=$.run,J=this.store.getSpec(f.specId);if(!J){this.store.completeRun(f.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!J.enabled||J.removed){this.store.completeRun(f.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=J.maxParallel&&J.maxParallel>0?J.maxParallel:1;if(!this.limiter.acquire(J.specId,f.runId,Q)){this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(J.specId,f.runId),this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(f.runId,{claimToken:$.claimToken});let W=f.triggerEventId?this.store.getEventLog(f.triggerEventId):void 0,j,X,H=Date.now(),Y;if(J.timeoutSeconds&&J.timeoutSeconds>0)Y=H+J.timeoutSeconds*1000;try{X=this.startClaimLeaseHeartbeat($);let V=await this.buildStartRequest(J);if(j=(await this.options.runtimeHandlers.startSession(V)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(f.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(f.runId,j);let B={config:V,prompt:this.buildPrompt(J,W)},K=this.options.runtimeHandlers.sendSession(j,B),G=Y?Math.max(1,Y-Date.now()):0,F=(await IU(K,G)).result,P=Date.now(),D=T7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"done"},spec:J,data:{finalText:F.text,usage:F.usage,toolCalls:F.toolCalls,durationMs:P-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"done",sessionId:j,reportPath:D,claimToken:$.claimToken}),this.store.updateSpecLastRunAt(J.specId,LH())}catch(V){let A=V instanceof M7;if(j&&A)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let B=V instanceof Error?V.message:String(V),K=Date.now(),G=T7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"failed"},spec:J,data:{error:B,durationMs:K-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"failed",sessionId:j,reportPath:G,error:B,claimToken:$.claimToken})}finally{if(X?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(f.runId),this.limiter.release(J.specId,f.runId)}}buildPrompt($,f){let J=$.prompt??"";if(!f)return J;let Q={eventId:f.eventId,eventType:f.eventType,source:f.source,subject:f.subject,occurredAt:f.occurredAt,workspaceRoot:f.workspaceRoot,dedupeKey:f.dedupeKey,attributes:f.attributes,payload:f.payload};return`${J}
227
235
 
228
236
  Trigger event:
229
- ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Math.floor(this.claimLeaseMs/2)),J=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim(f.run.runId,f.claimToken,W))clearInterval(J)},$);return()=>clearInterval(J)}async buildSystemPrompt(f,$,J,W){let H=jU(f.notesDirectory),Q=c1(void 0,H),Z=await D8($),j=JU({ide:"Cline Cron",workspaceRoot:$,workspaceName:$U($),metadata:Z,rules:f.systemPrompt?void 0:Q,mode:J,providerId:W,overridePrompt:f.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return f.systemPrompt?c1(j,Q)??j:j}async buildStartRequest(f){let $=(f.workspaceRoot??"").trim(),J=(f.providerId??"").trim(),W=(f.modelId??"").trim(),H=f.metadata?.__hubRuntimeOptions&&typeof f.metadata.__hubRuntimeOptions==="object"&&!Array.isArray(f.metadata.__hubRuntimeOptions)?f.metadata.__hubRuntimeOptions:void 0,Q=typeof f.metadata?.__hubScheduleCwd==="string"&&f.metadata.__hubScheduleCwd.trim()?f.metadata.__hubScheduleCwd.trim():$;if(!$)throw Error("cron spec requires workspaceRoot");let Z=f.mode==="plan"?"plan":f.mode==="act"?"act":"yolo";return{workspaceRoot:$,cwd:Q,provider:J,model:W,mode:Z,source:f.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt(f,$,Z,J),maxIterations:f.maxIterations,enableTools:H?.enableTools??!0,enableSpawn:H?.enableSpawn??!0,enableTeams:H?.enableTeams??!0,autoApproveTools:H?.autoApproveTools??!0,toolPolicies:ZU(f,Z),configExtensions:Sj.filter((j)=>QU(f,j))}}}import{existsSync as bU,readdirSync as CU,readFileSync as EU,statSync as SU}from"node:fs";import{relative as kU}from"node:path";import{resolveCronSpecsDir as IU}from"@cline/shared/storage";function a8(f,$,J,W){let H=new Set;function Q(Z){let j=Z.toLowerCase();if(W){let A=W.indexOf(j);if(A!==-1)return A+$}let X=Number(Z);if(!Number.isInteger(X)||X<$||X>J)throw Error(`Invalid cron value "${Z}" for range [${$}-${J}]`);return X}for(let Z of f.split(",")){if(Z==="*"){for(let A=$;A<=J;A+=1)H.add(A);continue}let j=Z.indexOf("/");if(j!==-1){let A=Z.slice(0,j),P=Number(Z.slice(j+1));if(!Number.isInteger(P)||P<1)throw Error(`Invalid step "${Z.slice(j+1)}"`);let B=$,Y=J;if(A!=="*"){let V=A.indexOf("-");if(V!==-1)B=Q(A.slice(0,V)),Y=Q(A.slice(V+1));else B=Q(A)}if(B>Y)throw Error(`Invalid cron range "${A}"`);for(let V=B;V<=Y;V+=P)H.add(V);continue}let X=Z.indexOf("-");if(X!==-1){let A=Q(Z.slice(0,X)),P=Q(Z.slice(X+1));if(A>P)throw Error(`Invalid cron range "${Z}"`);for(let B=A;B<=P;B+=1)H.add(B);continue}H.add(Q(Z))}return[...H].sort((Z,j)=>Z-j)}var AU=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],Ij=["sun","mon","tue","wed","thu","fri","sat"];function t8(f,$,J){let W=f[$];if(typeof W!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${$+1}`);return W}function Z9(f,$){let J=f[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${$}`);return J}function j9(f){let $=f.trim().split(/\s+/);if($.length!==5)throw Error(`Invalid cron pattern "${f}": expected 5 fields, got ${$.length}`);return{minutes:a8(t8($,0,f),0,59),hours:a8(t8($,1,f),0,23),daysOfMonth:a8(t8($,2,f),1,31),months:a8(t8($,3,f),1,12,AU),daysOfWeek:a8(t8($,4,f),0,6,Ij)}}function X9(f){j9(f)}function mj(f,$,J=Date.now()){v$(f,J,$)}var kj=new Map,PU=new Map(Ij.map((f,$)=>[f,$]));function xj(f){let $=f?.trim();return $?$:void 0}function gj(f){let $=kj.get(f);if($)return $;let J=new Intl.DateTimeFormat("en-US",{timeZone:f,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return kj.set(f,J),J}function BU(f){let $=xj(f);if(!$)return;gj($).format(new Date)}function YU(f,$){let J=gj($).formatToParts(new Date(f)),W=new Map(J.map((Z)=>[Z.type,Z.value])),H=W.get("weekday")?.toLowerCase().slice(0,3)??"",Q=PU.get(H);if(Q===void 0)throw Error(`Unable to resolve weekday for timezone "${$}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:Q,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function VU(f){let $=new Date(f);return{month:$.getMonth()+1,dayOfMonth:$.getDate(),dayOfWeek:$.getDay(),hour:$.getHours(),minute:$.getMinutes()}}function RU(f,$){return f.months.includes($.month)&&f.daysOfMonth.includes($.dayOfMonth)&&f.daysOfWeek.includes($.dayOfWeek)&&f.hours.includes($.hour)&&f.minutes.includes($.minute)}function FU(f,$,J){let W=j9(f),H=new Date($);H.setSeconds(0,0);let Q=H.getTime()+60000,Z=new Date($);Z.setFullYear(Z.getFullYear()+4);let j=Z.getTime();while(Q<=j){if(RU(W,YU(Q,J)))return Q;Q+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${f}" in timezone "${J}"`)}function v$(f,$,J){let W=xj(J);if(W)return BU(W),FU(f,$,W);let H=j9(f),Q=new Date($);Q.setSeconds(0,0),Q=new Date(Q.getTime()+60000);let Z=new Date($);Z.setFullYear(Z.getFullYear()+4);while(Q<=Z){let{month:j,dayOfMonth:X,dayOfWeek:A,hour:P,minute:B}=VU(Q.getTime());if(!H.months.includes(j)){let Y=H.months.find((R)=>R>j)??Z9(H.months,"months"),V=Y<=j?1:0;Q=new Date(Q.getFullYear()+V,Y-1,1,0,0,0,0);continue}if(!H.daysOfMonth.includes(X)||!H.daysOfWeek.includes(A)){Q=new Date(Q.getFullYear(),Q.getMonth(),X+1,0,0,0,0);continue}if(!H.hours.includes(P)){let Y=H.hours.find((R)=>R>P)??Z9(H.hours,"hours"),V=Y<=P?1:0;Q=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()+V,Y,0,0,0);continue}if(!H.minutes.includes(B)){let Y=H.minutes.find((R)=>R>B)??Z9(H.minutes,"minutes"),V=Y<=B?1:0;Q=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate(),Q.getHours()+V,Y,0,0);continue}return Q.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${f}"`)}import{createHash as KU}from"node:crypto";import yU from"yaml";function UU(f){let $=f.replace(/\\/g,"/");if($.startsWith("events/")&&$.endsWith(".event.md"))return"event";if($.endsWith(".cron.md"))return"schedule";return"one_off"}function GU(f){let $=f.replace(/\r\n/g,`
230
- `);if(!$.startsWith(`---
231
- `))return{frontmatter:void 0,body:f};let J=$.slice(4),W=J.indexOf(`
232
- ---`);if(W===-1)return{frontmatter:void 0,body:f};let H=J.slice(0,W),Q=J.slice(W+4);if(Q.startsWith(`
233
- `))Q=Q.slice(1);return{frontmatter:H,body:Q}}function If(f){if(typeof f!=="string")return;let $=f.trim();return $.length>0?$:void 0}function TU(f){if(!Array.isArray(f))return;let $=f.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);return $.length>0?$:void 0}function B9(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return f}function DU(f){let $=B9(f);if(!$)return;let J=If($.providerId),W=If($.modelId);if(J===void 0&&W===void 0)return;return{providerId:J,modelId:W}}function _U(f){if(typeof f!=="string")return;let $=f.trim().toLowerCase();if($==="act"||$==="plan"||$==="yolo")return $;return}function uj(f,$={}){let J=Array.isArray(f)?f:typeof f==="string"?f.split(","):void 0;if(!J)return;let W=[...new Set(J.map((H)=>typeof H==="string"?H.trim():"").filter((H)=>H.length>0))];if(Array.isArray(f)&&$.preserveEmptyArray)return W;return W.length>0?W:void 0}var MU=new Set(k0);function LU(f){let $=uj(f,{preserveEmptyArray:!0});if(!$)return;let J=$.filter((W)=>!MU.has(W));if(J.length>0)throw Error(`unknown tool(s): ${J.join(", ")}`);return $}var hU=new Set(["rules","skills","plugins"]);function OU(f){let $=uj(f,{preserveEmptyArray:!0});if(!$)return;let J=$.filter((W)=>!hU.has(W));if(J.length>0)throw Error(`unknown extension(s): ${J.join(", ")}`);return $}function A9(f){if(typeof f!=="number"||!Number.isFinite(f)||f<=0)return;return Math.floor(f)}function P9(f){if(typeof f!=="number"||!Number.isFinite(f)||f<0)return;return Math.floor(f)}function Y9(f){if(f===null||typeof f!=="object")return JSON.stringify(f??null);if(Array.isArray(f))return`[${f.map((J)=>Y9(J)).join(",")}]`;let $=Object.entries(f).filter(([,J])=>J!==void 0);return $.sort(([J],[W])=>J<W?-1:J>W?1:0),`{${$.map(([J,W])=>`${JSON.stringify(J)}:${Y9(W)}`).join(",")}}`}function cj(f,$){let J=KU("sha256");return J.update(Y9(f)),J.update(`
234
- `),J.update($),J.digest("hex")}function zU(f){return(f.split("/").pop()??f).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var NU=["schedule","timezone"],qU=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],wU=["cwd"];function vj(f,$,J,W,H){return{externalId:f,relativePath:f,triggerKind:$,body:J,contentHash:cj(W,J),error:H}}function $0(f,$,J,W,H,Q){return{externalId:f,relativePath:$,triggerKind:J,body:W,contentHash:H,error:Q}}function dj(f){let $=f.relativePath.replace(/\\/g,"/"),J=UU($),{frontmatter:W,body:H}=GU(f.raw),Q={};if(W!==void 0&&W.trim().length>0)try{let y=yU.parse(W);if(y&&typeof y==="object"&&!Array.isArray(y))Q=y;else if(y!==null&&y!==void 0)return vj($,J,H,{},"frontmatter must be a YAML mapping")}catch(y){return vj($,J,H,{},y instanceof Error?`failed to parse frontmatter: ${y.message}`:"failed to parse frontmatter")}let Z=cj(Q,H),j=If(Q.id),X=j??$;if(J!=="schedule"){for(let y of NU)if(Q[y]!==void 0)return $0(X,$,J,H,Z,`field "${y}" is only allowed on *.cron.md specs`)}for(let y of wU)if(Q[y]!==void 0)return $0(X,$,J,H,Z,`field "${y}" is no longer supported; cron specs use workspaceRoot as cwd`);if(J!=="event"){for(let y of qU)if(Q[y]!==void 0)return $0(X,$,J,H,Z,`field "${y}" is only allowed on .event.md specs`)}let A=If(Q.prompt),P=H.trim(),B=A??(P.length>0?P:void 0);if(!B)return $0(X,$,J,H,Z,"prompt is required (frontmatter `prompt` or markdown body)");let Y=If(Q.workspaceRoot);if(!Y)return $0(X,$,J,H,Z,"workspaceRoot is required");let V,R;try{V=LU(Q.tools),R=OU(Q.extensions)}catch(y){return $0(X,$,J,H,Z,y instanceof Error?y.message:String(y))}let U=_U(Q.mode);if(Q.mode!==void 0&&U===void 0)return $0(X,$,J,H,Z,"mode must be one of: act, plan, yolo");let K={id:j,title:If(Q.title)??j??zU($),prompt:B,workspaceRoot:Y,mode:U??"yolo",systemPrompt:If(Q.systemPrompt),modelSelection:DU(Q.modelSelection),maxIterations:A9(Q.maxIterations),timeoutSeconds:A9(Q.timeoutSeconds),tools:V,notesDirectory:If(Q.notesDirectory),extensions:R,source:If(Q.source)??"user",tags:TU(Q.tags),enabled:typeof Q.enabled==="boolean"?Q.enabled:!0,metadata:B9(Q.metadata)},F;if(J==="schedule"){let y=If(Q.schedule);if(!y)return $0(X,$,J,H,Z,"schedule is required for *.cron.md specs");let D=If(Q.timezone);try{mj(y,D)}catch(T){return $0(X,$,J,H,Z,T instanceof Error?T.message:String(T))}F={...K,triggerKind:"schedule",schedule:y,timezone:D}}else if(J==="event"){let y=If(Q.event);if(!y)return $0(X,$,J,H,Z,"event is required for .event.md specs");F={...K,triggerKind:"event",event:y,filters:B9(Q.filters),debounceSeconds:P9(Q.debounceSeconds),dedupeWindowSeconds:P9(Q.dedupeWindowSeconds),cooldownSeconds:P9(Q.cooldownSeconds),maxParallel:A9(Q.maxParallel)}}else F={...K,triggerKind:"one_off"};return{externalId:X,relativePath:$,triggerKind:J,body:H,contentHash:Z,spec:F}}function mU(f,$){return kU(f,$).replace(/\\/g,"/")}function xU(f){if(!bU(f))return[];let $=[],J=[f];while(J.length>0){let W=J.pop();if(!W)continue;let H;try{H=CU(W,{withFileTypes:!0})}catch{continue}for(let Q of H){let Z=`${W}/${Q.name}`;if(Q.isDirectory()){if(Q.name==="reports")continue;J.push(Z);continue}if(!Q.isFile())continue;if(!Q.name.endsWith(".md"))continue;$.push(Z)}}return $}class V9{store;cronDir;constructor(f){this.store=f.store,this.cronDir=IU(f.specs??(f.workspaceRoot?{scope:"workspace",workspaceRoot:f.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let f={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},$=xU(this.cronDir),J=new Set;for(let H of $){let Q=mU(this.cronDir,H);J.add(Q),f.scanned+=1;let Z=await this.reconcileFile(Q,H);if(Z){if(f.changes.push(Z),f.upserted+=1,Z.parse.error)f.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let H of W)if(!J.has(H.sourcePath))this.handleFileDeleted(H),f.removed+=1;return this.refreshScheduleNextRunAt(),f}async reconcileFile(f,$){let J=this.store.getSpecBySourcePath(f),W,H;try{W=EU($,"utf8"),H=SU($).mtimeMs}catch{return}let Z=dj({relativePath:f,raw:W}),j=this.store.upsertSpec({externalId:Z.externalId,sourcePath:f,triggerKind:Z.triggerKind,sourceMtimeMs:H,sourceHash:Z.contentHash,parseStatus:Z.error?"invalid":"valid",parseError:Z.error,spec:Z.spec});if(!Z.error&&Z.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!J||J.removed||!J.enabled||J.scheduleExpr!==j.record.scheduleExpr||J.timezone!==j.record.timezone});return{relativePath:f,result:j,parse:Z}}handleFileDeleted(f){this.store.markSpecRemoved(f.specId),this.store.cancelQueuedRunsForSpec(f.specId)}refreshScheduleNextRunAt(){let f=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let $ of f)this.applyScheduleNextRunAt($,{forceReset:!1})}applyScheduleNextRunAt(f,$){if(!f.scheduleExpr)return;if(!$.forceReset&&f.nextRunAt)return;try{let J=Date.now(),W=f.lastRunAt?Math.max(J,new Date(f.lastRunAt).getTime()):J,H=v$(f.scheduleExpr,W,f.timezone),Q=new Date(H).toISOString();if(f.nextRunAt!==Q)this.store.updateSpecNextRunAt(f.specId,Q)}catch{}}}import{existsSync as gU,mkdirSync as vU,watch as uU}from"node:fs";import{relative as cU,resolve as dU}from"node:path";var rU=250;class R9{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor(f){this.reconciler=f.reconciler,this.debounceMs=Math.max(0,f.debounceMs??rU),this.onError=f.onError??(()=>{}),this.onReconciled=f.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let f=this.reconciler.getCronDir();try{vU(f,{recursive:!0}),this.watcher=uU(f,{recursive:!0},($,J)=>{if(!J)return;let W=String(J).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch($){this.onError($)}}stop(){for(let f of this.pending.values())clearTimeout(f);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile(f){let $=this.pending.get(f);if($)clearTimeout($);let J=setTimeout(()=>{this.pending.delete(f),this.reconcileNow(f)},this.debounceMs);this.pending.set(f,J)}async reconcileNow(f){try{let $=dU(this.reconciler.getCronDir(),f);if(!gU($)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let J=cU(this.reconciler.getCronDir(),$).replace(/\\/g,"/");await this.reconciler.reconcileFile(J,$),await this.onReconciled()}catch($){this.onError($)}}}import{randomUUID as s8}from"node:crypto";import{asOptionalString as k,asString as t,loadSqliteDb as pU,nowIso as yf}from"@cline/shared/db";import{resolveCronDbPath as iU}from"@cline/shared/storage";var lU=[`CREATE TABLE IF NOT EXISTS cron_specs (
237
+ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Math.floor(this.claimLeaseMs/2)),J=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(J)},f);return()=>clearInterval(J)}async buildSystemPrompt($,f,J,Q){let Z=kU($.notesDirectory),W=tf(void 0,Z),j=await w8(f),X=SU({ide:"Cline Cron",workspaceRoot:f,workspaceName:wU(f),metadata:j,rules:$.systemPrompt?void 0:W,mode:J,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?tf(X,W)??X:X}async buildStartRequest($){let f=($.workspaceRoot??"").trim(),J=($.providerId??"").trim(),Q=($.modelId??"").trim(),Z=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,W=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():f;if(!f)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:f,cwd:W,provider:J,model:Q,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,f,j,J),maxIterations:$.maxIterations,enableTools:Z?.enableTools??!0,enableSpawn:Z?.enableSpawn??!0,enableTeams:Z?.enableTeams??!0,autoApproveTools:Z?.autoApproveTools??!0,toolPolicies:bU($,j),configExtensions:OH.filter((X)=>hU($,X))}}}import{existsSync as WL,readdirSync as jL,readFileSync as XL,statSync as HL}from"node:fs";import{relative as YL}from"node:path";import{resolveCronSpecsDir as VL}from"@cline/shared/storage";function X4($,f,J,Q){let Z=new Set;function W(j){let X=j.toLowerCase();if(Q){let Y=Q.indexOf(X);if(Y!==-1)return Y+f}let H=Number(j);if(!Number.isInteger(H)||H<f||H>J)throw Error(`Invalid cron value "${j}" for range [${f}-${J}]`);return H}for(let j of $.split(",")){if(j==="*"){for(let Y=f;Y<=J;Y+=1)Z.add(Y);continue}let X=j.indexOf("/");if(X!==-1){let Y=j.slice(0,X),V=Number(j.slice(X+1));if(!Number.isInteger(V)||V<1)throw Error(`Invalid step "${j.slice(X+1)}"`);let A=f,B=J;if(Y!=="*"){let K=Y.indexOf("-");if(K!==-1)A=W(Y.slice(0,K)),B=W(Y.slice(K+1));else A=W(Y)}if(A>B)throw Error(`Invalid cron range "${Y}"`);for(let K=A;K<=B;K+=V)Z.add(K);continue}let H=j.indexOf("-");if(H!==-1){let Y=W(j.slice(0,H)),V=W(j.slice(H+1));if(Y>V)throw Error(`Invalid cron range "${j}"`);for(let A=Y;A<=V;A+=1)Z.add(A);continue}Z.add(W(j))}return[...Z].sort((j,X)=>j-X)}var xU=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],_H=["sun","mon","tue","wed","thu","fri","sat"];function H4($,f,J){let Q=$[f];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${f+1}`);return Q}function q7($,f){let J=$[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${f}`);return J}function w7($){let f=$.trim().split(/\s+/);if(f.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${f.length}`);return{minutes:X4(H4(f,0,$),0,59),hours:X4(H4(f,1,$),0,23),daysOfMonth:X4(H4(f,2,$),1,31),months:X4(H4(f,3,$),1,12,xU),daysOfWeek:X4(H4(f,4,$),0,6,_H)}}function S7($){w7($)}function yH($,f,J=Date.now()){n1($,J,f)}var zH=new Map,gU=new Map(_H.map(($,f)=>[$,f]));function TH($){let f=$?.trim();return f?f:void 0}function NH($){let f=zH.get($);if(f)return f;let J=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return zH.set($,J),J}function mU($){let f=TH($);if(!f)return;NH(f).format(new Date)}function vU($,f){let J=NH(f).formatToParts(new Date($)),Q=new Map(J.map((j)=>[j.type,j.value])),Z=Q.get("weekday")?.toLowerCase().slice(0,3)??"",W=gU.get(Z);if(W===void 0)throw Error(`Unable to resolve weekday for timezone "${f}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:W,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function cU($){let f=new Date($);return{month:f.getMonth()+1,dayOfMonth:f.getDate(),dayOfWeek:f.getDay(),hour:f.getHours(),minute:f.getMinutes()}}function uU($,f){return $.months.includes(f.month)&&$.daysOfMonth.includes(f.dayOfMonth)&&$.daysOfWeek.includes(f.dayOfWeek)&&$.hours.includes(f.hour)&&$.minutes.includes(f.minute)}function dU($,f,J){let Q=w7($),Z=new Date(f);Z.setSeconds(0,0);let W=Z.getTime()+60000,j=new Date(f);j.setFullYear(j.getFullYear()+4);let X=j.getTime();while(W<=X){if(uU(Q,vU(W,J)))return W;W+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${J}"`)}function n1($,f,J){let Q=TH(J);if(Q)return mU(Q),dU($,f,Q);let Z=w7($),W=new Date(f);W.setSeconds(0,0),W=new Date(W.getTime()+60000);let j=new Date(f);j.setFullYear(j.getFullYear()+4);while(W<=j){let{month:X,dayOfMonth:H,dayOfWeek:Y,hour:V,minute:A}=cU(W.getTime());if(!Z.months.includes(X)){let B=Z.months.find((G)=>G>X)??q7(Z.months,"months"),K=B<=X?1:0;W=new Date(W.getFullYear()+K,B-1,1,0,0,0,0);continue}if(!Z.daysOfMonth.includes(H)||!Z.daysOfWeek.includes(Y)){W=new Date(W.getFullYear(),W.getMonth(),H+1,0,0,0,0);continue}if(!Z.hours.includes(V)){let B=Z.hours.find((G)=>G>V)??q7(Z.hours,"hours"),K=B<=V?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate()+K,B,0,0,0);continue}if(!Z.minutes.includes(A)){let B=Z.minutes.find((G)=>G>A)??q7(Z.minutes,"minutes"),K=B<=A?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate(),W.getHours()+K,B,0,0);continue}return W.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as lU}from"node:crypto";import pU from"yaml";function rU($){let f=$.replace(/\\/g,"/");if(f.startsWith("events/")&&f.endsWith(".event.md"))return"event";if(f.endsWith(".cron.md"))return"schedule";return"one_off"}function iU($){let f=$.replace(/\r\n/g,`
238
+ `);if(!f.startsWith(`---
239
+ `))return{frontmatter:void 0,body:$};let J=f.slice(4),Q=J.indexOf(`
240
+ ---`);if(Q===-1)return{frontmatter:void 0,body:$};let Z=J.slice(0,Q),W=J.slice(Q+4);if(W.startsWith(`
241
+ `))W=W.slice(1);return{frontmatter:Z,body:W}}function g0($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function nU($){if(!Array.isArray($))return;let f=$.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);return f.length>0?f:void 0}function h7($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function aU($){let f=h7($);if(!f)return;let J=g0(f.providerId),Q=g0(f.modelId);if(J===void 0&&Q===void 0)return;return{providerId:J,modelId:Q}}function tU($){if(typeof $!=="string")return;let f=$.trim().toLowerCase();if(f==="act"||f==="plan"||f==="yolo")return f;return}function qH($,f={}){let J=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!J)return;let Q=[...new Set(J.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0))];if(Array.isArray($)&&f.preserveEmptyArray)return Q;return Q.length>0?Q:void 0}var sU=new Set(g$);function oU($){let f=qH($,{preserveEmptyArray:!0});if(!f)return;let J=f.filter((Q)=>!sU.has(Q));if(J.length>0)throw Error(`unknown tool(s): ${J.join(", ")}`);return f}var eU=new Set(["rules","skills","plugins"]);function $L($){let f=qH($,{preserveEmptyArray:!0});if(!f)return;let J=f.filter((Q)=>!eU.has(Q));if(J.length>0)throw Error(`unknown extension(s): ${J.join(", ")}`);return f}function C7($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function E7($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function b7($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((J)=>b7(J)).join(",")}]`;let f=Object.entries($).filter(([,J])=>J!==void 0);return f.sort(([J],[Q])=>J<Q?-1:J>Q?1:0),`{${f.map(([J,Q])=>`${JSON.stringify(J)}:${b7(Q)}`).join(",")}}`}function wH($,f){let J=lU("sha256");return J.update(b7($)),J.update(`
242
+ `),J.update(f),J.digest("hex")}function fL($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var JL=["schedule","timezone"],QL=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],ZL=["cwd"];function MH($,f,J,Q,Z){return{externalId:$,relativePath:$,triggerKind:f,body:J,contentHash:wH(Q,J),error:Z}}function Z$($,f,J,Q,Z,W){return{externalId:$,relativePath:f,triggerKind:J,body:Q,contentHash:Z,error:W}}function SH($){let f=$.relativePath.replace(/\\/g,"/"),J=rU(f),{frontmatter:Q,body:Z}=iU($.raw),W={};if(Q!==void 0&&Q.trim().length>0)try{let D=pU.parse(Q);if(D&&typeof D==="object"&&!Array.isArray(D))W=D;else if(D!==null&&D!==void 0)return MH(f,J,Z,{},"frontmatter must be a YAML mapping")}catch(D){return MH(f,J,Z,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let j=wH(W,Z),X=g0(W.id),H=X??f;if(J!=="schedule"){for(let D of JL)if(W[D]!==void 0)return Z$(H,f,J,Z,j,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of ZL)if(W[D]!==void 0)return Z$(H,f,J,Z,j,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(J!=="event"){for(let D of QL)if(W[D]!==void 0)return Z$(H,f,J,Z,j,`field "${D}" is only allowed on .event.md specs`)}let Y=g0(W.prompt),V=Z.trim(),A=Y??(V.length>0?V:void 0);if(!A)return Z$(H,f,J,Z,j,"prompt is required (frontmatter `prompt` or markdown body)");let B=g0(W.workspaceRoot);if(!B)return Z$(H,f,J,Z,j,"workspaceRoot is required");let K,G;try{K=oU(W.tools),G=$L(W.extensions)}catch(D){return Z$(H,f,J,Z,j,D instanceof Error?D.message:String(D))}let R=tU(W.mode);if(W.mode!==void 0&&R===void 0)return Z$(H,f,J,Z,j,"mode must be one of: act, plan, yolo");let F={id:X,title:g0(W.title)??X??fL(f),prompt:A,workspaceRoot:B,mode:R??"yolo",systemPrompt:g0(W.systemPrompt),modelSelection:aU(W.modelSelection),maxIterations:C7(W.maxIterations),timeoutSeconds:C7(W.timeoutSeconds),tools:K,notesDirectory:g0(W.notesDirectory),extensions:G,source:g0(W.source)??"user",tags:nU(W.tags),enabled:typeof W.enabled==="boolean"?W.enabled:!0,metadata:h7(W.metadata)},P;if(J==="schedule"){let D=g0(W.schedule);if(!D)return Z$(H,f,J,Z,j,"schedule is required for *.cron.md specs");let O=g0(W.timezone);try{yH(D,O)}catch(L){return Z$(H,f,J,Z,j,L instanceof Error?L.message:String(L))}P={...F,triggerKind:"schedule",schedule:D,timezone:O}}else if(J==="event"){let D=g0(W.event);if(!D)return Z$(H,f,J,Z,j,"event is required for .event.md specs");P={...F,triggerKind:"event",event:D,filters:h7(W.filters),debounceSeconds:E7(W.debounceSeconds),dedupeWindowSeconds:E7(W.dedupeWindowSeconds),cooldownSeconds:E7(W.cooldownSeconds),maxParallel:C7(W.maxParallel)}}else P={...F,triggerKind:"one_off"};return{externalId:H,relativePath:f,triggerKind:J,body:Z,contentHash:j,spec:P}}function AL($,f){return YL($,f).replace(/\\/g,"/")}function BL($){if(!WL($))return[];let f=[],J=[$];while(J.length>0){let Q=J.pop();if(!Q)continue;let Z;try{Z=jL(Q,{withFileTypes:!0})}catch{continue}for(let W of Z){let j=`${Q}/${W.name}`;if(W.isDirectory()){if(W.name==="reports")continue;J.push(j);continue}if(!W.isFile())continue;if(!W.name.endsWith(".md"))continue;f.push(j)}}return f}class k7{store;cronDir;constructor($){this.store=$.store,this.cronDir=VL($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},f=BL(this.cronDir),J=new Set;for(let Z of f){let W=AL(this.cronDir,Z);J.add(W),$.scanned+=1;let j=await this.reconcileFile(W,Z);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let Q=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let Z of Q)if(!J.has(Z.sourcePath))this.handleFileDeleted(Z),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,f){let J=this.store.getSpecBySourcePath($),Q,Z;try{Q=XL(f,"utf8"),Z=HL(f).mtimeMs}catch{return}let j=SH({relativePath:$,raw:Q}),X=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:Z,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&X.record.enabled)this.applyScheduleNextRunAt(X.record,{forceReset:!J||J.removed||!J.enabled||J.scheduleExpr!==X.record.scheduleExpr||J.timezone!==X.record.timezone});return{relativePath:$,result:X,parse:j}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let f of $)this.applyScheduleNextRunAt(f,{forceReset:!1})}applyScheduleNextRunAt($,f){if(!$.scheduleExpr)return;if(!f.forceReset&&$.nextRunAt)return;try{let J=Date.now(),Q=$.lastRunAt?Math.max(J,new Date($.lastRunAt).getTime()):J,Z=n1($.scheduleExpr,Q,$.timezone),W=new Date(Z).toISOString();if($.nextRunAt!==W)this.store.updateSpecNextRunAt($.specId,W)}catch{}}}import{existsSync as KL,mkdirSync as GL,watch as PL}from"node:fs";import{relative as FL,resolve as DL}from"node:path";var RL=250;class I7{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??RL),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{GL($,{recursive:!0}),this.watcher=PL($,{recursive:!0},(f,J)=>{if(!J)return;let Q=String(J).replace(/\\/g,"/");if(!Q.endsWith(".md"))return;if(Q.startsWith("reports/"))return;this.scheduleReconcile(Q)}),this.watcher.on("error",this.onError)}catch(f){this.onError(f)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let f=this.pending.get($);if(f)clearTimeout(f);let J=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,J)}async reconcileNow($){try{let f=DL(this.reconciler.getCronDir(),$);if(!KL(f)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let J=FL(this.reconciler.getCronDir(),f).replace(/\\/g,"/");await this.reconciler.reconcileFile(J,f),await this.onReconciled()}catch(f){this.onError(f)}}}import{randomUUID as Y4}from"node:crypto";import{asOptionalString as I,asString as t,loadSqliteDb as LL,nowIso as D0}from"@cline/shared/db";import{resolveCronDbPath as OL}from"@cline/shared/storage";var UL=[`CREATE TABLE IF NOT EXISTS cron_specs (
235
243
  spec_id TEXT PRIMARY KEY,
236
244
  external_id TEXT NOT NULL,
237
245
  source_path TEXT NOT NULL UNIQUE,
@@ -322,17 +330,17 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
322
330
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
323
331
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
324
332
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
325
- ON cron_specs(source_path);`];function rj(f){f.exec("PRAGMA journal_mode = WAL;"),f.exec("PRAGMA busy_timeout = 5000;"),f.exec("PRAGMA foreign_keys = ON;");for(let $ of lU)f.exec($)}function AJ(f){if(!f)return;try{let $=JSON.parse(f);if($&&typeof $==="object"&&!Array.isArray($))return $}catch{}return}function F9(f,$={}){if(!f)return;try{let J=JSON.parse(f);if(!Array.isArray(J))return;let W=J.map((H)=>typeof H==="string"?H.trim():"").filter((H)=>H.length>0);if($.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function u$(f){if(typeof f==="number"&&Number.isFinite(f))return f;if(typeof f==="bigint")return Number(f);return}function H$(f){return{specId:t(f.spec_id),externalId:t(f.external_id),sourcePath:t(f.source_path),triggerKind:t(f.trigger_kind),sourceMtimeMs:u$(f.source_mtime_ms),sourceHash:k(f.source_hash),parseStatus:t(f.parse_status)==="invalid"?"invalid":"valid",parseError:k(f.parse_error),enabled:Number(f.enabled??0)===1,removed:Number(f.removed??0)===1,title:t(f.title),prompt:k(f.prompt),workspaceRoot:k(f.workspace_root),scheduleExpr:k(f.schedule_expr),timezone:k(f.timezone),eventType:k(f.event_type),filters:AJ(k(f.filters_json)),debounceSeconds:u$(f.debounce_seconds),dedupeWindowSeconds:u$(f.dedupe_window_seconds),cooldownSeconds:u$(f.cooldown_seconds),mode:k(f.mode),systemPrompt:k(f.system_prompt),providerId:k(f.provider_id),modelId:k(f.model_id),maxIterations:u$(f.max_iterations),timeoutSeconds:u$(f.timeout_seconds),maxParallel:u$(f.max_parallel),tools:F9(k(f.tools_json),{preserveEmpty:!0}),notesDirectory:k(f.notes_directory),extensions:F9(k(f.extensions_json),{preserveEmpty:!0}),source:k(f.source),tags:F9(k(f.tags_json)),metadata:AJ(k(f.metadata_json)),revision:Number(f.revision??1),lastMaterializedRunId:k(f.last_materialized_run_id),lastRunAt:k(f.last_run_at),nextRunAt:k(f.next_run_at),createdAt:t(f.created_at),updatedAt:t(f.updated_at)}}function K9(f){return{runId:t(f.run_id),specId:t(f.spec_id),specRevision:Number(f.spec_revision??1),triggerKind:t(f.trigger_kind),status:t(f.status),claimToken:k(f.claim_token),claimStartedAt:k(f.claim_started_at),claimUntilAt:k(f.claim_until_at),scheduledFor:k(f.scheduled_for),triggerEventId:k(f.trigger_event_id),startedAt:k(f.started_at),completedAt:k(f.completed_at),sessionId:k(f.session_id),reportPath:k(f.report_path),error:k(f.error),attemptCount:Number(f.attempt_count??0),createdAt:t(f.created_at),updatedAt:t(f.updated_at)}}function lj(f){return{eventId:t(f.event_id),eventType:t(f.event_type),source:t(f.source),subject:k(f.subject),occurredAt:t(f.occurred_at),receivedAt:t(f.received_at),workspaceRoot:k(f.workspace_root),dedupeKey:k(f.dedupe_key),payload:AJ(k(f.payload_json)),attributes:AJ(k(f.attributes_json)),processingStatus:t(f.processing_status),matchedSpecCount:Number(f.matched_spec_count??0),queuedRunCount:Number(f.queued_run_count??0),suppressedCount:Number(f.suppressed_count??0),error:k(f.error),createdAt:t(f.created_at),updatedAt:t(f.updated_at)}}function pj(f){return f?JSON.stringify(f):null}var nU=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function ij(f){if(f===void 0)return null;if(f&&typeof f==="object")return JSON.stringify(f);return f}function aU(f,$,J,W){for(let H of nU){let Q=f[H],Z=$[H];if(ij(Q)!==ij(Z))return!0}if(J===!1&&W===!0)return!0;return!1}function tU(f){return(f.split("/").pop()??f).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function sU(f){return`hub/schedules/${f}.cron.md`}function oU(f){let $={...f.metadata??{},...f.createdBy?{__hubScheduleCreatedBy:f.createdBy}:{},...f.cwd?{__hubScheduleCwd:f.cwd}:{},...f.runtimeOptions?{__hubRuntimeOptions:f.runtimeOptions}:{}};return Object.keys($).length>0?$:void 0}function y9(f){return{triggerKind:"schedule",title:f.name.trim(),prompt:f.prompt,workspaceRoot:f.workspaceRoot.trim(),schedule:f.cronPattern.trim(),mode:f.mode??"act",systemPrompt:f.systemPrompt,modelSelection:f.modelSelection?JSON.parse(JSON.stringify(f.modelSelection)):void 0,maxIterations:typeof f.maxIterations==="number"?Math.floor(f.maxIterations):void 0,timeoutSeconds:typeof f.timeoutSeconds==="number"?Math.floor(f.timeoutSeconds):void 0,maxParallel:typeof f.maxParallel==="number"?Math.max(1,Math.floor(f.maxParallel)):1,source:"hub-schedule",tags:f.tags?.filter(($)=>$.trim().length>0),enabled:f.enabled!==!1,metadata:oU(f)}}function nj(f){return JSON.stringify(y9(f))}function eU(f,$){let J=f.metadata?{...f.metadata}:{},W=$.createdBy===null?void 0:$.createdBy!==void 0?$.createdBy:typeof J.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,H=$.cwd!==void 0?$.cwd:typeof J.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,Q=$.runtimeOptions!==void 0?$.runtimeOptions:J.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0;return delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions,{name:$.name??f.title,cronPattern:$.cronPattern??f.scheduleExpr??"",prompt:$.prompt??f.prompt??"",workspaceRoot:$.workspaceRoot??f.workspaceRoot??"",cwd:H,modelSelection:$.modelSelection!==void 0?$.modelSelection:f.providerId||f.modelId?{providerId:f.providerId??"",modelId:f.modelId??""}:void 0,enabled:$.enabled??f.enabled,mode:$.mode??(f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"),systemPrompt:$.systemPrompt===null?void 0:$.systemPrompt!==void 0?$.systemPrompt:f.systemPrompt,maxIterations:$.maxIterations===null?void 0:$.maxIterations!==void 0?$.maxIterations:f.maxIterations,timeoutSeconds:$.timeoutSeconds===null?void 0:$.timeoutSeconds!==void 0?$.timeoutSeconds:f.timeoutSeconds,maxParallel:$.maxParallel??f.maxParallel??1,createdBy:W,tags:$.tags??f.tags,runtimeOptions:Q,metadata:$.metadata!==void 0?$.metadata:Object.keys(J).length>0?J:void 0}}class o8{db;constructor(f={}){let $=f.dbPath??iU();this.db=pU($),rj(this.db)}close(){this.db.close?.()}getSpecBySourcePath(f){let $=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get(f);return $?H$($):void 0}getSpec(f){let $=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get(f);return $?H$($):void 0}getSpecByExternalId(f){let $=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get(f);return $?H$($):void 0}listSpecs(f={}){let $=[],J=[];if(f.triggerKind)$.push("trigger_kind = ?"),J.push(f.triggerKind);if(typeof f.enabled==="boolean")$.push("enabled = ?"),J.push(f.enabled?1:0);if(f.parseStatus)$.push("parse_status = ?"),J.push(f.parseStatus);if(!f.includeRemoved)$.push("removed = 0");let W=$.length>0?`WHERE ${$.join(" AND ")}`:"",H=Math.max(1,Math.floor(f.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...J,H).map((Z)=>H$(Z))}createHubSchedule(f){let $=`sched_${s8()}`,J=this.upsertSpec({externalId:$,sourcePath:sU($),triggerKind:"schedule",sourceHash:nj(f),parseStatus:"valid",spec:y9(f)});this.initializeScheduleNextRun(J.record.specId);let W=this.getSpec(J.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule(f){let $=this.db.prepare(`SELECT * FROM cron_specs
333
+ ON cron_specs(source_path);`];function CH($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let f of UL)$.exec(f)}function qJ($){if(!$)return;try{let f=JSON.parse($);if(f&&typeof f==="object"&&!Array.isArray(f))return f}catch{}return}function x7($,f={}){if(!$)return;try{let J=JSON.parse($);if(!Array.isArray(J))return;let Q=J.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);if(f.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function a1($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function X1($){return{specId:t($.spec_id),externalId:t($.external_id),sourcePath:t($.source_path),triggerKind:t($.trigger_kind),sourceMtimeMs:a1($.source_mtime_ms),sourceHash:I($.source_hash),parseStatus:t($.parse_status)==="invalid"?"invalid":"valid",parseError:I($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:t($.title),prompt:I($.prompt),workspaceRoot:I($.workspace_root),scheduleExpr:I($.schedule_expr),timezone:I($.timezone),eventType:I($.event_type),filters:qJ(I($.filters_json)),debounceSeconds:a1($.debounce_seconds),dedupeWindowSeconds:a1($.dedupe_window_seconds),cooldownSeconds:a1($.cooldown_seconds),mode:I($.mode),systemPrompt:I($.system_prompt),providerId:I($.provider_id),modelId:I($.model_id),maxIterations:a1($.max_iterations),timeoutSeconds:a1($.timeout_seconds),maxParallel:a1($.max_parallel),tools:x7(I($.tools_json),{preserveEmpty:!0}),notesDirectory:I($.notes_directory),extensions:x7(I($.extensions_json),{preserveEmpty:!0}),source:I($.source),tags:x7(I($.tags_json)),metadata:qJ(I($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:I($.last_materialized_run_id),lastRunAt:I($.last_run_at),nextRunAt:I($.next_run_at),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function g7($){return{runId:t($.run_id),specId:t($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:t($.trigger_kind),status:t($.status),claimToken:I($.claim_token),claimStartedAt:I($.claim_started_at),claimUntilAt:I($.claim_until_at),scheduledFor:I($.scheduled_for),triggerEventId:I($.trigger_event_id),startedAt:I($.started_at),completedAt:I($.completed_at),sessionId:I($.session_id),reportPath:I($.report_path),error:I($.error),attemptCount:Number($.attempt_count??0),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function EH($){return{eventId:t($.event_id),eventType:t($.event_type),source:t($.source),subject:I($.subject),occurredAt:t($.occurred_at),receivedAt:t($.received_at),workspaceRoot:I($.workspace_root),dedupeKey:I($.dedupe_key),payload:qJ(I($.payload_json)),attributes:qJ(I($.attributes_json)),processingStatus:t($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:I($.error),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function hH($){return $?JSON.stringify($):null}var zL=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function bH($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function _L($,f,J,Q){for(let Z of zL){let W=$[Z],j=f[Z];if(bH(W)!==bH(j))return!0}if(J===!1&&Q===!0)return!0;return!1}function yL($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function TL($){return`hub/schedules/${$}.cron.md`}function NL($){let f={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(f).length>0?f:void 0}function m7($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((f)=>f.trim().length>0),enabled:$.enabled!==!1,metadata:NL($)}}function kH($){return JSON.stringify(m7($))}function ML($,f){let J=$.metadata?{...$.metadata}:{},Q=f.createdBy===null?void 0:f.createdBy!==void 0?f.createdBy:typeof J.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,Z=f.cwd!==void 0?f.cwd:typeof J.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,W=f.runtimeOptions!==void 0?f.runtimeOptions:J.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0;return delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions,{name:f.name??$.title,cronPattern:f.cronPattern??$.scheduleExpr??"",prompt:f.prompt??$.prompt??"",workspaceRoot:f.workspaceRoot??$.workspaceRoot??"",cwd:Z,modelSelection:f.modelSelection!==void 0?f.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:f.enabled??$.enabled,mode:f.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:f.systemPrompt===null?void 0:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,maxIterations:f.maxIterations===null?void 0:f.maxIterations!==void 0?f.maxIterations:$.maxIterations,timeoutSeconds:f.timeoutSeconds===null?void 0:f.timeoutSeconds!==void 0?f.timeoutSeconds:$.timeoutSeconds,maxParallel:f.maxParallel??$.maxParallel??1,createdBy:Q,tags:f.tags??$.tags,runtimeOptions:W,metadata:f.metadata!==void 0?f.metadata:Object.keys(J).length>0?J:void 0}}class V4{db;constructor($={}){let f=$.dbPath??OL();this.db=LL(f),CH(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return f?X1(f):void 0}getSpec($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return f?X1(f):void 0}getSpecByExternalId($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return f?X1(f):void 0}listSpecs($={}){let f=[],J=[];if($.triggerKind)f.push("trigger_kind = ?"),J.push($.triggerKind);if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.parseStatus)f.push("parse_status = ?"),J.push($.parseStatus);if(!$.includeRemoved)f.push("removed = 0");let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((j)=>X1(j))}createHubSchedule($){let f=`sched_${Y4()}`,J=this.upsertSpec({externalId:f,sourcePath:TL(f),triggerKind:"schedule",sourceHash:kH($),parseStatus:"valid",spec:m7($)});this.initializeScheduleNextRun(J.record.specId);let Q=this.getSpec(J.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let f=this.db.prepare(`SELECT * FROM cron_specs
326
334
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
327
- ORDER BY created_at ASC LIMIT 1`).get(f);return $?H$($):void 0}listHubSchedules(f={}){let $=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],J=[];if(typeof f.enabled==="boolean")$.push("enabled = ?"),J.push(f.enabled?1:0);if(f.tags&&f.tags.length>0)for(let Q of f.tags)$.push("tags_json LIKE ?"),J.push(`%"${Q.trim()}"%`);let W=Math.max(1,Math.floor(f.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
328
- WHERE ${$.join(" AND ")}
329
- ORDER BY created_at DESC LIMIT ?`).all(...J,W).map((Q)=>H$(Q))}updateHubSchedule(f,$){let J=this.getHubSchedule(f);if(!J)return;let W=eU(J,$),H=this.upsertSpec({externalId:f,sourcePath:J.sourcePath,triggerKind:"schedule",sourceHash:nj(W),parseStatus:"valid",spec:y9(W)});if($.cronPattern!==void 0||$.enabled!==void 0)this.initializeScheduleNextRun(H.record.specId);return this.getSpec(H.record.specId)}deleteHubSchedule(f){let $=this.getHubSchedule(f);if(!$)return!1;return this.markSpecRemoved($.specId),this.cancelQueuedRunsForSpec($.specId),!0}enqueueHubScheduleRun(f,$="manual"){let J=this.getHubSchedule(f);if(!J||!J.enabled||J.removed||J.parseStatus!=="valid")return;return this.enqueueRun({specId:J.specId,specRevision:J.revision,triggerKind:$,scheduledFor:yf()})}listEventSpecsForType(f){return this.db.prepare(`SELECT * FROM cron_specs
335
+ ORDER BY created_at ASC LIMIT 1`).get($);return f?X1(f):void 0}listHubSchedules($={}){let f=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],J=[];if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let W of $.tags)f.push("tags_json LIKE ?"),J.push(`%"${W.trim()}"%`);let Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
336
+ WHERE ${f.join(" AND ")}
337
+ ORDER BY created_at DESC LIMIT ?`).all(...J,Q).map((W)=>X1(W))}updateHubSchedule($,f){let J=this.getHubSchedule($);if(!J)return;let Q=ML(J,f),Z=this.upsertSpec({externalId:$,sourcePath:J.sourcePath,triggerKind:"schedule",sourceHash:kH(Q),parseStatus:"valid",spec:m7(Q)});if(f.cronPattern!==void 0||f.enabled!==void 0)this.initializeScheduleNextRun(Z.record.specId);return this.getSpec(Z.record.specId)}deleteHubSchedule($){let f=this.getHubSchedule($);if(!f)return!1;return this.markSpecRemoved(f.specId),this.cancelQueuedRunsForSpec(f.specId),!0}enqueueHubScheduleRun($,f="manual"){let J=this.getHubSchedule($);if(!J||!J.enabled||J.removed||J.parseStatus!=="valid")return;return this.enqueueRun({specId:J.specId,specRevision:J.revision,triggerKind:f,scheduledFor:D0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
330
338
  WHERE trigger_kind = 'event'
331
339
  AND event_type = ?
332
340
  AND enabled = 1
333
341
  AND removed = 0
334
342
  AND parse_status = 'valid'
335
- ORDER BY created_at ASC`).all(f).map((J)=>H$(J))}upsertSpec(f){let $=yf(),J=this.getSpecBySourcePath(f.sourcePath),W=f.spec,H={title:W?.title??J?.title??tU(f.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},Q=f.parseStatus==="valid"&&(W?.enabled??!0);if(!J){let P=`cspec_${s8()}`;this.insertSpecRow(P,f,H,Q,$);let B=this.getSpec(P);if(!B)throw Error("failed to insert cron_spec row");return{record:B,created:!0,revisionChanged:!0}}let j=J.sourceHash!==f.sourceHash&&aU(J,H,J.enabled,Q),X=j?J.revision+1:J.revision;this.updateSpecRow(J.specId,f,H,Q,X,$);let A=this.getSpec(J.specId);if(!A)throw Error("failed to reload cron_spec after update");return{record:A,created:!1,revisionChanged:j}}insertSpecRow(f,$,J,W,H){let Q=$.spec;this.db.prepare(`INSERT INTO cron_specs (
343
+ ORDER BY created_at ASC`).all($).map((J)=>X1(J))}upsertSpec($){let f=D0(),J=this.getSpecBySourcePath($.sourcePath),Q=$.spec,Z={title:Q?.title??J?.title??yL($.sourcePath),prompt:Q?.prompt,workspaceRoot:Q?.workspaceRoot,scheduleExpr:Q?.triggerKind==="schedule"?Q.schedule:void 0,timezone:Q?.triggerKind==="schedule"?Q.timezone:void 0,eventType:Q?.triggerKind==="event"?Q.event:void 0,filters:Q?.triggerKind==="event"?Q.filters:void 0,debounceSeconds:Q?.triggerKind==="event"?Q.debounceSeconds:void 0,dedupeWindowSeconds:Q?.triggerKind==="event"?Q.dedupeWindowSeconds:void 0,cooldownSeconds:Q?.triggerKind==="event"?Q.cooldownSeconds:void 0,mode:Q?.mode,systemPrompt:Q?.systemPrompt,providerId:Q?.modelSelection?.providerId,modelId:Q?.modelSelection?.modelId,maxIterations:Q?.maxIterations,timeoutSeconds:Q?.timeoutSeconds,maxParallel:Q&&"maxParallel"in Q?Q.maxParallel:void 0,tools:Q?.tools,notesDirectory:Q?.notesDirectory,extensions:Q?.extensions,source:Q?.source},W=$.parseStatus==="valid"&&(Q?.enabled??!0);if(!J){let V=`cspec_${Y4()}`;this.insertSpecRow(V,$,Z,W,f);let A=this.getSpec(V);if(!A)throw Error("failed to insert cron_spec row");return{record:A,created:!0,revisionChanged:!0}}let X=J.sourceHash!==$.sourceHash&&_L(J,Z,J.enabled,W),H=X?J.revision+1:J.revision;this.updateSpecRow(J.specId,$,Z,W,H,f);let Y=this.getSpec(J.specId);if(!Y)throw Error("failed to reload cron_spec after update");return{record:Y,created:!1,revisionChanged:X}}insertSpecRow($,f,J,Q,Z){let W=f.spec;this.db.prepare(`INSERT INTO cron_specs (
336
344
  spec_id, external_id, source_path, trigger_kind,
337
345
  source_mtime_ms, source_hash, parse_status, parse_error,
338
346
  enabled, removed, title, prompt, workspace_root,
@@ -343,7 +351,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
343
351
  tools_json, notes_directory, extensions_json, source,
344
352
  tags_json, metadata_json, revision,
345
353
  created_at, updated_at
346
- ) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run(f,$.externalId,$.sourcePath,$.triggerKind,$.sourceMtimeMs??null,$.sourceHash,$.parseStatus,$.parseError??null,W?1:0,0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,Q?.tags?JSON.stringify(Q.tags):null,Q?.metadata?JSON.stringify(Q.metadata):null,1,H,H)}updateSpecRow(f,$,J,W,H,Q){let Z=$.spec;this.db.prepare(`UPDATE cron_specs SET
354
+ ) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,f.externalId,f.sourcePath,f.triggerKind,f.sourceMtimeMs??null,f.sourceHash,f.parseStatus,f.parseError??null,Q?1:0,0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,W?.tags?JSON.stringify(W.tags):null,W?.metadata?JSON.stringify(W.metadata):null,1,Z,Z)}updateSpecRow($,f,J,Q,Z,W){let j=f.spec;this.db.prepare(`UPDATE cron_specs SET
347
355
  external_id = ?, trigger_kind = ?,
348
356
  source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
349
357
  enabled = ?, removed = 0, title = ?, prompt = ?,
@@ -355,63 +363,63 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
355
363
  tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
356
364
  tags_json = ?, metadata_json = ?,
357
365
  revision = ?, updated_at = ?
358
- WHERE spec_id = ?`).run($.externalId,$.triggerKind,$.sourceMtimeMs??null,$.sourceHash,$.parseStatus,$.parseError??null,W?1:0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,Z?.tags?JSON.stringify(Z.tags):null,Z?.metadata?JSON.stringify(Z.metadata):null,H,Q,f)}markSpecRemoved(f){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(yf(),f)}updateSpecNextRunAt(f,$){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run($??null,yf(),f)}updateSpecLastRunAt(f,$){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run($,yf(),f)}updateLastMaterializedRunId(f,$){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run($,yf(),f)}initializeScheduleNextRun(f){let $=this.getSpec(f);if(!$||$.triggerKind!=="schedule"||!$.enabled||!$.scheduleExpr){this.updateSpecNextRunAt(f,void 0);return}let J=new Date(v$($.scheduleExpr,Date.now(),$.timezone)).toISOString();this.updateSpecNextRunAt(f,J)}materializeDueScheduleRun(f){let $=f.nowMs,J=new Date($).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get(f.specId);if(!W)return this.db.exec("COMMIT;"),{queued:!1};let H=H$(W);if(H.triggerKind!=="schedule"||!H.enabled||H.removed||H.parseStatus!=="valid"||!H.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let Q=H.nextRunAt;if(!Q){let X=new Date(v$(H.scheduleExpr,$,H.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(X,J,H.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X}}if(new Date(Q).getTime()>$)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:Q};let Z=`crun_${s8()}`,j;try{j=new Date(v$(H.scheduleExpr,$,H.timezone)).toISOString()}catch{j=void 0}return this.db.prepare(`INSERT INTO cron_runs (
366
+ WHERE spec_id = ?`).run(f.externalId,f.triggerKind,f.sourceMtimeMs??null,f.sourceHash,f.parseStatus,f.parseError??null,Q?1:0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,Z,W,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(D0(),$)}updateSpecNextRunAt($,f){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(f??null,D0(),$)}updateSpecLastRunAt($,f){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(f,D0(),$)}updateLastMaterializedRunId($,f){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(f,D0(),$)}initializeScheduleNextRun($){let f=this.getSpec($);if(!f||f.triggerKind!=="schedule"||!f.enabled||!f.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let J=new Date(n1(f.scheduleExpr,Date.now(),f.timezone)).toISOString();this.updateSpecNextRunAt($,J)}materializeDueScheduleRun($){let f=$.nowMs,J=new Date(f).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Q)return this.db.exec("COMMIT;"),{queued:!1};let Z=X1(Q);if(Z.triggerKind!=="schedule"||!Z.enabled||Z.removed||Z.parseStatus!=="valid"||!Z.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let W=Z.nextRunAt;if(!W){let H=new Date(n1(Z.scheduleExpr,f,Z.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(H,J,Z.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:H}}if(new Date(W).getTime()>f)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:W};let j=`crun_${Y4()}`,X;try{X=new Date(n1(Z.scheduleExpr,f,Z.timezone)).toISOString()}catch{X=void 0}return this.db.prepare(`INSERT INTO cron_runs (
359
367
  run_id, spec_id, spec_revision, trigger_kind, status,
360
368
  scheduled_for, trigger_event_id, attempt_count,
361
369
  created_at, updated_at
362
- ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Z,H.specId,H.revision,"schedule","queued",Q,null,0,J,J),this.db.prepare(`UPDATE cron_specs SET
370
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(j,Z.specId,Z.revision,"schedule","queued",W,null,0,J,J),this.db.prepare(`UPDATE cron_specs SET
363
371
  last_materialized_run_id = ?,
364
372
  last_run_at = ?,
365
373
  next_run_at = ?,
366
374
  updated_at = ?
367
- WHERE spec_id = ?`).run(Z,J,j??null,J,H.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Z),nextRunAt:j}}catch(W){throw this.db.exec("ROLLBACK;"),W}}getRun(f){let $=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get(f);return $?K9($):void 0}insertEventLog(f,$={}){let J=yf(),W=$.receivedAtIso??J,H=f.eventId.trim();if(!H)throw Error("automation event requires eventId");let Q=f.eventType.trim();if(!Q)throw Error("automation event requires eventType");let Z=f.source.trim();if(!Z)throw Error("automation event requires source");let j=f.occurredAt.trim()||W,X=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
375
+ WHERE spec_id = ?`).run(j,J,X??null,J,Z.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(j),nextRunAt:X}}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}getRun($){let f=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return f?g7(f):void 0}insertEventLog($,f={}){let J=D0(),Q=f.receivedAtIso??J,Z=$.eventId.trim();if(!Z)throw Error("automation event requires eventId");let W=$.eventType.trim();if(!W)throw Error("automation event requires eventType");let j=$.source.trim();if(!j)throw Error("automation event requires source");let X=$.occurredAt.trim()||Q,H=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
368
376
  event_id, event_type, source, subject,
369
377
  occurred_at, received_at, workspace_root, dedupe_key,
370
378
  payload_json, attributes_json, processing_status,
371
379
  matched_spec_count, queued_run_count, suppressed_count,
372
380
  error, created_at, updated_at
373
- ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(H,Q,Z,f.subject?.trim()||null,j,W,f.workspaceRoot?.trim()||null,f.dedupeKey?.trim()||null,pj(f.payload),pj(f.attributes),"received",0,0,0,null,J,J).changes??0,A=this.getEventLog(H);if(!A)throw Error("failed to insert cron_event_log row");return{record:A,created:X===1}}getEventLog(f){let $=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get(f);return $?lj($):void 0}listEventLogs(f={}){let $=[],J=[];if(f.eventType)$.push("event_type = ?"),J.push(f.eventType);if(f.source)$.push("source = ?"),J.push(f.source);if(f.processingStatus)$.push("processing_status = ?"),J.push(f.processingStatus);let W=$.length>0?`WHERE ${$.join(" AND ")}`:"",H=Math.max(1,Math.floor(f.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${W}
381
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(Z,W,j,$.subject?.trim()||null,X,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,hH($.payload),hH($.attributes),"received",0,0,0,null,J,J).changes??0,Y=this.getEventLog(Z);if(!Y)throw Error("failed to insert cron_event_log row");return{record:Y,created:H===1}}getEventLog($){let f=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return f?EH(f):void 0}listEventLogs($={}){let f=[],J=[];if($.eventType)f.push("event_type = ?"),J.push($.eventType);if($.source)f.push("source = ?"),J.push($.source);if($.processingStatus)f.push("processing_status = ?"),J.push($.processingStatus);let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Q}
374
382
  ORDER BY received_at DESC, created_at DESC
375
- LIMIT ?`).all(...J,H).map((Z)=>lj(Z))}updateEventLogProcessing(f,$){return(this.db.prepare(`UPDATE cron_event_log SET
383
+ LIMIT ?`).all(...J,Z).map((j)=>EH(j))}updateEventLogProcessing($,f){return(this.db.prepare(`UPDATE cron_event_log SET
376
384
  processing_status = ?,
377
385
  matched_spec_count = COALESCE(?, matched_spec_count),
378
386
  queued_run_count = COALESCE(?, queued_run_count),
379
387
  suppressed_count = COALESCE(?, suppressed_count),
380
388
  error = ?,
381
389
  updated_at = ?
382
- WHERE event_id = ?`).run($.status,$.matchedSpecCount??null,$.queuedRunCount??null,$.suppressedCount??null,$.error??null,yf(),f).changes??0)===1}listRuns(f={}){let $=[],J=[];if(f.specId)$.push("spec_id = ?"),J.push(f.specId);if(f.status){let Z=Array.isArray(f.status)?f.status:[f.status];if(Z.length>0){let j=Z.map(()=>"?").join(",");$.push(`status IN (${j})`);for(let X of Z)J.push(X)}}let W=$.length>0?`WHERE ${$.join(" AND ")}`:"",H=Math.max(1,Math.floor(f.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${W} ORDER BY created_at DESC LIMIT ?`).all(...J,H).map((Z)=>K9(Z))}hasRecentEventRunForDedupe(f){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
390
+ WHERE event_id = ?`).run(f.status,f.matchedSpecCount??null,f.queuedRunCount??null,f.suppressedCount??null,f.error??null,D0(),$).changes??0)===1}listRuns($={}){let f=[],J=[];if($.specId)f.push("spec_id = ?"),J.push($.specId);if($.status){let j=Array.isArray($.status)?$.status:[$.status];if(j.length>0){let X=j.map(()=>"?").join(",");f.push(`status IN (${X})`);for(let H of j)J.push(H)}}let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((j)=>g7(j))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
383
391
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
384
392
  WHERE r.spec_id = ?
385
393
  AND r.trigger_kind = 'event'
386
394
  AND e.dedupe_key = ?
387
395
  AND e.received_at >= ?
388
- LIMIT 1`).get(f.specId,f.dedupeKey,f.sinceIso)}hasRecentEventRunForSpec(f){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
396
+ LIMIT 1`).get($.specId,$.dedupeKey,$.sinceIso)}hasRecentEventRunForSpec($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
389
397
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
390
398
  WHERE r.spec_id = ?
391
399
  AND r.trigger_kind = 'event'
392
400
  AND e.received_at >= ?
393
- LIMIT 1`).get(f.specId,f.sinceIso)}findQueuedEventRunForDedupe(f){let $=this.db.prepare(`SELECT r.* FROM cron_runs r
401
+ LIMIT 1`).get($.specId,$.sinceIso)}findQueuedEventRunForDedupe($){let f=this.db.prepare(`SELECT r.* FROM cron_runs r
394
402
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
395
403
  WHERE r.spec_id = ?
396
404
  AND r.trigger_kind = 'event'
397
405
  AND r.status = 'queued'
398
406
  AND e.dedupe_key = ?
399
407
  ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
400
- LIMIT 1`).get(f.specId,f.dedupeKey);return $?K9($):void 0}updateQueuedEventRunForDebounce(f){let $=yf();if((this.db.prepare(`UPDATE cron_runs SET
408
+ LIMIT 1`).get($.specId,$.dedupeKey);return f?g7(f):void 0}updateQueuedEventRunForDebounce($){let f=D0();if((this.db.prepare(`UPDATE cron_runs SET
401
409
  trigger_event_id = ?,
402
410
  scheduled_for = ?,
403
411
  updated_at = ?
404
412
  WHERE run_id = ?
405
413
  AND trigger_kind = 'event'
406
- AND status = 'queued'`).run(f.triggerEventId,f.scheduledFor,$,f.runId).changes??0)!==1)return;return this.getRun(f.runId)}hasOneOffRunForRevision(f,$){return!!this.db.prepare(`SELECT run_id FROM cron_runs
414
+ AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,f,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,f){return!!this.db.prepare(`SELECT run_id FROM cron_runs
407
415
  WHERE spec_id = ? AND spec_revision = ?
408
416
  AND trigger_kind = 'one_off'
409
- LIMIT 1`).get(f,$)}enqueueRun(f){let $=`crun_${s8()}`,J=yf();this.db.prepare(`INSERT INTO cron_runs (
417
+ LIMIT 1`).get($,f)}enqueueRun($){let f=`crun_${Y4()}`,J=D0();this.db.prepare(`INSERT INTO cron_runs (
410
418
  run_id, spec_id, spec_revision, trigger_kind, status,
411
419
  scheduled_for, trigger_event_id, attempt_count,
412
420
  created_at, updated_at
413
- ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run($,f.specId,f.specRevision,f.triggerKind,"queued",f.scheduledFor??null,f.triggerEventId??null,0,J,J),this.updateLastMaterializedRunId(f.specId,$);let W=this.getRun($);if(!W)throw Error("failed to insert cron_run row");return W}cancelQueuedRunsForSpec(f){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
414
- WHERE spec_id = ? AND status = 'queued'`).run(yf(),f).changes??0}claimDueRuns(f){let $=f.nowIso,J=Math.max(1000,Math.floor(f.leaseMs)),W=new Date(new Date($).getTime()+J).toISOString(),H=Math.max(1,Math.floor(f.limit??25)),Q=[];this.db.exec("BEGIN IMMEDIATE;");try{let Z=this.db.prepare(`SELECT * FROM cron_runs
421
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(f,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,J,J),this.updateLastMaterializedRunId($.specId,f);let Q=this.getRun(f);if(!Q)throw Error("failed to insert cron_run row");return Q}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
422
+ WHERE spec_id = ? AND status = 'queued'`).run(D0(),$).changes??0}claimDueRuns($){let f=$.nowIso,J=Math.max(1000,Math.floor($.leaseMs)),Q=new Date(new Date(f).getTime()+J).toISOString(),Z=Math.max(1,Math.floor($.limit??25)),W=[];this.db.exec("BEGIN IMMEDIATE;");try{let j=this.db.prepare(`SELECT * FROM cron_runs
415
423
  WHERE (
416
424
  status = 'queued'
417
425
  OR (
@@ -423,7 +431,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
423
431
  )
424
432
  AND (scheduled_for IS NULL OR scheduled_for <= ?)
425
433
  ORDER BY COALESCE(scheduled_for, created_at) ASC
426
- LIMIT ?`).all($,$,H);for(let j of Z){let X=t(j.run_id);if(!X)continue;let A=`cclaim_${s8()}`;if((this.db.prepare(`UPDATE cron_runs SET
434
+ LIMIT ?`).all(f,f,Z);for(let X of j){let H=t(X.run_id);if(!H)continue;let Y=`cclaim_${Y4()}`;if((this.db.prepare(`UPDATE cron_runs SET
427
435
  status = 'running',
428
436
  claim_token = ?,
429
437
  claim_started_at = ?,
@@ -444,8 +452,8 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
444
452
  AND claim_until_at <= ?
445
453
  AND completed_at IS NULL
446
454
  )
447
- )`).run(A,$,W,$,$,X,$).changes??0)!==1)continue;let B=this.getRun(X);if(!B)continue;Q.push({run:B,claimToken:A,claimUntilAt:W})}this.db.exec("COMMIT;")}catch(Z){throw this.db.exec("ROLLBACK;"),Z}return Q}renewClaim(f,$,J){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
448
- WHERE run_id = ? AND claim_token = ?`).run(J,yf(),f,$).changes??0)===1}completeRun(f,$){let J=$.completedAtIso??yf(),W=$.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
455
+ )`).run(Y,f,Q,f,f,H,f).changes??0)!==1)continue;let A=this.getRun(H);if(!A)continue;W.push({run:A,claimToken:Y,claimUntilAt:Q})}this.db.exec("COMMIT;")}catch(j){throw this.db.exec("ROLLBACK;"),j}return W}renewClaim($,f,J){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
456
+ WHERE run_id = ? AND claim_token = ?`).run(J,D0(),$,f).changes??0)===1}completeRun($,f){let J=f.completedAtIso??D0(),Q=f.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
449
457
  status = ?,
450
458
  session_id = COALESCE(?, session_id),
451
459
  report_path = COALESCE(?, report_path),
@@ -455,7 +463,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
455
463
  claim_token = NULL,
456
464
  claim_until_at = NULL,
457
465
  updated_at = ?
458
- ${W}`).run($.status,$.sessionId??null,$.reportPath??null,$.error??null,J,J,f,...$.claimToken?[$.claimToken]:[]).changes??0)>0}requeueRun(f){let $=yf();return(this.db.prepare(`UPDATE cron_runs SET
466
+ ${Q}`).run(f.status,f.sessionId??null,f.reportPath??null,f.error??null,J,J,$,...f.claimToken?[f.claimToken]:[]).changes??0)>0}requeueRun($){let f=D0();return(this.db.prepare(`UPDATE cron_runs SET
459
467
  status = 'queued',
460
468
  claim_started_at = NULL,
461
469
  claim_token = NULL,
@@ -467,40 +475,40 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Mat
467
475
  error = ?,
468
476
  scheduled_for = COALESCE(?, scheduled_for),
469
477
  updated_at = ?
470
- WHERE run_id = ? AND claim_token = ?`).run(f.error??null,f.scheduledFor??null,$,f.runId,f.claimToken).changes??0)>0}attachSessionIdToRun(f,$){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run($,yf(),f)}attachReportPathToRun(f,$){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run($,yf(),f)}}class e8{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor(f){this.store=new o8({dbPath:f.dbPath});let $=f.specs;this.reconciler=new V9({store:this.store,specs:$}),this.materializer=new i8({store:this.store}),this.eventIngress=new J9({store:this.store,logger:f.logger}),this.runner=new n8({store:this.store,materializer:this.materializer,runtimeHandlers:f.runtimeHandlers,workspaceRoot:f.workspaceRoot,specs:$,logger:f.logger,pollIntervalMs:f.pollIntervalMs,claimLeaseSeconds:f.claimLeaseSeconds,globalMaxConcurrency:f.globalMaxConcurrency}),this.watcher=new R9({reconciler:this.reconciler,debounceMs:f.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(J)=>{let W=f.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:J});else W.log("cron.watcher.failed",{error:J})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs(f){return this.store.listSpecs(f)}getSpec(f){return this.store.getSpec(f)}listRuns(f){return this.store.listRuns(f)}getRun(f){return this.store.getRun(f)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns(f=20){return this.store.listRuns({status:"queued",limit:f})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent(f){return this.eventIngress.ingestEvent(f)}listEventLogs(f){return this.store.listEventLogs(f)}getEventLog(f){return this.store.getEventLog(f)}}var WX={};N(WX,{manifestToSessionRecord:()=>YJ,listSessionHistoryFromBackend:()=>D9,listSessionHistory:()=>VJ,hydrateSessionHistory:()=>JX});import{readdir as WG,readFile as ej}from"node:fs/promises";import{join as fX}from"node:path";import{formatDisplayUserInput as HG,normalizeUserInput as QG}from"@cline/shared";import{resolveSessionDataDir as $X}from"@cline/shared/storage";import{existsSync as fG}from"node:fs";import{readFile as $G}from"node:fs/promises";import{formatDisplayUserInput as aj}from"@cline/shared";class f4{listeners=new Set;subscribe(f,$){let J={listener:f,sessionId:$?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit(f){let $=f.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$)continue;J.listener(f)}}get size(){return this.listeners.size}}async function Q$(f){let $=f?.trim();if(!$||!fG($))return[];try{let J=(await $G($,"utf8")).trim();if(!J)return[];let W=JSON.parse(J);if(Array.isArray(W))return tj(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let H=W.messages;if(Array.isArray(H))return tj(H)}return[]}catch{return[]}}function JG(f){if(f.role!=="user")return f;if(typeof f.content==="string")return{...f,content:aj(f.content)};return{...f,content:f.content.map(($)=>{if($.type!=="text"||typeof $.text!=="string")return $;return{...$,text:aj($.text)}})}}function tj(f){return f.map(JG)}function U9(f){return f?{...f}:void 0}async function sj(f,$){if(!(f.hookName==="tool_call"||!!f.parent_agent_id))return;await $.queueSpawnRequest(f);let W=await $.upsertSubagentSessionFromHook(f);if(!W)return;await $.appendSubagentHookAudit(W,f),await $.applySubagentStatus(W,f)}function PJ(f){if(typeof f!=="string")return;let $=f.trim();return $.length>0?$:void 0}function mf(f){let $=PJ(f);if(!$)return;return $.toLowerCase()==="unknown"?void 0:$}function BJ(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function ZG(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return{...f}}function T9(f){let $=f??200;return Number.isFinite($)?Math.max(0,Math.floor($)):200}function jG(f){let $=f.match(/\d{13,}/g);if(!$||$.length===0)return 0;let J=0;for(let W of $){let H=Number.parseInt(W,10);if(Number.isFinite(H)&&H>J)J=H}return J}function YJ(f){return{sessionId:f.session_id,source:f.source,pid:f.pid,startedAt:f.started_at,endedAt:f.ended_at??null,exitCode:f.exit_code??null,status:f.status,interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspaceRoot:f.workspace_root,teamName:f.team_name,enableTools:f.enable_tools,enableSpawn:f.enable_spawn,enableTeams:f.enable_teams,isSubagent:!1,prompt:f.prompt,metadata:f.metadata,messagesPath:f.messages_path,updatedAt:f.ended_at??f.started_at}}async function XG(f){let $=T9(f);if($===0)return[];let J=$X(),H=(await WG(J,{withFileTypes:!0}).catch(()=>[])).filter((Z)=>Z.isDirectory()).map((Z)=>({entry:Z,recency:jG(Z.name.trim())})).sort((Z,j)=>j.recency-Z.recency||j.entry.name.localeCompare(Z.entry.name));return(await Promise.all(H.map(async({entry:Z})=>{let j=Z.name.trim();if(!j)return;let X=fX(J,j,`${j}.json`),A=await ej(X,"utf8").catch(()=>{return});if(!A)return;let P;try{P=JSON.parse(A)}catch{return}let B=Mf.safeParse(P);if(!B.success)return;return YJ(B.data)}))).filter((Z)=>Boolean(Z)).sort((Z,j)=>j.startedAt.localeCompare(Z.startedAt)).slice(0,$)}async function AG(f,$){let J=T9($);if(J===0)return await f.listSessions(0),[];return(await f.listSessions(J)).slice(0,J)}function PG(f){if(typeof f==="string")return f.trim();let $=[];for(let J of f){if(!J||typeof J!=="object")continue;let W=J;if(W.type!=="text")continue;let H=W.text?.trim();if(H)$.push(H)}return $.join(`
471
- `).trim()}function oj(f){return f.replace(/\s+/g," ").trim()}function BG(f,$){if(f.length<=$)return f;return`${f.slice(0,Math.max(0,$-3)).trimEnd()}...`}function YG(f){for(let $ of["user","assistant"])for(let J of f){if(J.role!==$)continue;let W=oj(PG(J.content));if(!W)continue;let H=$==="user"?oj(HG(W)):W,Q=QG(H.split(`
472
- `)[0]??H);return BG(Q,50)}return}function VG(f){let $=0;for(let J of f)$+=BJ(J.metrics?.cost)??0;return $}function RG(f){let $,J;for(let W=f.length-1;W>=0;W-=1){let H=f[W];if(!$)$=mf(H.modelInfo?.provider);if(!J)J=mf(H.modelInfo?.id);if($&&J)break}return{provider:$,model:J}}function FG(f){return mf(f?.provider)??mf(f?.provider&&typeof f.provider==="object"&&!Array.isArray(f.provider)?f.provider.id:void 0)}function KG(f){return mf(f?.model)??mf(f?.model&&typeof f.model==="object"&&!Array.isArray(f.model)?f.model.id:void 0)}function G9(f,$){let J=ZG(f.metadata),W=PJ($?.title)??PJ(J?.title),H=BJ($?.totalCost)??BJ(J?.totalCost),Q=J||W!==void 0||H!==void 0?{...J??{},...W!==void 0?{title:W}:{},...H!==void 0?{totalCost:H}:{}}:void 0;return{...f,provider:mf($?.provider)??mf(f.provider)??FG(J)??"",model:mf($?.model)??mf(f.model)??KG(J)??"",metadata:Q}}async function JX(f,$){return await Promise.all($.map(async(J)=>{let W=G9(J),H=Boolean(PJ(W.metadata?.title)),Q=Boolean(mf(W.provider)),Z=Boolean(mf(W.model)),j=BJ(W.metadata?.totalCost),X=j!==void 0&&j>0;if(H&&Q&&Z&&X)return W;let A=await f.readSessionMessages(J.sessionId);if(A.length===0)return W;let P=RG(A),B=VG(A);return G9(J,{title:H?void 0:YG(A),provider:Q?void 0:P.provider,model:Z?void 0:P.model,totalCost:X||B<=0?void 0:B})}))}async function VJ(f,$={}){let J=T9($.limit),W=await AG(f,J),H=$.includeManifestFallback===!0&&W.length<J?await XG(Math.min(Math.max(J*2,100),500)):[],Q=new Map;for(let j of[...W,...H]){if(Q.has(j.sessionId))continue;Q.set(j.sessionId,j)}let Z=H.length===0?W:Array.from(Q.values()).sort((j,X)=>X.startedAt.localeCompare(j.startedAt)).slice(0,J);if($.hydrate===!1)return Z.map((j)=>G9(j));return await JX(f,Z)}async function yG(f){let $=f.trim();if(!$)return;let J=fX($X(),$,`${$}.json`),W=await ej(J,"utf8").catch(()=>{return});if(!W)return;try{let H=Mf.safeParse(JSON.parse(W));return H.success?H.data.messages_path:void 0}catch{return}}async function D9(f,$={}){let J=new Map;return await VJ({listSessions:async(H)=>{let Q=await f.listSessions(H);J.clear();for(let Z of Q)J.set(Z.sessionId,Z);return Q.map(p2)},readSessionMessages:async(H)=>{let Q=J.get(H)?.messagesPath??await yG(H);return await Q$(Q)}},$)}var QA={};N(QA,{resolveSessionBackend:()=>WH,createRuntimeHost:()=>o1});import{createSessionId as jT,resolveHubCommandTimeoutMs as XT}from"@cline/shared";import{spawn as gG}from"node:child_process";import{closeSync as vG,mkdirSync as uG,openSync as cG}from"node:fs";import{basename as dG,dirname as rG,join as lG}from"node:path";import{fileURLToPath as pG}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as iG,isHubDaemonProcess as yX,withResolvedClineBuildEnv as nG}from"@cline/shared";import{createHash as UG,randomBytes as GG}from"node:crypto";import{existsSync as TG}from"node:fs";import{chmod as DG,mkdir as _9,readFile as AX,rm as M9,writeFile as PX}from"node:fs/promises";import{dirname as BX,join as L9}from"node:path";import{resolveClineDataDir as $4,resolveClineDir as YX}from"@cline/shared/storage";var QX="0.0.39";var ZX={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:QX,repository:{type:"git",url:"https://github.com/cline/sdk",directory:"packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"rm -rf dist && bun run ./bun.mts && bun tsc -p tsconfig.build.json",clean:"rm -rf dist node_modules",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: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:*","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^1.21.7","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"^3.32.3",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var _G="CLINE_HUB_DISCOVERY_PATH",MG="CLINE_HUB_BUILD_ID",jX=30000,LG=15000,hG=100;function OG(f){return f.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function zG(f){return UG("sha256").update(f).digest("hex").slice(0,12)}function NG(f){if(!Number.isInteger(f)||!f||f<=0)return!1;try{return process.kill(f,0),!0}catch($){return $ instanceof Error&&"code"in $?String($.code)==="EPERM":!1}}function RJ(){return GG(32).toString("hex")}function qG(f){return new Promise(($)=>setTimeout($,f))}function wG(f){return`${f}.lock`}async function bG(f){try{let $=JSON.parse(await AX(L9(f,"owner.json"),"utf8"));if(typeof $.pid!=="number"||typeof $.acquiredAt!=="string")return;return{pid:$.pid,acquiredAt:$.acquiredAt}}catch{return}}async function XX(f){await M9(f,{recursive:!0,force:!0}).catch(()=>{return})}function Z$(){return process.env[MG]?.trim()||String(ZX.version)}function z0(f=process.argv[1]?.trim()||process.cwd()){let $=`hub-${zG(f)}`,J=process.env[_G]?.trim()||L9($4(),"locks","hub","owners",`${OG($)}.json`);return{ownerId:$,discoveryPath:J}}function VX(f=`hub-${Date.now().toString(36)}`){return z0(f)}async function Bf(f){try{let $=JSON.parse(await AX(f,"utf8"));if(typeof $.hubId!=="string"||typeof $.protocolVersion!=="string"||typeof $.authToken!=="string"||typeof $.host!=="string"||typeof $.port!=="number"||typeof $.url!=="string"||typeof $.startedAt!=="string"||typeof $.updatedAt!=="string")return;return{hubId:$.hubId,protocolVersion:$.protocolVersion,buildId:typeof $.buildId==="string"?$.buildId:void 0,authToken:$.authToken,host:$.host,port:$.port,url:$.url,pid:typeof $.pid==="number"?$.pid:void 0,startedAt:$.startedAt,updatedAt:$.updatedAt}}catch{return}}async function FJ(f,$){await _9(BX(f),{recursive:!0}),await M9(f,{force:!0}).catch(()=>{return}),await PX(f,`${JSON.stringify($,null,2)}
473
- `,{encoding:"utf8",mode:384}),await DG(f,384)}async function xf(f){await M9(f,{force:!0}).catch(()=>{return})}async function KJ(f,$){let J=wG(f);await _9(BX(J),{recursive:!0});let W=Date.now()+LG;while(!0)try{await _9(J,{recursive:!1}),await PX(L9(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
474
- `,"utf8");try{return await $()}finally{await XX(J)}}catch(H){if((H instanceof Error&&"code"in H?String(H.code):"")!=="EEXIST")throw H;let Z=await bG(J),j=Z?Date.now()-Date.parse(Z.acquiredAt):jX+1;if(!Z||!NG(Z.pid)||j>jX){await XX(J);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${J}`);await qG(hG)}}async function Uf(f){try{let $=await fetch(h9(f));if(!$.ok)return;return await $.json()}catch{return}}function af(f,$,J="/hub"){return new URL(`ws://${f}:${$}${J}`).toString()}function h9(f){let $=new URL(f);return $.protocol=$.protocol==="wss:"?"https:":"http:",$.pathname="/health",$.search="",$.toString()}function RX(f){return TG(f)}import{CLINE_HUB_DEV_PORT as CG,CLINE_HUB_PORT as EG,resolveClineBuildEnv as SG}from"@cline/shared";var kG="CLINE_HUB_HOST",IG="CLINE_HUB_PORT",mG="CLINE_HUB_PATHNAME",O9="127.0.0.1",z9=EG,N9="/hub";function FX(f){return SG(f)==="development"?CG:z9}function q9(f={}){return(f.env??process.env)[kG]?.trim()||O9}function d1(f={}){let J=(f.env??process.env)[IG]?.trim();if(!J)return FX(f);let W=Number.parseInt(J,10);if(!Number.isInteger(W)||W<1||W>65535)return FX(f);return W}function w9(f={}){return(f.env??process.env)[mG]?.trim()||N9}function gf(f={},$={}){return{host:f.host??q9($),port:f.port??d1($),pathname:f.pathname??w9($)}}var xG="shared:cline";function KX(f){let $=O0(f.trim());return z0(`workspace:${$||f.trim()}`)}function Af(f=xG){return z0(f)}var aG=8000,tG=200,sG=3000,oG=100,eG=[100,250,500,1000,2000],fT="--cline-hub-daemon";function $T(f){return[...f.host?["--host",f.host]:[],...typeof f.port==="number"?["--port",String(f.port)]:[],...f.pathname?["--pathname",f.pathname]:[]]}function JT(){try{let f=lG($4(),"logs","hub-daemon.log");return uG(rG(f),{recursive:!0}),{fd:cG(f,"a"),logPath:f}}catch{return}}function J4(f){let $=f.buildId?.trim();return!!$&&$===Z$()}async function WT(f,$){let J=Date.now()+$;while(Date.now()<J){if(!(await Uf(f).catch(()=>{return}))?.url)return!0;await new Promise((H)=>setTimeout(H,oG))}return!1}async function W4(f,$){if(J4(f))return;if(await H4(f.url,f.authToken).catch(()=>!1),f.pid)try{process.kill(f.pid,"SIGTERM")}catch{}await WT(f.url,sG),await xf($).catch(()=>{return})}function HT(){let f=import.meta.url.endsWith(".ts")?"ts":"js";return pG(new URL(`./entry.${f}`,import.meta.url))}function QT(f,$){let J=HT(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let H=dG(W).toLowerCase().includes("bun"),Q=J.startsWith("/$bunfs/"),Z=H&&J.toLowerCase().endsWith(".ts"),j=Q?[fT]:[...Z?["--conditions=development"]:[],J];return{launcher:W,args:[...j,"--cwd",f,...$T($)],cwd:f,env:{...nG(process.env),CLINE_NO_INTERACTIVE:"1",[iG]:"1"}}}function ZT(f){if(!f||typeof f!=="object")return!1;if(("code"in f?f.code:void 0)==="ETXTBSY")return!0;let J="message"in f?f.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function b9(f,$={}){if(yX())return;let J=QT(f,$),W=JT();try{gG(J.launcher,J.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(W)vG(W.fd)}}async function r1(f,$={}){for(let J=0;;J++)try{b9(f,$);return}catch(W){let H=eG[J];if(!ZT(W)||H===void 0)throw W;await new Promise((Q)=>setTimeout(Q,H))}}function yJ(f,$={}){if(yX())return;let J=Af(),W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),H=gf($),Q=af(H.host,H.port,H.pathname);Bf(J.discoveryPath).then(async(Z)=>{if(Z?.url){let P=await Uf(Z.url);if(P?.url&&J4(P)&&await J0(P.url,{authToken:Z.authToken}))return;if(P?.url)await W4({...P,authToken:Z.authToken},J.discoveryPath);else await xf(J.discoveryPath).catch(()=>{return})}let j=await Uf(Q);if(j?.url)await W4(j,J.discoveryPath);let A=!W&&H.port!==0?{...H,port:0}:H;await r1(f,A)}).catch(()=>{})}async function UX(f,$={}){let J=Af(),W=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),H=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=gf($),Z=af(Q.host,Q.port,Q.pathname),j=(V)=>{if(!W)j$(V.url,V.authToken);return V},X=await Bf(J.discoveryPath);if(X?.url){let V=await Uf(X.url);if(V?.url&&J4(V)&&await J0(V.url,{authToken:X.authToken}))return j({url:V.url,authToken:X.authToken});if(V?.url)await W4({...V,authToken:X.authToken},J.discoveryPath);else await xf(J.discoveryPath).catch(()=>{return})}let A=await Uf(Z);if(A?.url)await W4(A,J.discoveryPath);let B=!H&&Q.port!==0?{...Q,port:0}:Q;await r1(f,B);let Y=Date.now()+aG;while(Date.now()<Y){let V=await Bf(J.discoveryPath);if(V?.url){let U=await Uf(V.url);if(U?.url&&J4(U)&&await J0(U.url,{authToken:V.authToken}))return j({url:U.url,authToken:V.authToken})}let R=await Uf(Z);if(R?.url&&!J4(R))await W4(R,J.discoveryPath);await new Promise((U)=>setTimeout(U,tG))}throw Error("Timed out waiting for detached hub startup.")}function AT(){let f=globalThis.WebSocket;if(!f)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return f}function MX(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString();if(f instanceof ArrayBuffer)return Buffer.from(f).toString();if(Array.isArray(f))return Buffer.concat(f.map(($)=>Buffer.from($))).toString();if(f&&typeof f==="object"&&"data"in f&&typeof f.data<"u")return MX(f.data);return String(f)}function PT(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString("utf8");if(f instanceof ArrayBuffer)return Buffer.from(f).toString("utf8");return""}function GX(f){let $=f,J=PT($.reason);return new Df("hub_connection_closed",$.code||J?`Hub connection closed (code=${$.code??0}${J?`, reason=${J}`:""})`:C9,{closeCode:$.code,closeReason:J||void 0})}function BT(f,$){if(f instanceof Df)return f;if(f instanceof Error)return new Df("hub_connect_failed",f.message);if(f&&typeof f==="object"&&"error"in f&&f.error instanceof Error)return new Df("hub_connect_failed",f.error.message);let J=f&&typeof f==="object"&&"message"in f&&typeof f.message==="string"?f.message.trim():"";if(J)return new Df("hub_connect_failed",J);let W=f&&typeof f==="object"&&"type"in f&&typeof f.type==="string"?f.type.trim():"";return new Df("hub_connect_failed",W?`Failed to connect to hub at ${$.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${$.toString()}.`)}var YT=8000,VT=200,TX="*",DX=8000,RT="cline-hub-auth.",LX=new Map,hX=new Set,FT=3000,KT=3000,yT=100,C9="Hub connection closed",UT=250,GT=5000,_X=0.5;class Df extends Error{code;details;constructor(f,$,J){super($);this.code=f;this.details=J;this.name="HubTransportError"}}function k9(f){return f instanceof Df}class l1 extends Error{command;code;constructor(f,$,J){super(J);this.command=f;this.code=$;this.name="HubCommandError"}}function UJ(f,$){return f instanceof l1&&f.code==="hub_command_timeout"&&($===void 0||f.command===$)}function OX(f){let $=f.searchParams.get("authToken")?.trim();if(f.searchParams.delete("authToken"),$)return $;let J=I9(f.toString());return J?LX.get(J):void 0}function TT(f){try{let J=new URL(f).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function I9(f){if(!TT(f))return;let $=new URL(X$(f));return $.search="",$.hash="",$.toString()}function E9(f){let $=I9(f);return!!$&&hX.has($)}function j$(f,$){let J=I9(f);if(J){if(hX.add(J),$?.trim())LX.set(J,$)}return f}class tf{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new Df("hub_connection_closed",C9);sawSocketClose=!1;registered=!1;constructor(f){this.options=f;this.clientId=f.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=f.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let f=new URL(this.currentUrl),$=this.options.authToken?.trim()||OX(f);f.hash="";let W=new(AT())(f.toString(),$?[`${RT}${$}`]:void 0);this.socket=W;let H=!1;this.connectPromise=new Promise((Q,Z)=>{let j=!1,X=setTimeout(()=>{if(j)return;j=!0,H=!0,this.lastCloseError=new Df("hub_connect_timeout",`Timed out connecting to hub after ${DX}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Z(this.lastCloseError)},DX);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(X),Q()}),W.addEventListener("error",(A)=>{if(j)return;j=!0,clearTimeout(X),this.lastCloseError=BT(A,f),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Z(this.lastCloseError)}),W.addEventListener("close",(A)=>{if(j)return;if(j=!0,clearTimeout(X),!H)this.lastCloseError=GX(A),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Z(this.lastCloseError)})}),W.addEventListener("message",(Q)=>{this.handleFrame(JSON.parse(MX(Q)))}),W.addEventListener("close",(Q)=>{if(this.socket!==W)return;if(!H)this.lastCloseError=GX(Q),this.sawSocketClose=!0;this.registered=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let Q of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(Q));this.reconnectAttempt=0}subscribe(f,$){let J=$?.sessionId?.trim()||void 0,W={listener:f,sessionId:J};return this.listeners.add(W),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(J,-1)}}async command(f,$,J,W){let H=0,Q=f!=="client.register"&&f!=="client.unregister";while(!0)try{return await this.commandOnce(f,$,J,W)}catch(Z){if(!Q||H>=1||!await this.recoverLocalHubTransport(Z))throw Z;H+=1}}async commandOnce(f,$,J,W){await this.connect();let H=jT("hubreq_"),Q=XT(f,W?.timeoutMs),Z=new Promise((X,A)=>{let P=Q===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(H))return;A(new l1(f,"hub_command_timeout",`Hub command ${f} timed out after ${Q}ms (hub=${this.currentUrl}, requestId=${H}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},Q);this.pendingReplies.set(H,{resolve:(B)=>{if(P)clearTimeout(P);X(B)},reject:(B)=>{if(P)clearTimeout(P);A(B)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:f,requestId:H,clientId:this.clientId,sessionId:J,timeoutMs:Q,payload:$}})}catch(X){throw this.pendingReplies.delete(H),X}let j=await Z;if(!j.ok)throw new l1(f,j.error?.code,j.error?.message??`Hub command ${f} failed`);return j}async recoverLocalHubTransport(f){if(!E9(this.currentUrl)||!k9(f))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let $=await c$({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!$)return!1;return this.currentUrl=$,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let f=Math.min(UT*2**this.reconnectAttempt,GT),$=Math.round(f*(1-_X)+Math.random()*f*_X);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},$)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!E9(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let f=await c$({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if(f){this.currentUrl=f,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let f=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!f)return;this.lastCloseError=new Df("hub_connection_closed",C9),this.sawSocketClose=!1;for(let $ of this.pendingReplies.values())$.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{f.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame(f){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new Df("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify(f))}sendSubscriptionFrame(f,$){this.sendFrame({kind:f,clientId:this.clientId,...$?{sessionId:$}:{}})}adjustSubscriptionCount(f,$){let J=this.subscriptionKeyForSessionId(f),W=(this.subscriptionCounts.get(J)??0)+$;if(W<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if($<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",f);return}if(this.subscriptionCounts.set(J,W),$>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",f)}subscriptionKeyForSessionId(f){return f??TX}subscriptionSessionIdFromKey(f){return f===TX?void 0:f}handleFrame(f){switch(f.kind){case"reply":{let $=f.envelope.requestId;if(!$)return;let J=this.pendingReplies.get($);if(!J)return;this.pendingReplies.delete($),J.resolve(f.envelope);return}case"event":for(let $ of this.listeners){if($.sessionId&&$.sessionId!==f.envelope.sessionId?.trim())continue;$.listener(f.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function X$(f){let $=new URL(f);if($.protocol==="http:")$.protocol="ws:";else if($.protocol==="https:")$.protocol="wss:";return $.toString()}async function J0(f,$){let J=new tf({url:f,authToken:$?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:$?.workspaceRoot,cwd:$?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function S9(f,$){let J=X$(f),W=await Uf(J);if(!W)return{status:"unreachable",url:J};let H=Z$(),Q=W.buildId?.trim();if(!Q||Q!==H)return{status:"build_mismatch",url:J};if($?.verifyConnection===!0&&!await J0(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd,authToken:$.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function DT(f){let $=Date.now()+YT;while(Date.now()<$){let J=await Bf(f.discoveryPath);if(J?.url){let W=await S9(J.url,{verifyConnection:!0,authToken:J.authToken});if(W.status==="compatible")return j$(W.url,J.authToken)}await new Promise((W)=>setTimeout(W,VT))}return}async function _T(f){let $=Date.now()+KT;while(Date.now()<$){if(!(await Uf(f).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,yT))}return!1}function MT(f,$){try{return X$(f)===X$($)}catch{return!1}}function LT(f){return(f&&typeof f==="object"&&Array.isArray(f.sessions)?f.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let W=J;if(W.status==="running"||W.status==="idle")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function hT(f,$,J){let W=new tf({url:f,authToken:$,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let H=await W.command("session.list",{limit:500},void 0,{timeoutMs:FT});return!LT(H.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function Q4(f={}){if(f.endpoint?.trim()){let H=await S9(f.endpoint);return H.status==="compatible"?H.url:void 0}let $=Af(),J=await Bf($.discoveryPath);if(!J?.url)return;let W=await S9(J.url);if(W.status==="compatible")return j$(W.url,J.authToken);if(W.status==="build_mismatch")await xf($.discoveryPath).catch(()=>{return});return}async function c$(f={}){let $=await Q4(f);if($&&await J0($,{workspaceRoot:f.workspaceRoot,cwd:f.cwd}))return $;if(f.endpoint?.trim())return;let J=Af();return await r1(f.workspaceRoot??process.cwd()),await DT(J)}async function H4(f,$){let J=new URL(f),W=$?.trim()||OX(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function m9(){let f=Af(),$=await Bf(f.discoveryPath);if(!$?.url)return!1;try{if(await H4($.url,$.authToken))return!0}catch{}return!1}async function GJ(f){if(!E9(f.url))return;let $=Af(),J=await Bf($.discoveryPath);if(!J?.url||!MT(J.url,f.url))return;if(!await hT(J.url,J.authToken,{workspaceRoot:f.workspaceRoot,cwd:f.cwd}))return;if(!await m9())return;if(!await _T(J.url))return;return await xf($.discoveryPath).catch(()=>{return}),await c$({workspaceRoot:f.workspaceRoot,cwd:f.cwd})}var mX={};N(mX,{HubRuntimeHost:()=>N0});import{createSessionId as NX,HUB_CHECKPOINT_CAPABILITY as qT,HUB_COMPACTION_CAPABILITY as wT,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as bT,HUB_HOOK_CAPABILITY_PREFIX as CT,HUB_MISTAKE_LIMIT_CAPABILITY as ET,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ST,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as kT,isHubToolExecutorName as IT}from"@cline/shared";var zX={};N(zX,{createCoreSessionSnapshot:()=>W0,coreSessionSnapshotToRecord:()=>TJ});function OT(f){return f?JSON.parse(JSON.stringify(f)):void 0}function zT(f){return f?JSON.parse(JSON.stringify(f)):void 0}function NT(f){let $=f?.checkpoint&&typeof f.checkpoint==="object"&&!Array.isArray(f.checkpoint)?f.checkpoint:void 0,W=(Array.isArray($?.history)?$.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let j=typeof Z.ref==="string"?Z.ref.trim():"",X=Number(Z.createdAt),A=Number(Z.runCount);if(!j||!Number.isFinite(X)||!Number.isInteger(A))return[];return[{ref:j,createdAt:X,runCount:A,...Z.kind==="stash"||Z.kind==="commit"?{kind:Z.kind}:{}}]}),H=W.at(-1),Q=f?.checkpointEnabled===!0?!0:void 0;if(!Q&&W.length===0)return;return{...Q?{enabled:Q}:{},...H?{latest:H}:{},history:W}}function W0(f){let{session:$}=f,J=OT($.metadata);return{version:1,sessionId:$.sessionId,source:$.source,status:$.status,createdAt:$.startedAt,updatedAt:$.updatedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,interactive:$.interactive,workspace:{cwd:$.cwd,root:$.workspaceRoot},model:{providerId:$.provider,modelId:$.model},capabilities:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams},lineage:{...$.parentSessionId?{parentSessionId:$.parentSessionId}:{},...$.parentAgentId?{parentAgentId:$.parentAgentId}:{},...$.agentId?{agentId:$.agentId}:{},...$.conversationId?{conversationId:$.conversationId}:{},isSubagent:$.isSubagent},...$.teamName?{team:{name:$.teamName}}:{},...$.prompt?{prompt:$.prompt}:{},...J?{metadata:J}:{},...$.messagesPath?{artifacts:{messagesPath:$.messagesPath}}:{},...f.messages?{messages:zT(f.messages)}:{},...f.usage?{usage:{...f.usage}}:{},...f.aggregateUsage?{aggregateUsage:{...f.aggregateUsage}}:{},...(()=>{let W=NT(J);return W?{checkpoint:W}:{}})()}}function TJ(f){return{sessionId:f.sessionId,parentSessionId:f.lineage.parentSessionId,agentId:f.lineage.agentId,parentAgentId:f.lineage.parentAgentId,conversationId:f.lineage.conversationId,isSubagent:f.lineage.isSubagent,source:f.source,startedAt:f.createdAt,endedAt:f.endedAt??void 0,exitCode:f.exitCode??void 0,status:f.status,interactive:f.interactive,provider:f.model.providerId,model:f.model.modelId,cwd:f.workspace.cwd,workspaceRoot:f.workspace.root,teamName:f.team?.name,enableTools:f.capabilities.enableTools,enableSpawn:f.capabilities.enableSpawn,enableTeams:f.capabilities.enableTeams,prompt:f.prompt,metadata:f.metadata,updatedAt:f.updatedAt,messagesPath:f.artifacts?.messagesPath}}function p1(f){if(!f)return;return JSON.parse(JSON.stringify(f))}var mT=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function qX(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return JSON.parse(JSON.stringify(f))}function wX(f){if(!f)return;let{userInstructionService:$,...J}=f;return JSON.parse(JSON.stringify(J))}function bX(f){let $=f&&typeof f==="object"&&!Array.isArray(f)?f:{};return{agentId:typeof $.agentId==="string"?$.agentId:"",conversationId:typeof $.conversationId==="string"?$.conversationId:"",iteration:typeof $.iteration==="number"?$.iteration:0,metadata:$.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?$.metadata:void 0}}function d$(f,$,J){f.manifest.push($),f.handlers.set($.capabilityName,J)}function CX(f,$){let J={manifest:[],handlers:new Map};for(let H of Object.keys($.toolExecutors??{}).filter(IT)){let Q=$.toolExecutors?.[H];if(typeof Q!=="function")continue;d$(J,{kind:"toolExecutor",executor:H,capabilityName:`${ST}${H}`},async({payload:Z,abortSignal:j})=>{let X=Array.isArray(Z.args)?[...Z.args]:[],A={...bX(Z.context),signal:j};return{result:await Q(...X,A)}})}for(let H of f?.extraTools??[])d$(J,{kind:"tool",name:H.name,description:H.description,inputSchema:p1(H.inputSchema)??{},...H.lifecycle?{lifecycle:p1(H.lifecycle)}:{},capabilityName:`${bT}${H.name}`},async({payload:Q,abortSignal:Z,progress:j})=>{let X={...bX(Q.context),signal:Z};return{result:await H.execute(Q.input,{...X,emitUpdate:(P)=>{j({update:P})}})}});let W=f?.hooks;if(W)for(let H of mT){let Q=W[H];if(typeof Q!=="function")continue;d$(J,{kind:"hook",name:H,capabilityName:`${CT}${H}`},async({payload:Z})=>({control:await Q(Z.context)}))}if(f?.compaction?.compact){let H=f.compaction.compact;d$(J,{kind:"compaction",capabilityName:wT,config:qX(f.compaction)},async({payload:Q})=>({result:await H(Q.context)}))}if(f?.checkpoint?.createCheckpoint){let H=f.checkpoint.createCheckpoint;d$(J,{kind:"checkpoint",capabilityName:qT,config:qX(f.checkpoint)},async({payload:Q})=>({result:await H(Q.context)}))}if(f?.onConsecutiveMistakeLimitReached){let H=f.onConsecutiveMistakeLimitReached;d$(J,{kind:"mistakeLimit",capabilityName:ET},async({payload:Q})=>({result:await H(Q.context)}))}if(f?.userInstructionService){let H=f.userInstructionService;d$(J,{kind:"userInstructionService",capabilityName:kT},async()=>{return await H.start().catch(()=>{}),{snapshot:{records:{skill:H.listRecords("skill"),rule:H.listRecords("rule"),workflow:H.listRecords("workflow")},runtimeCommands:H.listRuntimeCommands()}}})}return J}function xT(f){if(typeof f==="string"&&f.trim())return f.trim();if(f instanceof Error)return f.message;if(f&&typeof f==="object"&&"message"in f){let $=f.message;if(typeof $==="string"&&$.trim())return $.trim()}return"Capability request was cancelled."}function gT(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function vT(f){return f==="completed"||f==="max_iterations"||f==="aborted"||f==="mistake_limit"||f==="error"}function uT(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let $=f,J=typeof $.inputTokens==="number"?$.inputTokens:void 0,W=typeof $.outputTokens==="number"?$.outputTokens:void 0;if(J===void 0||W===void 0)return;return{inputTokens:J,outputTokens:W,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function EX(f){if(!f)return;return{inputTokens:typeof f.inputTokens==="number"?f.inputTokens:0,outputTokens:typeof f.outputTokens==="number"?f.outputTokens:0,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function g9(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function A$(f,$){return g9(f?.[$])??0}function cT(f){let $=f?.delta&&typeof f.delta==="object"?f.delta:void 0,J=f?.totals&&typeof f.totals==="object"?f.totals:void 0,W=f?.agent&&typeof f.agent==="object"?f.agent:void 0,H=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:A$($,"inputTokens"),outputTokens:A$($,"outputTokens"),cacheReadTokens:A$($,"cacheReadTokens"),cacheWriteTokens:A$($,"cacheWriteTokens"),cost:g9($?.totalCost),totalInputTokens:A$(J,"inputTokens"),totalOutputTokens:A$(J,"outputTokens"),totalCacheReadTokens:A$(J,"cacheReadTokens"),totalCacheWriteTokens:A$(J,"cacheWriteTokens"),totalCost:g9(J?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:H}}function dT(f){let $=f?.result&&typeof f.result==="object"&&!Array.isArray(f.result)?f.result:void 0,J=f?.reason??$?.finishReason,W=vT(J)?J:J==="failed"?"error":"completed",H=uT(f?.usage??$?.usage);return{type:"done",reason:W,text:typeof f?.text==="string"?f.text:typeof $?.text==="string"?$.text:"",iterations:typeof f?.iterations==="number"?f.iterations:typeof $?.iterations==="number"?$.iterations:0,usage:H}}function x9(f,$){return f.error?.message??`hub command failed: ${$}`}function Z4(f){switch(f){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function IX(f){let $=f.metadata&&typeof f.metadata==="object"?JSON.parse(JSON.stringify(f.metadata)):void 0;return{sessionId:f.sessionId,parentSessionId:typeof $?.parentSessionId==="string"?$.parentSessionId:void 0,agentId:f.runtimeSession?.agentId||(typeof $?.agentId==="string"?$.agentId:void 0),parentAgentId:typeof $?.parentAgentId==="string"?$.parentAgentId:void 0,conversationId:typeof $?.conversationId==="string"?$.conversationId:void 0,isSubagent:typeof $?.isSubagent==="boolean"?$.isSubagent:!1,source:typeof $?.source==="string"?$.source:Vf.CORE,pid:typeof $?.pid==="number"?$.pid:void 0,startedAt:new Date(f.createdAt).toISOString(),endedAt:Z4(f.status)==="running"?void 0:new Date(f.updatedAt).toISOString(),exitCode:Z4(f.status)==="completed"?0:Z4(f.status)==="failed"?1:void 0,status:Z4(f.status),interactive:$?.interactive===!0,provider:typeof $?.provider==="string"?$.provider:"hub",model:typeof $?.model==="string"?$.model:"hub",cwd:f.cwd?.trim()||f.workspaceRoot,workspaceRoot:f.workspaceRoot,teamName:typeof $?.teamName==="string"?$.teamName:void 0,enableTools:f.runtimeOptions?.enableTools??$?.enableTools===!0,enableSpawn:f.runtimeOptions?.enableSpawn??$?.enableSpawn===!0,enableTeams:f.runtimeOptions?.enableTeams??$?.enableTeams===!0,prompt:typeof $?.prompt==="string"?$.prompt:void 0,metadata:$,updatedAt:new Date(f.updatedAt).toISOString(),messagesPath:typeof $?.messagesPath==="string"?$.messagesPath:void 0,hookPath:typeof $?.hookPath==="string"?$.hookPath:void 0}}function r$(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let $=f;return $.version===1&&typeof $.sessionId==="string"?JSON.parse(JSON.stringify($)):void 0}function rT(f){let $=r$(f?.snapshot);if($)return TJ($);let J=f?.session;return J?IX(J):void 0}function SX(f,$,J){let W=J?.workspaceRoot?.trim()||$.config.workspaceRoot||$.config.cwd;return Mf.parse({version:1,session_id:f,source:$.source??Vf.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:Z4(J?.status),interactive:$.interactive===!0,provider:$.config.providerId,model:$.config.modelId,cwd:J?.cwd?.trim()||$.config.cwd,workspace_root:W,team_name:$.config.teamName,enable_tools:$.config.enableTools,enable_spawn:$.config.enableSpawnAgent,enable_teams:$.config.enableAgentTeams,prompt:$.prompt?.trim()||void 0,metadata:$.sessionMetadata&&Object.keys($.sessionMetadata).length>0?$.sessionMetadata:void 0})}function kX(f,$){return Mf.parse({version:1,session_id:f.sessionId,source:f.source,pid:process.pid,started_at:f.createdAt,status:f.status,interactive:f.interactive,provider:f.model.providerId,model:f.model.modelId,cwd:f.workspace.cwd,workspace_root:f.workspace.root,team_name:f.team?.name,enable_tools:f.capabilities.enableTools,enable_spawn:f.capabilities.enableSpawn,enable_teams:f.capabilities.enableTeams,prompt:(f.prompt??$.prompt?.trim())||void 0,metadata:f.metadata,messages_path:f.artifacts?.messagesPath})}class N0{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new f4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;constructor(f,$){this.clientContext=$,this.clientOptions={authToken:f.authToken,clientType:f.clientType??"core-hub-runtime",displayName:f.displayName??"core hub runtime",workspaceRoot:$?.workspaceRoot,cwd:$?.cwd},this.defaultCapabilities=Kf(f.capabilities)??{},this.runtimeAddress=f.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient(f.url)}createClient(f){return new tf({...this.clientOptions,url:f})}async replaceClient(f){let $=this.client;this.client=this.createClient(f),this.runtimeAddress=f,await Promise.resolve($.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock(f){if(!UJ(f,"session.create"))return!1;let $=await GJ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!$)return!1;return await this.replaceClient($),!0}registerPlannedSession(f,$,J){if(this.sessionCapabilities.set(f,$),J.size>0)this.sessionClientContributionHandlers.set(f,J);this.ensureSessionSubscription(f)}cleanupPlannedSession(f){this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f)}async connect(){await this.client.connect()}async startSession(f){let $=this.resolveCapabilities(f),J=CX(f.localRuntime,$),W=f.config.sessionId?.trim()||NX(),H=()=>this.client.command("session.create",{workspaceRoot:f.config.workspaceRoot?.trim()||f.config.cwd,cwd:f.config.cwd,sessionConfig:p1({...f.config,sessionId:W}),metadata:{...f.sessionMetadata??{},source:f.source??Vf.CORE,provider:f.config.providerId,model:f.config.modelId,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,teamName:f.config.teamName,prompt:f.prompt,interactive:f.interactive===!0},runtimeOptions:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...f.localRuntime?.configExtensions?{configExtensions:f.localRuntime.configExtensions}:{}},toolPolicies:p1(f.toolPolicies),initialMessages:f.initialMessages});this.registerPlannedSession(W,$,J.handlers);let Q;try{Q=await H()}catch(A){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(A)){this.registerPlannedSession(W,$,J.handlers);try{Q=await H()}catch(P){throw this.cleanupPlannedSession(W),P}}else throw A}let Z=r$(Q.payload?.snapshot),j=Q.payload?.session,X=(Z?.sessionId??j?.sessionId)?.trim();if(!X)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(X!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(X,$,J.handlers);return{sessionId:X,manifest:Z?kX(Z,f):SX(X,f,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession(f){let $=f.sessionId.trim();if(!$)throw Error("sessionId is required");let J=f.restore?.messages!==!1;if(J&&!f.start)throw Error("start is required when restore.messages is true");let W=f.start,H=W?this.resolveCapabilities(W):void 0,Q=W?CX(W.localRuntime,H??{}):{manifest:[],handlers:new Map},Z=W?W.config.sessionId?.trim()||NX():void 0;if(Z&&H)this.sessionCapabilities.set(Z,H);if(Z&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(Z,Q.handlers),this.ensureSessionSubscription(Z);let j;try{j=await this.client.command("session.restore",{sessionId:$,checkpointRunCount:f.checkpointRunCount,restore:f.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??f.cwd,sessionConfig:p1({...W.config,sessionId:Z}),metadata:{...W.sessionMetadata??{},source:W.source??Vf.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:p1(W.toolPolicies)}:{}},$)}catch(V){if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw V}if(!j.ok){let V=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw Error(V)}let X=r$(j.payload?.snapshot),A=j.payload?.session,P=(X?.sessionId??A?.sessionId)?.trim();if(J&&!P){if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw Error("Hub checkpoint restore returned no session id")}if(P&&Z&&P!==Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);if(P&&H)this.sessionCapabilities.set(P,H);if(P&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(P,Q.handlers);if(P)this.ensureSessionSubscription(P);let B=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,Y=j.payload?.checkpoint;if(!Y)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:P,startResult:P?{sessionId:P,manifest:X?kX(X,W??{}):SX(P,W??{},A),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:B,checkpoint:Y}}async runTurn(f){return this.ensureSessionSubscription(f.sessionId),(await this.client.command("run.start",{sessionId:f.sessionId,input:f.prompt,attachments:(f.userImages?.length??0)>0||(f.userFiles?.length??0)>0?{...f.userImages?.length?{userImages:f.userImages}:{},...f.userFiles?.length?{userFiles:f.userFiles}:{}}:void 0,delivery:f.delivery,timeoutMs:f.timeoutMs},f.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.pending_prompts",{sessionId:f.sessionId},f.sessionId);return Array.isArray($.payload?.prompts)?$.payload.prompts:[]}async requestPendingPromptUpdate(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.update_pending_prompt",{...f},f.sessionId);return{sessionId:f.sessionId,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[],prompt:$.payload?.prompt,updated:$.payload?.updated===!0}}async requestPendingPromptDelete(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.remove_pending_prompt",{...f},f.sessionId);return{sessionId:f.sessionId,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[],prompt:$.payload?.prompt,removed:$.payload?.removed===!0}}async getAccumulatedUsage(f){let $=await this.client.command("session.get",{includeSnapshot:!0},f),J=r$($.payload?.snapshot);if(J){let Z=J.usage?{...J.usage}:void 0,j=J.aggregateUsage?{...J.aggregateUsage}:void 0;return Z||j?{usage:Z,aggregateUsage:j}:void 0}let W=$.payload?.session,H=EX(W?.usage),Q=EX(W?.aggregateUsage);return H||Q?{usage:H,aggregateUsage:Q}:void 0}async abort(f,$){await this.client.command("run.abort",{sessionId:f,reason:typeof $==="string"?$:void 0},f)}async stopSession(f){this.sessionCapabilities.delete(f),this.disposeSessionSubscription(f),await this.client.command("session.detach",{sessionId:f},f)}async dispose(){for(let[f,$]of this.sessionSubscriptions){$();try{await this.client.command("session.detach",{sessionId:f},f)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let f of this.activeCapabilityAbortControllers.values())f.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession(f){let $=await this.client.command("session.get",void 0,f);return rT($.payload)}async listSessions(f=100){let $=await this.client.command("session.list",{limit:f}),J=Array.isArray($.payload?.snapshots)?$.payload.snapshots.flatMap((H)=>{let Q=r$(H);return Q?[TJ(Q)]:[]}):[];if(J.length>0)return J;return($.payload?.sessions??[]).map(IX)}async listSettings(f){let $=await this.client.command("settings.list",wX(f));if(!$.ok)throw Error(x9($,"settings.list"));return $.payload?.snapshot}async toggleSetting(f){let $=await this.client.command("settings.toggle",wX(f));if(!$.ok)throw Error(x9($,"settings.toggle"));return{snapshot:$.payload?.snapshot,changedTypes:Array.isArray($.payload?.changedTypes)?$.payload.changedTypes:[]}}async deleteSession(f){return this.sessionCapabilities.delete(f),this.disposeSessionSubscription(f),(await this.client.command("session.delete",{sessionId:f})).payload?.deleted===!0}async updateSession(f,$){let J={...$.metadata??{}};if(typeof $.prompt==="string")J.prompt=$.prompt;if(typeof $.title==="string")J.title=$.title;return{updated:(await this.client.command("session.update",{sessionId:f,metadata:J})).ok}}async readSessionMessages(f){let $=f.trim();if(!$)return[];let J=await this.client.command("session.messages",{sessionId:$},$);if(!J.ok)throw Error(x9(J,"session.messages"));let W=J.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent(f){await this.client.command("session.hook",{payload:f})}subscribe(f,$){return this.events.subscribe(f,$)}ensureSessionSubscription(f){let $=f.trim();if(!$||this.sessionSubscriptions.has($))return;let J=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:$});this.sessionSubscriptions.set($,typeof J==="function"?J:()=>{})}disposeSessionSubscription(f){let $=f.trim();if(!$)return;this.sessionSubscriptions.get($)?.(),this.sessionSubscriptions.delete($),this.agentDoneEmittedForCurrentRunBySession.delete($)}resolveCapabilities(f){return Kf(this.defaultCapabilities,f.capabilities)??{}}emitToolCallContentStart(f){this.events.emit({type:"agent_event",payload:{sessionId:f.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:f.toolCallId,toolName:f.toolName,input:f.toolInput}}})}emitAgentDoneIfNeeded(f){if(this.agentDoneEmittedForCurrentRunBySession.has(f.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add(f.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:f.sessionId,event:dT(f.payload)}})}handleHubEvent(f){let $=f.sessionId?.trim();if(f.event==="capability.requested"){this.handleCapabilityRequest(f);return}if(f.event==="capability.resolved"){this.handleCapabilityResolved(f);return}if(f.event==="approval.requested"){this.handleApprovalRequested(f);return}if(!$)return;switch(f.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete($);let J=r$(f.payload?.snapshot),W=f.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:$,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"iteration_start",iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"iteration_end",iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0,hadToolCalls:f.payload?.hadToolCalls===!0,toolCallCount:typeof f.payload?.toolCallCount==="number"?f.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof f.payload?.text==="string"?f.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"text",text:typeof f.payload?.text==="string"?f.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof f.payload?.text==="string"?f.payload.text:"",W=f.payload?.redacted===!0;if(!J&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"reasoning",reasoning:typeof f.payload?.reasoning==="string"?f.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:$,payload:f.payload});return}case"usage.updated":{let J=cT(f.payload);this.events.emit({type:"agent_event",payload:{sessionId:$,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:$,toolCallId:J,toolName:typeof f.payload?.toolName==="string"?f.payload.toolName:void 0,toolInput:f.payload?.input});return}case"tool.finished":{let J=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"tool",toolCallId:J,toolName:typeof f.payload?.toolName==="string"?f.payload.toolName:void 0,output:f.payload?.output,error:typeof f.payload?.error==="string"?f.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let J=r$(f.payload?.snapshot),W=f.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:$,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:$,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=f.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:$,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=typeof f.payload?.reason==="string"?f.payload.reason:f.event==="run.aborted"?"aborted":f.event==="run.failed"?"error":"completed";this.emitAgentDoneIfNeeded({sessionId:$,payload:{...f.payload,reason:J}}),this.events.emit({type:"ended",payload:{sessionId:$,reason:J,ts:f.timestamp??Date.now()}});return}default:return}}async handleCapabilityRequest(f){let $=f.sessionId?.trim();if(!$)return;let J=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let W=typeof f.payload?.requestId==="string"?f.payload.requestId:"",H=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName:"";if(!W)return;let Q=this.sessionClientContributionHandlers.get($)?.get(H);if(!Q){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${H} in session ${$}.`},$).catch(()=>{});return}let Z=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let X=(A)=>{this.client.command("capability.progress",{requestId:W,payload:A},$)};try{let A=await Q({payload:Z,abortSignal:j.signal,progress:X});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:A},$)}catch(A){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:A instanceof Error?A.message:String(A)},$)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved(f){if(f.payload?.cancelled!==!0)return;let $=typeof f.payload.requestId==="string"?f.payload.requestId.trim():"";if(!$)return;let J=this.activeCapabilityAbortControllers.get($);if(!J)return;J.abort(xT(f.payload.error))}async handleApprovalRequested(f){let $=f.sessionId?.trim();if(!$)return;let J=this.sessionCapabilities.get($)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let W=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"",H=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:"",Q=typeof f.payload?.toolName==="string"?f.payload.toolName:"";if(!W||!H||!Q)return;let Z=f.payload?.policy&&typeof f.payload.policy==="object"&&!Array.isArray(f.payload.policy)?f.payload.policy:{autoApprove:!1},j=gT(f.payload?.inputJson);this.pendingApprovalToolCallIds.add(H),this.emitToolCallContentStart({sessionId:$,toolCallId:H,toolName:Q,toolInput:j});let X=await Promise.resolve(J({sessionId:$,agentId:typeof f.payload?.agentId==="string"?f.payload.agentId:"",conversationId:typeof f.payload?.conversationId==="string"?f.payload.conversationId:$,iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0,toolCallId:H,toolName:Q,input:j,policy:Z})).catch((A)=>({approved:!1,reason:A instanceof Error?A.message:`Tool approval request failed: ${String(A)}`}));await this.client.command("approval.respond",{approvalId:W,approved:X.approved,reason:X.reason},$).catch(()=>{})}}var xX={};N(xX,{RemoteRuntimeHost:()=>i1});class i1 extends N0{constructor(f){super({url:X$(f.endpoint),authToken:f.authToken,clientType:f.clientType??"core-remote-runtime",displayName:f.displayName??"core remote runtime",capabilities:f.capabilities},{workspaceRoot:f.workspaceRoot,cwd:f.cwd})}}var gX={};N(gX,{SqliteSessionStore:()=>Q0});import{existsSync as lT,mkdirSync as pT}from"node:fs";import{join as iT}from"node:path";import{asBool as j4,asOptionalString as H0,asString as q0,ensureSessionSchema as nT,loadSqliteDb as aT,nowIso as DJ,toBoolInt as X4}from"@cline/shared/db";import{resolveDbDataDir as tT}from"@cline/shared/storage";class Q0{sessionsDirPath;db;constructor(f={}){this.sessionsDirPath=f.sessionsDir??tT()}init(){this.getRawDb()}ensureSessionsDir(){if(!lT(this.sessionsDirPath))pT(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return iT(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let f=aT(this.sessionDbPath());return nT(f,{includeLegacyMigrations:!0}),this.db=f,f}close(){this.db?.close?.(),this.db=void 0}run(f,$=[]){return this.getRawDb().prepare(f).run(...$)}queryOne(f,$=[]){return this.getRawDb().prepare(f).get(...$)??void 0}queryAll(f,$=[]){return this.getRawDb().prepare(f).all(...$)}create(f){let $=DJ();this.run(`INSERT OR REPLACE INTO sessions (
478
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,f,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,f){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(f,D0(),$)}attachReportPathToRun($,f){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(f,D0(),$)}}class A4{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new V4({dbPath:$.dbPath});let f=$.specs;this.reconciler=new k7({store:this.store,specs:f}),this.materializer=new W4({store:this.store}),this.eventIngress=new y7({store:this.store,logger:$.logger}),this.runner=new j4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:f,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new I7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(J)=>{let Q=$.logger;if(Q)if(Q.error)Q.error("cron.watcher.failed",{error:J});else Q.log("cron.watcher.failed",{error:J})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var lH={};q(lH,{manifestToSessionRecord:()=>SJ,listSessionHistoryFromBackend:()=>d7,listSessionHistory:()=>CJ,hydrateSessionHistory:()=>dH});import{readdir as CL,readFile as vH}from"node:fs/promises";import{join as cH}from"node:path";import{formatDisplayUserInput as EL,normalizeUserInput as hL}from"@cline/shared";import{resolveSessionDataDir as uH}from"@cline/shared/storage";import{existsSync as qL}from"node:fs";import{readFile as wL}from"node:fs/promises";import{formatDisplayUserInput as IH}from"@cline/shared";class B4{listeners=new Set;subscribe($,f){let J={listener:$,sessionId:f?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit($){let f=$.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==f)continue;J.listener($)}}get size(){return this.listeners.size}}async function H1($){let f=$?.trim();if(!f||!qL(f))return[];try{let J=(await wL(f,"utf8")).trim();if(!J)return[];let Q=JSON.parse(J);if(Array.isArray(Q))return xH(Q);if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let Z=Q.messages;if(Array.isArray(Z))return xH(Z)}return[]}catch{return[]}}function SL($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:IH($.content)};return{...$,content:$.content.map((f)=>{if(f.type!=="text"||typeof f.text!=="string")return f;return{...f,text:IH(f.text)}})}}function xH($){return $.map(SL)}function v7($){return $?{...$}:void 0}async function gH($,f){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await f.queueSpawnRequest($);let Q=await f.upsertSubagentSessionFromHook($);if(!Q)return;await f.appendSubagentHookAudit(Q,$),await f.applySubagentStatus(Q,$)}function K4($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function m0($){let f=K4($);if(!f)return;return f.toLowerCase()==="unknown"?void 0:f}function wJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function bL($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function u7($){let f=$??200;return Number.isFinite(f)?Math.max(0,Math.floor(f)):200}function kL($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function IL($){return $.isSubagent!==!0&&!K4($.parentSessionId)}function xL($){let f=$.match(/\d{13,}/g);if(!f||f.length===0)return 0;let J=0;for(let Q of f){let Z=Number.parseInt(Q,10);if(Number.isFinite(Z)&&Z>J)J=Z}return J}function SJ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function gL($){let f=u7($);if(f===0)return[];let J=uH(),Z=(await CL(J,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:xL(j.name.trim())})).sort((j,X)=>X.recency-j.recency||X.entry.name.localeCompare(j.entry.name));return(await Promise.all(Z.map(async({entry:j})=>{let X=j.name.trim();if(!X)return;let H=cH(J,X,`${X}.json`),Y=await vH(H,"utf8").catch(()=>{return});if(!Y)return;let V;try{V=JSON.parse(Y)}catch{return}let A=y0.safeParse(V);if(!A.success)return;return SJ(A.data)}))).filter((j)=>Boolean(j)).sort((j,X)=>X.startedAt.localeCompare(j.startedAt)).slice(0,f)}async function mL($,f,J){let Q=u7(f);if(Q===0)return await $.listSessions(0),[];let Z=J.includeSubagents?Q:kL(Q),W=await $.listSessions(Z);return(J.includeSubagents?W:W.filter(IL)).slice(0,Q)}function vL($){if(typeof $==="string")return $.trim();let f=[];for(let J of $){if(!J||typeof J!=="object")continue;let Q=J;if(Q.type!=="text")continue;let Z=Q.text?.trim();if(Z)f.push(Z)}return f.join(`
479
+ `).trim()}function mH($){return $.replace(/\s+/g," ").trim()}function cL($,f){if($.length<=f)return $;return`${$.slice(0,Math.max(0,f-3)).trimEnd()}...`}function uL($){for(let f of["user","assistant"])for(let J of $){if(J.role!==f)continue;let Q=mH(vL(J.content));if(!Q)continue;let Z=f==="user"?mH(EL(Q)):Q,W=hL(Z.split(`
480
+ `)[0]??Z);return cL(W,50)}return}function dL($){let f=0;for(let J of $)f+=wJ(J.metrics?.cost)??0;return f}function lL($){let f,J;for(let Q=$.length-1;Q>=0;Q-=1){let Z=$[Q];if(!f)f=m0(Z.modelInfo?.provider);if(!J)J=m0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function pL($){return m0($?.provider)??m0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function rL($){return m0($?.model)??m0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function c7($,f){let J=bL($.metadata),Q=K4(f?.title)??K4(J?.title),Z=wJ(f?.totalCost)??wJ(J?.totalCost),W=J||Q!==void 0||Z!==void 0?{...J??{},...Q!==void 0?{title:Q}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:m0(f?.provider)??m0($.provider)??pL(J)??"",model:m0(f?.model)??m0($.model)??rL(J)??"",metadata:W}}async function dH($,f){return await Promise.all(f.map(async(J)=>{let Q=c7(J),Z=Boolean(K4(Q.metadata?.title)),W=Boolean(m0(Q.provider)),j=Boolean(m0(Q.model)),X=wJ(Q.metadata?.totalCost),H=X!==void 0&&X>0;if(Z&&W&&j&&H)return Q;let Y=await $.readSessionMessages(J.sessionId);if(Y.length===0)return Q;let V=lL(Y),A=dL(Y);return c7(J,{title:Z?void 0:uL(Y),provider:W?void 0:V.provider,model:j?void 0:V.model,totalCost:H||A<=0?void 0:A})}))}async function CJ($,f={}){let J=u7(f.limit),Q=f.includeSubagents===!0,Z=await mL($,J,{includeSubagents:Q}),W=f.includeManifestFallback===!0&&Z.length<J?await gL(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let H of[...Z,...W]){if(j.has(H.sessionId))continue;j.set(H.sessionId,H)}let X=W.length===0?Z:Array.from(j.values()).sort((H,Y)=>Y.startedAt.localeCompare(H.startedAt)).slice(0,J);if(f.hydrate===!1)return X.map((H)=>c7(H));return await dH($,X)}async function iL($){let f=$.trim();if(!f)return;let J=cH(uH(),f,`${f}.json`),Q=await vH(J,"utf8").catch(()=>{return});if(!Q)return;try{let Z=y0.safeParse(JSON.parse(Q));return Z.success?Z.data.messages_path:void 0}catch{return}}async function d7($,f={}){let J=new Map;return await CJ({listSessions:async(Z)=>{let W=await $.listSessions(Z);J.clear();for(let j of W)J.set(j.sessionId,j);return W.map($8)},readSessionMessages:async(Z)=>{let W=J.get(Z)?.messagesPath??await iL(Z);return await H1(W)}},f)}var iY={};q(iY,{resolveSessionBackend:()=>yQ,createRuntimeHost:()=>Y2});import{captureSdkError as pY}from"@cline/shared";import{createSessionId as xO,resolveHubCommandTimeoutMs as gO}from"@cline/shared";import{spawn as PO}from"node:child_process";import{closeSync as FO,mkdirSync as DO,openSync as RO}from"node:fs";import{basename as UO,dirname as LO,join as OO}from"node:path";import{fileURLToPath as zO}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as _O,isHubDaemonProcess as ZY,withResolvedClineBuildEnv as yO}from"@cline/shared";import{createHash as nL,randomBytes as aL}from"node:crypto";import{existsSync as tL}from"node:fs";import{chmod as sL,mkdir as l7,readFile as tH,rm as p7,writeFile as sH}from"node:fs/promises";import{dirname as oH,join as r7}from"node:path";import{resolveClineDataDir as G4,resolveClineDir as eH}from"@cline/shared/storage";var rH="0.0.40";var iH={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:rH,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^1.21.7","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"^3.32.3",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var oL="CLINE_HUB_DISCOVERY_PATH",eL="CLINE_HUB_BUILD_ID",nH=30000,$O=15000,fO=100;function JO($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function QO($){return nL("sha256").update($).digest("hex").slice(0,12)}function ZO($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function EJ(){return aL(32).toString("hex")}function WO($){return new Promise((f)=>setTimeout(f,$))}function jO($){return`${$}.lock`}async function XO($){try{let f=JSON.parse(await tH(r7($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function aH($){await p7($,{recursive:!0,force:!0}).catch(()=>{return})}function Y1(){return process.env[eL]?.trim()||String(iH.version)}function w$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${QO($)}`,J=process.env[oL]?.trim()||r7(G4(),"locks","hub","owners",`${JO(f)}.json`);return{ownerId:f,discoveryPath:J}}function $Y($=`hub-${Date.now().toString(36)}`){return w$($)}async function A0($){try{let f=JSON.parse(await tH($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function hJ($,f){await l7(oH($),{recursive:!0}),await p7($,{force:!0}).catch(()=>{return}),await sH($,`${JSON.stringify(f,null,2)}
481
+ `,{encoding:"utf8",mode:384}),await sL($,384)}async function v0($){await p7($,{force:!0}).catch(()=>{return})}async function bJ($,f){let J=jO($);await l7(oH(J),{recursive:!0});let Q=Date.now()+$O;while(!0)try{await l7(J,{recursive:!1}),await sH(r7(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
482
+ `,"utf8");try{return await f()}finally{await aH(J)}}catch(Z){if((Z instanceof Error&&"code"in Z?String(Z.code):"")!=="EEXIST")throw Z;let j=await XO(J),X=j?Date.now()-Date.parse(j.acquiredAt):nH+1;if(!j||!ZO(j.pid)||X>nH){await aH(J);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${J}`);await WO(fO)}}async function R0($){try{let f=await fetch(i7($));if(!f.ok)return;return await f.json()}catch{return}}function t0($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function i7($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function fY($){return tL($)}import{CLINE_HUB_DEV_PORT as HO,CLINE_HUB_PORT as YO,resolveClineBuildEnv as VO}from"@cline/shared";var AO="CLINE_HUB_HOST",BO="CLINE_HUB_PORT",KO="CLINE_HUB_PATHNAME",n7="127.0.0.1",a7=YO,t7="/hub";function JY($){return VO($)==="development"?HO:a7}function s7($={}){return($.env??process.env)[AO]?.trim()||n7}function $2($={}){let J=($.env??process.env)[BO]?.trim();if(!J)return JY($);let Q=Number.parseInt(J,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return JY($);return Q}function o7($={}){return($.env??process.env)[KO]?.trim()||t7}function c0($={},f={}){return{host:$.host??s7(f),port:$.port??$2(f),pathname:$.pathname??o7(f)}}var GO="shared:cline";function QY($){let f=M$($.trim());return w$(`workspace:${f||$.trim()}`)}function Y0($=GO){return w$($)}var TO=8000,NO=200,MO=3000,qO=100,wO=[100,250,500,1000,2000],SO="--cline-hub-daemon";function CO($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function EO(){try{let $=OO(G4(),"logs","hub-daemon.log");return DO(LO($),{recursive:!0}),{fd:RO($,"a"),logPath:$}}catch{return}}function P4($){let f=$.buildId?.trim();return!!f&&f===Y1()}async function hO($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await R0($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,qO))}return!1}async function F4($,f){if(P4($))return;if(await D4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await hO($.url,MO),await v0(f).catch(()=>{return})}function bO(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return zO(new URL(`./entry.${$}`,import.meta.url))}function kO($,f){let J=bO(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let Z=UO(Q).toLowerCase().includes("bun"),W=J.startsWith("/$bunfs/"),j=Z&&J.toLowerCase().endsWith(".ts"),X=W?[SO]:[...j?["--conditions=development"]:[],J];return{launcher:Q,args:[...X,"--cwd",$,...CO(f)],cwd:$,env:{...yO(process.env),CLINE_NO_INTERACTIVE:"1",[_O]:"1"}}}function IO($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function e7($,f={}){if(ZY())return;let J=kO($,f),Q=EO();try{PO(J.launcher,J.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(Q)FO(Q.fd)}}async function f2($,f={}){for(let J=0;;J++)try{e7($,f);return}catch(Q){let Z=wO[J];if(!IO(Q)||Z===void 0)throw Q;await new Promise((W)=>setTimeout(W,Z))}}function kJ($,f={}){if(ZY())return;let J=Y0(),Q=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=c0(f),W=t0(Z.host,Z.port,Z.pathname);A0(J.discoveryPath).then(async(j)=>{if(j?.url){let V=await R0(j.url);if(V?.url&&P4(V)&&await W$(V.url,{authToken:j.authToken}))return;if(V?.url)await F4({...V,authToken:j.authToken},J.discoveryPath);else await v0(J.discoveryPath).catch(()=>{return})}let X=await R0(W);if(X?.url)await F4(X,J.discoveryPath);let Y=!Q&&Z.port!==0?{...Z,port:0}:Z;await f2($,Y)}).catch(()=>{})}async function WY($,f={}){let J=Y0(),Q=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=c0(f),j=t0(W.host,W.port,W.pathname),X=(K)=>{if(!Q)V1(K.url,K.authToken);return K},H=await A0(J.discoveryPath);if(H?.url){let K=await R0(H.url);if(K?.url&&P4(K)&&await W$(K.url,{authToken:H.authToken}))return X({url:K.url,authToken:H.authToken});if(K?.url)await F4({...K,authToken:H.authToken},J.discoveryPath);else await v0(J.discoveryPath).catch(()=>{return})}let Y=await R0(j);if(Y?.url)await F4(Y,J.discoveryPath);let A=!Z&&W.port!==0?{...W,port:0}:W;await f2($,A);let B=Date.now()+TO;while(Date.now()<B){let K=await A0(J.discoveryPath);if(K?.url){let R=await R0(K.url);if(R?.url&&P4(R)&&await W$(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await R0(j);if(G?.url&&!P4(G))await F4(G,J.discoveryPath);await new Promise((R)=>setTimeout(R,NO))}throw Error("Timed out waiting for detached hub startup.")}function mO(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function VY($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return VY($.data);return String($)}function vO($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function jY($){let f=$,J=vO(f.reason);return new z0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:$Q,{closeCode:f.code,closeReason:J||void 0})}function cO($,f){if($ instanceof z0)return $;if($ instanceof Error)return new z0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new z0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new z0("hub_connect_failed",J);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new z0("hub_connect_failed",Q?`Failed to connect to hub at ${f.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var uO=8000,dO=200,XY="*",HY=8000,lO="cline-hub-auth.",AY=new Map,BY=new Set,pO=3000,rO=3000,iO=100,$Q="Hub connection closed",nO=250,aO=5000,YY=0.5;class z0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function QQ($){return $ instanceof z0}class J2 extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function IJ($,f){return $ instanceof J2&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function KY($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=ZQ($.toString());return J?AY.get(J):void 0}function tO($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function ZQ($){if(!tO($))return;let f=new URL(A1($));return f.search="",f.hash="",f.toString()}function fQ($){let f=ZQ($);return!!f&&BY.has(f)}function V1($,f){let J=ZQ($);if(J){if(BY.add(J),f?.trim())AY.set(J,f)}return $}class s0{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new z0("hub_connection_closed",$Q);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),f=this.options.authToken?.trim()||KY($);$.hash="";let Q=new(mO())($.toString(),f?[`${lO}${f}`]:void 0);this.socket=Q;let Z=!1;this.connectPromise=new Promise((W,j)=>{let X=!1,H=setTimeout(()=>{if(X)return;X=!0,Z=!0,this.lastCloseError=new z0("hub_connect_timeout",`Timed out connecting to hub after ${HY}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}j(this.lastCloseError)},HY);Q.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(H),W()}),Q.addEventListener("error",(Y)=>{if(X)return;X=!0,clearTimeout(H),this.lastCloseError=cO(Y,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),Q.addEventListener("close",(Y)=>{if(X)return;if(X=!0,clearTimeout(H),!Z)this.lastCloseError=jY(Y),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),Q.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(VY(W)))}),Q.addEventListener("close",(W)=>{if(this.socket!==Q)return;if(!Z)this.lastCloseError=jY(W),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let W of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(W));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,Q={listener:$,sessionId:J};return this.listeners.add(Q),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,Q){let Z=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,Q)}catch(j){if(!W||Z>=1||!await this.recoverLocalHubTransport(j))throw j;Z+=1}}async commandOnce($,f,J,Q){await this.connect();let Z=xO("hubreq_"),W=gO($,Q?.timeoutMs),j=new Promise((H,Y)=>{let V=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Z))return;Y(new J2($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${Z}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(Z,{resolve:(A)=>{if(V)clearTimeout(V);H(A)},reject:(A)=>{if(V)clearTimeout(V);Y(A)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Z,clientId:this.clientId,sessionId:J,timeoutMs:W,payload:f}})}catch(H){throw this.pendingReplies.delete(Z),H}let X=await j;if(!X.ok)throw new J2($,X.error?.code,X.error?.message??`Hub command ${$} failed`);return X}async recoverLocalHubTransport($){if(!fQ(this.currentUrl)||!QQ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await t1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(nO*2**this.reconnectAttempt,aO),f=Math.round($*(1-YY)+Math.random()*$*YY);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!fQ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await t1({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 z0("hub_connection_closed",$Q),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new z0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(J)??0)+f;if(Q<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,Q),f>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??XY}subscriptionSessionIdFromKey($){return $===XY?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function A1($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function W$($,f){let J=new s0({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function JQ($,f){let J=A1($),Q=await R0(J);if(!Q)return{status:"unreachable",url:J};let Z=Y1(),W=Q.buildId?.trim();if(!W||W!==Z)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await W$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function sO($){let f=Date.now()+uO;while(Date.now()<f){let J=await A0($.discoveryPath);if(J?.url){let Q=await JQ(J.url,{verifyConnection:!0,authToken:J.authToken});if(Q.status==="compatible")return V1(Q.url,J.authToken)}await new Promise((Q)=>setTimeout(Q,dO))}return}async function oO($){let f=Date.now()+rO;while(Date.now()<f){if(!(await R0($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,iO))}return!1}function eO($,f){try{return A1($)===A1(f)}catch{return!1}}function $z($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let Q=J;if(Q.status==="running"||Q.status==="idle")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function fz($,f,J){let Q=new s0({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Z=await Q.command("session.list",{limit:500},void 0,{timeoutMs:pO});return!$z(Z.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function R4($={}){if($.endpoint?.trim()){let Z=await JQ($.endpoint);return Z.status==="compatible"?Z.url:void 0}let f=Y0(),J=await A0(f.discoveryPath);if(!J?.url)return;let Q=await JQ(J.url);if(Q.status==="compatible")return V1(Q.url,J.authToken);if(Q.status==="build_mismatch")await v0(f.discoveryPath).catch(()=>{return});return}async function t1($={}){let f=await R4($);if(f&&await W$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=Y0();return await f2($.workspaceRoot??process.cwd()),await sO(J)}async function D4($,f){let J=new URL($),Q=f?.trim()||KY(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function WQ(){let $=Y0(),f=await A0($.discoveryPath);if(!f?.url)return!1;try{if(await D4(f.url,f.authToken))return!0}catch{}return!1}async function xJ($){if(!fQ($.url))return;let f=Y0(),J=await A0(f.discoveryPath);if(!J?.url||!eO(J.url,$.url))return;if(!await fz(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await WQ())return;if(!await oO(J.url))return;return await v0(f.discoveryPath).catch(()=>{return}),await t1({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var yY={};q(yY,{HubRuntimeHost:()=>S$});import{captureSdkError as Wz,createSessionId as PY,HUB_CHECKPOINT_CAPABILITY as jz,HUB_COMPACTION_CAPABILITY as Xz,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Hz,HUB_HOOK_CAPABILITY_PREFIX as Yz,HUB_MISTAKE_LIMIT_CAPABILITY as Vz,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Az,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Bz,isHubToolExecutorName as Kz}from"@cline/shared";var GY={};q(GY,{createCoreSessionSnapshot:()=>j$,coreSessionSnapshotToRecord:()=>gJ});function Jz($){return $?JSON.parse(JSON.stringify($)):void 0}function Qz($){return $?JSON.parse(JSON.stringify($)):void 0}function Zz($){let f=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(f?.history)?f.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let X=typeof j.ref==="string"?j.ref.trim():"",H=Number(j.createdAt),Y=Number(j.runCount);if(!X||!Number.isFinite(H)||!Number.isInteger(Y))return[];return[{ref:X,createdAt:H,runCount:Y,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),Z=Q.at(-1),W=$?.checkpointEnabled===!0?!0:void 0;if(!W&&Q.length===0)return;return{...W?{enabled:W}:{},...Z?{latest:Z}:{},history:Q}}function j$($){let{session:f}=$,J=Jz(f.metadata);return{version:1,sessionId:f.sessionId,source:f.source,status:f.status,createdAt:f.startedAt,updatedAt:f.updatedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,interactive:f.interactive,workspace:{cwd:f.cwd,root:f.workspaceRoot},model:{providerId:f.provider,modelId:f.model},capabilities:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams},lineage:{...f.parentSessionId?{parentSessionId:f.parentSessionId}:{},...f.parentAgentId?{parentAgentId:f.parentAgentId}:{},...f.agentId?{agentId:f.agentId}:{},...f.conversationId?{conversationId:f.conversationId}:{},isSubagent:f.isSubagent},...f.teamName?{team:{name:f.teamName}}:{},...f.prompt?{prompt:f.prompt}:{},...J?{metadata:J}:{},...f.messagesPath?{artifacts:{messagesPath:f.messagesPath}}:{},...$.messages?{messages:Qz($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=Zz(J);return Q?{checkpoint:Q}:{}})()}}function gJ($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function Q2($){if(!$)return;return JSON.parse(JSON.stringify($))}var Gz=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function FY($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function DY($){if(!$)return;let{userInstructionService:f,...J}=$;return JSON.parse(JSON.stringify(J))}function RY($){let f=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof f.agentId==="string"?f.agentId:"",conversationId:typeof f.conversationId==="string"?f.conversationId:"",iteration:typeof f.iteration==="number"?f.iteration:0,metadata:f.metadata&&typeof f.metadata==="object"&&!Array.isArray(f.metadata)?f.metadata:void 0}}function s1($,f,J){$.manifest.push(f),$.handlers.set(f.capabilityName,J)}function UY($,f){let J={manifest:[],handlers:new Map};for(let Z of Object.keys(f.toolExecutors??{}).filter(Kz)){let W=f.toolExecutors?.[Z];if(typeof W!=="function")continue;s1(J,{kind:"toolExecutor",executor:Z,capabilityName:`${Az}${Z}`},async({payload:j,abortSignal:X})=>{let H=Array.isArray(j.args)?[...j.args]:[],Y={...RY(j.context),signal:X};return{result:await W(...H,Y)}})}for(let Z of $?.extraTools??[])s1(J,{kind:"tool",name:Z.name,description:Z.description,inputSchema:Q2(Z.inputSchema)??{},...Z.lifecycle?{lifecycle:Q2(Z.lifecycle)}:{},capabilityName:`${Hz}${Z.name}`},async({payload:W,abortSignal:j,progress:X})=>{let H={...RY(W.context),signal:j};return{result:await Z.execute(W.input,{...H,emitUpdate:(V)=>{X({update:V})}})}});let Q=$?.hooks;if(Q)for(let Z of Gz){let W=Q[Z];if(typeof W!=="function")continue;s1(J,{kind:"hook",name:Z,capabilityName:`${Yz}${Z}`},async({payload:j})=>({control:await W(j.context)}))}if($?.compaction?.compact){let Z=$.compaction.compact;s1(J,{kind:"compaction",capabilityName:Xz,config:FY($.compaction)},async({payload:W})=>({result:await Z(W.context)}))}if($?.checkpoint?.createCheckpoint){let Z=$.checkpoint.createCheckpoint;s1(J,{kind:"checkpoint",capabilityName:jz,config:FY($.checkpoint)},async({payload:W})=>({result:await Z(W.context)}))}if($?.onConsecutiveMistakeLimitReached){let Z=$.onConsecutiveMistakeLimitReached;s1(J,{kind:"mistakeLimit",capabilityName:Vz},async({payload:W})=>({result:await Z(W.context)}))}if($?.userInstructionService){let Z=$.userInstructionService;s1(J,{kind:"userInstructionService",capabilityName:Bz},async()=>{return await Z.start().catch(()=>{}),{snapshot:{records:{skill:Z.listRecords("skill"),rule:Z.listRecords("rule"),workflow:Z.listRecords("workflow")},runtimeCommands:Z.listRuntimeCommands()}}})}return J}function Pz($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message;if($&&typeof $==="object"&&"message"in $){let f=$.message;if(typeof f==="string"&&f.trim())return f.trim()}return"Capability request was cancelled."}function Fz($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function Dz($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function Rz($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=typeof f.inputTokens==="number"?f.inputTokens:void 0,Q=typeof f.outputTokens==="number"?f.outputTokens:void 0;if(J===void 0||Q===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function LY($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function jQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function B1($,f){return jQ($?.[f])??0}function Uz($){let f=$?.delta&&typeof $.delta==="object"?$.delta:void 0,J=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,Z=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:B1(f,"inputTokens"),outputTokens:B1(f,"outputTokens"),cacheReadTokens:B1(f,"cacheReadTokens"),cacheWriteTokens:B1(f,"cacheWriteTokens"),cost:jQ(f?.totalCost),totalInputTokens:B1(J,"inputTokens"),totalOutputTokens:B1(J,"outputTokens"),totalCacheReadTokens:B1(J,"cacheReadTokens"),totalCacheWriteTokens:B1(J,"cacheWriteTokens"),totalCost:jQ(J?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:Z}}function Lz($){let f=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,J=$?.reason??f?.finishReason,Q=Dz(J)?J:J==="failed"?"error":"completed",Z=Rz($?.usage??f?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof f?.text==="string"?f.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof f?.iterations==="number"?f.iterations:0,usage:Z}}function mJ($,f){return $.error?.message??`hub command failed: ${f}`}function U4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function _Y($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof f?.parentSessionId==="string"?f.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof f?.agentId==="string"?f.agentId:void 0),parentAgentId:typeof f?.parentAgentId==="string"?f.parentAgentId:void 0,conversationId:typeof f?.conversationId==="string"?f.conversationId:void 0,isSubagent:typeof f?.isSubagent==="boolean"?f.isSubagent:!1,source:typeof f?.source==="string"?f.source:K0.CORE,pid:typeof f?.pid==="number"?f.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:U4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:U4($.status)==="completed"?0:U4($.status)==="failed"?1:void 0,status:U4($.status),interactive:f?.interactive===!0,provider:typeof f?.provider==="string"?f.provider:"hub",model:typeof f?.model==="string"?f.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof f?.teamName==="string"?f.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??f?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??f?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??f?.enableTeams===!0,prompt:typeof f?.prompt==="string"?f.prompt:void 0,metadata:f,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof f?.messagesPath==="string"?f.messagesPath:void 0,hookPath:typeof f?.hookPath==="string"?f.hookPath:void 0}}function o1($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$;return f.version===1&&typeof f.sessionId==="string"?JSON.parse(JSON.stringify(f)):void 0}function Oz($){let f=o1($?.snapshot);if(f)return gJ(f);let J=$?.session;return J?_Y(J):void 0}function OY($,f,J){let Q=J?.workspaceRoot?.trim()||f.config.workspaceRoot||f.config.cwd;return y0.parse({version:1,session_id:$,source:f.source??K0.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:U4(J?.status),interactive:f.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:J?.cwd?.trim()||f.config.cwd,workspace_root:Q,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,metadata:f.sessionMetadata&&Object.keys(f.sessionMetadata).length>0?f.sessionMetadata:void 0})}function zY($,f){return y0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??f.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class S${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new B4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,f){this.clientContext=f,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd},this.defaultCapabilities=F0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient($.url)}createClient($){return new s0({...this.clientOptions,url:$})}async replaceClient($){let f=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(f.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!IJ($,"session.create"))return!1;let f=await xJ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!f)return!1;return await this.replaceClient(f),!0}registerPlannedSession($,f,J){if(this.sessionCapabilities.set($,f),J.size>0)this.sessionClientContributionHandlers.set($,J);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let f=this.resolveCapabilities($),J=UY($.localRuntime,f),Q=$.config.sessionId?.trim()||PY(),Z=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:Q2({...$.config,sessionId:Q}),metadata:{...$.sessionMetadata??{},source:$.source??K0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:Q2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Q,f,J.handlers);let W;try{W=await Z()}catch(Y){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(Y)){this.registerPlannedSession(Q,f,J.handlers);try{W=await Z()}catch(V){throw this.cleanupPlannedSession(Q),V}}else throw Y}let j=o1(W.payload?.snapshot),X=W.payload?.session,H=(j?.sessionId??X?.sessionId)?.trim();if(!H)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(H!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(H,f,J.handlers);return{sessionId:H,manifest:j?zY(j,$):OY(H,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,Z=Q?this.resolveCapabilities(Q):void 0,W=Q?UY(Q.localRuntime,Z??{}):{manifest:[],handlers:new Map},j=Q?Q.config.sessionId?.trim()||PY():void 0;if(j&&Z)this.sessionCapabilities.set(j,Z);if(j&&W.handlers.size>0)this.sessionClientContributionHandlers.set(j,W.handlers),this.ensureSessionSubscription(j);let X;try{X=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:Q2({...Q.config,sessionId:j}),metadata:{...Q.sessionMetadata??{},source:Q.source??K0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...W.manifest.length>0?{clientContributions:W.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:Q2(Q.toolPolicies)}:{}},f)}catch(K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(K)}let H=o1(X.payload?.snapshot),Y=X.payload?.session,V=(H?.sessionId??Y?.sessionId)?.trim();if(J&&!V){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(V&&j&&V!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(V&&Z)this.sessionCapabilities.set(V,Z);if(V&&W.handlers.size>0)this.sessionClientContributionHandlers.set(V,W.handlers);if(V)this.ensureSessionSubscription(V);let A=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,B=X.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:V,startResult:V?{sessionId:V,manifest:H?zY(H,Q??{}):OY(V,Q??{},Y),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:A,checkpoint:B}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,updated:f.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,removed:f.payload?.removed===!0}}async getAccumulatedUsage($){let f=await this.client.command("session.get",{includeSnapshot:!0},$),J=o1(f.payload?.snapshot);if(J){let j=J.usage?{...J.usage}:void 0,X=J.aggregateUsage?{...J.aggregateUsage}:void 0;return j||X?{usage:j,aggregateUsage:X}:void 0}let Q=f.payload?.session,Z=LY(Q?.usage),W=LY(Q?.aggregateUsage);return Z||W?{usage:Z,aggregateUsage:W}:void 0}async abort($,f){await this.client.command("run.abort",{sessionId:$,reason:typeof f==="string"?f:void 0},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,f]of this.sessionSubscriptions){f();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let f=await this.client.command("session.get",void 0,$);return Oz(f.payload)}async listSessions($=100){let f=await this.client.command("session.list",{limit:$}),J=Array.isArray(f.payload?.snapshots)?f.payload.snapshots.flatMap((Z)=>{let W=o1(Z);return W?[gJ(W)]:[]}):[];if(J.length>0)return J;return(f.payload?.sessions??[]).map(_Y)}async listSettings($){let f=await this.client.command("settings.list",DY($));if(!f.ok)throw Error(mJ(f,"settings.list"));return f.payload?.snapshot}async toggleSetting($){let f=await this.client.command("settings.toggle",DY($));if(!f.ok)throw Error(mJ(f,"settings.toggle"));return{snapshot:f.payload?.snapshot,changedTypes:Array.isArray(f.payload?.changedTypes)?f.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,f){let J={...f.metadata??{}};if(typeof f.prompt==="string")J.prompt=f.prompt;if(typeof f.title==="string")J.title=f.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:J})).ok}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Wz(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(mJ(J,"session.messages")),severity:J.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:f,errorCode:J.error?.code,runtimeAddress:this.runtimeAddress}}),Error(mJ(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,f){return this.events.subscribe($,f)}ensureSessionSubscription($){let f=$.trim();if(!f||this.sessionSubscriptions.has(f))return;let J=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:f});this.sessionSubscriptions.set(f,typeof J==="function"?J:()=>{})}disposeSessionSubscription($){let f=$.trim();if(!f)return;this.sessionSubscriptions.get(f)?.(),this.sessionSubscriptions.delete(f),this.agentDoneEmittedForCurrentRunBySession.delete(f)}resolveCapabilities($){return F0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:Lz($.payload)}})}handleHubEvent($){let f=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($);return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($);return}if(!f)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(f);let J=o1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!J&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:f,payload:$.payload});return}case"usage.updated":{let J=Uz($.payload);this.events.emit({type:"agent_event",payload:{sessionId:f,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:f,toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"tool",toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let J=o1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:f,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=$.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:f,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";this.emitAgentDoneIfNeeded({sessionId:f,payload:{...$.payload,reason:J}}),this.events.emit({type:"ended",payload:{sessionId:f,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}async handleCapabilityRequest($){let f=$.sessionId?.trim();if(!f)return;let J=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",Z=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let W=this.sessionClientContributionHandlers.get(f)?.get(Z);if(!W){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${Z} in session ${f}.`},f).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Q,X);let H=(Y)=>{this.client.command("capability.progress",{requestId:Q,payload:Y},f)};try{let Y=await W({payload:j,abortSignal:X.signal,progress:H});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:Y},f)}catch(Y){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:Y instanceof Error?Y.message:String(Y)},f)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let f=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!f)return;let J=this.activeCapabilityAbortControllers.get(f);if(!J)return;J.abort(Pz($.payload.error))}async handleApprovalRequested($){let f=$.sessionId?.trim();if(!f)return;let J=this.sessionCapabilities.get(f)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",W=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!Z||!W)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=Fz($.payload?.inputJson);this.pendingApprovalToolCallIds.add(Z),this.emitToolCallContentStart({sessionId:f,toolCallId:Z,toolName:W,toolInput:X});let H=await Promise.resolve(J({sessionId:f,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:f,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:Z,toolName:W,input:X,policy:j})).catch((Y)=>({approved:!1,reason:Y instanceof Error?Y.message:`Tool approval request failed: ${String(Y)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:H.approved,reason:H.reason},f).catch(()=>{})}}var TY={};q(TY,{RemoteRuntimeHost:()=>Z2});class Z2 extends S${constructor($){super({url:A1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var NY={};q(NY,{SqliteSessionStore:()=>H$});import{existsSync as zz,mkdirSync as _z}from"node:fs";import{join as yz}from"node:path";import{asBool as L4,asOptionalString as X$,asString as C$,ensureSessionSchema as Tz,loadSqliteDb as Nz,nowIso as vJ,toBoolInt as O4}from"@cline/shared/db";import{resolveDbDataDir as Mz}from"@cline/shared/storage";class H${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Mz()}init(){this.getRawDb()}ensureSessionsDir(){if(!zz(this.sessionsDirPath))_z(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return yz(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=Nz(this.sessionDbPath());return Tz($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}create($){let f=vJ();this.run(`INSERT OR REPLACE INTO sessions (
475
483
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
476
484
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
477
485
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
478
486
  metadata_json, transcript_path, hook_path, messages_path, updated_at
479
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[f.sessionId,f.source,f.pid,f.startedAt,f.endedAt??null,f.exitCode??null,f.status,0,X4(f.interactive),f.provider,f.model,f.cwd,f.workspaceRoot,f.teamName??null,X4(f.enableTools),X4(f.enableSpawn),X4(f.enableTeams),f.parentSessionId??null,f.parentAgentId??null,f.agentId??null,f.conversationId??null,X4(f.isSubagent),f.prompt??null,f.metadata?JSON.stringify(f.metadata):null,"",f.hookPath??"",f.messagesPath??null,$])}update(f){let $=[],J=[];if(f.endedAt!==void 0)$.push("ended_at = ?"),J.push(f.endedAt);if(f.exitCode!==void 0)$.push("exit_code = ?"),J.push(f.exitCode);if(f.status!==void 0)$.push("status = ?"),J.push(f.status);if(f.prompt!==void 0)$.push("prompt = ?"),J.push(f.prompt);if(f.metadata!==void 0)$.push("metadata_json = ?"),J.push(f.metadata?JSON.stringify(f.metadata):null);if(f.parentSessionId!==void 0)$.push("parent_session_id = ?"),J.push(f.parentSessionId);if(f.parentAgentId!==void 0)$.push("parent_agent_id = ?"),J.push(f.parentAgentId);if(f.agentId!==void 0)$.push("agent_id = ?"),J.push(f.agentId);if(f.conversationId!==void 0)$.push("conversation_id = ?"),J.push(f.conversationId);if($.length===0)return;$.push("updated_at = ?"),J.push(DJ()),J.push(f.sessionId),this.run(`UPDATE sessions SET ${$.join(", ")} WHERE session_id = ?`,J)}updateStatus(f,$,J){this.update({sessionId:f,status:$,endedAt:$==="running"?null:DJ(),exitCode:$==="running"?null:J??($==="failed"?1:0)})}get(f){let $=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
487
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,O4($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,O4($.enableTools),O4($.enableSpawn),O4($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,O4($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,f])}update($){let f=[],J=[];if($.endedAt!==void 0)f.push("ended_at = ?"),J.push($.endedAt);if($.exitCode!==void 0)f.push("exit_code = ?"),J.push($.exitCode);if($.status!==void 0)f.push("status = ?"),J.push($.status);if($.prompt!==void 0)f.push("prompt = ?"),J.push($.prompt);if($.metadata!==void 0)f.push("metadata_json = ?"),J.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)f.push("parent_session_id = ?"),J.push($.parentSessionId);if($.parentAgentId!==void 0)f.push("parent_agent_id = ?"),J.push($.parentAgentId);if($.agentId!==void 0)f.push("agent_id = ?"),J.push($.agentId);if($.conversationId!==void 0)f.push("conversation_id = ?"),J.push($.conversationId);if(f.length===0)return;f.push("updated_at = ?"),J.push(vJ()),J.push($.sessionId),this.run(`UPDATE sessions SET ${f.join(", ")} WHERE session_id = ?`,J)}updateStatus($,f,J){this.update({sessionId:$,status:f,endedAt:f==="running"?null:vJ(),exitCode:f==="running"?null:J??(f==="failed"?1:0)})}get($){let f=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
480
488
  provider, model, cwd, workspace_root, team_name,
481
489
  enable_tools, enable_spawn, enable_teams,
482
490
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
483
491
  prompt, metadata_json, hook_path, messages_path, updated_at
484
- FROM sessions WHERE session_id = ?`,[f]);if(!$)return;return{sessionId:q0($.session_id),source:q0($.source),pid:Number($.pid??0),startedAt:q0($.started_at),endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:q0($.status),interactive:j4($.interactive),provider:q0($.provider),model:q0($.model),cwd:q0($.cwd),workspaceRoot:q0($.workspace_root),teamName:H0($.team_name),enableTools:j4($.enable_tools),enableSpawn:j4($.enable_spawn),enableTeams:j4($.enable_teams),parentSessionId:H0($.parent_session_id),parentAgentId:H0($.parent_agent_id),agentId:H0($.agent_id),conversationId:H0($.conversation_id),isSubagent:j4($.is_subagent),prompt:H0($.prompt),metadata:(()=>{let J=H0($.metadata_json);if(!J)return;try{let W=JSON.parse(J);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:H0($.hook_path),messagesPath:H0($.messages_path),updatedAt:H0($.updated_at)??DJ()}}list(f=200){let $=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[f]),J=[];for(let W of $){let H=this.get(q0(W.session_id));if(H)J.push(H)}return J}delete(f,$=!1){let J=this.run("DELETE FROM sessions WHERE session_id = ?",[f]).changes??0;if($)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[f]);return J>0}}_J();import{existsSync as s9,mkdirSync as zD,readFileSync as tX,renameSync as ND,writeFileSync as qD}from"node:fs";import{join as sX}from"node:path";import{resolveSessionDataDir as wD}from"@cline/shared/storage";import{dirname as hD}from"node:path";import{nanoid as OD}from"nanoid";import{appendFileSync as AD,existsSync as PD,mkdirSync as vX,readFileSync as BD,writeFileSync as uX}from"node:fs";import{dirname as cX,join as YD}from"node:path";import{ensureHookLogDir as VD}from"@cline/shared/storage";class v9{adapter;messagesArtifactUploader;artifacts;constructor(f,$){this.adapter=f;this.messagesArtifactUploader=$;this.artifacts=new CW(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile(f,$,J){Y7($,J,p5(f))}writeSessionManifest(f,$){vX(cX(f),{recursive:!0}),uX(f,`${JSON.stringify(Mf.parse($),null,2)}
485
- `,"utf8")}readSessionManifest(f){return this.readManifestFile(f).manifest}readManifestFile(f){let $=this.artifacts.sessionManifestPath(f,!1);if(!PD($))return{path:$};try{return{path:$,manifest:Mf.parse(JSON.parse(BD($,"utf8")))}}catch{return{path:$}}}async resolveArtifactPath(f,$,J){let H=(await this.adapter.getSession(f))?.[$];return typeof H==="string"&&H.trim().length>0?H:J(f)}async persistSessionMessages(f,$,J){let W=await this.resolveArtifactPath(f,"messagesPath",(Z)=>this.artifacts.sessionMessagesPath(Z)),H=i5({updatedAt:s(),context:p5(f),messages:$,systemPrompt:J}),Q=`${JSON.stringify(H,null,2)}
486
- `;if(vX(cX(W),{recursive:!0}),uX(W,Q,"utf8"),!this.messagesArtifactUploader)return;try{let Z=await this.adapter.getSession(f);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:f,path:W,contents:Q,row:Z})}catch(Z){console.warn(`Failed to upload persisted session messages for ${f}`,Z)}}appendStaleSessionHookLog(f,$,J,W,H){let Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??YD(VD(),"hooks.jsonl");AD(Z,`${JSON.stringify({ts:f,hookName:"session_shutdown",reason:W,sessionId:$,pid:J,source:H})}
487
- `,"utf8")}}import{appendFileSync as RD}from"node:fs";import{join as FD}from"node:path";import{resolveRootSessionId as dX}from"@cline/shared";import{ensureHookLogDir as KD}from"@cline/shared/storage";import{z as u9}from"zod";var yD="subagent",UD=u9.looseObject({task:u9.string().optional(),systemPrompt:u9.string().optional()});class MJ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor(f,$,J,W){this.adapter=f;this.manifestStore=$;this.toPersistedMessages=J;this.heartbeatLogIntervalMs=W}teamTaskQueueKey(f,$){return`${f}::${$}`}activeTeamTaskSessionId(f,$){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey(f,$))?.at(-1)}buildSubsessionRow(f,$){return{sessionId:$.sessionId,source:yD,pid:process.ppid,startedAt:$.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:f.provider,model:f.model,cwd:f.cwd,workspaceRoot:f.workspaceRoot,teamName:f.teamName??null,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,parentSessionId:$.parentSessionId,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId??null,isSubagent:!0,prompt:$.prompt,metadata:i2({prompt:$.prompt}),hookPath:"",messagesPath:$.messagesPath,updatedAt:$.startedAt}}async queueSpawnRequest(f){if(f.hookName!=="tool_call"||f.parent_agent_id!==null)return;if(f.tool_call?.name!=="spawn_agent")return;let $=dX(f.sessionContext);if(!$)return;let J=UD.safeParse(f.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:$,parentAgentId:f.agent_id,task:J.success?J.data.task:void 0,systemPrompt:J.success?J.data.systemPrompt:void 0})}async upsertSubagentSession(f){let $=f.rootSessionId;if(!$)return;let J=await this.adapter.getSession($);if(!J)return;let W=F1($,f.agentId),H=await this.adapter.getSession(W),Q=s(),Z=this.manifestStore.artifacts.subagentArtifactPaths(W,f.agentId,this.activeTeamTaskSessionId($,f.parentAgentId)),j=f.prompt??H?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest($,f.parentAgentId)??`Subagent run by ${f.parentAgentId}`;if(!H)return await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:W,parentSessionId:$,parentAgentId:f.parentAgentId,agentId:f.agentId,conversationId:f.conversationId,prompt:j,startedAt:Q,...Z})),this.manifestStore.initializeMessagesFile(W,Z.messagesPath,Q),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:$,parentAgentId:f.parentAgentId,agentId:f.agentId,conversationId:f.conversationId,prompt:H.prompt??j??null,metadata:i2({metadata:H.metadata??void 0,prompt:H.prompt??j??null}),expectedStatusLock:H.statusLock}),W}async upsertSubagentSessionFromHook(f){if(!f.parent_agent_id)return;let $=dX(f.sessionContext);if(!$)return;if(f.hookName==="session_shutdown"){let J=F1($,f.agent_id);return await this.adapter.getSession(J)?J:void 0}return await this.upsertSubagentSession({agentId:f.agent_id,parentAgentId:f.parent_agent_id,conversationId:f.taskId,rootSessionId:$})}async applySubagentStatus(f,$){await this.applySubagentStatusBySessionId(f,r2($))}async applySubagentStatusBySessionId(f,$){let J=await this.adapter.getSession(f);if(!J)return;let W=$==="running"?null:s(),H=$==="running"?null:$==="failed"?1:0;await this.adapter.updateSession({sessionId:f,status:$,endedAt:W,exitCode:H,expectedStatusLock:J.statusLock})}async applyStatusToRunningChildSessions(f,$){if(!f)return;let J=await this.adapter.listSessions({limit:2000,parentSessionId:f,status:"running"});for(let W of J)await this.applySubagentStatusBySessionId(W.sessionId,$)}async onTeamTaskStart(f,$,J){let W=await this.adapter.getSession(f);if(!W)return;let H=c2(f,$),Q=s(),{messagesPath:Z}=this.manifestStore.artifacts.subagentArtifactPaths(H,$);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:H,parentSessionId:f,parentAgentId:"lead",agentId:$,prompt:J||`Team task for ${$}`,startedAt:Q,messagesPath:Z})),this.manifestStore.initializeMessagesFile(H,Z,Q);let j=this.teamTaskQueueKey(f,$),X=this.teamTaskSessionsByAgent.get(j)??[];X.push(H),this.teamTaskSessionsByAgent.set(j,X)}async onTeamTaskEnd(f,$,J,W,H,Q){let Z=this.teamTaskQueueKey(f,$),j=this.teamTaskSessionsByAgent.get(Z);if(!j||j.length===0)return;let X=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Z);if(!X)return;let A=H?.messages??Q,P=this.toPersistedMessages(A,H,Q);if(P)await this.manifestStore.persistSessionMessages(X,P);await this.applySubagentStatusBySessionId(X,J),this.teamTaskLastHeartbeatBySession.delete(X),this.teamTaskLastProgressLineBySession.delete(X)}async onTeamTaskProgress(f,$,J,W){let H=this.teamTaskQueueKey(f,$),Q=this.teamTaskSessionsByAgent.get(H)?.[0];if(!Q)return;let Z=J.trim();if(!Z)return;let j=W?.kind??"progress";if(j==="heartbeat"){let A=Date.now(),P=this.teamTaskLastHeartbeatBySession.get(Q)??0;if(A-P<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(Q,A)}let X=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Z}`:`[progress] ${Z}`;if(this.teamTaskLastProgressLineBySession.get(Q)===X)return;this.teamTaskLastProgressLineBySession.set(Q,X)}async handleSubAgentStart(f,$){let J=await this.upsertSubagentSession({agentId:$.subAgentId,parentAgentId:$.parentAgentId,conversationId:$.conversationId,prompt:$.input.task,rootSessionId:f});if(!J)return;await this.applySubagentStatusBySessionId(J,"running")}async handleSubAgentEnd(f,$){let J=await this.upsertSubagentSession({agentId:$.subAgentId,parentAgentId:$.parentAgentId,conversationId:$.conversationId,prompt:$.input.task,rootSessionId:f});if(!J)return;if($.error){await this.applySubagentStatusBySessionId(J,"failed");return}let W=this.toPersistedMessages($.agentResult?.messages,$.agentResult);if(W)await this.manifestStore.persistSessionMessages(J,W);let H=$.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(J,H==="aborted"?"cancelled":"completed")}appendSubagentHookAudit(f){let J=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??FD(KD(),"hooks.jsonl");RD(J,`${JSON.stringify({ts:s(),...f})}
488
- `,"utf8")}}import{formatUserInputBlock as LD}from"@cline/shared";var aX={};N(aX,{toTeamProgressLifecycleEvent:()=>a1,sanitizeTeamName:()=>H7,reviveTeamStateDates:()=>c4,createWorkerReviewerTeam:()=>nX,createSpawnAgentTool:()=>d0,createDelegatedAgentConfigProvider:()=>B1,createDelegatedAgent:()=>Y1,createAgentTeamsTools:()=>_$,createAgentTeam:()=>d9,buildTeamProgressSummary:()=>n1,buildDelegatedAgentConfig:()=>T$,bootstrapAgentTeams:()=>R1,AgentTeamsRuntime:()=>p$,AgentTeam:()=>s1});function Z0(){return new Date().toISOString()}function rX(f,$){if($<=0)return 0;return Math.round(f/$*100)}function GD(f,$){let J=new Set;for(let H of $)if(H.status==="reviewed")J.add(`${H.outcomeId}:${H.section}`);let W=new Set;for(let H of f){if(H.status==="finalized")continue;for(let Q of H.requiredSections)if(!J.has(`${H.id}:${Q}`))W.add(`${H.id}:${Q}`)}return[...W].sort((H,Q)=>H.localeCompare(Q))}function n1(f,$){let J={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},H={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},Q={draft:0,in_review:0,finalized:0},Z={draft:0,reviewed:0,rejected:0},j=0,X=0;for(let K of $.members)if(J[K.status]+=1,K.role==="lead")j+=1;else X+=1;let A=[],P=[],B=$.tasks.filter((K)=>K.status==="completed").length,Y=new Map($.tasks.map((K)=>[K.id,K]));for(let K of $.tasks){if(W[K.status]+=1,K.status==="blocked"){A.push(K.id);continue}if(K.status!=="pending")continue;if(K.dependsOn.every((y)=>{return Y.get(y)?.status==="completed"}))P.push(K.id)}let V=[],R,U=0;for(let K of $.runs){if(H[K.status]+=1,K.status==="queued"||K.status==="running")V.push(K.id);let F=K.startedAt.getTime();if(F>=U)U=F,R=K.id}for(let K of $.outcomes)Q[K.status]+=1;for(let K of $.outcomeFragments)Z[K.status]+=1;return{teamName:f,updatedAt:Z0(),members:{total:$.members.length,byStatus:J,leadCount:j,teammateCount:X},tasks:{total:$.tasks.length,byStatus:W,blockedTaskIds:A,readyTaskIds:P,completionPct:rX(B,$.tasks.length)},runs:{total:$.runs.length,byStatus:H,activeRunIds:V,latestRunId:R},outcomes:{total:$.outcomes.length,byStatus:Q,finalizedPct:rX(Q.finalized,$.outcomes.length),missingRequiredSections:GD($.outcomes,$.outcomeFragments)},fragments:{total:$.outcomeFragments.length,byStatus:Z}}}function a1(f){let{event:$}=f;switch($.type){case"team_task_updated":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0(),taskId:$.task.id,agentId:$.task.assignee??$.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0(),runId:$.run.id,taskId:$.run.taskId,agentId:$.run.agentId,message:$.run.error};case"run_progress":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0(),runId:$.run.id,taskId:$.run.taskId,agentId:$.run.agentId,message:$.message};case"outcome_created":case"outcome_finalized":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0(),outcomeId:$.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0(),outcomeId:$.fragment.outcomeId,fragmentId:$.fragment.id,agentId:$.fragment.sourceAgentId};case"team_message":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0(),taskId:$.message.taskId,agentId:$.message.fromAgentId,message:$.message.subject};case"team_mission_log":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0(),taskId:$.entry.taskId,agentId:$.entry.agentId,message:$.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0(),agentId:$.agentId}}return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Z0()}}import{sanitizeFileName as TD,TeamMessageType as C}from"@cline/shared";import{nanoid as DD}from"nanoid";import{TeamMessageType as qS}from"@cline/shared";function c9(f){if(typeof DOMException<"u"&&f instanceof DOMException&&f.name==="AbortError")return!0;if(!(f instanceof Error))return!1;return f.name==="AbortError"||f.message.toLowerCase().includes("aborted")}function lX(f,$){return f?.status==="stopped"&&c9($)}var _D=600000,pX="recovered_queued";function MD(f){return`This is an automatic recovery of interrupted team run ${f.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
492
+ FROM sessions WHERE session_id = ?`,[$]);if(!f)return;return{sessionId:C$(f.session_id),source:C$(f.source),pid:Number(f.pid??0),startedAt:C$(f.started_at),endedAt:f.ended_at??null,exitCode:f.exit_code??null,status:C$(f.status),interactive:L4(f.interactive),provider:C$(f.provider),model:C$(f.model),cwd:C$(f.cwd),workspaceRoot:C$(f.workspace_root),teamName:X$(f.team_name),enableTools:L4(f.enable_tools),enableSpawn:L4(f.enable_spawn),enableTeams:L4(f.enable_teams),parentSessionId:X$(f.parent_session_id),parentAgentId:X$(f.parent_agent_id),agentId:X$(f.agent_id),conversationId:X$(f.conversation_id),isSubagent:L4(f.is_subagent),prompt:X$(f.prompt),metadata:(()=>{let J=X$(f.metadata_json);if(!J)return;try{let Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return})(),hookPath:X$(f.hook_path),messagesPath:X$(f.messages_path),updatedAt:X$(f.updated_at)??vJ()}}list($=200){let f=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),J=[];for(let Q of f){let Z=this.get(C$(Q.session_id));if(Z)J.push(Z)}return J}delete($,f=!1){let J=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(f)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return J>0}}cJ();import{existsSync as RQ,mkdirSync as Z_,readFileSync as xY,renameSync as W_,writeFileSync as j_}from"node:fs";import{join as gY}from"node:path";import{resolveSessionDataDir as X_}from"@cline/shared/storage";import{dirname as J_}from"node:path";import{nanoid as Q_}from"nanoid";import{appendFileSync as vz,existsSync as cz,mkdirSync as MY,readFileSync as uz,writeFileSync as qY}from"node:fs";import{dirname as wY,join as dz}from"node:path";import{ensureHookLogDir as lz}from"@cline/shared/storage";class XQ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,f,J){this.adapter=$;this.messagesArtifactUploader=f;this.logger=J;this.artifacts=new s9(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,f,J){kW(f,J,B9($))}writeSessionManifest($,f){MY(wY($),{recursive:!0}),qY($,`${JSON.stringify(y0.parse(f),null,2)}
493
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let f=this.artifacts.sessionManifestPath($,!1);if(!cz(f))return{path:f};try{return{path:f,manifest:y0.parse(JSON.parse(uz(f,"utf8")))}}catch{return{path:f}}}async resolveArtifactPath($,f,J){let Z=(await this.adapter.getSession($))?.[f];return typeof Z==="string"&&Z.trim().length>0?Z:J($)}async persistSessionMessages($,f,J){let Q=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),Z=K9({updatedAt:s(),context:B9($),messages:f,systemPrompt:J}),W=`${JSON.stringify(Z,null,2)}
494
+ `;if(MY(wY(Q),{recursive:!0}),qY(Q,W,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Q,contents:W,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}appendStaleSessionHookLog($,f,J,Q,Z){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??dz(lz(),"hooks.jsonl");vz(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:f,pid:J,source:Z})}
495
+ `,"utf8")}}import{appendFileSync as pz}from"node:fs";import{join as rz}from"node:path";import{resolveRootSessionId as SY}from"@cline/shared";import{ensureHookLogDir as iz}from"@cline/shared/storage";import{z as HQ}from"zod";var nz="subagent",az=HQ.looseObject({task:HQ.string().optional(),systemPrompt:HQ.string().optional()});class uJ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,f,J,Q){this.adapter=$;this.manifestStore=f;this.toPersistedMessages=J;this.heartbeatLogIntervalMs=Q}teamTaskQueueKey($,f){return`${$}::${f}`}activeTeamTaskSessionId($,f){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,f))?.at(-1)}buildSubsessionRow($,f){return{sessionId:f.sessionId,source:nz,pid:process.ppid,startedAt:f.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:f.parentSessionId,parentAgentId:f.parentAgentId,agentId:f.agentId,conversationId:f.conversationId??null,isSubagent:!0,prompt:f.prompt,metadata:f8({prompt:f.prompt}),hookPath:"",messagesPath:f.messagesPath,updatedAt:f.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let f=SY($.sessionContext);if(!f)return;let J=az.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:f,parentAgentId:$.agent_id,task:J.success?J.data.task:void 0,systemPrompt:J.success?J.data.systemPrompt:void 0})}async upsertSubagentSession($){let f=$.rootSessionId;if(!f)return;let J=await this.adapter.getSession(f);if(!J)return;let Q=zf(f,$.agentId),Z=await this.adapter.getSession(Q),W=s(),j=this.manifestStore.artifacts.subagentArtifactPaths(Q,$.agentId,this.activeTeamTaskSessionId(f,$.parentAgentId)),X=$.prompt??Z?.prompt??void 0;if(!X)X=await this.adapter.claimSpawnRequest(f,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!Z)return await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:Q,parentSessionId:f,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:X,startedAt:W,...j})),this.manifestStore.initializeMessagesFile(Q,j.messagesPath,W),Q;return await this.adapter.updateSession({sessionId:Q,setRunning:!0,parentSessionId:f,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Z.prompt??X??null,metadata:f8({metadata:Z.metadata??void 0,prompt:Z.prompt??X??null}),expectedStatusLock:Z.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let f=SY($.sessionContext);if(!f)return;if($.hookName==="session_shutdown"){let J=zf(f,$.agent_id);return await this.adapter.getSession(J)?J:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:f})}async applySubagentStatus($,f){await this.applySubagentStatusBySessionId($,o2(f))}async applySubagentStatusBySessionId($,f){let J=await this.adapter.getSession($);if(!J)return;let Q=f==="running"?null:s(),Z=f==="running"?null:f==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:f,endedAt:Q,exitCode:Z,expectedStatusLock:J.statusLock})}async applyStatusToRunningChildSessions($,f){if(!$)return;let J=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Q of J)await this.applySubagentStatusBySessionId(Q.sessionId,f)}async onTeamTaskStart($,f,J){let Q=await this.adapter.getSession($);if(!Q)return;let Z=t2($,f),W=s(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(Z,f);await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:Z,parentSessionId:$,parentAgentId:"lead",agentId:f,prompt:J||`Team task for ${f}`,startedAt:W,messagesPath:j})),this.manifestStore.initializeMessagesFile(Z,j,W);let X=this.teamTaskQueueKey($,f),H=this.teamTaskSessionsByAgent.get(X)??[];H.push(Z),this.teamTaskSessionsByAgent.set(X,H)}async onTeamTaskEnd($,f,J,Q,Z,W){let j=this.teamTaskQueueKey($,f),X=this.teamTaskSessionsByAgent.get(j);if(!X||X.length===0)return;let H=X.shift();if(X.length===0)this.teamTaskSessionsByAgent.delete(j);if(!H)return;let Y=Z?.messages??W,V=this.toPersistedMessages(Y,Z,W);if(V)await this.manifestStore.persistSessionMessages(H,V);await this.applySubagentStatusBySessionId(H,J),this.teamTaskLastHeartbeatBySession.delete(H),this.teamTaskLastProgressLineBySession.delete(H)}async onTeamTaskProgress($,f,J,Q){let Z=this.teamTaskQueueKey($,f),W=this.teamTaskSessionsByAgent.get(Z)?.[0];if(!W)return;let j=J.trim();if(!j)return;let X=Q?.kind??"progress";if(X==="heartbeat"){let Y=Date.now(),V=this.teamTaskLastHeartbeatBySession.get(W)??0;if(Y-V<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(W,Y)}let H=X==="heartbeat"?"[progress] heartbeat":X==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(W)===H)return;this.teamTaskLastProgressLineBySession.set(W,H)}async handleSubAgentStart($,f){let J=await this.upsertSubagentSession({agentId:f.subAgentId,parentAgentId:f.parentAgentId,conversationId:f.conversationId,prompt:f.input.task,rootSessionId:$});if(!J)return;await this.applySubagentStatusBySessionId(J,"running")}async handleSubAgentEnd($,f){let J=await this.upsertSubagentSession({agentId:f.subAgentId,parentAgentId:f.parentAgentId,conversationId:f.conversationId,prompt:f.input.task,rootSessionId:$});if(!J)return;if(f.error){await this.applySubagentStatusBySessionId(J,"failed");return}let Q=this.toPersistedMessages(f.agentResult?.messages,f.agentResult);if(Q)await this.manifestStore.persistSessionMessages(J,Q);let Z=f.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(J,Z==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let J=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??rz(iz(),"hooks.jsonl");pz(J,`${JSON.stringify({ts:s(),...$})}
496
+ `,"utf8")}}import{formatUserInputBlock as f_}from"@cline/shared";var IY={};q(IY,{toTeamProgressLifecycleEvent:()=>j2,sanitizeTeamName:()=>MW,reviveTeamStateDates:()=>o4,createWorkerReviewerTeam:()=>kY,createSpawnAgentTool:()=>r$,createDelegatedAgentConfigProvider:()=>Rf,createDelegatedAgent:()=>Uf,createAgentTeamsTools:()=>y1,createAgentTeam:()=>VQ,buildTeamProgressSummary:()=>W2,buildDelegatedAgentConfig:()=>z1,bootstrapAgentTeams:()=>Of,AgentTeamsRuntime:()=>$f,AgentTeam:()=>H2});function Y$(){return new Date().toISOString()}function CY($,f){if(f<=0)return 0;return Math.round($/f*100)}function tz($,f){let J=new Set;for(let Z of f)if(Z.status==="reviewed")J.add(`${Z.outcomeId}:${Z.section}`);let Q=new Set;for(let Z of $){if(Z.status==="finalized")continue;for(let W of Z.requiredSections)if(!J.has(`${Z.id}:${W}`))Q.add(`${Z.id}:${W}`)}return[...Q].sort((Z,W)=>Z.localeCompare(W))}function W2($,f){let J={idle:0,running:0,stopped:0},Q={pending:0,in_progress:0,blocked:0,completed:0},Z={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},W={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},X=0,H=0;for(let F of f.members)if(J[F.status]+=1,F.role==="lead")X+=1;else H+=1;let Y=[],V=[],A=f.tasks.filter((F)=>F.status==="completed").length,B=new Map(f.tasks.map((F)=>[F.id,F]));for(let F of f.tasks){if(Q[F.status]+=1,F.status==="blocked"){Y.push(F.id);continue}if(F.status!=="pending")continue;if(F.dependsOn.every((D)=>{return B.get(D)?.status==="completed"}))V.push(F.id)}let K=[],G,R=0;for(let F of f.runs){if(Z[F.status]+=1,F.status==="queued"||F.status==="running")K.push(F.id);let P=F.startedAt.getTime();if(P>=R)R=P,G=F.id}for(let F of f.outcomes)W[F.status]+=1;for(let F of f.outcomeFragments)j[F.status]+=1;return{teamName:$,updatedAt:Y$(),members:{total:f.members.length,byStatus:J,leadCount:X,teammateCount:H},tasks:{total:f.tasks.length,byStatus:Q,blockedTaskIds:Y,readyTaskIds:V,completionPct:CY(A,f.tasks.length)},runs:{total:f.runs.length,byStatus:Z,activeRunIds:K,latestRunId:G},outcomes:{total:f.outcomes.length,byStatus:W,finalizedPct:CY(W.finalized,f.outcomes.length),missingRequiredSections:tz(f.outcomes,f.outcomeFragments)},fragments:{total:f.outcomeFragments.length,byStatus:j}}}function j2($){let{event:f}=$;switch(f.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$(),taskId:f.task.id,agentId:f.task.assignee??f.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$(),runId:f.run.id,taskId:f.run.taskId,agentId:f.run.agentId,message:f.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$(),runId:f.run.id,taskId:f.run.taskId,agentId:f.run.agentId,message:f.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$(),outcomeId:f.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$(),outcomeId:f.fragment.outcomeId,fragmentId:f.fragment.id,agentId:f.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$(),taskId:f.message.taskId,agentId:f.message.fromAgentId,message:f.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$(),taskId:f.entry.taskId,agentId:f.entry.agentId,message:f.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$(),agentId:f.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:Y$()}}import{sanitizeFileName as sz,TeamMessageType as h}from"@cline/shared";import{nanoid as oz}from"nanoid";import{TeamMessageType as yI}from"@cline/shared";function YQ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function EY($,f){return $?.status==="stopped"&&YQ(f)}var ez=600000,hY="recovered_queued";function $_($){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.
489
497
 
490
- ${f.message}`}class s1{agents=new Map;configs=new Map;onTeamEvent;constructor(f,$){if(this.onTeamEvent=$,f)for(let[J,W]of Object.entries(f))this.addAgent(J,W)}addAgent(f,$){if(this.agents.has(f))throw Error(`Agent with id "${f}" already exists in the team`);let J={...$,onEvent:(H)=>{$.onEvent?.(H),this.emitEvent({type:C.AgentEvent,agentId:f,event:H})}},W=new c0(J);if(J.onEvent)W.subscribeEvents(J.onEvent);this.agents.set(f,W),this.configs.set(f,$)}removeAgent(f){return this.configs.delete(f),this.agents.delete(f)}getAgent(f){return this.agents.get(f)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo(f,$){let J=this.agents.get(f);if(!J)throw Error(`Agent "${f}" not found in team`);this.emitEvent({type:C.TaskStart,agentId:f,message:$});try{let W=await J.run($);return this.emitEvent({type:C.TaskEnd,agentId:f,result:W}),W}catch(W){let H=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:C.TaskEnd,agentId:f,error:H,messages:J.getMessages()}),W}}async continueTo(f,$){let J=this.agents.get(f);if(!J)throw Error(`Agent "${f}" not found in team`);this.emitEvent({type:C.TaskStart,agentId:f,message:$});try{let W=await J.continue($);return this.emitEvent({type:C.TaskEnd,agentId:f,result:W}),W}catch(W){let H=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:C.TaskEnd,agentId:f,error:H,messages:J.getMessages()}),W}}async runParallel(f){let $=f.map(async(J)=>{let W=this.agents.get(J.agentId);if(!W)return{agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata};this.emitEvent({type:C.TaskStart,agentId:J.agentId,message:J.message});try{let H=await W.run(J.message);return this.emitEvent({type:C.TaskEnd,agentId:J.agentId,result:H}),{agentId:J.agentId,result:H,metadata:J.metadata}}catch(H){let Q=H instanceof Error?H:Error(String(H));return this.emitEvent({type:C.TaskEnd,agentId:J.agentId,error:Q,messages:W.getMessages()}),{agentId:J.agentId,result:void 0,error:Q,metadata:J.metadata}}});return Promise.all($)}async runSequential(f){let $=[];for(let J of f){let W=this.agents.get(J.agentId);if(!W){$.push({agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata});continue}this.emitEvent({type:C.TaskStart,agentId:J.agentId,message:J.message});try{let H=await W.run(J.message);this.emitEvent({type:C.TaskEnd,agentId:J.agentId,result:H}),$.push({agentId:J.agentId,result:H,metadata:J.metadata})}catch(H){let Q=H instanceof Error?H:Error(String(H));this.emitEvent({type:C.TaskEnd,agentId:J.agentId,error:Q,messages:W.getMessages()}),$.push({agentId:J.agentId,result:void 0,error:Q,metadata:J.metadata})}}return $}async runPipeline(f,$,J){let W=[],H=$;for(let Q of f){let Z=this.agents.get(Q);if(!Z){W.push({agentId:Q,result:void 0,error:Error(`Agent "${Q}" not found in team`)});break}this.emitEvent({type:C.TaskStart,agentId:Q,message:H});try{let j=await Z.run(H);this.emitEvent({type:C.TaskEnd,agentId:Q,result:j}),W.push({agentId:Q,result:j});let X=f.indexOf(Q)+1;if(X<f.length){let A=f[X];H=J?J(j,A):`Previous agent output:
491
- ${j.text}
498
+ ${$.message}`}class H2{agents=new Map;configs=new Map;onTeamEvent;constructor($,f){if(this.onTeamEvent=f,$)for(let[J,Q]of Object.entries($))this.addAgent(J,Q)}addAgent($,f){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let J={...f,onEvent:(Z)=>{f.onEvent?.(Z),this.emitEvent({type:h.AgentEvent,agentId:$,event:Z})}},Q=new p$(J);if(J.onEvent)Q.subscribeEvents(J.onEvent);this.agents.set($,Q),this.configs.set($,f)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,f){let J=this.agents.get($);if(!J)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:h.TaskStart,agentId:$,message:f});try{let Q=await J.run(f);return this.emitEvent({type:h.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let Z=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:h.TaskEnd,agentId:$,error:Z,messages:J.getMessages()}),Q}}async continueTo($,f){let J=this.agents.get($);if(!J)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:h.TaskStart,agentId:$,message:f});try{let Q=await J.continue(f);return this.emitEvent({type:h.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let Z=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:h.TaskEnd,agentId:$,error:Z,messages:J.getMessages()}),Q}}async runParallel($){let f=$.map(async(J)=>{let Q=this.agents.get(J.agentId);if(!Q)return{agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata};this.emitEvent({type:h.TaskStart,agentId:J.agentId,message:J.message});try{let Z=await Q.run(J.message);return this.emitEvent({type:h.TaskEnd,agentId:J.agentId,result:Z}),{agentId:J.agentId,result:Z,metadata:J.metadata}}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));return this.emitEvent({type:h.TaskEnd,agentId:J.agentId,error:W,messages:Q.getMessages()}),{agentId:J.agentId,result:void 0,error:W,metadata:J.metadata}}});return Promise.all(f)}async runSequential($){let f=[];for(let J of $){let Q=this.agents.get(J.agentId);if(!Q){f.push({agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata});continue}this.emitEvent({type:h.TaskStart,agentId:J.agentId,message:J.message});try{let Z=await Q.run(J.message);this.emitEvent({type:h.TaskEnd,agentId:J.agentId,result:Z}),f.push({agentId:J.agentId,result:Z,metadata:J.metadata})}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));this.emitEvent({type:h.TaskEnd,agentId:J.agentId,error:W,messages:Q.getMessages()}),f.push({agentId:J.agentId,result:void 0,error:W,metadata:J.metadata})}}return f}async runPipeline($,f,J){let Q=[],Z=f;for(let W of $){let j=this.agents.get(W);if(!j){Q.push({agentId:W,result:void 0,error:Error(`Agent "${W}" not found in team`)});break}this.emitEvent({type:h.TaskStart,agentId:W,message:Z});try{let X=await j.run(Z);this.emitEvent({type:h.TaskEnd,agentId:W,result:X}),Q.push({agentId:W,result:X});let H=$.indexOf(W)+1;if(H<$.length){let Y=$[H];Z=J?J(X,Y):`Previous agent output:
499
+ ${X.text}
492
500
 
493
- Please continue from here.`}}catch(j){let X=j instanceof Error?j:Error(String(j));this.emitEvent({type:C.TaskEnd,agentId:Q,error:X,messages:Z.getMessages()}),W.push({agentId:Q,result:void 0,error:X});break}}return W}abortAll(){for(let f of this.agents.values())f.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent(f){try{this.onTeamEvent?.(f)}catch{}}}function d9(f,$){return new s1(f,$)}function nX(f){let $=d9({worker:f.worker,reviewer:f.reviewer}),J=$;return J.doAndReview=async(W)=>{let H=await $.routeTo("worker",W),Q=await $.routeTo("reviewer",`Please review this work:
501
+ Please continue from here.`}}catch(X){let H=X instanceof Error?X:Error(String(X));this.emitEvent({type:h.TaskEnd,agentId:W,error:H,messages:j.getMessages()}),Q.push({agentId:W,result:void 0,error:H});break}}return Q}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function VQ($,f){return new H2($,f)}function kY($){let f=VQ({worker:$.worker,reviewer:$.reviewer}),J=f;return J.doAndReview=async(Q)=>{let Z=await f.routeTo("worker",Q),W=await f.routeTo("reviewer",`Please review this work:
494
502
 
495
- ${H.text}`);return{workerResult:H,reviewResult:Q}},J}class p${teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor(f){this.teamName=f.teamName,this.teamId=`t_${TD(DD(10))}`,this.onTeamEvent=f.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,f.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,f.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,f.maxConcurrentRuns??2);let $=f.leadAgentId??"lead";this.members.set($,{agentId:$,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole(f){return this.members.get(f)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter((f)=>f.role==="teammate").map((f)=>f.agentId)}getTask(f){return this.tasks.get(f)}listTasks(){return Array.from(this.tasks.values())}listTaskItems(f){return Array.from(this.tasks.values()).map(($)=>{let J=this.getUnresolvedDependencies($);return{...$,blockedBy:J,isReady:$.status==="pending"&&!$.assignee&&J.length===0}}).filter(($)=>{if(f?.status&&$.status!==f.status)return!1;if(f?.assignee&&$.assignee!==f.assignee)return!1;return!0})}listMissionLog(f){if(!f||f<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-f))}listMailbox(f,$){let J=$?.unreadOnly??!0,W=$?.markRead??!0,H=$?.limit,Q=this.mailbox.filter((j)=>j.toAgentId===f&&(!J||!j.readAt)),Z=typeof H==="number"&&H>0?Q.slice(Math.max(0,Q.length-H)):Q;if(W){let j=new Date;for(let X of Z)if(!X.readAt)X.readAt=j}return Z.map((j)=>({...j}))}getSnapshot(){let f={pending:0,in_progress:0,blocked:0,completed:0};for(let J of this.tasks.values())f[J.status]++;let $={draft:0,in_review:0,finalized:0};for(let J of this.outcomes.values())$[J.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((J)=>({agentId:J.agentId,role:J.role,description:J.description,status:J.status})),taskCounts:f,unreadMessages:this.mailbox.filter((J)=>!J.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((J)=>J.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((J)=>J.status==="queued").length,outcomeCounts:$}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((f)=>({agentId:f.agentId,role:f.role,description:f.description,status:f.status})),tasks:Array.from(this.tasks.values()).map((f)=>({...f})),mailbox:this.mailbox.map((f)=>({...f})),missionLog:this.missionLog.map((f)=>({...f})),runs:Array.from(this.runs.values()).map((f)=>({...f})),outcomes:Array.from(this.outcomes.values()).map((f)=>({...f})),outcomeFragments:Array.from(this.outcomeFragments.values()).map((f)=>({...f}))}}hydrateState(f){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let J of f.tasks)this.tasks.set(J.id,{...J});this.mailbox.length=0,this.mailbox.push(...f.mailbox.map((J)=>({...J}))),this.missionLog.length=0,this.missionLog.push(...f.missionLog.map((J)=>({...J}))),this.runs.clear();for(let J of f.runs??[])this.runs.set(J.id,{...J});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((J)=>J.status==="queued").map((J)=>J.id)),this.outcomes.clear();for(let J of f.outcomes??[])this.outcomes.set(J.id,{...J});this.outcomeFragments.clear();for(let J of f.outcomeFragments??[])this.outcomeFragments.set(J.id,{...J});let $=Array.from(this.members.values()).filter((J)=>J.role==="lead");this.members.clear();for(let J of $)this.members.set(J.agentId,{...J,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let J of f.members){if(J.role!=="teammate")continue;this.members.set(J.agentId,{agentId:J.agentId,role:"teammate",description:J.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,t1(f.tasks.map((J)=>J.id),"task_")),this.messageCounter=Math.max(this.messageCounter,t1(f.mailbox.map((J)=>J.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,t1(f.missionLog.map((J)=>J.id),"log_")),this.runCounter=Math.max(this.runCounter,t1((f.runs??[]).map((J)=>J.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,t1((f.outcomes??[]).map((J)=>J.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,t1((f.outcomeFragments??[]).map((J)=>J.id),"frag_"))}isTeammateActive(f){let $=this.members.get(f);return!!$&&$.role==="teammate"&&!!$.agent}spawnTeammate({agentId:f,config:$}){let J=this.members.get(f);if(J&&J.role!=="teammate")throw Error(`Team member "${f}" already exists and is not a teammate`);if(J&&J.runningCount>0)throw Error(`Teammate "${f}" is currently running and cannot be respawned`);let W={...$,apiTimeoutMs:_D,consumePendingUserMessage:()=>{let Z=this.members.get(f);if(!Z||!Z.pendingSteerMessage)return;let j=Z.pendingSteerMessage;return Z.pendingSteerMessage=void 0,j},onEvent:(Z)=>{$.onEvent?.(Z),this.emitEvent({type:C.AgentEvent,agentId:f,event:Z}),this.trackMeaningfulEvent(f,Z)}},H=new c0(W);if(W.onEvent)H.subscribeEvents(W.onEvent);let Q={agentId:f,role:"teammate",description:$.role,status:"idle",agent:H,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set(f,Q),this.emitEvent({type:C.TeammateSpawned,agentId:f,role:$.role,teammate:{rolePrompt:$.systemPrompt,modelId:$.modelId,maxIterations:$.maxIterations,runtimeAgentId:H.getAgentId(),conversationId:H.getConversationId(),parentAgentId:null}}),{agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status}}shutdownTeammate(f,$){let J=this.members.get(f);if(!J||J.role!=="teammate")throw Error(`Teammate "${f}" was not found`);try{J.agent?.abort()}catch(W){if(!c9(W))throw W}J.status="stopped",this.emitEvent({type:C.TeammateShutdown,agentId:f,reason:$})}updateTeammateConnections(f){for(let $ of this.members.values()){if($.role!=="teammate"||!$.agent)continue;$.agent.updateConnection(f)}}createTask(f){let $=`task_${String(++this.taskCounter).padStart(4,"0")}`,J=new Date,W={id:$,title:f.title,description:f.description,status:f.assignee?"in_progress":"pending",createdAt:J,updatedAt:J,createdBy:f.createdBy,assignee:f.assignee,dependsOn:f.dependsOn??[]};return this.tasks.set($,W),this.emitEvent({type:C.TeamTaskUpdated,task:{...W}}),{...W}}claimTask(f,$){let J=this.requireTask(f);return this.assertDependenciesResolved(J),J.status="in_progress",J.assignee=$,J.updatedAt=new Date,this.emitEvent({type:C.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:$,taskId:f,kind:"progress",summary:`Claimed task "${J.title}"`}),{...J}}blockTask(f,$,J){let W=this.requireTask(f);return W.status="blocked",W.updatedAt=new Date,W.summary=J,this.emitEvent({type:C.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:$,taskId:f,kind:"blocked",summary:J}),{...W}}completeTask(f,$,J){let W=this.requireTask(f);if(W.status="completed",W.updatedAt=new Date,W.summary=J,!W.assignee)W.assignee=$;return this.emitEvent({type:C.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:$,taskId:f,kind:"done",summary:J}),{...W}}async routeToTeammate(f,$,J){let W=this.members.get(f);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${f}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:C.TaskStart,agentId:f,message:$});try{let H=this.listMailbox(f,{unreadOnly:!0,markRead:!0}),Q=H.length>0?`${this.buildMailboxNotification(H)}
503
+ ${Z.text}`);return{workerResult:Z,reviewResult:W}},J}class $f{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${sz(oz(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let f=$.leadAgentId??"lead";this.members.set(f,{agentId:f,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((f)=>{let J=this.getUnresolvedDependencies(f);return{...f,blockedBy:J,isReady:f.status==="pending"&&!f.assignee&&J.length===0}}).filter((f)=>{if($?.status&&f.status!==$.status)return!1;if($?.assignee&&f.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,f){let J=f?.unreadOnly??!0,Q=f?.markRead??!0,Z=f?.limit,W=this.mailbox.filter((X)=>X.toAgentId===$&&(!J||!X.readAt)),j=typeof Z==="number"&&Z>0?W.slice(Math.max(0,W.length-Z)):W;if(Q){let X=new Date;for(let H of j)if(!H.readAt)H.readAt=X}return j.map((X)=>({...X}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let J of this.tasks.values())$[J.status]++;let f={draft:0,in_review:0,finalized:0};for(let J of this.outcomes.values())f[J.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((J)=>({agentId:J.agentId,role:J.role,description:J.description,status:J.status})),taskCounts:$,unreadMessages:this.mailbox.filter((J)=>!J.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((J)=>J.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((J)=>J.status==="queued").length,outcomeCounts:f}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let J of $.tasks)this.tasks.set(J.id,{...J});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((J)=>({...J}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((J)=>({...J}))),this.runs.clear();for(let J of $.runs??[])this.runs.set(J.id,{...J});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((J)=>J.status==="queued").map((J)=>J.id)),this.outcomes.clear();for(let J of $.outcomes??[])this.outcomes.set(J.id,{...J});this.outcomeFragments.clear();for(let J of $.outcomeFragments??[])this.outcomeFragments.set(J.id,{...J});let f=Array.from(this.members.values()).filter((J)=>J.role==="lead");this.members.clear();for(let J of f)this.members.set(J.agentId,{...J,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let J of $.members){if(J.role!=="teammate")continue;this.members.set(J.agentId,{agentId:J.agentId,role:"teammate",description:J.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,X2($.tasks.map((J)=>J.id),"task_")),this.messageCounter=Math.max(this.messageCounter,X2($.mailbox.map((J)=>J.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,X2($.missionLog.map((J)=>J.id),"log_")),this.runCounter=Math.max(this.runCounter,X2(($.runs??[]).map((J)=>J.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,X2(($.outcomes??[]).map((J)=>J.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,X2(($.outcomeFragments??[]).map((J)=>J.id),"frag_"))}isTeammateActive($){let f=this.members.get($);return!!f&&f.role==="teammate"&&!!f.agent}spawnTeammate({agentId:$,config:f}){let J=this.members.get($);if(J&&J.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(J&&J.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Q={...f,apiTimeoutMs:ez,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let X=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,X},onEvent:(j)=>{f.onEvent?.(j),this.emitEvent({type:h.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},Z=new p$(Q);if(Q.onEvent)Z.subscribeEvents(Q.onEvent);let W={agentId:$,role:"teammate",description:f.role,status:"idle",agent:Z,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,W),this.emitEvent({type:h.TeammateSpawned,agentId:$,role:f.role,teammate:{rolePrompt:f.systemPrompt,modelId:f.modelId,maxIterations:f.maxIterations,runtimeAgentId:Z.getAgentId(),conversationId:Z.getConversationId(),parentAgentId:null}}),{agentId:W.agentId,role:W.role,description:W.description,status:W.status}}shutdownTeammate($,f){let J=this.members.get($);if(!J||J.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{J.agent?.abort()}catch(Q){if(!YQ(Q))throw Q}J.status="stopped",this.emitEvent({type:h.TeammateShutdown,agentId:$,reason:f})}updateTeammateConnections($){for(let f of this.members.values()){if(f.role!=="teammate"||!f.agent)continue;f.agent.updateConnection($)}}createTask($){let f=`task_${String(++this.taskCounter).padStart(4,"0")}`,J=new Date,Q={id:f,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:J,updatedAt:J,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(f,Q),this.emitEvent({type:h.TeamTaskUpdated,task:{...Q}}),{...Q}}claimTask($,f){let J=this.requireTask($);return this.assertDependenciesResolved(J),J.status="in_progress",J.assignee=f,J.updatedAt=new Date,this.emitEvent({type:h.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:f,taskId:$,kind:"progress",summary:`Claimed task "${J.title}"`}),{...J}}blockTask($,f,J){let Q=this.requireTask($);return Q.status="blocked",Q.updatedAt=new Date,Q.summary=J,this.emitEvent({type:h.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:f,taskId:$,kind:"blocked",summary:J}),{...Q}}completeTask($,f,J){let Q=this.requireTask($);if(Q.status="completed",Q.updatedAt=new Date,Q.summary=J,!Q.assignee)Q.assignee=f;return this.emitEvent({type:h.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:f,taskId:$,kind:"done",summary:J}),{...Q}}async routeToTeammate($,f,J){let Q=this.members.get($);if(!Q||Q.role!=="teammate"||!Q.agent)throw Error(`Teammate "${$}" was not found`);if(!Q.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Q.runningCount++,Q.status="running",this.emitEvent({type:h.TaskStart,agentId:$,message:f});try{let Z=this.listMailbox($,{unreadOnly:!0,markRead:!0}),W=Z.length>0?`${this.buildMailboxNotification(Z)}
496
504
 
497
- ${$}`:$,Z=J?.continueConversation?await W.agent.continue(Q):await W.agent.run(Q);return this.emitEvent({type:C.TaskEnd,agentId:f,result:Z}),this.recordProgressStep(f,`Completed a delegated run (${Z.iterations} iterations)`,J?.taskId,!0),Z}catch(H){let Q=H instanceof Error?H:Error(String(H));if(this.emitEvent({type:C.TaskEnd,agentId:f,error:Q,messages:W.agent.getMessages()}),!lX(W,Q))this.appendMissionLog({agentId:f,taskId:J?.taskId,kind:"error",summary:Q.message});throw Q}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get(f)?.status!=="stopped")W.status="idle"}}startTeammateRun(f,$,J){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,H={id:W,agentId:f,taskId:J?.taskId,status:"queued",message:$,priority:J?.priority??0,retryCount:0,maxRetries:Math.max(0,J?.maxRetries??0),continueConversation:J?.continueConversation,startedAt:new Date(0),leaseOwner:J?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,H),this.runQueue.push(W),this.emitEvent({type:C.RunQueued,run:{...H}}),this.dispatchQueuedRuns(),{...H}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let f;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let $=this.selectNextDispatchableQueuedRun();f=$.nextDelayedAttemptAt;let J=$.index;if(J<0){this.scheduleQueuedRunDispatch(f);return}let[W]=this.runQueue.splice(J,1),H=W?this.runs.get(W):void 0;if(!H||H.status!=="queued")continue;this.executeQueuedRun(H)}this.scheduleQueuedRunDispatch(f)}selectNextDispatchableQueuedRun(){let f=-1,$=Number.NEGATIVE_INFINITY,J,W=Date.now();for(let H=0;H<this.runQueue.length;H++){let Q=this.runs.get(this.runQueue[H]);if(!Q||Q.status!=="queued")continue;if(Q.nextAttemptAt&&Q.nextAttemptAt.getTime()>W){if(!J||Q.nextAttemptAt<J)J=Q.nextAttemptAt;continue}if(Q.priority>$)$=Q.priority,f=H}return{index:f,nextDelayedAttemptAt:J}}scheduleQueuedRunDispatch(f){if(!f)return;let $=Math.max(0,f.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},$)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let f=0;for(let $ of this.runs.values())if($.status==="running")f++;return f}async executeQueuedRun(f){let $=f.currentActivity===pX;f.nextAttemptAt=void 0,f.status="running",f.startedAt=new Date,f.heartbeatAt=new Date,f.currentActivity="run_started",this.emitEvent({type:C.RunStarted,run:{...f}});let J=setInterval(()=>{if(f.status!=="running")return;this.recordRunProgress(f,"heartbeat")},2000);try{let W=$?MD(f):f.message,H=await this.routeToTeammate(f.agentId,W,{taskId:f.taskId,continueConversation:f.continueConversation});f.status="completed",f.result=H,f.endedAt=new Date,f.currentActivity="completed",this.emitEvent({type:C.RunCompleted,run:{...f}})}catch(W){let H=W instanceof Error?W.message:String(W??"Unknown error");f.error=H,f.endedAt=new Date;let Q=this.members.get(f.agentId);if(lX(Q,W))f.status="cancelled",f.currentActivity="cancelled",this.emitEvent({type:C.RunCancelled,run:{...f},reason:H});else if(f.retryCount<f.maxRetries)f.retryCount++,f.status="queued",f.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**f.retryCount)),this.runQueue.push(f.id),this.recordRunProgress(f,`retry_scheduled_${f.retryCount}`);else f.status="failed",f.currentActivity="failed",this.emitEvent({type:C.RunFailed,run:{...f}})}finally{clearInterval(J),this.dispatchQueuedRuns()}}listRuns(f){let $=f?.includeCompleted??!0;return Array.from(this.runs.values()).filter((J)=>{if(!$&&!["running","queued"].includes(J.status))return!1;if(f?.status&&J.status!==f.status)return!1;if(f?.agentId&&J.agentId!==f.agentId)return!1;return!0}).map((J)=>({...J}))}getRun(f){let $=this.runs.get(f);return $?{...$}:void 0}async awaitRun(f,$=250){let J=this.runs.get(f);if(!J)throw Error(`Run "${f}" was not found`);while(J.status==="queued"||J.status==="running")await iX($);return{...J}}async awaitAllRuns(f=250){while(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))await iX(f);return this.listRuns()}cancelRun(f,$){let J=this.runs.get(f);if(!J)throw Error(`Run "${f}" was not found`);if(J.status==="completed"||J.status==="failed")return{...J};J.status="cancelled",J.error=$,J.endedAt=new Date,J.currentActivity="cancelled";let W=this.runQueue.indexOf(f);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:C.RunCancelled,run:{...J},reason:$}),{...J}}recoverActiveRuns(f="runtime_recovered"){let $=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;let W=this.members.get(J.agentId);if(!W||W.role!=="teammate"||!W.agent){J.status="interrupted",J.error="teammate_unavailable_after_recovery",J.endedAt=new Date,J.currentActivity="interrupted",this.emitEvent({type:C.RunInterrupted,run:{...J},reason:J.error});continue}let H=new Date;if(J.status="queued",J.error=void 0,J.endedAt=void 0,J.heartbeatAt=H,J.lastProgressAt=H,J.lastProgressMessage=f,J.currentActivity=pX,!this.runQueue.includes(J.id))this.runQueue.push(J.id);$.push({...J}),this.emitEvent({type:C.RunQueued,run:{...J}})}return this.dispatchQueuedRuns(),$}markStaleRunsInterrupted(f="runtime_recovered"){let $=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;J.status="interrupted",J.error=f,J.endedAt=new Date,J.currentActivity="interrupted",$.push({...J}),this.emitEvent({type:C.RunInterrupted,run:{...J},reason:f})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),$}sendMessage(f,$,J,W,H){if(!this.members.has(f))throw Error(`Unknown sender "${f}"`);let Q=this.members.get($);if(!Q)throw Error(`Unknown recipient "${$}"`);let Z={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:f,toAgentId:$,subject:J,body:W,taskId:H,sentAt:new Date};if(this.mailbox.push(Z),this.emitEvent({type:C.TeamMessage,message:{...Z}}),Q.role==="teammate"&&Q.runningCount>0&&Q.agent)Q.pendingSteerMessage=`[MAILBOX] You got a message from ${f}. Subject: "${J}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Z}}broadcast(f,$,J,W){let H=[];for(let Q of this.members.values()){if(Q.agentId===f)continue;if(Q.role==="lead")continue;H.push(this.sendMessage(f,Q.agentId,$,J,W?.taskId))}return H}appendMissionLog(f){if(!this.members.has(f.agentId))throw Error(`Unknown team member "${f.agentId}"`);let $={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:f.agentId,taskId:f.taskId,kind:f.kind,summary:f.summary,evidence:f.evidence,nextAction:f.nextAction};this.missionLog.push($);let J=this.members.get(f.agentId);if(J)J.lastMissionAt=Date.now(),J.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:C.TeamMissionLog,entry:{...$}}),{...$}}createOutcome(f){let $={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:f.title,status:"draft",requiredSections:[...new Set(f.requiredSections)],createdBy:f.createdBy,createdAt:new Date};return this.outcomes.set($.id,$),this.emitEvent({type:C.OutcomeCreated,outcome:{...$}}),{...$}}listOutcomes(){return Array.from(this.outcomes.values()).map((f)=>({...f}))}attachOutcomeFragment(f){let $=this.outcomes.get(f.outcomeId);if(!$)throw Error(`Outcome "${f.outcomeId}" was not found`);if(!$.requiredSections.includes(f.section))throw Error(`Section "${f.section}" is not part of outcome "${f.outcomeId}"`);let J={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:f.outcomeId,section:f.section,sourceAgentId:f.sourceAgentId,sourceRunId:f.sourceRunId,content:f.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(J.id,J),$.status==="draft")$.status="in_review";return this.emitEvent({type:C.OutcomeFragmentAttached,fragment:{...J}}),{...J}}reviewOutcomeFragment(f){let $=this.outcomeFragments.get(f.fragmentId);if(!$)throw Error(`Fragment "${f.fragmentId}" was not found`);return $.status=f.approved?"reviewed":"rejected",$.reviewedBy=f.reviewedBy,$.reviewedAt=new Date,this.emitEvent({type:C.OutcomeFragmentReviewed,fragment:{...$}}),{...$}}listOutcomeFragments(f){return Array.from(this.outcomeFragments.values()).filter(($)=>$.outcomeId===f).map(($)=>({...$}))}finalizeOutcome(f){let $=this.outcomes.get(f);if(!$)throw Error(`Outcome "${f}" was not found`);let J=this.listOutcomeFragments(f);for(let W of $.requiredSections)if(!J.some((Q)=>Q.section===W&&Q.status==="reviewed"))throw Error(`Outcome "${f}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return $.status="finalized",$.finalizedAt=new Date,this.emitEvent({type:C.OutcomeFinalized,outcome:{...$}}),{...$}}cleanup(){for(let f of this.members.values())if(f.role==="teammate"&&f.runningCount>0)throw Error(`Cannot cleanup team while teammate "${f.agentId}" is still running`);if(Array.from(this.runs.values()).some((f)=>["queued","running"].includes(f.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let f of this.members.values())if(f.role==="teammate")try{f.agent?.abort()}catch($){if(!c9($))throw $}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[f,$]of this.members.entries())if($.role==="teammate")this.members.delete(f)}requireTask(f){let $=this.tasks.get(f);if(!$)throw Error(`Task "${f}" was not found`);return $}assertDependenciesResolved(f){let $=this.getUnresolvedDependencies(f);if($.length>0)throw Error(`Task "${f.id}" is blocked by "${$[0]}"`)}getUnresolvedDependencies(f){return f.dependsOn.filter(($)=>{let J=this.tasks.get($);return!J||J.status!=="completed"})}trackMeaningfulEvent(f,$){if(this.recordRunActivityFromAgentEvent(f,$),$.type==="iteration_end"&&$.hadToolCalls){this.recordProgressStep(f,`Completed iteration ${$.iteration} with ${$.toolCallCount} tool call(s)`);return}if($.type==="content_end"&&$.contentType==="tool"&&!$.error){this.recordProgressStep(f,`Finished tool "${$.toolName??"unknown"}"`);return}if($.type==="done"){this.appendMissionLog({agentId:f,kind:"done",summary:`Completed a delegated run (${$.iterations} iterations)`});return}if($.type==="error")this.appendMissionLog({agentId:f,kind:"error",summary:$.error.message})}recordRunActivityFromAgentEvent(f,$){let J;switch($.type){case"iteration_start":J=`iteration_${$.iteration}_started`;break;case"content_start":if($.contentType==="tool")J=`running_tool_${$.toolName??"unknown"}`;break;case"content_end":if($.contentType==="tool")J=$.error?this.formatProgressErrorActivity(`tool_${$.toolName??"unknown"}_error`,$.error):`finished_tool_${$.toolName??"unknown"}`;break;case"done":J="finalizing_response";break;case"error":J=this.formatProgressErrorActivity("run_error",$.error.message);break;default:break}if(!J)return;for(let W of this.runs.values()){if(W.agentId!==f||W.status!=="running")continue;this.recordRunProgress(W,J)}}recordRunProgress(f,$){let J=new Date;f.heartbeatAt=J,f.lastProgressAt=J,f.lastProgressMessage=$,f.currentActivity=$,this.emitEvent({type:C.RunProgress,run:{...f},message:$})}formatProgressErrorActivity(f,$){let J=$.replace(/\s+/g," ").trim();if(J.length===0)return f;let W=J.length>240?`${J.slice(0,237).trimEnd()}...`:J;return`${f}: ${W}`}recordProgressStep(f,$,J,W=!1){this.missionStepCounter++;let H=this.members.get(f);if(!H)return;let Q=this.missionStepCounter-H.lastMissionStep,Z=Date.now()-H.lastMissionAt;if(!W&&Q<this.missionLogIntervalSteps&&Z<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:f,taskId:J,kind:"progress",summary:$})}buildMailboxNotification(f){if(f.length===0)return"";let $=[`[MAILBOX] You have ${f.length} unread message(s):`];for(let J of f)$.push(`--- Message from ${J.fromAgentId} | subject: ${J.subject} ---`),$.push(J.body);return $.push("---"),$.join(`
498
- `)}emitEvent(f){try{this.onTeamEvent?.(f)}catch{}}}function iX(f){return new Promise(($)=>setTimeout($,f))}function t1(f,$){let J=0;for(let W of f){if(!W.startsWith($))continue;let H=Number.parseInt(W.slice($.length),10);if(Number.isFinite(H))J=Math.max(J,H)}return J}function r9(f,$){switch($.type){case"run_queued":case"run_started":f.activeTeamRunIds.add($.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let J;if($.type==="run_failed")J=$.run.error;else if($.type==="run_cancelled"||$.type==="run_interrupted")J=$.run.error??$.reason;f.activeTeamRunIds.delete($.run.id),f.pendingTeamRunUpdates.push({runId:$.run.id,agentId:$.run.agentId,taskId:$.run.taskId,status:$.type.replace("run_",""),error:J,iterations:$.run.result?.iterations}),LJ(f);break}default:break}}async function l9(f,$,J){switch($.type){case"run_progress":await J("onTeamTaskProgress",f,$.run.agentId,$.message,{kind:$.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if($.event.type==="content_start"&&$.event.contentType==="text"&&typeof $.event.text==="string"){let W=$.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await J("onTeamTaskProgress",f,$.agentId,W,{kind:"text"})}break;case"task_start":await J("onTeamTaskStart",f,$.agentId,$.message);break;case"task_end":{if($.error)await J("onTeamTaskEnd",f,$.agentId,"failed",`[error] ${$.error.message}`,void 0,$.messages);else if($.result?.finishReason==="aborted")await J("onTeamTaskEnd",f,$.agentId,"cancelled","[done] aborted",$.result,$.result.messages);else await J("onTeamTaskEnd",f,$.agentId,"completed",`[done] ${$.result?.finishReason??"completed"}`,$.result,$.result?.messages);break}default:break}}function p9(f,$,J,W){if(!f.runtime.teamRuntime)return;let H=f.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:$,teamName:H,lifecycle:a1({teamName:H,sessionId:$,event:J}),summary:n1(H,f.runtime.teamRuntime.exportState())}})}function A4(f){return f.activeTeamRunIds.size>0||f.pendingTeamRunUpdates.length>0}function i9(f,$){if(f.aborting)return!1;if(!($==="completed"||$==="max_iterations"))return!1;return f.config.enableAgentTeams===!0&&A4(f)}function LJ(f){let $=f.teamRunWaiters.splice(0);for(let J of $)J()}async function n9(f){while(!0){if(f.aborting)return[];if(f.pendingTeamRunUpdates.length>0){let $=[...f.pendingTeamRunUpdates];return f.pendingTeamRunUpdates.length=0,$}if(f.activeTeamRunIds.size===0)return[];await new Promise(($)=>{f.teamRunWaiters.push($)})}}function a9(f,$){let J=$.map((Q)=>{let Z=[`- ${Q.runId} (${Q.agentId}) -> ${Q.status}`];if(Q.taskId)Z.push(` task=${Q.taskId}`);if(typeof Q.iterations==="number")Z.push(` iterations=${Q.iterations}`);if(Q.error)Z.push(` error=${Q.error}`);return Z.join("")}),W=f.activeTeamRunIds.size,H=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return P4(`System-delivered teammate async run updates:
505
+ ${f}`:f,j=J?.continueConversation?await Q.agent.continue(W):await Q.agent.run(W);return this.emitEvent({type:h.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,J?.taskId,!0),j}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));if(this.emitEvent({type:h.TaskEnd,agentId:$,error:W,messages:Q.agent.getMessages()}),!EY(Q,W))this.appendMissionLog({agentId:$,taskId:J?.taskId,kind:"error",summary:W.message});throw W}finally{if(Q.runningCount--,Q.runningCount<=0&&this.members.get($)?.status!=="stopped")Q.status="idle"}}startTeammateRun($,f,J){let Q=`run_${String(++this.runCounter).padStart(5,"0")}`,Z={id:Q,agentId:$,taskId:J?.taskId,status:"queued",message:f,priority:J?.priority??0,retryCount:0,maxRetries:Math.max(0,J?.maxRetries??0),continueConversation:J?.continueConversation,startedAt:new Date(0),leaseOwner:J?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Q,Z),this.runQueue.push(Q),this.emitEvent({type:h.RunQueued,run:{...Z}}),this.dispatchQueuedRuns(),{...Z}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let f=this.selectNextDispatchableQueuedRun();$=f.nextDelayedAttemptAt;let J=f.index;if(J<0){this.scheduleQueuedRunDispatch($);return}let[Q]=this.runQueue.splice(J,1),Z=Q?this.runs.get(Q):void 0;if(!Z||Z.status!=="queued")continue;this.executeQueuedRun(Z)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,f=Number.NEGATIVE_INFINITY,J,Q=Date.now();for(let Z=0;Z<this.runQueue.length;Z++){let W=this.runs.get(this.runQueue[Z]);if(!W||W.status!=="queued")continue;if(W.nextAttemptAt&&W.nextAttemptAt.getTime()>Q){if(!J||W.nextAttemptAt<J)J=W.nextAttemptAt;continue}if(W.priority>f)f=W.priority,$=Z}return{index:$,nextDelayedAttemptAt:J}}scheduleQueuedRunDispatch($){if(!$)return;let f=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},f)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let f of this.runs.values())if(f.status==="running")$++;return $}async executeQueuedRun($){let f=$.currentActivity===hY;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:h.RunStarted,run:{...$}});let J=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=f?$_($):$.message,Z=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=Z,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:h.RunCompleted,run:{...$}})}catch(Q){let Z=Q instanceof Error?Q.message:String(Q??"Unknown error");$.error=Z,$.endedAt=new Date;let W=this.members.get($.agentId);if(EY(W,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:h.RunCancelled,run:{...$},reason:Z});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:h.RunFailed,run:{...$}})}finally{clearInterval(J),this.dispatchQueuedRuns()}}listRuns($){let f=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((J)=>{if(!f&&!["running","queued"].includes(J.status))return!1;if($?.status&&J.status!==$.status)return!1;if($?.agentId&&J.agentId!==$.agentId)return!1;return!0}).map((J)=>({...J}))}getRun($){let f=this.runs.get($);return f?{...f}:void 0}async awaitRun($,f=250){let J=this.runs.get($);if(!J)throw Error(`Run "${$}" was not found`);while(J.status==="queued"||J.status==="running")await bY(f);return{...J}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((f)=>["queued","running"].includes(f.status)))await bY($);return this.listRuns()}cancelRun($,f){let J=this.runs.get($);if(!J)throw Error(`Run "${$}" was not found`);if(J.status==="completed"||J.status==="failed")return{...J};J.status="cancelled",J.error=f,J.endedAt=new Date,J.currentActivity="cancelled";let Q=this.runQueue.indexOf($);if(Q>=0)this.runQueue.splice(Q,1);return this.emitEvent({type:h.RunCancelled,run:{...J},reason:f}),{...J}}recoverActiveRuns($="runtime_recovered"){let f=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;let Q=this.members.get(J.agentId);if(!Q||Q.role!=="teammate"||!Q.agent){J.status="interrupted",J.error="teammate_unavailable_after_recovery",J.endedAt=new Date,J.currentActivity="interrupted",this.emitEvent({type:h.RunInterrupted,run:{...J},reason:J.error});continue}let Z=new Date;if(J.status="queued",J.error=void 0,J.endedAt=void 0,J.heartbeatAt=Z,J.lastProgressAt=Z,J.lastProgressMessage=$,J.currentActivity=hY,!this.runQueue.includes(J.id))this.runQueue.push(J.id);f.push({...J}),this.emitEvent({type:h.RunQueued,run:{...J}})}return this.dispatchQueuedRuns(),f}markStaleRunsInterrupted($="runtime_recovered"){let f=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;J.status="interrupted",J.error=$,J.endedAt=new Date,J.currentActivity="interrupted",f.push({...J}),this.emitEvent({type:h.RunInterrupted,run:{...J},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),f}sendMessage($,f,J,Q,Z){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let W=this.members.get(f);if(!W)throw Error(`Unknown recipient "${f}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:f,subject:J,body:Q,taskId:Z,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:h.TeamMessage,message:{...j}}),W.role==="teammate"&&W.runningCount>0&&W.agent)W.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${J}". Use the team_read_mailbox tool to read it at your convenience.`;return{...j}}broadcast($,f,J,Q){let Z=[];for(let W of this.members.values()){if(W.agentId===$)continue;if(W.role==="lead")continue;Z.push(this.sendMessage($,W.agentId,f,J,Q?.taskId))}return Z}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let f={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(f);let J=this.members.get($.agentId);if(J)J.lastMissionAt=Date.now(),J.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:h.TeamMissionLog,entry:{...f}}),{...f}}createOutcome($){let f={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(f.id,f),this.emitEvent({type:h.OutcomeCreated,outcome:{...f}}),{...f}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let f=this.outcomes.get($.outcomeId);if(!f)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!f.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let J={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(J.id,J),f.status==="draft")f.status="in_review";return this.emitEvent({type:h.OutcomeFragmentAttached,fragment:{...J}}),{...J}}reviewOutcomeFragment($){let f=this.outcomeFragments.get($.fragmentId);if(!f)throw Error(`Fragment "${$.fragmentId}" was not found`);return f.status=$.approved?"reviewed":"rejected",f.reviewedBy=$.reviewedBy,f.reviewedAt=new Date,this.emitEvent({type:h.OutcomeFragmentReviewed,fragment:{...f}}),{...f}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((f)=>f.outcomeId===$).map((f)=>({...f}))}finalizeOutcome($){let f=this.outcomes.get($);if(!f)throw Error(`Outcome "${$}" was not found`);let J=this.listOutcomeFragments($);for(let Q of f.requiredSections)if(!J.some((W)=>W.section===Q&&W.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Q}" is missing a reviewed fragment.`);return f.status="finalized",f.finalizedAt=new Date,this.emitEvent({type:h.OutcomeFinalized,outcome:{...f}}),{...f}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(f){if(!YQ(f))throw f}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,f]of this.members.entries())if(f.role==="teammate")this.members.delete($)}requireTask($){let f=this.tasks.get($);if(!f)throw Error(`Task "${$}" was not found`);return f}assertDependenciesResolved($){let f=this.getUnresolvedDependencies($);if(f.length>0)throw Error(`Task "${$.id}" is blocked by "${f[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((f)=>{let J=this.tasks.get(f);return!J||J.status!=="completed"})}trackMeaningfulEvent($,f){if(this.recordRunActivityFromAgentEvent($,f),f.type==="iteration_end"&&f.hadToolCalls){this.recordProgressStep($,`Completed iteration ${f.iteration} with ${f.toolCallCount} tool call(s)`);return}if(f.type==="content_end"&&f.contentType==="tool"&&!f.error){this.recordProgressStep($,`Finished tool "${f.toolName??"unknown"}"`);return}if(f.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${f.iterations} iterations)`});return}if(f.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:f.error.message})}recordRunActivityFromAgentEvent($,f){let J;switch(f.type){case"iteration_start":J=`iteration_${f.iteration}_started`;break;case"content_start":if(f.contentType==="tool")J=`running_tool_${f.toolName??"unknown"}`;break;case"content_end":if(f.contentType==="tool")J=f.error?this.formatProgressErrorActivity(`tool_${f.toolName??"unknown"}_error`,f.error):`finished_tool_${f.toolName??"unknown"}`;break;case"done":J="finalizing_response";break;case"error":J=this.formatProgressErrorActivity("run_error",f.error.message);break;default:break}if(!J)return;for(let Q of this.runs.values()){if(Q.agentId!==$||Q.status!=="running")continue;this.recordRunProgress(Q,J)}}recordRunProgress($,f){let J=new Date;$.heartbeatAt=J,$.lastProgressAt=J,$.lastProgressMessage=f,$.currentActivity=f,this.emitEvent({type:h.RunProgress,run:{...$},message:f})}formatProgressErrorActivity($,f){let J=f.replace(/\s+/g," ").trim();if(J.length===0)return $;let Q=J.length>240?`${J.slice(0,237).trimEnd()}...`:J;return`${$}: ${Q}`}recordProgressStep($,f,J,Q=!1){this.missionStepCounter++;let Z=this.members.get($);if(!Z)return;let W=this.missionStepCounter-Z.lastMissionStep,j=Date.now()-Z.lastMissionAt;if(!Q&&W<this.missionLogIntervalSteps&&j<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:J,kind:"progress",summary:f})}buildMailboxNotification($){if($.length===0)return"";let f=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let J of $)f.push(`--- Message from ${J.fromAgentId} | subject: ${J.subject} ---`),f.push(J.body);return f.push("---"),f.join(`
506
+ `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function bY($){return new Promise((f)=>setTimeout(f,$))}function X2($,f){let J=0;for(let Q of $){if(!Q.startsWith(f))continue;let Z=Number.parseInt(Q.slice(f.length),10);if(Number.isFinite(Z))J=Math.max(J,Z)}return J}function AQ($,f){switch(f.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(f.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let J;if(f.type==="run_failed")J=f.run.error;else if(f.type==="run_cancelled"||f.type==="run_interrupted")J=f.run.error??f.reason;$.activeTeamRunIds.delete(f.run.id),$.pendingTeamRunUpdates.push({runId:f.run.id,agentId:f.run.agentId,taskId:f.run.taskId,status:f.type.replace("run_",""),error:J,iterations:f.run.result?.iterations}),dJ($);break}default:break}}async function BQ($,f,J){switch(f.type){case"run_progress":await J("onTeamTaskProgress",$,f.run.agentId,f.message,{kind:f.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(f.event.type==="content_start"&&f.event.contentType==="text"&&typeof f.event.text==="string"){let Q=f.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Q)await J("onTeamTaskProgress",$,f.agentId,Q,{kind:"text"})}break;case"task_start":await J("onTeamTaskStart",$,f.agentId,f.message);break;case"task_end":{if(f.error)await J("onTeamTaskEnd",$,f.agentId,"failed",`[error] ${f.error.message}`,void 0,f.messages);else if(f.result?.finishReason==="aborted")await J("onTeamTaskEnd",$,f.agentId,"cancelled","[done] aborted",f.result,f.result.messages);else await J("onTeamTaskEnd",$,f.agentId,"completed",`[done] ${f.result?.finishReason??"completed"}`,f.result,f.result?.messages);break}default:break}}function KQ($,f,J,Q){if(!$.runtime.teamRuntime)return;let Z=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:f,teamName:Z,lifecycle:j2({teamName:Z,sessionId:f,event:J}),summary:W2(Z,$.runtime.teamRuntime.exportState())}})}function z4($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function GQ($,f){if($.aborting)return!1;if(!(f==="completed"||f==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&z4($)}function dJ($){let f=$.teamRunWaiters.splice(0);for(let J of f)J()}async function PQ($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let f=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,f}if($.activeTeamRunIds.size===0)return[];await new Promise((f)=>{$.teamRunWaiters.push(f)})}}function FQ($,f){let J=f.map((W)=>{let j=[`- ${W.runId} (${W.agentId}) -> ${W.status}`];if(W.taskId)j.push(` task=${W.taskId}`);if(typeof W.iterations==="number")j.push(` iterations=${W.iterations}`);if(W.error)j.push(` error=${W.error}`);return j.join("")}),Q=$.activeTeamRunIds.size,Z=Q>0?`There are still ${Q} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return _4(`System-delivered teammate async run updates:
499
507
  ${J.join(`
500
508
  `)}
501
509
 
502
- ${H}`,f.config.mode)}function P4(f,$){return LD(f,$==="plan"?"plan":$==="yolo"?"yolo":"act")}var t9=4;class w0{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor(f,$={}){this.adapter=f;this.manifestStore=new v9(f,$.messagesArtifactUploader),this.teamChildren=new MJ(f,this.manifestStore,(J,W,H)=>this.toPersistedMessages(J,W,H),w0.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages(f,$,J){if(!f)return;return $?i4($.messages,$,J):p4(f)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest(f,$){this.manifestStore.writeSessionManifest(f,$)}readSessionManifest(f){return this.manifestStore.readSessionManifest(f)}async createRootSessionWithArtifacts(f){let $=f.startedAt??s(),J=f.sessionId.trim(),W=J.length>0?J:`${Date.now()}_${OD(5)}`,H=this.manifestStore.artifacts.sessionMessagesPath(W),Q=this.manifestStore.artifacts.sessionManifestPath(W),Z=i2({metadata:f.metadata,prompt:f.prompt}),j={version:1,session_id:W,source:f.source,pid:f.pid,started_at:$,status:"running",interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspace_root:f.workspaceRoot,team_name:f.teamName,enable_tools:f.enableTools,enable_spawn:f.enableSpawn,enable_teams:f.enableTeams,prompt:f.prompt?.trim()||void 0,metadata:Z,messages_path:H};return await this.adapter.upsertSession({sessionId:W,source:f.source,pid:f.pid,startedAt:$,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspaceRoot:f.workspaceRoot,teamName:f.teamName??null,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:r0(j.metadata),hookPath:"",messagesPath:H,updatedAt:s()}),this.manifestStore.initializeMessagesFile(W,H,$),this.manifestStore.writeSessionManifest(Q,j),{manifestPath:Q,messagesPath:H,manifest:j}}async updateSessionStatus(f,$,J){let W;if((await R7(()=>this.adapter.getSession(f),async(Q)=>{return W=$==="running"?void 0:s(),this.adapter.updateSession({sessionId:f,status:$,endedAt:W??null,exitCode:$==="running"?null:typeof J==="number"?J:null,expectedStatusLock:Q.statusLock})},t9)).updated){if($==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions(f,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession(f){for(let $=0;$<t9;$++){let J=await this.adapter.getSession(f.sessionId);if(!J)return{updated:!1};let W=J.metadata??void 0,H=f.metadata!==void 0?r0(f.metadata)??{}:r0(W)??{},Q=O$(typeof W?.title==="string"?W.title:void 0),Z=f.title!==void 0?O$(f.title):Q??l5(f.prompt);if(Z)H.title=Z;else delete H.title;let j=f.metadata!==void 0||f.prompt!==void 0||f.title!==void 0;if(!(await this.adapter.updateSession({sessionId:f.sessionId,prompt:f.prompt,metadata:j?Object.keys(H).length>0?H:null:void 0,title:Z,expectedStatusLock:J.statusLock})).updated)continue;let{path:A,manifest:P}=this.manifestStore.readManifestFile(f.sessionId);if(P){if(f.prompt!==void 0)P.prompt=f.prompt??void 0;let B=f.metadata!==void 0?r0(f.metadata)??{}:r0(P.metadata)??{};if(Z)B.title=Z;P.metadata=Object.keys(B).length>0?B:void 0,this.manifestStore.writeSessionManifest(A,P)}return{updated:!0}}return{updated:!1}}queueSpawnRequest(f){return this.teamChildren.queueSpawnRequest(f)}upsertSubagentSession(f){return this.teamChildren.upsertSubagentSession(f)}upsertSubagentSessionFromHook(f){return this.teamChildren.upsertSubagentSessionFromHook(f)}appendSubagentHookAudit(f,$){return this.teamChildren.appendSubagentHookAudit($),Promise.resolve()}persistSessionMessages(f,$,J){let W=p4($);return this.manifestStore.persistSessionMessages(f,W,J)}applySubagentStatus(f,$){return this.teamChildren.applySubagentStatus(f,$)}applySubagentStatusBySessionId(f,$){return this.teamChildren.applySubagentStatusBySessionId(f,$)}applyStatusToRunningChildSessions(f,$){return this.teamChildren.applyStatusToRunningChildSessions(f,$)}onTeamTaskStart(f,$,J){return this.teamChildren.onTeamTaskStart(f,$,J)}onTeamTaskEnd(f,$,J,W,H,Q){return this.teamChildren.onTeamTaskEnd(f,$,J,W,H,Q)}onTeamTaskProgress(f,$,J,W){return this.teamChildren.onTeamTaskProgress(f,$,J,W)}handleSubAgentStart(f,$){return this.teamChildren.handleSubAgentStart(f,$)}handleSubAgentEnd(f,$){return this.teamChildren.handleSubAgentEnd(f,$)}isPidAlive(f){if(!Number.isFinite(f)||f<=0)return!1;try{return process.kill(Math.floor(f),0),!0}catch($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="EPERM"}}async reconcileDeadRunningSession(f){if(f.status!=="running"||this.isPidAlive(f.pid))return f;let $=s(),J=w0.STALE_REASON;for(let W=0;W<t9;W++){let H=await this.adapter.getSession(f.sessionId);if(!H)return;if(H.status!=="running")return H;let Q={...H.metadata??{},terminal_marker:J,terminal_marker_at:$,terminal_marker_pid:H.pid,terminal_marker_source:w0.STALE_SOURCE},Z=await this.adapter.updateSession({sessionId:H.sessionId,status:"failed",endedAt:$,exitCode:1,metadata:Q,expectedStatusLock:H.statusLock});if(!Z.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(H.sessionId,"failed");let j=V7(H,{status:"failed",endedAt:$,exitCode:1,metadata:Q}),{path:X}=this.manifestStore.readManifestFile(H.sessionId);return this.manifestStore.writeSessionManifest(X,j),this.manifestStore.appendStaleSessionHookLog($,H.sessionId,H.pid,J,w0.STALE_SOURCE),{...H,status:"failed",endedAt:$,exitCode:1,metadata:Q,statusLock:Z.statusLock,updatedAt:$}}return await this.adapter.getSession(f.sessionId)}async listSessions(f=200){let $=Math.max(1,Math.floor(f)),J=Math.min($*5,2000);return await this.reconcileDeadSessions(J),(await this.adapter.listSessions({limit:J})).slice(0,$).map((H)=>{let Q=r0(H.metadata??void 0),Z=this.manifestStore.readSessionManifest(H.sessionId),j=O$(typeof Z?.metadata?.title==="string"?Z.metadata.title:void 0),X=j?{...Q??{},title:j}:Q;return{...H,metadata:X}})}async reconcileDeadSessions(f=2000){let $=await this.adapter.listSessions({limit:Math.max(1,Math.floor(f)),status:"running"}),J=0;for(let W of $){let H=await this.reconcileDeadRunningSession(W);if(H&&H.status!==W.status)J++}return J}async deleteSession(f){let $=f.trim();if(!$)throw Error("session id is required");let J=await this.adapter.getSession($);if(!J)return{deleted:!1};if(await this.adapter.deleteSession($,!1),!J.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:$});await this.adapter.deleteSession($,!0),await Promise.allSettled(W.map(async(H)=>{await AW(H.cwd,H.sessionId),_8(H.messagesPath),_8(this.manifestStore.artifacts.sessionManifestPath(H.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(H.sessionId)}))}if(await AW(J.cwd,$),_8(J.messagesPath),_8(this.manifestStore.artifacts.sessionManifestPath($,!1)),J.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty($);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir($)]);for(let H of[J.messagesPath])if(typeof H==="string"&&H.trim().length>0)W.add(hD(H));for(let H of W)this.manifestStore.artifacts.removeDir(H)}return{deleted:!0}}}function o9(){return new Date().toISOString()}function oX(f,$){let J=`${f}.tmp`;qD(J,`${JSON.stringify($,null,2)}
503
- `,"utf8"),ND(J,f)}class eX{sessionsDirPath;constructor(f=wD()){this.sessionsDirPath=f}ensureSessionsDir(){if(!s9(this.sessionsDirPath))zD(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return sX(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return sX(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let f=this.indexPath();if(!s9(f))return{version:1,sessions:{}};try{let $=JSON.parse(tX(f,"utf8"));if($?.version===1&&$.sessions)return $}catch{}return{version:1,sessions:{}}}writeIndex(f){oX(this.indexPath(),f)}readQueue(){let f=this.spawnQueuePath();if(!s9(f))return{version:1,nextId:1,requests:[]};try{let $=JSON.parse(tX(f,"utf8"));if($?.version===1&&typeof $.nextId==="number"&&Array.isArray($.requests))return $}catch{}return{version:1,nextId:1,requests:[]}}writeQueue(f){oX(this.spawnQueuePath(),f)}async upsertSession(f){let $=this.readIndex();$.sessions[f.sessionId]=f,this.writeIndex($)}async getSession(f){return this.readIndex().sessions[f]}async listSessions(f){return Object.values(this.readIndex().sessions).filter(($)=>f.parentSessionId!==void 0?$.parentSessionId===f.parentSessionId:!0).filter(($)=>f.status!==void 0?$.status===f.status:!0).sort(($,J)=>J.startedAt.localeCompare($.startedAt)).slice(0,f.limit)}async updateSession(f){let $=this.readIndex(),J=$.sessions[f.sessionId];if(!J)return{updated:!1,statusLock:0};if(f.expectedStatusLock!==void 0&&J.statusLock!==f.expectedStatusLock)return{updated:!1,statusLock:J.statusLock};let W=f.expectedStatusLock!==void 0?f.expectedStatusLock+1:J.statusLock,H={...J,status:f.status??J.status,endedAt:f.endedAt!==void 0?f.endedAt:J.endedAt??null,exitCode:f.exitCode!==void 0?f.exitCode:J.exitCode??null,prompt:f.prompt!==void 0?f.prompt:J.prompt??null,metadata:f.metadata!==void 0?f.metadata??null:J.metadata??null,parentSessionId:f.parentSessionId!==void 0?f.parentSessionId??null:J.parentSessionId??null,parentAgentId:f.parentAgentId!==void 0?f.parentAgentId??null:J.parentAgentId??null,agentId:f.agentId!==void 0?f.agentId??null:J.agentId??null,conversationId:f.conversationId!==void 0?f.conversationId??null:J.conversationId??null,statusLock:W,isSubagent:f.setRunning||f.parentSessionId!==void 0?!0:J.isSubagent,updatedAt:o9()};if(f.setRunning)H.status="running",H.endedAt=null,H.exitCode=null;return $.sessions[f.sessionId]=H,this.writeIndex($),{updated:!0,statusLock:H.statusLock}}async deleteSession(f,$){let J=this.readIndex();if(!J.sessions[f])return!1;if(delete J.sessions[f],$){for(let H of Object.values(J.sessions))if(H.parentSessionId===f)delete J.sessions[H.sessionId]}return this.writeIndex(J),!0}async enqueueSpawnRequest(f){let $=this.readQueue();$.requests.push({id:$.nextId,rootSessionId:f.rootSessionId,parentAgentId:f.parentAgentId,task:f.task,systemPrompt:f.systemPrompt,createdAt:o9()}),$.nextId+=1,this.writeQueue($)}async claimSpawnRequest(f,$){let J=this.readQueue(),W=J.requests.find((H)=>H.rootSessionId===f&&H.parentAgentId===$&&!H.consumedAt);if(!W)return;return W.consumedAt=o9(),this.writeQueue(J),W.task}}class e9 extends w0{constructor(f,$={}){super(new eX(f),$)}ensureSessionsDir(){return super.ensureSessionsDir()}}var JA={};N(JA,{CoreSessionService:()=>j0});import{existsSync as bD,mkdirSync as CD}from"node:fs";import{resolveSessionDataDir as ED}from"@cline/shared/storage";var fH=`
510
+ ${Z}`,$.config.mode)}function _4($,f){return f_($,f==="plan"?"plan":f==="yolo"?"yolo":"act")}var DQ=4;class E${adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,f={}){this.adapter=$;this.manifestStore=new XQ($,f.messagesArtifactUploader,f.logger),this.teamChildren=new uJ($,this.manifestStore,(J,Q,Z)=>this.toPersistedMessages(J,Q,Z),E$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,f,J){if(!$)return;return f?Q6(f.messages,f,J):J6($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,f){this.manifestStore.writeSessionManifest($,f)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let f=$.startedAt??s(),J=$.sessionId.trim(),Q=J.length>0?J:`${Date.now()}_${Q_(5)}`,Z=this.manifestStore.artifacts.sessionMessagesPath(Q),W=this.manifestStore.artifacts.sessionManifestPath(Q),j=f8({metadata:$.metadata,prompt:$.prompt}),X={version:1,session_id:Q,source:$.source,pid:$.pid,started_at:f,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:j,messages_path:Z};return await this.adapter.upsertSession({sessionId:Q,source:$.source,pid:$.pid,startedAt:f,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:X.prompt??null,metadata:i$(X.metadata),hookPath:"",messagesPath:Z,updatedAt:s()}),this.manifestStore.initializeMessagesFile(Q,Z,f),this.manifestStore.writeSessionManifest(W,X),{manifestPath:W,messagesPath:Z,manifest:X}}async updateSessionStatus($,f,J){let Q;if((await xW(()=>this.adapter.getSession($),async(W)=>{return Q=f==="running"?void 0:s(),this.adapter.updateSession({sessionId:$,status:f,endedAt:Q??null,exitCode:f==="running"?null:typeof J==="number"?J:null,expectedStatusLock:W.statusLock})},DQ)).updated){if(f==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let f=0;f<DQ;f++){let J=await this.adapter.getSession($.sessionId);if(!J)return{updated:!1};let Q=J.metadata??void 0,Z=$.metadata!==void 0?i$($.metadata)??{}:i$(Q)??{},W=q1(typeof Q?.title==="string"?Q.title:void 0),j=$.title!==void 0?q1($.title):W??A9($.prompt);if(j)Z.title=j;else delete Z.title;let X=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:X?Object.keys(Z).length>0?Z:null:void 0,title:j,expectedStatusLock:J.statusLock})).updated)continue;let{path:Y,manifest:V}=this.manifestStore.readManifestFile($.sessionId);if(V){if($.prompt!==void 0)V.prompt=$.prompt??void 0;let A=$.metadata!==void 0?i$($.metadata)??{}:i$(V.metadata)??{};if(j)A.title=j;V.metadata=Object.keys(A).length>0?A:void 0,this.manifestStore.writeSessionManifest(Y,V)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,f){return this.teamChildren.appendSubagentHookAudit(f),Promise.resolve()}persistSessionMessages($,f,J){let Q=J6(f);return this.manifestStore.persistSessionMessages($,Q,J)}applySubagentStatus($,f){return this.teamChildren.applySubagentStatus($,f)}applySubagentStatusBySessionId($,f){return this.teamChildren.applySubagentStatusBySessionId($,f)}applyStatusToRunningChildSessions($,f){return this.teamChildren.applyStatusToRunningChildSessions($,f)}onTeamTaskStart($,f,J){return this.teamChildren.onTeamTaskStart($,f,J)}onTeamTaskEnd($,f,J,Q,Z,W){return this.teamChildren.onTeamTaskEnd($,f,J,Q,Z,W)}onTeamTaskProgress($,f,J,Q){return this.teamChildren.onTeamTaskProgress($,f,J,Q)}handleSubAgentStart($,f){return this.teamChildren.handleSubAgentStart($,f)}handleSubAgentEnd($,f){return this.teamChildren.handleSubAgentEnd($,f)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(f){return typeof f==="object"&&f!==null&&"code"in f&&f.code==="EPERM"}}async reconcileDeadRunningSession($){if($.status!=="running"||this.isPidAlive($.pid))return $;let f=s(),J=E$.STALE_REASON;for(let Q=0;Q<DQ;Q++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return;if(Z.status!=="running")return Z;let W={...Z.metadata??{},terminal_marker:J,terminal_marker_at:f,terminal_marker_pid:Z.pid,terminal_marker_source:E$.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:Z.sessionId,status:"failed",endedAt:f,exitCode:1,metadata:W,expectedStatusLock:Z.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(Z.sessionId,"failed");let X=IW(Z,{status:"failed",endedAt:f,exitCode:1,metadata:W}),{path:H}=this.manifestStore.readManifestFile(Z.sessionId);return this.manifestStore.writeSessionManifest(H,X),this.manifestStore.appendStaleSessionHookLog(f,Z.sessionId,Z.pid,J,E$.STALE_SOURCE),{...Z,status:"failed",endedAt:f,exitCode:1,metadata:W,statusLock:j.statusLock,updatedAt:f}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let f=Math.max(1,Math.floor($)),J=Math.min(f*5,2000);return await this.reconcileDeadSessions(J),(await this.adapter.listSessions({limit:J})).slice(0,f).map((Z)=>{let W=i$(Z.metadata??void 0),j=this.manifestStore.readSessionManifest(Z.sessionId),X=q1(typeof j?.metadata?.title==="string"?j.metadata.title:void 0),H=X?{...W??{},title:X}:W;return{...Z,metadata:H}})}async reconcileDeadSessions($=2000){let f=await this.adapter.listSessions({limit:Math.max(1,Math.floor($)),status:"running"}),J=0;for(let Q of f){let Z=await this.reconcileDeadRunningSession(Q);if(Z&&Z.status!==Q.status)J++}return J}async deleteSession($){let f=$.trim();if(!f)throw Error("session id is required");let J=await this.adapter.getSession(f);if(!J)return{deleted:!1};if(await this.adapter.deleteSession(f,!1),!J.isSubagent){let Q=await this.adapter.listSessions({limit:2000,parentSessionId:f});await this.adapter.deleteSession(f,!0),await Promise.allSettled(Q.map(async(Z)=>{await q9(Z.cwd,Z.sessionId),S8(Z.messagesPath),S8(this.manifestStore.artifacts.sessionManifestPath(Z.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(Z.sessionId)}))}if(await q9(J.cwd,f),S8(J.messagesPath),S8(this.manifestStore.artifacts.sessionManifestPath(f,!1)),J.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(f);else{let Q=new Set([this.manifestStore.artifacts.sessionArtifactsDir(f)]);for(let Z of[J.messagesPath])if(typeof Z==="string"&&Z.trim().length>0)Q.add(J_(Z));for(let Z of Q)this.manifestStore.artifacts.removeDir(Z)}return{deleted:!0}}}function UQ(){return new Date().toISOString()}function mY($,f){let J=`${$}.tmp`;j_(J,`${JSON.stringify(f,null,2)}
511
+ `,"utf8"),W_(J,$)}class vY{sessionsDirPath;constructor($=X_()){this.sessionsDirPath=$}ensureSessionsDir(){if(!RQ(this.sessionsDirPath))Z_(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return gY(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return gY(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!RQ($))return{version:1,sessions:{}};try{let f=JSON.parse(xY($,"utf8"));if(f?.version===1&&f.sessions)return f}catch{}return{version:1,sessions:{}}}writeIndex($){mY(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!RQ($))return{version:1,nextId:1,requests:[]};try{let f=JSON.parse(xY($,"utf8"));if(f?.version===1&&typeof f.nextId==="number"&&Array.isArray(f.requests))return f}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){mY(this.spawnQueuePath(),$)}async upsertSession($){let f=this.readIndex();f.sessions[$.sessionId]=$,this.writeIndex(f)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((f)=>$.parentSessionId!==void 0?f.parentSessionId===$.parentSessionId:!0).filter((f)=>$.status!==void 0?f.status===$.status:!0).sort((f,J)=>J.startedAt.localeCompare(f.startedAt)).slice(0,$.limit)}async updateSession($){let f=this.readIndex(),J=f.sessions[$.sessionId];if(!J)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&J.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:J.statusLock};let Q=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:J.statusLock,Z={...J,status:$.status??J.status,endedAt:$.endedAt!==void 0?$.endedAt:J.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:J.exitCode??null,prompt:$.prompt!==void 0?$.prompt:J.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:J.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:J.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:J.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:J.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:J.conversationId??null,statusLock:Q,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:J.isSubagent,updatedAt:UQ()};if($.setRunning)Z.status="running",Z.endedAt=null,Z.exitCode=null;return f.sessions[$.sessionId]=Z,this.writeIndex(f),{updated:!0,statusLock:Z.statusLock}}async deleteSession($,f){let J=this.readIndex();if(!J.sessions[$])return!1;if(delete J.sessions[$],f){for(let Z of Object.values(J.sessions))if(Z.parentSessionId===$)delete J.sessions[Z.sessionId]}return this.writeIndex(J),!0}async enqueueSpawnRequest($){let f=this.readQueue();f.requests.push({id:f.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:UQ()}),f.nextId+=1,this.writeQueue(f)}async claimSpawnRequest($,f){let J=this.readQueue(),Q=J.requests.find((Z)=>Z.rootSessionId===$&&Z.parentAgentId===f&&!Z.consumedAt);if(!Q)return;return Q.consumedAt=UQ(),this.writeQueue(J),Q.task}}class LQ extends E${constructor($,f={}){super(new vY($),f)}ensureSessionsDir(){return super.ensureSessionsDir()}}var dY={};q(dY,{CoreSessionService:()=>V$});import{existsSync as H_,mkdirSync as Y_}from"node:fs";import{resolveSessionDataDir as V_}from"@cline/shared/storage";var OQ=`
504
512
  session_id AS sessionId,
505
513
  source,
506
514
  pid,
@@ -527,61 +535,55 @@ ${H}`,f.config.mode)}function P4(f,$){return LD(f,$==="plan"?"plan":$==="yolo"?"
527
535
  metadata_json AS metadata,
528
536
  hook_path AS hookPath,
529
537
  messages_path AS messagesPath,
530
- updated_at AS updatedAt`;function $H(f){f.interactive=f.interactive===1,f.enableTools=f.enableTools===1,f.enableSpawn=f.enableSpawn===1,f.enableTeams=f.enableTeams===1,f.isSubagent=f.isSubagent===1;let $=f.metadata;if(typeof $==="string"&&$.trim())try{let J=JSON.parse($);f.metadata=J&&typeof J==="object"&&!Array.isArray(J)?J:null}catch{f.metadata=null}else f.metadata=null;return f}function JH(f){if(!f||Object.keys(f).length===0)return null;return JSON.stringify(f)}function fA(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}class $A{store;sessionsDirPath;constructor(f,$=ED()){this.store=f;this.sessionsDirPath=$}ensureSessionsDir(){if(!bD(this.sessionsDirPath))CD(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession(f){this.store.run(`INSERT OR REPLACE INTO sessions (
538
+ updated_at AS updatedAt`;function zQ($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let f=$.metadata;if(typeof f==="string"&&f.trim())try{let J=JSON.parse(f);$.metadata=J&&typeof J==="object"&&!Array.isArray(J)?J:null}catch{$.metadata=null}else $.metadata=null;return $}function _Q($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function cY($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class uY{store;sessionsDirPath;constructor($,f=V_()){this.store=$;this.sessionsDirPath=f}ensureSessionsDir(){if(!H_(this.sessionsDirPath))Y_(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
531
539
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
532
540
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
533
541
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
534
542
  metadata_json, transcript_path, hook_path, messages_path, updated_at
535
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[f.sessionId,f.source,f.pid,f.startedAt,f.endedAt??null,f.exitCode??null,f.status,f.statusLock,f.interactive?1:0,f.provider,f.model,f.cwd,f.workspaceRoot,f.teamName??null,f.enableTools?1:0,f.enableSpawn?1:0,f.enableTeams?1:0,f.parentSessionId??null,f.parentAgentId??null,f.agentId??null,f.conversationId??null,f.isSubagent?1:0,f.prompt??null,JH(f.metadata),"",f.hookPath??"",f.messagesPath??null,f.updatedAt])}async getSession(f){let $=this.store.queryOne(`SELECT ${fH} FROM sessions WHERE session_id = ?`,[f]);return $?$H($):void 0}async listSessions(f){let $=[],J=[];if(f.parentSessionId)$.push("parent_session_id = ?"),J.push(f.parentSessionId);if(f.status)$.push("status = ?"),J.push(f.status);let W=$.length>0?`WHERE ${$.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${fH}
543
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,_Q($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let f=this.store.queryOne(`SELECT ${OQ} FROM sessions WHERE session_id = ?`,[$]);return f?zQ(f):void 0}async listSessions($){let f=[],J=[];if($.parentSessionId)f.push("parent_session_id = ?"),J.push($.parentSessionId);if($.status)f.push("status = ?"),J.push($.status);let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${OQ}
536
544
  FROM sessions
537
- ${W}
545
+ ${Q}
538
546
  ORDER BY started_at DESC
539
- LIMIT ?`,[...J,f.limit]).map($H)}async updateSession(f){if(f.setRunning){if(f.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
547
+ LIMIT ?`,[...J,$.limit]).map(zQ)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
540
548
  SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
541
549
  parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
542
550
  prompt = COALESCE(prompt, ?)
543
- WHERE session_id = ? AND status_lock = ?`,[s(),f.expectedStatusLock+1,f.parentSessionId??null,f.parentAgentId??null,f.agentId??null,f.conversationId??null,f.prompt??null,f.sessionId,f.expectedStatusLock]).changes??0)>0,statusLock:f.expectedStatusLock+1}}let $=[],J=[];if(f.status!==void 0)$.push("status = ?"),J.push(f.status);if(f.endedAt!==void 0)$.push("ended_at = ?"),J.push(f.endedAt);if(f.exitCode!==void 0)$.push("exit_code = ?"),J.push(f.exitCode);if(f.prompt!==void 0)$.push("prompt = ?"),J.push(f.prompt??null);if(f.metadata!==void 0)$.push("metadata_json = ?"),J.push(JH(f.metadata));if(f.parentSessionId!==void 0)$.push("parent_session_id = ?"),J.push(f.parentSessionId??null);if(f.parentAgentId!==void 0)$.push("parent_agent_id = ?"),J.push(f.parentAgentId??null);if(f.agentId!==void 0)$.push("agent_id = ?"),J.push(f.agentId??null);if(f.conversationId!==void 0)$.push("conversation_id = ?"),J.push(f.conversationId??null);if($.length===0){let Z=await this.getSession(f.sessionId);return{updated:!!Z,statusLock:Z?.statusLock??0}}let W=0;if(f.expectedStatusLock!==void 0)W=f.expectedStatusLock+1,$.push("status_lock = ?"),J.push(W);$.push("updated_at = ?"),J.push(s());let H=`UPDATE sessions SET ${$.join(", ")} WHERE session_id = ?`;if(J.push(f.sessionId),f.expectedStatusLock!==void 0)H+=" AND status_lock = ?",J.push(f.expectedStatusLock);if((this.store.run(H,J).changes??0)===0)return{updated:!1,statusLock:0};if(f.expectedStatusLock===void 0)W=(await this.getSession(f.sessionId))?.statusLock??0;return{updated:!0,statusLock:W}}async deleteSession(f,$){let J=this.store.run("DELETE FROM sessions WHERE session_id = ?",[f]).changes??0;if($)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[f]);return J>0}async enqueueSpawnRequest(f){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
544
- VALUES (?, ?, ?, ?, ?, NULL)`,[f.rootSessionId,f.parentAgentId,f.task??null,f.systemPrompt??null,s()])}async claimSpawnRequest(f,$){let J=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
551
+ WHERE session_id = ? AND status_lock = ?`,[s(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let f=[],J=[];if($.status!==void 0)f.push("status = ?"),J.push($.status);if($.endedAt!==void 0)f.push("ended_at = ?"),J.push($.endedAt);if($.exitCode!==void 0)f.push("exit_code = ?"),J.push($.exitCode);if($.prompt!==void 0)f.push("prompt = ?"),J.push($.prompt??null);if($.metadata!==void 0)f.push("metadata_json = ?"),J.push(_Q($.metadata));if($.parentSessionId!==void 0)f.push("parent_session_id = ?"),J.push($.parentSessionId??null);if($.parentAgentId!==void 0)f.push("parent_agent_id = ?"),J.push($.parentAgentId??null);if($.agentId!==void 0)f.push("agent_id = ?"),J.push($.agentId??null);if($.conversationId!==void 0)f.push("conversation_id = ?"),J.push($.conversationId??null);if(f.length===0){let j=await this.getSession($.sessionId);return{updated:!!j,statusLock:j?.statusLock??0}}let Q=0;if($.expectedStatusLock!==void 0)Q=$.expectedStatusLock+1,f.push("status_lock = ?"),J.push(Q);f.push("updated_at = ?"),J.push(s());let Z=`UPDATE sessions SET ${f.join(", ")} WHERE session_id = ?`;if(J.push($.sessionId),$.expectedStatusLock!==void 0)Z+=" AND status_lock = ?",J.push($.expectedStatusLock);if((this.store.run(Z,J).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Q=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Q}}async deleteSession($,f){let J=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(f)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return J>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
552
+ VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,s()])}async claimSpawnRequest($,f){let J=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
545
553
  WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
546
- ORDER BY id ASC LIMIT 1`,[f,$]);if(!J||typeof J.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[s(),J.id]),J.task??void 0}}class j0 extends w0{store;constructor(f,$={}){super(new $A(f,$.sessionArtifactsDir),$);this.store=f}createRootSession(f){this.store.run(`INSERT OR REPLACE INTO sessions (
554
+ ORDER BY id ASC LIMIT 1`,[$,f]);if(!J||typeof J.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[s(),J.id]),J.task??void 0}}class V$ extends E${store;constructor($,f={}){super(new uY($,f.sessionArtifactsDir),f);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
547
555
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
548
556
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
549
557
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
550
558
  metadata_json, transcript_path, hook_path, messages_path, updated_at
551
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[f.sessionId,f.source,f.pid,f.startedAt,null,null,"running",0,f.interactive?1:0,f.provider,f.model,f.cwd,f.workspaceRoot,f.teamName??null,f.enableTools?1:0,f.enableSpawn?1:0,f.enableTeams?1:0,null,null,null,null,0,f.prompt??null,f.metadata?JSON.stringify(f.metadata):null,"","",f.messagesPath,s()])}}function SD(f){if(f.backendMode)return f.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let $=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if($==="local"||$==="hub"||$==="remote")return $;return"auto"}var B4,Y4;function kD(f,$){if(f!=="auto"&&f!=="hub")return;if($.hub?.endpoint?.trim())return;yJ($.hub?.workspaceRoot?.trim()||$.hub?.cwd?.trim()||process.cwd())}async function ID(f){await f.reconcileDeadSessions?.().catch(()=>{})}function HA(f){try{let $=new Q0;return $.init(),new j0($,{messagesArtifactUploader:f.messagesArtifactUploader})}catch{return f.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new e9(void 0,{messagesArtifactUploader:f.messagesArtifactUploader})}}function WA(f,$,J){return new X0({sessionService:J??f.sessionService??HA(f),capabilities:f.capabilities,telemetry:f.telemetry,toolPolicies:f.toolPolicies,distinctId:$,fetch:f.fetch})}async function WH(f){if(B4)return B4;if(Y4)return await Y4;return Y4=(async()=>{return B4=HA(f),await ID(B4),B4})().finally(()=>{Y4=void 0}),await Y4}async function o1(f){let $=l$(f.distinctId);f.telemetry?.setDistinctId($);let J=SD(f);if(kD(J,f),J==="remote"){let W=f.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return f.logger?.log("Using remote runtime host",{endpoint:W}),new i1({endpoint:W,authToken:f.remote?.authToken,clientType:f.remote?.clientType,displayName:f.remote?.displayName,workspaceRoot:f.remote?.workspaceRoot,cwd:f.remote?.cwd,capabilities:f.capabilities})}if(J==="hub"){let W=f.hub?.endpoint?.trim(),H=W||await c$({strategy:f.hub?.strategy??"require-hub",workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});if(!H)throw Error("No compatible hub runtime is available.");return f.logger?.log("Using hub runtime host",{url:H,explicitEndpoint:W||void 0}),new N0({url:H,authToken:f.hub?.authToken,clientType:f.hub?.clientType,displayName:f.hub?.displayName,capabilities:f.capabilities},{workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd})}if(J==="auto"){let W=await Q4({endpoint:f.hub?.endpoint,strategy:f.hub?.strategy??"prefer-hub",workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});if(W){f.logger?.log("Using discovered local hub runtime host",{url:W});let H=new N0({url:W,authToken:f.hub?.authToken,clientType:f.hub?.clientType,displayName:f.hub?.displayName,capabilities:f.capabilities},{workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});try{return await H.connect(),H}catch(Q){f.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:Q})}}return f.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),WA(f,$)}return WA(f,$)}class V4{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor(f,$,J,W,H,Q,Z,j,X){this.clientName=$,this.runtimeAddress=J,this.host=f,this.prepare=W,this.capabilities=H,this.logger=Q,this.telemetry=Z,this.distinctId=j,this.settings=Oj(f),this.pendingPrompts=zj(f),this.automation=new rW(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=X?new e8({workspaceRoot:X.workspaceRoot??process.cwd(),specs:{cronSpecsDir:X.cronSpecsDir??X.cronDir,scope:Jj(X.cronScope),workspaceRoot:X.workspaceRoot},runtimeHandlers:Wj({host:f,getExtensionContext:()=>e6({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:X.dbPath,logger:X.logger,pollIntervalMs:X.pollIntervalMs,claimLeaseSeconds:X.claimLeaseSeconds,globalMaxConcurrency:X.globalMaxConcurrency,watcherDebounceMs:X.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((A)=>{if(A.type!=="ended")return;this.disposeSessionBootstrap(A.payload.sessionId)})}static async create(f={}){let $=Kf(f.capabilities),J=await o1({...f,capabilities:$}),W=$j(f.automation),H=new V4(J,f.clientName,J.runtimeAddress,f.prepare,$,f.logger,f.telemetry,f.distinctId,W?{...W,logger:f.logger}:void 0);if(W&&W.autoStart!==!1)await H.automation.start();return H}async disposeSessionBootstrap(f){let $=this.activeSessionBootstraps.get(f);if(!$)return;this.activeSessionBootstraps.delete(f),await Promise.resolve($.dispose?.())}async start(f){let $=qj(f),J=await this.prepare?.($);try{let W=J?await J.applyToStartSessionInput($):$,H=await this.host.startSession(eW(W,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>e6({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(H.sessionId))this.activeSessionBootstraps.set(H.sessionId,J);else await Promise.resolve(J.dispose?.());return wj({input:W,sessionId:H.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),H}catch(W){throw await Promise.resolve(J?.dispose?.()),W}}send=(...f)=>this.host.runTurn(...f);getAccumulatedUsage=(...f)=>{return this.host.getAccumulatedUsage?.(...f)??Promise.resolve(void 0)};abort=(...f)=>this.host.abort(...f);stop=async(f)=>{await this.host.stopSession(f),await this.disposeSessionBootstrap(f)};dispose=async(...f)=>{try{await this.automationService?.dispose(),await this.host.dispose(...f)}finally{this.unsubscribeBootstrapCleanup();let $=[...this.activeSessionBootstraps.keys()];await Promise.allSettled($.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...f)=>this.host.getSession(...f);listHistory=async(f={})=>await VJ(this.host,f);list=async(f=200,$={})=>await this.listHistory({...$,limit:f});delete=async(f)=>{let $=await this.host.deleteSession(f);if($)await this.disposeSessionBootstrap(f);return $};update=(...f)=>this.host.updateSession(...f);readMessages=(...f)=>this.host.readSessionMessages(...f);async restore(f){let $=f.start?eW(f.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>e6({automationService:this.automationService,automation:this.automation,context:J,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:f.sessionId,checkpointRunCount:f.checkpointRunCount,cwd:f.cwd,restore:f.restore,start:$})}ingestHookEvent=(...f)=>this.host.dispatchHookEvent(...f);subscribe(f,$){return this.host.subscribe(f,$)}updateSessionModel=(...f)=>{return this.host.updateSessionModel?.(...f)??Promise.resolve()}}var jA={};N(jA,{resolvePluginConfigSearchPaths:()=>H8,resolveAndLoadAgentPlugins:()=>O1,resolveAgentPluginPaths:()=>b$,loadAgentPluginsFromPathsWithDiagnostics:()=>L0,loadAgentPluginsFromPaths:()=>K6,loadAgentPluginFromPath:()=>W8,discoverPluginModulePaths:()=>Q8});var yA={};N(yA,{resolveMcpServerRegistrations:()=>K4,resolveDefaultMcpSettingsPath:()=>P$,registerMcpServersFromSettingsFile:()=>$2,loadMcpSettingsFile:()=>F4,hasMcpSettingsFile:()=>f2,createMcpTools:()=>J2,createDisabledMcpToolPolicy:()=>y4,createDisabledMcpToolPolicies:()=>OJ,createDefaultMcpServerClientFactory:()=>e1,InMemoryMcpManager:()=>i$});import{spawn as mD}from"node:child_process";import{StringDecoder as BA}from"node:string_decoder";var xD="2024-11-05",gD=5000,vD=1500;function XA(f){return f instanceof Error?f.message:String(f)}function AA(f){let $=Buffer.from(JSON.stringify(f),"utf8"),J=Buffer.from(`Content-Length: ${$.byteLength}\r
552
- \r
553
- `,"utf8");return Buffer.concat([J,$])}function PA(f){return Buffer.from(`${JSON.stringify(f)}
554
- `,"utf8")}class HH{buffer="";decoder=new BA("utf8");push(f){this.buffer+=this.decoder.write(f);let $=[];while(!0){let J=this.buffer.indexOf(`\r
555
- \r
556
- `);if(J<0)break;let H=this.buffer.slice(0,J).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!H)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let Q=Number.parseInt(H[1],10),Z=J+4,j=Z+Q;if(this.buffer.length<j)break;$.push(this.buffer.slice(Z,j)),this.buffer=this.buffer.slice(j)}return $}}class QH{buffer="";decoder=new BA("utf8");push(f){this.buffer+=this.decoder.write(f);let $=[];while(!0){let J=this.buffer.indexOf(`
557
- `);if(J<0)break;let W=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),W.length>0)$.push(W)}return $}}class YA{registration;process;nextRequestId=1;pending=new Map;framedParser=new HH;newlineParser=new QH;stderrBuffer="";connected=!1;protocolMode="newline";constructor(f){this.registration=f}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let f=["newline","framed"],$;for(let J of f){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:xD,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},vD),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(W){$=W instanceof Error?W:Error(String(W))}}throw $??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let f=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!f)return;f.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter(($)=>typeof $?.name==="string"&&typeof $.inputSchema==="object"&&$.inputSchema!==null).map(($)=>({name:$.name,description:$.description,inputSchema:$.inputSchema}))}async callTool(f){return this.request("tools/call",{name:f.name,arguments:f.arguments??{}})}spawnProcess(f){let $=this.registration.transport;if($.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${$.type}`);this.framedParser=new HH,this.newlineParser=new QH,this.stderrBuffer="",this.protocolMode=f;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=mD($.command,$.args??[],{cwd:$.cwd,env:{...process.env,...$.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=W,W.stdout.on("data",(H)=>this.handleStdout(H)),W.stderr.on("data",(H)=>{if(this.process!==W)return;if(this.stderrBuffer+=H.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(H)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${XA(H)}`))}),W.once("exit",(H,Q)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Z=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${H??"null"}, signal=${Q??"null"}).${Z}`))})}handleStdout(f){try{let $=this.protocolMode==="framed"?this.framedParser.push(f):this.newlineParser.push(f);for(let J of $){let W=JSON.parse(J);if(typeof W.id!=="number")continue;let H=this.pending.get(W.id);if(!H)continue;if(this.pending.delete(W.id),clearTimeout(H.timeout),W.error){let Q=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;H.reject(Error(Q));continue}H.resolve(W.result)}}catch($){this.handleProtocolFailure($)}}handleProtocolFailure(f){let $=this.process;if(!$)return;this.connected=!1,this.process=void 0;let J=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${XA(f)}.${J}`)),$.kill()}async request(f,$,J=gD){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let H=this.nextRequestId++,Q={jsonrpc:"2.0",id:H,method:f,...$?{params:$}:{}},Z=new Promise((j,X)=>{let A=setTimeout(()=>{this.pending.delete(H),X(Error(`MCP request timed out for "${this.registration.name}" (${f}).`))},J);this.pending.set(H,{resolve:j,reject:X,timeout:A})});try{W.stdin.write(this.protocolMode==="framed"?AA(Q):PA(Q))}catch(j){let X=this.pending.get(H);if(X)clearTimeout(X.timeout),this.pending.delete(H);throw j}return Z}notify(f,$){let J=this.process;if(!J?.stdin.writable)return;let W={jsonrpc:"2.0",method:f,...$?{params:$}:{}};J.stdin.write(this.protocolMode==="framed"?AA(W):PA(W))}failAllPending(f){for(let[$,J]of this.pending)clearTimeout(J.timeout),this.pending.delete($),J.reject(f)}}function e1(){return(f)=>new YA(f)}import{existsSync as uD,readFileSync as cD}from"node:fs";import{resolveMcpSettingsPath as dD}from"@cline/shared/storage";import{z as I}from"zod";var R4=I.record(I.string(),I.string()),VA=I.record(I.string(),I.unknown()),rD=I.object({type:I.literal("stdio"),command:I.string().min(1),args:I.array(I.string()).optional(),cwd:I.string().min(1).optional(),env:R4.optional()}),lD=I.object({type:I.literal("sse"),url:I.string().url(),headers:R4.optional()}),pD=I.object({type:I.literal("streamableHttp"),url:I.string().url(),headers:R4.optional()}),iD=I.discriminatedUnion("type",[rD,lD,pD]),nD=I.object({transport:iD,disabled:I.boolean().optional(),metadata:VA.optional()}),aD=I.enum(["stdio","sse","http","streamableHttp"]).optional(),RA=I.object({type:I.enum(["stdio","sse","streamableHttp"]).optional(),transportType:aD,disabled:I.boolean().optional(),metadata:VA.optional()});function ZH(f){if(!f)return;if(f==="http")return"streamableHttp";return f}var tD=RA.extend({command:I.string().min(1),args:I.array(I.string()).optional(),cwd:I.string().min(1).optional(),env:R4.optional()}).superRefine((f,$)=>{let J=f.type??ZH(f.transportType);if(J&&J!=="stdio")$.addIssue({code:I.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform((f)=>({transport:{type:"stdio",command:f.command,args:f.args,cwd:f.cwd,env:f.env},disabled:f.disabled,metadata:f.metadata})),sD=RA.extend({url:I.string().url(),headers:R4.optional()}).superRefine((f,$)=>{let J=f.type??ZH(f.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")$.addIssue({code:I.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform((f)=>{if((f.type??ZH(f.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:f.url,headers:f.headers},disabled:f.disabled,metadata:f.metadata};return{transport:{type:"sse",url:f.url,headers:f.headers},disabled:f.disabled,metadata:f.metadata}}),oD=I.union([nD,tD,sD]),eD=I.object({mcpServers:I.record(I.string(),oD)}).strict();function P$(){return dD()}function F4(f={}){let $=f.filePath??P$(),J=cD($,"utf8"),W;try{W=JSON.parse(J)}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Z}`)}let H=eD.safeParse(W);if(!H.success){let Q=H.error.issues.map((Z)=>{let j=Z.path.join(".");return j?`${j}: ${Z.message}`:Z.message}).join("; ");throw Error(`Invalid MCP settings at "${$}": ${Q}`)}return H.data}function f2(f={}){let $=f.filePath??P$();return uD($)}function K4(f={}){let $=F4(f);return Object.entries($.mcpServers).map(([J,W])=>({name:J,transport:W.transport,disabled:W.disabled,metadata:W.metadata}))}async function $2(f,$={}){let J=K4($);for(let W of J)await f.registerServer(W);return J}function vf(){return Date.now()}function f_(f){return f.map(($)=>({name:$.name,description:$.description,inputSchema:$.inputSchema}))}class i${toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor(f){this.clientFactory=f.clientFactory,this.toolsCacheTtlMs=f.toolsCacheTtlMs??5000}async registerServer(f){await this.runExclusive(f.name,async()=>{let $=this.servers.get(f.name);if(!$){this.servers.set(f.name,{registration:{...f},status:"disconnected",updatedAt:vf()});return}let J=JSON.stringify($.registration.transport)!==JSON.stringify(f.transport);if($.registration={...f},$.updatedAt=vf(),J)await this.disconnectState($),$.client=void 0,$.toolCache=void 0,$.toolCacheUpdatedAt=void 0})}async unregisterServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.disconnectState($),this.servers.delete(f)})}async connectServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.connectState($)})}async disconnectServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.disconnectState($)})}async setServerDisabled(f,$){await this.runExclusive(f,async()=>{let J=this.requireServer(f);if(J.registration={...J.registration,disabled:$},J.updatedAt=vf(),$)await this.disconnectState(J)})}listServers(){return[...this.servers.values()].map((f)=>({name:f.registration.name,status:f.status,disabled:f.registration.disabled===!0,lastError:f.lastError,toolCount:f.toolCache?.length??0,updatedAt:f.updatedAt,metadata:f.registration.metadata})).sort((f,$)=>f.name.localeCompare($.name))}async listTools(f){let $=this.requireServer(f),J=$.toolCacheUpdatedAt??0;if($.toolCache&&vf()-J<=this.toolsCacheTtlMs)return $.toolCache;return this.refreshTools(f)}async refreshTools(f){return this.runExclusive(f,async()=>{let $=this.requireServer(f),W=await(await this.ensureConnectedClient($)).listTools(),H=f_(W);return $.toolCache=H,$.toolCacheUpdatedAt=vf(),$.updatedAt=vf(),H})}async callTool(f){return this.runExclusive(f.serverName,async()=>{let $=this.requireServer(f.serverName),J=await this.ensureConnectedClient($);return $.updatedAt=vf(),J.callTool({name:f.toolName,arguments:f.arguments,context:f.context})})}async dispose(){let f=[...this.servers.keys()];for(let $ of f)await this.unregisterServer($)}async ensureConnectedClient(f){if(await this.connectState(f),!f.client)throw Error(`MCP server "${f.registration.name}" does not have an initialized client.`);return f.client}async connectState(f){if(f.registration.disabled)throw Error(`MCP server "${f.registration.name}" is disabled and cannot be connected.`);if(f.status==="connected"&&f.client)return;f.status="connecting",f.updatedAt=vf();try{let $=f.client??await this.clientFactory(f.registration);await $.connect(),f.client=$,f.status="connected",f.lastError=void 0,f.updatedAt=vf()}catch($){throw f.status="disconnected",f.lastError=$ instanceof Error?$.message:String($),f.updatedAt=vf(),$}}async disconnectState(f){if(!f.client){f.status="disconnected",f.updatedAt=vf();return}try{await f.client.disconnect()}finally{f.status="disconnected",f.updatedAt=vf()}}requireServer(f){let $=this.servers.get(f);if(!$)throw Error(`Unknown MCP server: ${f}`);return $}async runExclusive(f,$){let J=this.operationLocks.get(f)??Promise.resolve(),W,H=new Promise((Z)=>{W=Z}),Q=J.catch(()=>{return}).then(()=>H);this.operationLocks.set(f,Q),await J.catch(()=>{return});try{return await $()}finally{if(W?.(),this.operationLocks.get(f)===Q)this.operationLocks.delete(f)}}}import{createHash as $_}from"node:crypto";var FA=128,J_=/[^a-zA-Z0-9_-]+/g,KA=8,W_=1,H_="mcp_tool";function Q_(f){return $_("sha1").update(f).digest("hex").slice(0,KA)}function Z_(f){return f.replace(J_,"_")}var hJ=({serverName:f,toolName:$})=>{let J=`${f}__${$}`,W=Z_(J);if(W===J&&J.length<=FA)return J;let H=Q_(J),Q=FA-W_-KA;return`${W.slice(0,Q)||H_}_${H}`};function y4(f){return{[(f.nameTransform??hJ)({serverName:f.serverName,toolName:f.toolName})]:{enabled:!1}}}function OJ(f){let $={};for(let J of f.toolNames)Object.assign($,y4({serverName:f.serverName,toolName:J,nameTransform:f.nameTransform}));return $}import{createTool as j_}from"@cline/shared";function X_(f,$){let J=$.description?.trim();if(J)return J;return`Execute MCP tool "${$.name}" from server "${f}".`}async function J2(f){let $=await f.provider.listTools(f.serverName),J=f.nameTransform??hJ;return $.map((W)=>{let H=J({serverName:f.serverName,toolName:W.name});return j_({name:H,description:X_(f.serverName,W),inputSchema:W.inputSchema,timeoutMs:f.timeoutMs,retryable:f.retryable,maxRetries:f.maxRetries,execute:async(Q,Z)=>f.provider.callTool({serverName:f.serverName,toolName:W.name,arguments:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:void 0,context:Z})})})}var TA={};N(TA,{toHookConfigFileName:()=>X8,runSubprocessEvent:()=>W2,runHook:()=>Q2,resolveHooksConfigSearchPaths:()=>Z8,parseHookEventPayload:()=>H2,mergeAgentHooks:()=>k$,listHookConfigFiles:()=>n0,createSubprocessHooks:()=>qJ,createHookConfigFileHooks:()=>A8,createHookConfigFileExtension:()=>w1,createHookAuditHooks:()=>q1,createAgentHooksExtension:()=>z1,HookEventPayloadSchema:()=>NJ,HookEventNameSchema:()=>zJ,HookConfigFileName:()=>N1,HOOK_CONFIG_FILE_EVENT_MAP:()=>j8,HOOKS_CONFIG_DIRECTORY_NAME:()=>G6});import{HookEventNameSchema as zJ,HookEventPayloadSchema as NJ,parseHookEventPayload as H2,resolveHookSessionContext as F_}from"@cline/shared";import{z as n$}from"zod";import{spawn as A_}from"node:child_process";import{augmentNodeCommandForDebug as P_,withResolvedClineBuildEnv as B_}from"@cline/shared";function Y_(f){let $=f.trim();if(!$)return{};let W=$.split(`
558
- `).map((Q)=>Q.trim()).filter(Boolean).filter((Q)=>Q.startsWith("HOOK_CONTROL\t")).map((Q)=>Q.slice(13)),H=W.length>0?W[W.length-1]:$;try{return{parsedJson:JSON.parse(H)}}catch(Q){return{parseError:Q instanceof Error?Q.message:"Failed to parse subprocess stdout JSON"}}}function V_(f,$){let J=f instanceof Error?f:Error(String(f)),W=J,H=$.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${H}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${H}": ${J.message}`)}async function R_(f,$){let J=f.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,H)=>{let Q=(Z)=>{J.off("error",Q);let j=Z.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}H(Z)};J.once("error",Q),J.end($,(Z)=>{if(J.off("error",Q),Z){let j=Z.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}H(Z);return}W()})})}async function W2(f,$){let J=P_($.command,{env:$.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!$.detached,H=A_(J[0],J.slice(1),{cwd:$.cwd,env:B_($.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W}),Q=new Promise((Y)=>{H.once("spawn",()=>{try{$.onSpawn?.({command:J,pid:H.pid??void 0,detached:W})}catch{}Y()})}),Z=new Promise((Y,V)=>{H.once("error",(R)=>{V(V_(R,J))})});if(await R_(H,JSON.stringify(f)),W){await Promise.race([Q,Z]),H.unref();return}if(!H.stdout||!H.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",X="",A=!1,P;H.stdout.on("data",(Y)=>{j+=Y.toString()}),H.stderr.on("data",(Y)=>{X+=Y.toString()});let B=new Promise((Y)=>{if(($.timeoutMs??0)>0)P=setTimeout(()=>{A=!0,H.kill("SIGKILL")},$.timeoutMs);H.once("close",(V)=>{if(P)clearTimeout(P);let{parsedJson:R,parseError:U}=Y_(j);Y({exitCode:V,stdout:j,stderr:X,parsedJson:R,parseError:U,timedOut:A})})});return await Promise.race([B,Z])}var K_=n$.object({contextModification:n$.string().optional(),cancel:n$.boolean().optional(),review:n$.boolean().optional(),errorMessage:n$.string().optional(),context:n$.string().optional(),overrideInput:n$.unknown().optional()}).passthrough();var y_=["agent","hook"];async function Q2(f,$={}){let J=$.command??y_;return await W2(f,{command:J,cwd:$.cwd,env:$.env,detached:$.detached,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn})}function GA(f){return f instanceof Error?f:Error(String(f))}function U_(f){if(!f||typeof f!=="object")return;let $=K_.safeParse(f);if(!$.success)return;let J=$.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let H=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"&&J.errorMessage.length>0?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:H,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function UA(f){if(!f||typeof f!=="object")return{};let $={};for(let[J,W]of Object.entries(f))if(typeof W==="string")$[J]=W;else $[J]=JSON.stringify(W);return $}function b0(f,$,J){let W=J.env??process.env,H=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",Q=J.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:f,timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:F_(J.sessionContext,{hookName:f,conversationId:$.conversationId,agentId:$.agentId,parentAgentId:$.parentAgentId}),workspaceRoots:Q?[Q]:[],workspaceInfo:J.workspaceInfo,userId:H,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function G_(f){return{name:f.name,message:f.message,stack:f.stack}}function T_(f){let $=String(f??"").toLowerCase();return $.includes("cancel")||$.includes("abort")||$.includes("interrupt")}function D_(f){return{agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null}}function __(f){return f.filter(($)=>$.type==="text"&&typeof $.text==="string").map(($)=>$.text).join("")}function M_(f){return{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input,output:f.result.output,error:f.result.isError?String(f.result.output):void 0,durationMs:f.durationMs,startedAt:f.startedAt,endedAt:f.endedAt}}function L_(f){if(!f)return;let $={};if(f.cancel===!0)$.stop=!0;if(f.overrideInput!==void 0)$.input=f.overrideInput;return Object.keys($).length>0?$:void 0}async function a$(f,$){try{let J=await Q2(f,{command:$.command,cwd:$.cwd,env:$.env,detached:!0,onSpawn:$.onSpawn});$.onDispatch?.({payload:f,result:J,detached:!0})}catch(J){$.onDispatchError?.(GA(J),f)}}function qJ(f={}){return{hooks:{beforeRun:async(j)=>{let X=D_(j);if((f.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let P={...b0("agent_resume",X,f),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await a$(P,f)}else{let P={...b0("agent_start",X,f),hookName:"agent_start",taskStart:{taskMetadata:{}}};await a$(P,f)}return},beforeTool:async(j)=>{let X={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},A={...b0("tool_call",X,f),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:UA(j.input)}};try{let P=await Q2(A,{command:f.command,cwd:f.cwd,env:f.env,detached:!1,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn});if(f.onDispatch?.({payload:A,result:P,detached:!1}),P?.timedOut)throw Error("tool_call hook command timed out");if(P?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${P.parseError}`);return L_(U_(P?.parsedJson))}catch(P){f.onDispatchError?.(GA(P),A);return}},afterTool:async(j)=>{let X=M_(j),A={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},P={...b0("tool_result",A,f),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:X,postToolUse:{toolName:X.name,parameters:UA(X.input),result:typeof X.output==="string"?X.output:JSON.stringify(X.output),success:!X.error,executionTimeMs:X.durationMs}};await a$(P,f);return},afterRun:async({snapshot:j,result:X})=>{let A={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(X.status==="completed"){let Y={...b0("agent_end",A,f),hookName:"agent_end",iteration:X.iterations,turn:{outputText:X.outputText,status:X.status},taskComplete:{taskMetadata:{}}};await a$(Y,f);return}let P=X.status==="aborted"||T_(X.error?.message)?"agent_abort":"agent_error",B=P==="agent_error"?{...b0(P,A,f),hookName:P,iteration:X.iterations,error:G_(X.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...b0(P,A,f),hookName:P,reason:X.error?.message,taskCancel:{taskMetadata:{}}};await a$(B,f)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let X={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},A={...b0("prompt_submit",X,f),hookName:"prompt_submit",userPromptSubmit:{prompt:__(j.message.content),attachments:[]}};await a$(A,f)}},shutdown:async({agentId:j,conversationId:X,parentAgentId:A,reason:P})=>{let B={...b0("session_shutdown",{agentId:j,conversationId:X,parentAgentId:A},f),hookName:"session_shutdown",reason:P};await a$(B,f)}}}var _P={};N(_P,{writeHubDiscovery:()=>FJ,withHubStartupLock:()=>KJ,verifyHubConnection:()=>J0,truncateNotificationBody:()=>D4,toHubHealthUrl:()=>h9,stopLocalHubServerGracefully:()=>m9,startHubWebSocketServer:()=>o$,startHubServer:()=>TP,spawnDetachedHubServerWithRetry:()=>r1,spawnDetachedHubServer:()=>b9,sendHubCommand:()=>OA,restartLocalHubIfIdleAfterStartupTimeout:()=>GJ,resolveWorkspaceHubOwnerContext:()=>KX,resolveSharedHubOwnerContext:()=>Af,resolveHubUrl:()=>PH,resolveHubOwnerContext:()=>z0,resolveHubEndpointOptions:()=>gf,resolveHubBuildId:()=>Z$,resolveDefaultHubPort:()=>d1,resolveDefaultHubPathname:()=>w9,resolveDefaultHubHost:()=>q9,resolveCompatibleLocalHubUrl:()=>Q4,resolveClineDir:()=>YX,resolveClineDataDir:()=>$4,requestHubShutdown:()=>H4,rememberRecoverableLocalHubUrl:()=>j$,readHubDiscovery:()=>Bf,probeHubServer:()=>Uf,probeHubConnection:()=>hA,prewarmDetachedHubServer:()=>yJ,normalizeHubWebSocketUrl:()=>X$,isHubReconnectableTransportError:()=>k9,isHubCommandTimeoutError:()=>UJ,isDiscoveryFilePresent:()=>RX,ensureHubWebSocketServer:()=>xJ,ensureHubServer:()=>DP,ensureDetachedHubServer:()=>UX,ensureCompatibleLocalHubUrl:()=>c$,createLocalHubScheduleRuntimeHandlers:()=>gJ,createInMemoryHubOwnerContext:()=>VX,createHubServerUrl:()=>af,createHubAuthToken:()=>RJ,createConfiguredTelemetryService:()=>C0,createConfiguredTelemetryHandle:()=>P2,connectToHub:()=>EJ,clearHubDiscovery:()=>xf,NodeHubClient:()=>tf,NativeHubTransportAdapter:()=>O4,HubUIClient:()=>YH,HubTransportError:()=>Df,HubSessionClient:()=>BH,HubServerTransport:()=>Y2,HubScheduleService:()=>j2,HubScheduleCommandService:()=>Z2,HubCommandError:()=>l1,DEFAULT_HUB_PORT:()=>z9,DEFAULT_HUB_PATHNAME:()=>N9,DEFAULT_HUB_HOST:()=>O9,BrowserWebSocketHubAdapter:()=>h4});import{createSessionId as h_}from"@cline/shared";function uf(f,$){return{version:f.version,requestId:f.requestId,ok:!0,payload:$}}function DA(f,$,J){return{version:f.version,requestId:f.requestId??h_("hubreq_"),ok:!1,error:{code:$,message:J}}}class Z2{schedules;constructor(f){this.schedules=f}async handleCommand(f){try{switch(f.command){case"schedule.create":return uf(f,{schedule:this.schedules.createSchedule(this.toCreateInput(f.payload??{}))});case"schedule.list":return uf(f,{schedules:this.schedules.listSchedules({enabled:typeof f.payload?.enabled==="boolean"?f.payload.enabled:void 0,limit:typeof f.payload?.limit==="number"?f.payload.limit:void 0,tags:Array.isArray(f.payload?.tags)?f.payload?.tags:void 0})});case"schedule.get":return uf(f,{schedule:this.schedules.getSchedule(String(f.payload?.scheduleId??""))});case"schedule.update":return uf(f,{schedule:this.schedules.updateSchedule(String(f.payload?.scheduleId??""),this.toUpdateInput(f.payload??{}))});case"schedule.delete":return uf(f,{deleted:this.schedules.deleteSchedule(String(f.payload?.scheduleId??""))});case"schedule.enable":return uf(f,{schedule:this.schedules.resumeSchedule(String(f.payload?.scheduleId??""))});case"schedule.disable":return uf(f,{schedule:this.schedules.pauseSchedule(String(f.payload?.scheduleId??""))});case"schedule.trigger":return uf(f,{execution:await this.schedules.triggerScheduleNow(String(f.payload?.scheduleId??""))});case"schedule.list_executions":return uf(f,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof f.payload?.scheduleId==="string"?f.payload.scheduleId:void 0,status:typeof f.payload?.status==="string"?f.payload.status:void 0,limit:typeof f.payload?.limit==="number"?f.payload.limit:void 0})});case"schedule.stats":return uf(f,{stats:this.schedules.getScheduleStats(String(f.payload?.scheduleId??""))});case"schedule.active":return uf(f,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return uf(f,{runs:this.schedules.getUpcomingRuns(typeof f.payload?.limit==="number"?f.payload.limit:void 0)});default:return DA(f,"unsupported_command",`Unsupported hub schedule command: ${f.command}`)}}catch($){return DA(f,"schedule_command_failed",$ instanceof Error?$.message:String($))}}toCreateInput(f){let $=f.modelSelection&&typeof f.modelSelection==="object"&&!Array.isArray(f.modelSelection)?f.modelSelection:f.provider&&f.model?{providerId:String(f.provider),modelId:String(f.model)}:void 0;return{...f,modelSelection:$}}toUpdateInput(f){let $=f.modelSelection&&typeof f.modelSelection==="object"&&!Array.isArray(f.modelSelection)?f.modelSelection:f.provider||f.model?{providerId:typeof f.provider==="string"?f.provider:"",modelId:typeof f.model==="string"?f.model:""}:void 0;return{...f,modelSelection:$}}}function bJ(f){return f?new Date(f).getTime():void 0}function O_(f){let $=f.metadata?{...f.metadata}:void 0;if($)delete $.__hubScheduleCreatedBy,delete $.__hubScheduleCwd,delete $.__hubRuntimeOptions;return $}function wJ(f){let $=f.metadata;return{scheduleId:f.externalId,name:f.title,cronPattern:f.scheduleExpr??"",prompt:f.prompt??"",workspaceRoot:f.workspaceRoot??"",cwd:typeof $?.__hubScheduleCwd==="string"?$.__hubScheduleCwd:void 0,modelSelection:f.providerId||f.modelId?{providerId:f.providerId??"",modelId:f.modelId??""}:void 0,enabled:f.enabled&&!f.removed&&f.parseStatus==="valid",mode:f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act",systemPrompt:f.systemPrompt,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,maxParallel:f.maxParallel??1,createdAt:new Date(f.createdAt).getTime(),updatedAt:new Date(f.updatedAt).getTime(),nextRunAt:bJ(f.nextRunAt),lastRunAt:bJ(f.lastRunAt),createdBy:typeof $?.__hubScheduleCreatedBy==="string"?$.__hubScheduleCreatedBy:void 0,tags:f.tags,runtimeOptions:$?.__hubRuntimeOptions&&typeof $.__hubRuntimeOptions==="object"&&!Array.isArray($.__hubRuntimeOptions)?$.__hubRuntimeOptions:void 0,metadata:O_(f)}}function z_(f){switch(f){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function _A(f,$){return{executionId:f.runId,scheduleId:$,sessionId:f.sessionId,triggeredAt:new Date(f.scheduledFor??f.createdAt).getTime(),startedAt:bJ(f.startedAt),endedAt:bJ(f.completedAt),status:z_(f.status),errorMessage:f.error}}class j2{store;materializer;runner;started=!1;disposed=!1;constructor(f){this.store=new o8({dbPath:f.dbPath}),this.materializer=new i8({store:this.store}),this.runner=new n8({store:this.store,materializer:this.materializer,runtimeHandlers:f.runtimeHandlers,workspaceRoot:"",logger:f.logger,pollIntervalMs:f.pollIntervalMs,claimLeaseSeconds:f.claimLeaseSeconds,globalMaxConcurrency:f.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule(f){if(X9(f.cronPattern),!f.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return wJ(this.store.createHubSchedule(f))}getSchedule(f){let $=this.store.getHubSchedule(f);return $?wJ($):void 0}listSchedules(f={}){return this.store.listHubSchedules(f).map(($)=>wJ($))}updateSchedule(f,$){if($.cronPattern!==void 0)X9($.cronPattern);let J=this.store.getHubSchedule(f);if(!J)return;let W=$.workspaceRoot!==void 0?$.workspaceRoot.trim():J.workspaceRoot;if(($.enabled??J.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let Q=this.store.updateHubSchedule(f,{...$,scheduleId:f});return Q?wJ(Q):void 0}deleteSchedule(f){return this.store.deleteHubSchedule(f)}pauseSchedule(f){return this.updateSchedule(f,{scheduleId:f,enabled:!1})}resumeSchedule(f){return this.updateSchedule(f,{scheduleId:f,enabled:!0})}async triggerScheduleNow(f){let $=this.store.enqueueHubScheduleRun(f,"manual");if(!$)return;await this.runner.tick();let J=this.store.getRun($.runId)??$;return _A(J,f)}listScheduleExecutions(f){let $=f.scheduleId?this.store.getHubSchedule(f.scheduleId):void 0,J={specId:$?.specId,limit:f.limit};return this.store.listRuns(J).map((H)=>{let Q=$??this.store.getSpec(H.specId);if(!Q||Q.source!=="hub-schedule")return;return _A(H,Q.externalId)}).filter((H)=>{if(!H)return!1;return!f.status||H.status===f.status})}getScheduleStats(f){let $=this.listScheduleExecutions({scheduleId:f,limit:1e4});if($.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,W=0,H=0,Q;for(let Z of $){if(Z.status==="success"||Z.status==="completed")J+=1;if(!Q&&Z.status!=="success"&&Z.status!=="completed")Q=Z;if(Z.startedAt&&Z.endedAt)H+=Z.endedAt-Z.startedAt,W+=1}return{totalRuns:$.length,successRate:J/$.length,avgDurationSeconds:W>0?H/W/1000:0,lastFailure:Q}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap((f)=>{let $=this.store.getSpec(f.specId);if(!$||$.source!=="hub-schedule"||!f.sessionId)return[];return[{executionId:f.runId,scheduleId:$.externalId,sessionId:f.sessionId,startedAt:f.startedAt??new Date().toISOString(),timeoutAt:$.timeoutSeconds&&f.startedAt?new Date(new Date(f.startedAt).getTime()+$.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns(f=20){let $={triggerKind:"schedule",enabled:!0,limit:f};return this.store.listSpecs($).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,W)=>String(J.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,f).map(({spec:J,nextRunAt:W})=>({scheduleId:J.externalId,name:J.title,nextRunAt:W}))}}CJ();function t_(f,$){if(f instanceof Error)return f;if(f&&typeof f==="object"&&"message"in f&&typeof f.message==="string"&&f.message.trim())return Error(f.message.trim());let J=f&&typeof f==="object"&&"type"in f&&typeof f.type==="string"?f.type.trim():"";return Error(J?`Failed to connect to hub at ${$} (${J} event before socket open).`:`Failed to connect to hub at ${$}.`)}var s_="cline-hub-auth.";function o_(f){return f.host!==void 0||f.port!==void 0||f.pathname!==void 0}function e_(f,$){let J=new URL(f),W=new URL($);return J.search="",J.hash="",W.search="",W.hash="",J.toString()===W.toString()}async function fM(f){let $=f.searchParams.get("authToken")?.trim();if(f.searchParams.delete("authToken"),$)return $;let J=Af(),W=await Bf(J.discoveryPath);if(W?.url&&e_(f.toString(),W.url))return W.authToken;return}async function PH(f={}){let $=gf(f);if(!o_(f)){let J=Af(),W=await Bf(J.discoveryPath);if(W?.url)return W.url}return af($.host,$.port,$.pathname)}async function EJ(f){return await new Promise(($,J)=>{(async()=>{let W=new URL(f),H=await fM(W);W.hash="";let Q=new WebSocket(W.toString(),H?[`${s_}${H}`]:void 0),Z=new Map,j=0;Q.addEventListener("open",()=>{$({send(X){let A=X.requestId??`hub-client-${++j}`;return new Promise((P,B)=>{Z.set(A,{resolve:P,reject:B});let Y={kind:"command",envelope:{...X,requestId:A}};Q.send(JSON.stringify(Y))})},close(){Q.close()}})}),Q.addEventListener("message",(X)=>{let A=JSON.parse(String(X.data));if(A.kind==="reply"&&A.envelope.requestId){let P=Z.get(A.envelope.requestId);if(P)Z.delete(A.envelope.requestId),P.resolve(A.envelope)}}),Q.addEventListener("close",()=>{for(let X of Z.values())X.reject(Error("Hub connection closed"));Z.clear()}),Q.addEventListener("error",(X)=>{J(t_(X,f))})})().catch(J)})}async function hA(f){try{return(await EJ(f)).close(),!0}catch{return!1}}async function OA(f,$){let J=await PH(f),W=await EJ(J);try{return await W.send({version:$.version??"v1",clientId:$.clientId??"hub-client",...$})}finally{W.close()}}function sf(f){return f?JSON.parse(JSON.stringify(f)):{}}function SJ(f){let $=f?.session&&typeof f.session==="object"?f.session:void 0;if(!$)return;let J=$.metadata&&typeof $.metadata==="object"?sf($.metadata):void 0;return{sessionId:typeof $.sessionId==="string"?$.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function zA(f,$){return f.error?.message??`hub command failed: ${$}`}function $M(f){let $=sf(f);if(typeof $.error==="string"&&$.error.trim())return{...$,error:$.error.trim()};let J=$.result&&typeof $.result==="object"?$.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...$,error:J.text.trim()};let W=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...$,error:W.message.trim()};return $}function JM(f){let $=f?.checkpoint;if(!$||typeof $!=="object"||Array.isArray($))throw Error("hub checkpoint restore returned no checkpoint");let J=$;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function WM(f){let $=f.sessionId?.trim();if(!$)return;switch(f.event){case"iteration.started":return{sessionId:$,eventType:"runtime.chat.iteration_start",payload:sf(f.payload)};case"iteration.finished":return{sessionId:$,eventType:"runtime.chat.iteration_end",payload:sf(f.payload)};case"assistant.delta":return{sessionId:$,eventType:"runtime.chat.text_delta",payload:sf(f.payload)};case"usage.updated":return{sessionId:$,eventType:"runtime.chat.usage",payload:sf(f.payload)};case"tool.started":return{sessionId:$,eventType:"runtime.chat.tool_call_start",payload:sf(f.payload)};case"tool.finished":return{sessionId:$,eventType:"runtime.chat.tool_call_end",payload:sf(f.payload)};case"approval.requested":return{sessionId:$,eventType:"approval.requested",payload:sf(f.payload)};case"run.aborted":return{sessionId:$,eventType:"runtime.chat.aborted",payload:sf(f.payload)};case"run.failed":return{sessionId:$,eventType:"runtime.chat.failed",payload:$M(f.payload)};case"run.completed":return{sessionId:$,eventType:"runtime.chat.completed",payload:sf(f.payload)};default:return}}class BH{options;client;metadataApplied=!1;constructor(f){this.options=f;this.client=new tf({url:f.address,authToken:f.authToken,clientId:f.clientId,clientType:f.clientType??"hub-session-client",displayName:f.displayName??"hub session client",workspaceRoot:f.workspaceRoot,cwd:f.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession(f){await this.ensureMetadataApplied();let $=await this.client.command("session.create",{workspaceRoot:f.workspaceRoot,cwd:f.cwd,sessionConfig:{providerId:f.provider,modelId:f.model,apiKey:f.apiKey,cwd:f.cwd??f.workspaceRoot,workspaceRoot:f.workspaceRoot,systemPrompt:f.systemPrompt??"",mode:f.mode??"act",rules:f.rules,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,enableTools:f.enableTools,enableSpawnAgent:f.enableSpawn!==!1,enableAgentTeams:f.enableTeams!==!1,disableMcpSettingsTools:f.disableMcpSettingsTools,missionLogIntervalSteps:f.missionStepInterval,missionLogIntervalMs:f.missionTimeIntervalMs},metadata:{source:f.source??"cli",provider:f.provider,model:f.model,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,prompt:void 0,interactive:f.interactive!==!1},runtimeOptions:{mode:f.mode,systemPrompt:f.systemPrompt,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,autoApproveTools:f.autoApproveTools,toolExecutors:f.toolExecutors,configExtensions:f.configExtensions},modelSelection:{provider:f.provider,model:f.model,apiKey:f.apiKey},toolPolicies:f.toolPolicies}),J=SJ($.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession(f,$,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:$.prompt,attachments:$.attachments,delivery:$.delivery,timeoutSeconds:$.config.timeoutSeconds},f,J)).payload?.result}}async stopRuntimeSession(f){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:f},f),{applied:!0}}async abortRuntimeSession(f){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:f},f),{applied:!0}}async updateSession(f){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:f.sessionId,metadata:f.metadata},f.sessionId),{updated:!0}}async getSession(f){await this.ensureMetadataApplied();let $=await this.client.command("session.get",void 0,f);return SJ($.payload)}async readMessages(f){let $=f.trim();if(!$)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:$},$);if(!J.ok)throw Error(zA(J,"session.messages"));let W=J.payload?.messages;return Array.isArray(W)?W:[]}async restore(f){let $=f.sessionId.trim();if(!$)throw Error("sessionId is required");let J=f.restore?.messages!==!1;if(J&&!f.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=f.config,H=await this.client.command("session.restore",{sessionId:$,checkpointRunCount:f.checkpointRunCount,restore:f.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},$);if(!H.ok)throw Error(zA(H,"session.restore"));let Q=SJ(H.payload);if(J&&!Q?.sessionId)throw Error("hub checkpoint restore returned no session id");let Z=Array.isArray(H.payload?.messages)?H.payload.messages:void 0,j=JM(H.payload);return{sessionId:Q?.sessionId,startResult:Q?.sessionId?{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}:void 0,...Z?{messages:Z}:{},checkpoint:j}}async listSessions(f){await this.ensureMetadataApplied();let $=await this.client.command("session.list",{limit:f?.limit??200});return(Array.isArray($.payload?.sessions)?$.payload?.sessions:[]).map((W)=>SJ({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession(f,$=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:f,deleteCheckpointRefs:$})).payload?.deleted===!0}async respondToolApproval(f){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:f.approvalId,approved:f.approved,payload:f.reason?{reason:f.reason}:void 0,responderClientId:f.responderClientId})}streamEvents(f,$){let J=new Set((f.sessionIds??[]).map((H)=>H.trim()).filter(Boolean)),W=this.client.subscribe((H)=>{let Q=WM(H);if(!Q)return;if(J.size>0&&!J.has(Q.sessionId))return;$.onEvent?.(Q)});return this.ensureMetadataApplied().catch((H)=>{$.onError?.(H instanceof Error?H:Error(String(H)))}),W}streamTeamProgress(f,$){let J=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;$.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{$.onError?.(W instanceof Error?W:Error(String(W)))}),J}async createSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",f)).payload?.schedule}async listSchedules(f){await this.ensureMetadataApplied();let $=await this.client.command("schedule.list");return Array.isArray($.payload?.schedules)?$.payload?.schedules:[]}async getSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:f})).payload?.schedule}async updateSchedule(f,$){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:f,...$})).payload?.schedule}async pauseSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:f})).payload?.schedule}async resumeSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:f})).payload?.schedule}async deleteSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:f})).payload?.deleted===!0}async triggerScheduleNow(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:f})).payload?.execution}async listScheduleExecutions(f,$){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:f,limit:$});return Array.isArray(J.payload?.executions)?J.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let f=await this.client.command("schedule.active");return Array.isArray(f.payload?.executions)?f.payload?.executions:[]}async getUpcomingScheduledRuns(f){await this.ensureMetadataApplied();let $=await this.client.command("schedule.upcoming",{limit:f});return Array.isArray($.payload?.upcoming)?$.payload?.upcoming:[]}}class YH{client;constructor(f){this.client=new tf({url:f.address,authToken:f.authToken,clientId:f.clientId,clientType:f.clientType??"hub-ui-client",displayName:f.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify(f){await this.client.command("ui.notify",f)}async sendShowWindow(f){await this.client.command("ui.show_window",f??{})}async listClients(){let f=await this.client.command("client.list");return Array.isArray(f.payload?.clients)?f.payload.clients:[]}async listSessions(f=200){let $=await this.client.command("session.list",{limit:f});return Array.isArray($.payload?.sessions)?$.payload.sessions:[]}subscribeUI(f){return this.client.subscribe(($)=>{switch($.event){case"ui.notify":f.onNotify?.($.payload);break;case"ui.show_window":f.onShowWindow?.($.payload);break;case"hub.client.registered":f.onClientRegistered?.($.payload??{});break;case"hub.client.disconnected":f.onClientDisconnected?.($.payload??{});break;case"session.created":f.onSessionCreated?.($.payload??{});break;case"session.updated":f.onSessionUpdated?.($.payload??{});break;case"session.detached":f.onSessionDetached?.($.payload??{});break}})}}function HM(f){if(typeof f==="string")return f.trim()||void 0;if(!Array.isArray(f))return;return f.map((J)=>{if(J&&typeof J==="object"&&"type"in J&&J.type==="text"&&"text"in J&&typeof J.text==="string")return J.text.trim();return""}).filter(Boolean).join(`
559
- `).trim()||void 0}var NA=120,VH="...";function D4(f){let $=f.trim();if(!$)return"";if(Buffer.byteLength($,"utf8")<=NA)return $;let J=NA-Buffer.byteLength(VH,"utf8");if(J<=0)return VH;let W="";for(let H of $){if(Buffer.byteLength(W+H,"utf8")>J)break;W+=H}return`${W}${VH}`}async function qA(f){let $=f?.sessionId?.trim()||"unknown",J=typeof f?.metadata?.messagesPath==="string"?f.metadata.messagesPath:void 0,H=[...await Q$(J)].reverse().find((X)=>X.role==="assistant"),Q=H?HM(H.content):void 0,Z=f?.workspaceRoot?.trim()||"workspace",j=typeof f?.metadata?.prompt==="string"?f.metadata.prompt.trim():Z;return{title:`Task completed (${$})`,body:D4(Q&&Q.length>0?Q:j.length>0?j:Z),severity:"info"}}import{createSessionId as IM}from"@cline/shared";import{createSessionId as XM}from"@cline/shared";import{createSessionId as jM}from"@cline/shared";function QM(f){switch(f){case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function ZM(f){let $=f.metadata&&typeof f.metadata==="object"?JSON.parse(JSON.stringify(f.metadata)):{};if(f.parentSessionId?.trim())$.parentSessionId=f.parentSessionId;if(f.parentAgentId?.trim())$.parentAgentId=f.parentAgentId;if(f.agentId?.trim())$.agentId=f.agentId;if(f.conversationId?.trim())$.conversationId=f.conversationId;if(f.messagesPath?.trim())$.messagesPath=f.messagesPath;if(f.prompt?.trim())$.prompt=f.prompt;if(f.provider?.trim())$.provider=f.provider;if(f.model?.trim())$.model=f.model;if(f.source?.trim())$.source=f.source;if(typeof f.pid==="number")$.pid=f.pid;return Object.keys($).length>0?$:void 0}function kJ(f,$,J,W){return{sessionId:f.sessionId,workspaceRoot:f.workspaceRoot,cwd:f.cwd,createdAt:Date.parse(f.startedAt),updatedAt:Date.parse(f.updatedAt),createdByClientId:$?.createdByClientId??"hub",status:QM(f.status),participants:$?[...$.participants.values()]:[],metadata:ZM(f),runtimeOptions:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,mode:typeof f.metadata?.mode==="string"?f.metadata.mode:void 0,systemPrompt:typeof f.metadata?.systemPrompt==="string"?f.metadata.systemPrompt:void 0},runtimeSession:f.agentId?{agentId:f.agentId,team:f.teamName?{teamId:f.teamName}:void 0}:void 0,...J?{usage:{...J}}:{},...W?{aggregateUsage:{...W}}:{}}}function u(f,$){return{version:f.version,requestId:f.requestId,ok:!0,...$!==void 0?{payload:$}:{}}}function m(f,$,J){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:$,message:J}}}function IJ(f){return f&&typeof f==="object"&&!Array.isArray(f)?f:void 0}function Of(f){if(typeof f.payload?.sessionId==="string")return f.payload.sessionId.trim();return f.sessionId?.trim()??""}function t$(f,$,J){return{version:"v1",event:f,eventId:jM("hevt_"),sessionId:J,timestamp:Date.now(),payload:$}}async function cf(f,$){let J=await f.sessionHost.getSession($);if(!J)return;let W=await f.sessionHost.getAccumulatedUsage?.($);return kJ(J,f.sessionState.get($),W?.usage,W?.aggregateUsage)}async function df(f,$){let J=await f.sessionHost.getSession($);if(!J)return;let[W,H]=await Promise.all([typeof f.sessionHost.readSessionMessages==="function"?f.sessionHost.readSessionMessages($):[],f.sessionHost.getAccumulatedUsage?.($)]);return W0({session:J,messages:W,usage:H?.usage,aggregateUsage:H?.aggregateUsage})}function mJ(f,$,J,W,H={}){let Q=f.sessionState.get($);if(Q){if(H.interactive!==void 0)Q.interactive=H.interactive;if(!Q.participants.has(J))Q.participants.set(J,{clientId:J,attachedAt:Date.now(),role:W});return Q}let Z={createdByClientId:J,interactive:H.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:W}]])};return f.sessionState.set($,Z),Z}async function RH(f,$){let J=XM("approval_"),W=$.sessionId;if(f.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((Q)=>{f.pendingApprovals.set(J,{sessionId:W,resolve:Q}),f.publish(f.buildEvent("approval.requested",{approvalId:J,sessionId:$.sessionId,agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,toolCallId:$.toolCallId,toolName:$.toolName,inputJson:JSON.stringify($.input??null),policy:$.policy},W))})}function FH(f,$,J){let W=f.pendingApprovals.get($);if(!W)return;return f.pendingApprovals.delete($),W.resolve(J),{sessionId:W.sessionId}}function KH(f,$,J){let W=0;for(let[H,Q]of[...f.pendingApprovals.entries()]){if(!$({approvalId:H,sessionId:Q.sessionId}))continue;f.pendingApprovals.delete(H),Q.resolve({approved:!1,reason:J}),f.publish(f.buildEvent("approval.resolved",{approvalId:H,approved:!1,cancelled:!0,reason:J},Q.sessionId)),W+=1}return W}async function wA(f,$){let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"";if(!f.pendingApprovals.get(J))return m($,"approval_not_found",`Unknown approval: ${J}`);let H=typeof $.payload?.reason==="string"?$.payload.reason:$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)&&typeof $.payload.payload.reason==="string"?$.payload.payload.reason:void 0,Q=$.payload?.approved===!0,Z=FH(f,J,{approved:Q,reason:H});if(!Z)return m($,"approval_not_found",`Unknown approval: ${J}`);return f.publish(f.buildEvent("approval.resolved",{approvalId:J,approved:Q,reason:H},Z.sessionId)),u($,{approvalId:J,approved:Q})}import{createSessionId as BM}from"@cline/shared";function AM(f){if(f instanceof Error)return{name:f.name,message:f.message,stack:f.stack};if(f===void 0)return;return f}var bA={debug:10,info:20,warn:30,error:40,silent:50};function PM(){let f=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if(f==="debug"||f==="info"||f==="warn"||f==="error"||f==="silent")return f;return process.env.VITEST?"error":"info"}function g(f,$,J={}){if(bA[f]<bA[PM()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:f,component:"hub",message:$,...Object.fromEntries(Object.entries(J).map(([H,Q])=>[H,AM(Q)]).filter(([,H])=>H!==void 0))});if(f==="error"||f==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function yH(f,$){let J=$ instanceof Error?$.stack||$.message:String($);g("error",f,{error:J})}async function CA(f,$,J,W,H,Q){let Z=BM("capreq_"),j=performance.now();return g("info","capability.request.start",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:H}),await new Promise((X,A)=>{f.pendingCapabilityRequests.set(Z,{sessionId:$,targetClientId:H,capabilityName:J,onProgress:Q,resolve:(P)=>{if(g(P.ok?"info":"warn","capability.request.end",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:H,ok:P.ok,error:P.error,durationMs:Math.round(performance.now()-j)}),!P.ok){A(Error(P.error||`Capability ${J} was rejected by ${H}.`));return}X(P.payload)}}),f.publish(f.buildEvent("capability.requested",{requestId:Z,targetClientId:H,capabilityName:J,payload:W},$)),g("info","capability.request.published",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:H})})}function EA(f,$){let J=typeof $.payload?.requestId==="string"?$.payload.requestId.trim():"",W=f.pendingCapabilityRequests.get(J);if(!W)return m($,"capability_not_found",`Unknown capability request: ${J}`);if(($.clientId?.trim()||"")!==W.targetClientId)return m($,"capability_wrong_client",`Capability request ${J} is owned by ${W.targetClientId}`);if($.sessionId?.trim()&&$.sessionId.trim()!==W.sessionId)return m($,"capability_wrong_session",`Capability request ${J} belongs to session ${W.sessionId}`);let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{};return W.onProgress?.(Q),u($,{requestId:J})}function B$(f,$,J){let W=0;for(let[H,Q]of[...f.pendingCapabilityRequests.entries()]){if(!$({requestId:H,...Q}))continue;f.pendingCapabilityRequests.delete(H),g("warn","capability.request.cancelled",{requestId:H,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,reason:J}),Q.resolve({ok:!1,error:J}),f.publish(f.buildEvent("capability.resolved",{requestId:H,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,ok:!1,cancelled:!0,error:J},Q.sessionId)),W+=1}return W}async function SA(f,$){let J=typeof $.payload?.sessionId==="string"?$.payload.sessionId.trim():$.sessionId?.trim()||"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName.trim():"",H=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId.trim():"";if(!J||!W||!H)return m($,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Z=await f.requestCapability(J,W,Q,H);return u($,Z)}catch(Q){return m($,"capability_request_failed",Q instanceof Error?Q.message:String(Q))}}function kA(f,$){let J=typeof $.payload?.requestId==="string"?$.payload.requestId.trim():"",W=f.pendingCapabilityRequests.get(J);if(!W)return m($,"capability_not_found",`Unknown capability request: ${J}`);let H=$.clientId?.trim()||"";if(H!==W.targetClientId)return m($,"capability_wrong_client",`Capability request ${J} is owned by ${W.targetClientId}`);if($.sessionId?.trim()&&$.sessionId.trim()!==W.sessionId)return m($,"capability_wrong_session",`Capability request ${J} belongs to session ${W.sessionId}`);f.pendingCapabilityRequests.delete(J);let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:void 0,Z=typeof $.payload?.error==="string"?$.payload.error:void 0,j=$.payload?.ok===!0;return g(j?"info":"warn","capability.respond",{requestId:J,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:H,ok:j,error:Z}),W.resolve({ok:j,payload:Q,error:Z}),f.publish(f.buildEvent("capability.resolved",{requestId:J,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:H,ok:j,payload:Q,error:Z},W.sessionId)),u($,{requestId:J,ok:j})}import{createSessionId as YM}from"@cline/shared";function IA(f,$){let J=$.payload,W=J?.clientId?.trim()||$.clientId?.trim()||YM("client_");return f.clients.set(W,{clientId:W,clientType:J?.clientType??"unknown",displayName:J?.displayName,actorKind:J?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:J?.transport??"native",capabilities:J?.capabilities??[],metadata:J?.metadata,workspaceContext:J?.workspaceContext}),f.publish(f.buildEvent("hub.client.registered",{clientId:W,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),u($,{clientId:W})}function mA(f,$){let J=$.clientId?.trim(),W=J?f.clients.get(J):void 0;if(!J||!W)return m($,"client_not_found","Client is not registered with this hub.");let H=IJ($.payload?.metadata);if(W.lastSeenAt=Date.now(),H)W.metadata=JSON.parse(JSON.stringify(H));return u($)}function xA(f,$,J){let W=$.clientId?.trim();if(W)f.clients.delete(W),J(W),f.publish(f.buildEvent("hub.client.disconnected",{clientId:W}));return u($)}function gA(f,$){return u($,{clients:[...f.clients.values()]})}var VM=30000;function RM(f){if(f==="aborted")return"run.aborted";if(f==="error"||f==="failed")return"run.failed";return"run.completed"}function FM(f){if(f.finishReason!=="error")return;return f.text.trim()||void 0}function KM(f){let $=typeof f.timeoutMs==="number"?f.timeoutMs:typeof f.timeout_ms==="number"?f.timeout_ms:void 0;if($&&Number.isFinite($)&&$>0)return Math.floor($);let J=typeof f.timeoutSeconds==="number"?f.timeoutSeconds:typeof f.timeout_seconds==="number"?f.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function yM(f,$,J,W){let H=performance.now(),Q=!1,Z={command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:J.sessionId,timeoutMs:W},j=setInterval(()=>{if(Q)return;let P=Math.round(performance.now()-H);g("warn","run.heartbeat",{...Z,elapsedMs:P}),f.publish(f.buildEvent("run.heartbeat",{requestId:$.requestId,elapsedMs:P,...W?{timeoutMs:W}:{}},J.sessionId))},VM),X=f.sessionHost.runTurn(J);X.then((P)=>{if(!Q)return;g("warn","run.late_end",{...Z,elapsedMs:Math.round(performance.now()-H),finishReason:P?.finishReason})},(P)=>{if(!Q)return;g("error","run.late_error",{...Z,elapsedMs:Math.round(performance.now()-H),error:P})});let A;try{if(!W)return await X;return await Promise.race([X,new Promise((P,B)=>{A=setTimeout(()=>{let Y=`Hub run ${$.command} timed out after ${W}ms.`;Q=!0,clearInterval(j),B(Error(Y)),g("error","run.timeout",{...Z,elapsedMs:Math.round(performance.now()-H)}),KH(f,(V)=>V.sessionId===J.sessionId,Y),B$(f,(V)=>V.sessionId===J.sessionId,Y),f.sessionHost.abort(J.sessionId,Y).catch((V)=>{g("error","run.timeout_abort_failed",{...Z,error:V})})},W)})])}finally{if(Q=!0,clearInterval(j),A)clearTimeout(A)}}async function vA(f,$){let J=Of($),W=$.payload&&typeof $.payload==="object"?$.payload:{},H=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!H.trim())return m($,"invalid_session_input","session input requires a prompt string");f.publish(f.buildEvent("run.started",void 0,J));let Q=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Z=Array.isArray(Q?.userFiles)?Q.userFiles.filter((P)=>typeof P==="string"):void 0,j=KM(W);f.suppressNextTerminalEventBySession.set(J,"run.start.reply");let X;try{X=await yM(f,$,{sessionId:J,prompt:H,delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(Q?.userImages)?Q.userImages:void 0,userFiles:Z,timeoutMs:j},j)}catch(P){if(f.suppressNextTerminalEventBySession.get(J)==="run.start.reply")f.suppressNextTerminalEventBySession.delete(J);throw f.publish(f.buildEvent("run.failed",{reason:"error",error:P instanceof Error?P.message:String(P)},J)),P}if(X){let P=await df(f,J),B=FM(X);if(f.publish(f.buildEvent(RM(X.finishReason),{reason:X.finishReason,...B?{error:B}:{},result:X,...P?{snapshot:P}:{}},J)),f.suppressNextTerminalEventBySession.get(J)==="run.start.reply")f.suppressNextTerminalEventBySession.delete(J)}else f.suppressNextTerminalEventBySession.delete(J);let A=await df(f,J);return u($,X||A?{...X?{result:X}:{},...A?{snapshot:A}:{}}:void 0)}async function uA(f,$){let J=Of($),W=typeof $.payload?.reason==="string"?$.payload.reason:"Run was aborted before pending approval or capability request was resolved.";return KH(f,(H)=>H.sessionId===J,W),await f.sessionHost.abort(J,$.payload?.reason),B$(f,(H)=>H.sessionId===J,W),f.publish(f.buildEvent("run.aborted",{reason:W},J)),u($,{applied:!0})}async function cA(f,$){let J=H2($.payload?.payload);if(!J)return m($,"invalid_hook_payload","session.hook requires a valid hook event payload");return await f.sessionHost.dispatchHookEvent(J),u($,{applied:!0})}async function dA(f,$){switch($.type){case"chunk":return;case"agent_event":await UM(f,$);return;case"hook":if($.payload.hookEventName==="tool_call")f.publish(f.buildEvent("tool.started",{toolName:$.payload.toolName},$.payload.sessionId));else if($.payload.hookEventName==="tool_result")f.publish(f.buildEvent("tool.finished",{toolName:$.payload.toolName},$.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:$.payload.sessionId,summary:$.payload.summary,lastEvent:$.payload.lifecycle};f.publish(f.buildEvent("team.progress",J,$.payload.sessionId));return}case"pending_prompts":f.publish(f.buildEvent("session.pending_prompts",{sessionId:$.payload.sessionId,prompts:$.payload.prompts},$.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:$.payload.id,prompt:$.payload.prompt,delivery:$.payload.delivery,attachmentCount:$.payload.attachmentCount};f.publish(f.buildEvent("session.pending_prompt_submitted",{sessionId:$.payload.sessionId,prompt:J},$.payload.sessionId));return}case"session_snapshot":f.publish(f.buildEvent("session.updated",{sessionId:$.payload.sessionId,snapshot:$.payload.snapshot},$.payload.sessionId));return;case"status":{let[J,W]=await Promise.all([cf(f,$.payload.sessionId),df(f,$.payload.sessionId)]);if(J)f.publish(f.buildEvent("session.updated",{session:J,...W?{snapshot:W}:{}},$.payload.sessionId));return}case"ended":await GM(f,$);return;default:return}}async function UM(f,$){let{sessionId:J,event:W}=$.payload;if(W.type==="iteration_start"){f.publish(f.buildEvent("iteration.started",{iteration:W.iteration},J));return}if(W.type==="iteration_end"){f.publish(f.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},J));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){f.publish(f.buildEvent("assistant.delta",{text:W.text},J));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){f.publish(f.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)f.publish(f.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},J));return}if(W.contentType==="tool"){f.publish(f.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},J));return}}if(W.type==="content_end"){switch(W.contentType){case"text":f.publish(f.buildEvent("assistant.finished",{text:W.text},J));break;case"reasoning":f.publish(f.buildEvent("reasoning.finished",{reasoning:W.reasoning},J));break;case"tool":f.publish(f.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},J));break}return}if(W.type==="usage"){let H;try{H=await f.sessionHost.getAccumulatedUsage?.(J)}catch{H=void 0}f.publish(f.buildEvent("usage.updated",{sessionId:J,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:H?.usage,aggregateUsage:H?.aggregateUsage,agent:{kind:$.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:$.payload.teamAgentId,teamRole:$.payload.teamRole}},J));return}if(W.type==="done")f.publish(f.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},J))}async function GM(f,$){let J=f.suppressNextTerminalEventBySession.get($.payload.sessionId),W=J===$.payload.reason||J==="run.start.reply";if(W)f.suppressNextTerminalEventBySession.delete($.payload.sessionId);let[H,Q]=await Promise.all([cf(f,$.payload.sessionId),df(f,$.payload.sessionId)]);if($.payload.reason==="completed"){let Z=await qA(H);f.publish(f.buildEvent("ui.notify",Z,$.payload.sessionId))}if(W)return;f.publish(f.buildEvent($.payload.reason==="aborted"?"run.aborted":$.payload.reason==="error"||$.payload.reason==="failed"?"run.failed":"run.completed",{reason:$.payload.reason,...Q?{snapshot:Q}:{}},$.payload.sessionId))}import{createSessionId as aA,parseRuntimeConfigExtensions as tA}from"@cline/shared";var iA={};N(iA,{SessionVersioningService:()=>Y$,SessionVersioningError:()=>zf});var pA={};N(pA,{trimMessagesToCheckpoint:()=>lA,trimMessagesBeforeCheckpoint:()=>GH,readSessionCheckpointHistory:()=>_4,createRestoredCheckpointMetadata:()=>UH,createCheckpointRestorePlan:()=>TH,applyCheckpointToWorktree:()=>DH});import{execFile as TM}from"node:child_process";import{promisify as DM}from"node:util";var B2=DM(TM);function _4(f){let $=f?.metadata?.checkpoint&&typeof f.metadata.checkpoint==="object"&&!Array.isArray(f.metadata.checkpoint)?f.metadata.checkpoint:void 0;return(Array.isArray($?.history)?$.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let H=String(W.ref??"").trim(),Q=Number(W.createdAt??0),Z=Number(W.runCount??0);if(H.length===0||!Number.isFinite(Q)||!Number.isInteger(Z)||Z<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:H,createdAt:Q,runCount:Z,...j?{kind:j}:{}}]})}function UH(f,$){let J=_4(f).filter((H)=>H.runCount<=$),W=J.at(-1);return W?{latest:W,history:J}:void 0}function _M(f,$){return f.reduce((J,W)=>{if(W.runCount>$)return J;if(!J||W.runCount>J.runCount)return W;return J},void 0)}function rA(f,$){let J=0;for(let W=0;W<f.length;W+=1){let H=f[W];if(H?.role!=="user")continue;if(("metadata"in H&&H.metadata&&typeof H.metadata==="object"?H.metadata:void 0)?.kind==="recovery_notice")continue;if(J+=1,J===$)return W}throw Error(`Could not find user message for checkpoint run ${$}`)}function lA(f,$){let J=rA(f,$);return f.slice(0,J+1)}function GH(f,$){let J=rA(f,$);return f.slice(0,J)}function TH(f){let $=f.checkpointRunCount;if(!Number.isInteger($)||$<1)throw Error("checkpointRunCount must be a positive integer");let J=_M(_4(f.session),$);if(!J)throw Error(`No checkpoint found at or before run ${$} in session ${f.session.sessionId}`);let W=(f.cwd?.trim()||f.session.cwd||f.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:J,cwd:W,...f.restoreMessages!==!1?{messages:lA(f.messages??[],$)}:{}}}async function DH(f,$){if((await B2("git",["-C",f,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${f} is not a git repository`);if(await B2("git",["-C",f,"cat-file","-e",`${$.ref}^{commit}`],{windowsHide:!0}),await B2("git",["-C",f,"reset","--hard"],{windowsHide:!0}),await B2("git",["-C",f,"clean","-fd"],{windowsHide:!0}),$.kind==="commit"){await B2("git",["-C",f,"reset","--hard",$.ref],{windowsHide:!0});return}await B2("git",["-C",f,"stash","apply",$.ref],{windowsHide:!0})}class zf extends Error{code;constructor(f,$){super($);this.code=f;this.name="SessionVersioningError"}}function MM(f){let $=f.sessionId.trim();if(!$)throw new zf("invalid_restore","sessionId is required");if(!f.restoreMessages&&!f.restoreWorkspace)throw new zf("invalid_restore","restore.messages or restore.workspace must be true");if(f.restoreMessages&&f.requiresStart)throw new zf("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger(f.checkpointRunCount)||f.checkpointRunCount<1)throw new zf("invalid_restore","checkpointRunCount must be a positive integer");return $}class Y${async restoreCheckpoint(f){let $=f.restore?.messages!==!1,J=f.restore?.workspace!==!1,W=MM({sessionId:f.sessionId,restoreMessages:$,restoreWorkspace:J,requiresStart:f.start===void 0,checkpointRunCount:f.checkpointRunCount}),H=await f.getSession(W);if(!H)throw new zf("session_not_found",`Session ${W} not found`);let Q=$?await f.readMessages(W):void 0;if($&&Q?.length===0)throw new zf("session_messages_not_found",`No messages found for session ${W}`);let Z=TH({session:H,messages:Q,checkpointRunCount:f.checkpointRunCount,cwd:f.cwd,restoreMessages:$});if(J)await(f.applyWorkspaceCheckpoint??DH)(Z.cwd,Z.checkpoint);let j=W0({session:H,messages:Q});if(!$)return{checkpoint:Z.checkpoint,sourceSnapshot:j};let X=UH(H,f.checkpointRunCount),A=f.restore?.omitCheckpointMessageFromSession?GH(Q??[],f.checkpointRunCount):Z.messages??[],P={sourceSession:H,sourceMessages:Q,sourceSnapshot:j,plan:Z,restoredCheckpointMetadata:X,initialMessages:A,restoreMessages:$,restoreWorkspace:J,checkpointRunCount:f.checkpointRunCount};if(!f.start||!f.startSession)throw new zf("invalid_restore","start is required when restore.messages is true");let B=f.buildStartInput?await f.buildStartInput(P,f.start):f.start,Y=await f.startSession(B),V=f.getStartedSessionId?.(Y);if(V)await(f.retainCheckpointRefs??a7)(Z.cwd,V,X?.history??[]);let R=V&&f.readRestoredSession?await f.readRestoredSession(V):void 0;return{sessionId:V,startResult:Y,messages:Z.messages,checkpoint:Z.checkpoint,sourceSnapshot:j,...R?{restoredSnapshot:W0({session:R,messages:A})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as Gm,HUB_COMPACTION_CAPABILITY as Tm,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Dm,HUB_HOOK_CAPABILITY_PREFIX as _m,HUB_MISTAKE_LIMIT_CAPABILITY as Mm,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Lm,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as hm,isHubToolExecutorName as LM}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as wm,HUB_COMPACTION_CAPABILITY as bm,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Cm,HUB_HOOK_CAPABILITY_PREFIX as Em,HUB_MISTAKE_LIMIT_CAPABILITY as Sm,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as km,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Im}from"@cline/shared";var hM=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function s$(f){return f&&typeof f==="object"&&!Array.isArray(f)?JSON.parse(JSON.stringify(f)):void 0}function OM(f,$){let J=typeof f.name==="string"?f.name.trim():"",W=typeof f.description==="string"?f.description:"",H=typeof f.capabilityName==="string"?f.capabilityName.trim():"",Q=s$(f.inputSchema);if(!J||!W||!Q||!H||$.has(H))return;return $.add(H),{kind:"tool",capabilityName:H,name:J,description:W,inputSchema:Q,...s$(f.lifecycle)?{lifecycle:s$(f.lifecycle)}:{}}}function MH(f){if(!Array.isArray(f))return[];let $=[],J=new Set;for(let W of f){if(!W||typeof W!=="object"||Array.isArray(W))continue;let H=W,Q=H.kind,Z=typeof H.capabilityName==="string"?H.capabilityName.trim():"";if(!Z||J.has(Z))continue;if(Q==="tool"){let j=OM(H,J);if(j)$.push(j);continue}if(Q==="toolExecutor"){let j=H.executor;if(!LM(j))continue;J.add(Z),$.push({kind:"toolExecutor",capabilityName:Z,executor:j});continue}if(Q==="hook"){let j=typeof H.name==="string"?H.name.trim():"";if(!j)continue;J.add(Z),$.push({kind:"hook",capabilityName:Z,name:j});continue}if(Q==="compaction"){J.add(Z),$.push({kind:"compaction",capabilityName:Z,...s$(H.config)?{config:s$(H.config)}:{}});continue}if(Q==="checkpoint"){J.add(Z),$.push({kind:"checkpoint",capabilityName:Z,...s$(H.config)?{config:s$(H.config)}:{}});continue}if(Q==="mistakeLimit"){J.add(Z),$.push({kind:"mistakeLimit",capabilityName:Z});continue}if(Q==="userInstructionService")J.add(Z),$.push({kind:"userInstructionService",capabilityName:Z})}return $}function nA(f){return{agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,metadata:f.metadata}}function zM(f){return Object.hasOwn(f,"update")?f.update:f}function M4(f){return f.trim().replace(/^\/+/,"").toLowerCase()}function NM(f){let $=(f??[]).map(M4).filter(Boolean);return $.length>0?new Set($):void 0}function qM(f,$,J){if(!J)return!0;let W=M4(f),H=M4($),Q=W.includes(":")?W.split(":").at(-1)??W:W,Z=H.includes(":")?H.split(":").at(-1)??H:H;return J.has(W)||J.has(H)||J.has(Q)||J.has(Z)}function _H(f,$){let J=NM($);return f.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>qM(W.id,W.name,J))}function wM(f,$){let J=async(W,H)=>{let Q=M4(W),j=_H(f,$).filter((Y)=>Y.id===Q||M4(Y.name)===Q||Y.id.endsWith(`:${Q}`)).filter((Y)=>!Y.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((Y)=>Y.id).join(", ")}`:`Skill "${W}" not found.`;let X=j[0].skill,A=H?.trim(),P=A?`
560
- <command-args>${A}</command-args>`:"",B=X.description?.trim()?`Description: ${X.description.trim()}
559
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,s()])}}function A_($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let f=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(f==="local"||f==="hub"||f==="remote")return f;return"auto"}var y4,T4;function B_($,f){if($!=="auto"&&$!=="hub")return;if(f.hub?.endpoint?.trim())return;kJ(f.hub?.workspaceRoot?.trim()||f.hub?.cwd?.trim()||process.cwd())}async function K_($){await $.reconcileDeadSessions?.().catch(()=>{})}function rY($){try{let f=new H$;return f.init(),new V$(f,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(f){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),pY($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:f,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new LQ(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function lY($,f,J){return new A$({sessionService:J??$.sessionService??rY($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:f,fetch:$.fetch})}async function yQ($){if(y4)return y4;if(T4)return await T4;return T4=(async()=>{return y4=rY($),await K_(y4),y4})().finally(()=>{T4=void 0}),await T4}async function Y2($){let f=e1($.distinctId);$.telemetry?.setDistinctId(f);let J=A_($);if(B_(J,$),J==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new Z2({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(J==="hub"){let Q=$.hub?.endpoint?.trim(),Z=Q||await t1({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!Z)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:Z,explicitEndpoint:Q||void 0}),new S$({url:Z,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(J==="auto"){let Q=await R4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let Z=new S$({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await Z.connect(),Z}catch(W){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:W}),pY($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:W,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),lY($,f)}return lY($,f)}class N4{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,f,J,Q,Z,W,j,X,H){this.clientName=f,this.runtimeAddress=J,this.host=$,this.prepare=Q,this.capabilities=Z,this.logger=W,this.telemetry=j,this.distinctId=X,this.settings=KH($),this.pendingPrompts=GH($),this.automation=new Y7(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new A4({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:TX(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:NX({host:$,getExtensionContext:()=>VJ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((Y)=>{if(Y.type!=="ended")return;this.disposeSessionBootstrap(Y.payload.sessionId)})}static async create($={}){let f=F0($.capabilities),J=await Y2({...$,capabilities:f}),Q=yX($.automation),Z=new N4(J,$.clientName,J.runtimeAddress,$.prepare,f,$.logger,$.telemetry,$.distinctId,Q?{...Q,logger:$.logger}:void 0);if(Q&&Q.autoStart!==!1)await Z.automation.start();return Z}async disposeSessionBootstrap($){let f=this.activeSessionBootstraps.get($);if(!f)return;this.activeSessionBootstraps.delete($),await Promise.resolve(f.dispose?.())}async start($){let f=FH($),J=await this.prepare?.(f);try{let Q=J?await J.applyToStartSessionInput(f):f,Z=await this.host.startSession(O7(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(W)=>VJ({automationService:this.automationService,automation:this.automation,context:W,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(Z.sessionId))this.activeSessionBootstraps.set(Z.sessionId,J);else await Promise.resolve(J.dispose?.());return DH({input:Q,sessionId:Z.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),Z}catch(Q){throw await Promise.resolve(J?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let f=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(f.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await CJ(this.host,$);list=async($=200,f={})=>await this.listHistory({...f,limit:$});delete=async($)=>{let f=await this.host.deleteSession($);if(f)await this.disposeSessionBootstrap($);return f};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let f=$.start?O7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>VJ({automationService:this.automationService,automation:this.automation,context:J,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:f})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,f){return this.host.subscribe($,f)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var aY={};q(aY,{resolvePluginConfigSearchPaths:()=>B8,resolveAndLoadAgentPlugins:()=>hf,resolveAgentPluginPaths:()=>h1,loadAgentPluginsFromPathsWithDiagnostics:()=>N$,loadAgentPluginsFromPaths:()=>M6,loadAgentPluginFromPath:()=>A8,discoverPluginModulePaths:()=>K8});var oY={};q(oY,{toHookConfigFileName:()=>F8,runSubprocessEvent:()=>V2,runHook:()=>B2,resolveHooksConfigSearchPaths:()=>G8,parseHookEventPayload:()=>A2,mergeAgentHooks:()=>x1,listHookConfigFiles:()=>s$,createSubprocessHooks:()=>rJ,createHookConfigFileHooks:()=>D8,createHookConfigFileExtension:()=>xf,createHookAuditHooks:()=>If,createAgentHooksExtension:()=>bf,HookEventPayloadSchema:()=>pJ,HookEventNameSchema:()=>lJ,HookConfigFileName:()=>kf,HOOK_CONFIG_FILE_EVENT_MAP:()=>P8,HOOKS_CONFIG_DIRECTORY_NAME:()=>S6});import{HookEventNameSchema as lJ,HookEventPayloadSchema as pJ,parseHookEventPayload as A2,resolveHookSessionContext as L_}from"@cline/shared";import{z as ff}from"zod";import{spawn as G_}from"node:child_process";import{augmentNodeCommandForDebug as P_,withResolvedClineBuildEnv as F_}from"@cline/shared";function D_($){let f=$.trim();if(!f)return{};let Q=f.split(`
560
+ `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse subprocess stdout JSON"}}}function R_($,f){let J=$ instanceof Error?$:Error(String($)),Q=J,Z=f.join(" ");if(Q.code==="EACCES")return Error(`Failed to execute hook command "${Z}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${Z}": ${J.message}`)}async function U_($,f){let J=$.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,Z)=>{let W=(j)=>{J.off("error",W);let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j)};J.once("error",W),J.end(f,(j)=>{if(J.off("error",W),j){let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j);return}Q()})})}async function V2($,f){let J=P_(f.command,{env:f.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!f.detached,Z=G_(J[0],J.slice(1),{cwd:f.cwd,env:F_(f.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q}),W=new Promise((B)=>{Z.once("spawn",()=>{try{f.onSpawn?.({command:J,pid:Z.pid??void 0,detached:Q})}catch{}B()})}),j=new Promise((B,K)=>{Z.once("error",(G)=>{K(R_(G,J))})});if(await U_(Z,JSON.stringify($)),Q){await Promise.race([W,j]),Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let X="",H="",Y=!1,V;Z.stdout.on("data",(B)=>{X+=B.toString()}),Z.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Z.kill("SIGKILL")},f.timeoutMs);Z.once("close",(K)=>{if(V)clearTimeout(V);let{parsedJson:G,parseError:R}=D_(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([A,j])}var O_=ff.object({contextModification:ff.string().optional(),cancel:ff.boolean().optional(),review:ff.boolean().optional(),errorMessage:ff.string().optional(),context:ff.string().optional(),overrideInput:ff.unknown().optional()}).passthrough();var z_=["agent","hook"];async function B2($,f={}){let J=f.command??z_;return await V2($,{command:J,cwd:f.cwd,env:f.env,detached:f.detached,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn})}function sY($){return $ instanceof Error?$:Error(String($))}function __($){if(!$||typeof $!=="object")return;let f=O_.safeParse($);if(!f.success)return;let J=f.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let Z=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"&&J.errorMessage.length>0?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Z,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function tY($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))if(typeof Q==="string")f[J]=Q;else f[J]=JSON.stringify(Q);return f}function h$($,f,J){let Q=J.env??process.env,Z=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",W=J.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:f.conversationId,sessionContext:L_(J.sessionContext,{hookName:$,conversationId:f.conversationId,agentId:f.agentId,parentAgentId:f.parentAgentId}),workspaceRoots:W?[W]:[],workspaceInfo:J.workspaceInfo,userId:Z,agent_id:f.agentId,parent_agent_id:f.parentAgentId}}function y_($){return{name:$.name,message:$.message,stack:$.stack}}function T_($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function N_($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function M_($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function q_($){return{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}function w_($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}async function Jf($,f){try{let J=await B2($,{command:f.command,cwd:f.cwd,env:f.env,detached:!0,onSpawn:f.onSpawn});f.onDispatch?.({payload:$,result:J,detached:!0})}catch(J){f.onDispatchError?.(sY(J),$)}}function rJ($={}){return{hooks:{beforeRun:async(X)=>{let H=N_(X);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let V={...h$("agent_resume",H,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await Jf(V,$)}else{let V={...h$("agent_start",H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await Jf(V,$)}return},beforeTool:async(X)=>{let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...h$("tool_call",H,$),hookName:"tool_call",iteration:X.snapshot.iteration,tool_call:{id:X.toolCall.toolCallId,name:X.toolCall.toolName,input:X.input},preToolUse:{toolName:X.toolCall.toolName,parameters:tY(X.input)}};try{let V=await B2(Y,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:Y,result:V,detached:!1}),V?.timedOut)throw Error("tool_call hook command timed out");if(V?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${V.parseError}`);return w_(__(V?.parsedJson))}catch(V){$.onDispatchError?.(sY(V),Y);return}},afterTool:async(X)=>{let H=q_(X),Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},V={...h$("tool_result",Y,$),hookName:"tool_result",iteration:X.snapshot.iteration,tool_result:H,postToolUse:{toolName:H.name,parameters:tY(H.input),result:typeof H.output==="string"?H.output:JSON.stringify(H.output),success:!H.error,executionTimeMs:H.durationMs}};await Jf(V,$);return},afterRun:async({snapshot:X,result:H})=>{let Y={agentId:X.agentId,conversationId:X.conversationId??X.runId??X.agentId,parentAgentId:X.parentAgentId??null};if(H.status==="completed"){let B={...h$("agent_end",Y,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}};await Jf(B,$);return}let V=H.status==="aborted"||T_(H.error?.message)?"agent_abort":"agent_error",A=V==="agent_error"?{...h$(V,Y,$),hookName:V,iteration:H.iterations,error:y_(H.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...h$(V,Y,$),hookName:V,reason:H.error?.message,taskCancel:{taskMetadata:{}}};await Jf(A,$)},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...h$("prompt_submit",H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:M_(X.message.content),attachments:[]}};await Jf(Y,$)}},shutdown:async({agentId:X,conversationId:H,parentAgentId:Y,reason:V})=>{let A={...h$("session_shutdown",{agentId:X,conversationId:H,parentAgentId:Y},$),hookName:"session_shutdown",reason:V};await Jf(A,$)}}}var $A={};q($A,{writeHubDiscovery:()=>hJ,withHubStartupLock:()=>bJ,verifyHubConnection:()=>W$,truncateNotificationBody:()=>S4,toHubHealthUrl:()=>i7,stopLocalHubServerGracefully:()=>WQ,startHubWebSocketServer:()=>Wf,startHubServer:()=>oV,spawnDetachedHubServerWithRetry:()=>f2,spawnDetachedHubServer:()=>e7,sendHubCommand:()=>ZV,restartLocalHubIfIdleAfterStartupTimeout:()=>xJ,resolveWorkspaceHubOwnerContext:()=>QY,resolveSharedHubOwnerContext:()=>Y0,resolveHubUrl:()=>qQ,resolveHubOwnerContext:()=>w$,resolveHubEndpointOptions:()=>c0,resolveHubBuildId:()=>Y1,resolveDefaultHubPort:()=>$2,resolveDefaultHubPathname:()=>o7,resolveDefaultHubHost:()=>s7,resolveCompatibleLocalHubUrl:()=>R4,resolveClineDir:()=>eH,resolveClineDataDir:()=>G4,requestHubShutdown:()=>D4,rememberRecoverableLocalHubUrl:()=>V1,readHubDiscovery:()=>A0,probeHubServer:()=>R0,probeHubConnection:()=>QV,prewarmDetachedHubServer:()=>kJ,normalizeHubWebSocketUrl:()=>A1,isHubReconnectableTransportError:()=>QQ,isHubCommandTimeoutError:()=>IJ,isDiscoveryFilePresent:()=>fY,ensureHubWebSocketServer:()=>J5,ensureHubServer:()=>eV,ensureDetachedHubServer:()=>WY,ensureCompatibleLocalHubUrl:()=>t1,createLocalHubScheduleRuntimeHandlers:()=>Q5,createInMemoryHubOwnerContext:()=>$Y,createHubServerUrl:()=>t0,createHubAuthToken:()=>EJ,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,connectToHub:()=>tJ,clearHubDiscovery:()=>v0,NodeHubClient:()=>s0,NativeHubTransportAdapter:()=>k4,HubUIClient:()=>SQ,HubTransportError:()=>z0,HubSessionClient:()=>wQ,HubServerTransport:()=>U2,HubScheduleService:()=>G2,HubScheduleCommandService:()=>K2,HubCommandError:()=>J2,DEFAULT_HUB_PORT:()=>a7,DEFAULT_HUB_PATHNAME:()=>t7,DEFAULT_HUB_HOST:()=>n7,BrowserWebSocketHubAdapter:()=>b4});import{createSessionId as S_}from"@cline/shared";function u0($,f){return{version:$.version,requestId:$.requestId,ok:!0,payload:f}}function eY($,f,J){return{version:$.version,requestId:$.requestId??S_("hubreq_"),ok:!1,error:{code:f,message:J}}}class K2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return u0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return u0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return u0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return u0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return u0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return u0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return u0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return u0($,{execution:await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return u0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return u0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return u0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return u0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return eY($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(f){return eY($,"schedule_command_failed",f instanceof Error?f.message:String(f))}}toCreateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:f}}toUpdateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:f}}}function nJ($){return $?new Date($).getTime():void 0}function C_($){let f=$.metadata?{...$.metadata}:void 0;if(f)delete f.__hubScheduleCreatedBy,delete f.__hubScheduleCwd,delete f.__hubRuntimeOptions;return f}function iJ($){let f=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof f?.__hubScheduleCwd==="string"?f.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:nJ($.nextRunAt),lastRunAt:nJ($.lastRunAt),createdBy:typeof f?.__hubScheduleCreatedBy==="string"?f.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:f?.__hubRuntimeOptions&&typeof f.__hubRuntimeOptions==="object"&&!Array.isArray(f.__hubRuntimeOptions)?f.__hubRuntimeOptions:void 0,metadata:C_($)}}function E_($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function $V($,f){return{executionId:$.runId,scheduleId:f,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:nJ($.startedAt),endedAt:nJ($.completedAt),status:E_($.status),errorMessage:$.error}}class G2{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new V4({dbPath:$.dbPath}),this.materializer=new W4({store:this.store}),this.runner=new j4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(S7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return iJ(this.store.createHubSchedule($))}getSchedule($){let f=this.store.getHubSchedule($);return f?iJ(f):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((f)=>iJ(f))}updateSchedule($,f){if(f.cronPattern!==void 0)S7(f.cronPattern);let J=this.store.getHubSchedule($);if(!J)return;let Q=f.workspaceRoot!==void 0?f.workspaceRoot.trim():J.workspaceRoot;if((f.enabled??J.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let W=this.store.updateHubSchedule($,{...f,scheduleId:$});return W?iJ(W):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;await this.runner.tick();let J=this.store.getRun(f.runId)??f;return $V(J,$)}listScheduleExecutions($){let f=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,J={specId:f?.specId,limit:$.limit};return this.store.listRuns(J).map((Z)=>{let W=f??this.store.getSpec(Z.specId);if(!W||W.source!=="hub-schedule")return;return $V(Z,W.externalId)}).filter((Z)=>{if(!Z)return!1;return!$.status||Z.status===$.status})}getScheduleStats($){let f=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(f.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,Q=0,Z=0,W;for(let j of f){if(j.status==="success"||j.status==="completed")J+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)Z+=j.endedAt-j.startedAt,Q+=1}return{totalRuns:f.length,successRate:J/f.length,avgDurationSeconds:Q>0?Z/Q/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let f=this.store.getSpec($.specId);if(!f||f.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:f.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:f.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+f.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let f={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(f).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,Q)=>String(J.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:J,nextRunAt:Q})=>({scheduleId:J.externalId,name:J.title,nextRunAt:Q}))}}aJ();function fy($,f){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(J?`Failed to connect to hub at ${f} (${J} event before socket open).`:`Failed to connect to hub at ${f}.`)}var Jy="cline-hub-auth.";function Qy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Zy($,f){let J=new URL($),Q=new URL(f);return J.search="",J.hash="",Q.search="",Q.hash="",J.toString()===Q.toString()}async function Wy($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=Y0(),Q=await A0(J.discoveryPath);if(Q?.url&&Zy($.toString(),Q.url))return Q.authToken;return}async function qQ($={}){let f=c0($);if(!Qy($)){let J=Y0(),Q=await A0(J.discoveryPath);if(Q?.url)return Q.url}return t0(f.host,f.port,f.pathname)}async function tJ($){return await new Promise((f,J)=>{(async()=>{let Q=new URL($),Z=await Wy(Q);Q.hash="";let W=new WebSocket(Q.toString(),Z?[`${Jy}${Z}`]:void 0),j=new Map,X=0;W.addEventListener("open",()=>{f({send(H){let Y=H.requestId??`hub-client-${++X}`;return new Promise((V,A)=>{j.set(Y,{resolve:V,reject:A});let B={kind:"command",envelope:{...H,requestId:Y}};W.send(JSON.stringify(B))})},close(){W.close()}})}),W.addEventListener("message",(H)=>{let Y=JSON.parse(String(H.data));if(Y.kind==="reply"&&Y.envelope.requestId){let V=j.get(Y.envelope.requestId);if(V)j.delete(Y.envelope.requestId),V.resolve(Y.envelope)}}),W.addEventListener("close",()=>{for(let H of j.values())H.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(H)=>{J(fy(H,$))})})().catch(J)})}async function QV($){try{return(await tJ($)).close(),!0}catch{return!1}}async function ZV($,f){let J=await qQ($),Q=await tJ(J);try{return await Q.send({version:f.version??"v1",clientId:f.clientId??"hub-client",...f})}finally{Q.close()}}function o0($){return $?JSON.parse(JSON.stringify($)):{}}function sJ($){let f=$?.session&&typeof $.session==="object"?$.session:void 0;if(!f)return;let J=f.metadata&&typeof f.metadata==="object"?o0(f.metadata):void 0;return{sessionId:typeof f.sessionId==="string"?f.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function WV($,f){return $.error?.message??`hub command failed: ${f}`}function jy($){let f=o0($);if(typeof f.error==="string"&&f.error.trim())return{...f,error:f.error.trim()};let J=f.result&&typeof f.result==="object"?f.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...f,error:J.text.trim()};let Q=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...f,error:Q.message.trim()};return f}function Xy($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))throw Error("hub checkpoint restore returned no checkpoint");let J=f;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function Hy($){let f=$.sessionId?.trim();if(!f)return;switch($.event){case"iteration.started":return{sessionId:f,eventType:"runtime.chat.iteration_start",payload:o0($.payload)};case"iteration.finished":return{sessionId:f,eventType:"runtime.chat.iteration_end",payload:o0($.payload)};case"assistant.delta":return{sessionId:f,eventType:"runtime.chat.text_delta",payload:o0($.payload)};case"usage.updated":return{sessionId:f,eventType:"runtime.chat.usage",payload:o0($.payload)};case"tool.started":return{sessionId:f,eventType:"runtime.chat.tool_call_start",payload:o0($.payload)};case"tool.finished":return{sessionId:f,eventType:"runtime.chat.tool_call_end",payload:o0($.payload)};case"approval.requested":return{sessionId:f,eventType:"approval.requested",payload:o0($.payload)};case"run.aborted":return{sessionId:f,eventType:"runtime.chat.aborted",payload:o0($.payload)};case"run.failed":return{sessionId:f,eventType:"runtime.chat.failed",payload:jy($.payload)};case"run.completed":return{sessionId:f,eventType:"runtime.chat.completed",payload:o0($.payload)};default:return}}class wQ{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new s0({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let f=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),J=sJ(f.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession($,f,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:f.prompt,mode:f.config.mode,attachments:f.attachments,delivery:f.delivery,timeoutSeconds:f.config.timeoutSeconds},$,J)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let f=await this.client.command("session.get",void 0,$);return sJ(f.payload)}async readMessages($){let f=$.trim();if(!f)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Error(WV(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,Z=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},f);if(!Z.ok)throw Error(WV(Z,"session.restore"));let W=sJ(Z.payload);if(J&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(Z.payload?.messages)?Z.payload.messages:void 0,X=Xy(Z.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let f=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(f.payload?.sessions)?f.payload?.sessions:[]).map((Q)=>sJ({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,f=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:f})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,f){let J=new Set(($.sessionIds??[]).map((Z)=>Z.trim()).filter(Boolean)),Q=this.client.subscribe((Z)=>{let W=Hy(Z);if(!W)return;if(J.size>0&&!J.has(W.sessionId))return;f.onEvent?.(W)});return this.ensureMetadataApplied().catch((Z)=>{f.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}streamTeamProgress($,f){let J=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;f.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{f.onError?.(Q instanceof Error?Q:Error(String(Q)))}),J}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.list");return Array.isArray(f.payload?.schedules)?f.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...f})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,f){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:$,limit:f});return Array.isArray(J.payload?.executions)?J.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(f.payload?.upcoming)?f.payload?.upcoming:[]}}class SQ{client;constructor($){this.client=new s0({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let f=await this.client.command("session.list",{limit:$});return Array.isArray(f.payload?.sessions)?f.payload.sessions:[]}subscribeUI($){return this.client.subscribe((f)=>{switch(f.event){case"ui.notify":$.onNotify?.(f.payload);break;case"ui.show_window":$.onShowWindow?.(f.payload);break;case"hub.client.registered":$.onClientRegistered?.(f.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(f.payload??{});break;case"session.created":$.onSessionCreated?.(f.payload??{});break;case"session.updated":$.onSessionUpdated?.(f.payload??{});break;case"session.detached":$.onSessionDetached?.(f.payload??{});break}})}}function Yy($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((J)=>{if(J&&typeof J==="object"&&"type"in J&&J.type==="text"&&"text"in J&&typeof J.text==="string")return J.text.trim();return""}).filter(Boolean).join(`
561
+ `).trim()||void 0}var jV=120,CQ="...";function S4($){let f=$.trim();if(!f)return"";if(Buffer.byteLength(f,"utf8")<=jV)return f;let J=jV-Buffer.byteLength(CQ,"utf8");if(J<=0)return CQ;let Q="";for(let Z of f){if(Buffer.byteLength(Q+Z,"utf8")>J)break;Q+=Z}return`${Q}${CQ}`}async function XV($){let f=$?.sessionId?.trim()||"unknown",J=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,Z=[...await H1(J)].reverse().find((H)=>H.role==="assistant"),W=Z?Yy(Z.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",X=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${f})`,body:S4(W&&W.length>0?W:X.length>0?X:j),severity:"info"}}import{captureSdkError as f5,createSessionId as uy}from"@cline/shared";import{createSessionId as Ky}from"@cline/shared";import{createSessionId as By}from"@cline/shared";function Vy($){switch($){case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function Ay($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())f.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())f.parentAgentId=$.parentAgentId;if($.agentId?.trim())f.agentId=$.agentId;if($.conversationId?.trim())f.conversationId=$.conversationId;if($.messagesPath?.trim())f.messagesPath=$.messagesPath;if($.prompt?.trim())f.prompt=$.prompt;if($.provider?.trim())f.provider=$.provider;if($.model?.trim())f.model=$.model;if($.source?.trim())f.source=$.source;if(typeof $.pid==="number")f.pid=$.pid;return Object.keys(f).length>0?f:void 0}function oJ($,f,J,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:f?.createdByClientId??"hub",status:Vy($.status),participants:f?[...f.participants.values()]:[],metadata:Ay($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...J?{usage:{...J}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function c($,f){return{version:$.version,requestId:$.requestId,ok:!0,...f!==void 0?{payload:f}:{}}}function x($,f,J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:f,message:J}}}function eJ($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function M0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function Qf($,f,J){return{version:"v1",event:$,eventId:By("hevt_"),sessionId:J,timestamp:Date.now(),payload:f}}async function d0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let Q=await $.sessionHost.getAccumulatedUsage?.(f);return oJ(J,$.sessionState.get(f),Q?.usage,Q?.aggregateUsage)}async function l0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let[Q,Z]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(f):[],$.sessionHost.getAccumulatedUsage?.(f)]);return j$({session:J,messages:Q,usage:Z?.usage,aggregateUsage:Z?.aggregateUsage})}function $5($,f,J,Q,Z={}){let W=$.sessionState.get(f);if(W){if(Z.interactive!==void 0)W.interactive=Z.interactive;if(!W.participants.has(J))W.participants.set(J,{clientId:J,attachedAt:Date.now(),role:Q});return W}let j={createdByClientId:J,interactive:Z.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(f,j),j}async function EQ($,f){let J=Ky("approval_"),Q=f.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((W)=>{$.pendingApprovals.set(J,{sessionId:Q,resolve:W}),$.publish($.buildEvent("approval.requested",{approvalId:J,sessionId:f.sessionId,agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,toolCallId:f.toolCallId,toolName:f.toolName,inputJson:JSON.stringify(f.input??null),policy:f.policy},Q))})}function hQ($,f,J){let Q=$.pendingApprovals.get(f);if(!Q)return;return $.pendingApprovals.delete(f),Q.resolve(J),{sessionId:Q.sessionId}}function bQ($,f,J){let Q=0;for(let[Z,W]of[...$.pendingApprovals.entries()]){if(!f({approvalId:Z,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(Z),W.resolve({approved:!1,reason:J}),$.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:!1,cancelled:!0,reason:J},W.sessionId)),Q+=1}return Q}async function HV($,f){let J=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"";if(!$.pendingApprovals.get(J))return x(f,"approval_not_found",`Unknown approval: ${J}`);let Z=typeof f.payload?.reason==="string"?f.payload.reason:f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)&&typeof f.payload.payload.reason==="string"?f.payload.payload.reason:void 0,W=f.payload?.approved===!0,j=hQ($,J,{approved:W,reason:Z});if(!j)return x(f,"approval_not_found",`Unknown approval: ${J}`);return $.publish($.buildEvent("approval.resolved",{approvalId:J,approved:W,reason:Z},j.sessionId)),c(f,{approvalId:J,approved:W})}import{createSessionId as Fy}from"@cline/shared";function Gy($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var YV={debug:10,info:20,warn:30,error:40,silent:50};function Py(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function m($,f,J={}){if(YV[$]<YV[Py()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:f,...Object.fromEntries(Object.entries(J).map(([Z,W])=>[Z,Gy(W)]).filter(([,Z])=>Z!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function kQ($,f){let J=f instanceof Error?f.stack||f.message:String(f);m("error",$,{error:J})}async function VV($,f,J,Q,Z,W){let j=Fy("capreq_"),X=performance.now();return m("info","capability.request.start",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z}),await new Promise((H,Y)=>{$.pendingCapabilityRequests.set(j,{sessionId:f,targetClientId:Z,capabilityName:J,onProgress:W,resolve:(V)=>{if(m(V.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z,ok:V.ok,error:V.error,durationMs:Math.round(performance.now()-X)}),!V.ok){Y(Error(V.error||`Capability ${J} was rejected by ${Z}.`));return}H(V.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:Z,capabilityName:J,payload:Q},f)),m("info","capability.request.published",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z})})}function AV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return x(f,"capability_not_found",`Unknown capability request: ${J}`);if((f.clientId?.trim()||"")!==Q.targetClientId)return x(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return x(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{};return Q.onProgress?.(W),c(f,{requestId:J})}function K1($,f,J){let Q=0;for(let[Z,W]of[...$.pendingCapabilityRequests.entries()]){if(!f({requestId:Z,...W}))continue;$.pendingCapabilityRequests.delete(Z),m("warn","capability.request.cancelled",{requestId:Z,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:J}),W.resolve({ok:!1,error:J}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:J},W.sessionId)),Q+=1}return Q}async function BV($,f){let J=typeof f.payload?.sessionId==="string"?f.payload.sessionId.trim():f.sessionId?.trim()||"",Q=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName.trim():"",Z=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId.trim():"";if(!J||!Q||!Z)return x(f,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=await $.requestCapability(J,Q,W,Z);return c(f,j)}catch(W){return x(f,"capability_request_failed",W instanceof Error?W.message:String(W))}}function KV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return x(f,"capability_not_found",`Unknown capability request: ${J}`);let Z=f.clientId?.trim()||"";if(Z!==Q.targetClientId)return x(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return x(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(J);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:void 0,j=typeof f.payload?.error==="string"?f.payload.error:void 0,X=f.payload?.ok===!0;return m(X?"info":"warn","capability.respond",{requestId:J,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,error:j}),Q.resolve({ok:X,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,payload:W,error:j},Q.sessionId)),c(f,{requestId:J,ok:X})}import{createSessionId as Dy}from"@cline/shared";function GV($,f){let J=f.payload,Q=J?.clientId?.trim()||f.clientId?.trim()||Dy("client_");return $.clients.set(Q,{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,actorKind:J?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:J?.transport??"native",capabilities:J?.capabilities??[],metadata:J?.metadata,workspaceContext:J?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),c(f,{clientId:Q})}function PV($,f){let J=f.clientId?.trim(),Q=J?$.clients.get(J):void 0;if(!J||!Q)return x(f,"client_not_found","Client is not registered with this hub.");let Z=eJ(f.payload?.metadata);if(Q.lastSeenAt=Date.now(),Z)Q.metadata=JSON.parse(JSON.stringify(Z));return c(f)}function FV($,f,J){let Q=f.clientId?.trim();if(Q)$.clients.delete(Q),J(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return c(f)}function DV($,f){return c(f,{clients:[...$.clients.values()]})}var Ry=30000;function Uy($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Ly($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Oy($){return $?$:void 0}function zy($){let f=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(f&&Number.isFinite(f)&&f>0)return Math.floor(f);let J=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function _y($,f,J,Q){let Z=performance.now(),W=!1,j={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:J.sessionId,timeoutMs:Q},X=setInterval(()=>{if(W)return;let V=Math.round(performance.now()-Z);m("warn","run.heartbeat",{...j,elapsedMs:V}),$.publish($.buildEvent("run.heartbeat",{requestId:f.requestId,elapsedMs:V,...Q?{timeoutMs:Q}:{}},J.sessionId))},Ry),H=$.sessionHost.runTurn(J);H.then((V)=>{if(!W)return;m("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-Z),finishReason:V?.finishReason})},(V)=>{if(!W)return;m("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-Z),error:V})});let Y;try{if(!Q)return await H;return await Promise.race([H,new Promise((V,A)=>{Y=setTimeout(()=>{let B=`Hub run ${f.command} timed out after ${Q}ms.`;W=!0,clearInterval(X),A(Error(B)),m("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-Z)}),bQ($,(K)=>K.sessionId===J.sessionId,B),K1($,(K)=>K.sessionId===J.sessionId,B),$.sessionHost.abort(J.sessionId,B).catch((K)=>{m("error","run.timeout_abort_failed",{...j,error:K})})},Q)})])}finally{if(W=!0,clearInterval(X),Y)clearTimeout(Y)}}async function RV($,f){let J=M0(f),Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!Z.trim())return x(f,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,J));let W=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,j=Array.isArray(W?.userFiles)?W.userFiles.filter((V)=>typeof V==="string"):void 0,X=zy(Q);$.suppressNextTerminalEventBySession.set(J,"run.start.reply");let H;try{H=await _y($,f,{sessionId:J,prompt:Z,mode:Oy(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(W?.userImages)?W.userImages:void 0,userFiles:j,timeoutMs:X},X)}catch(V){if($.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J);throw $.publish($.buildEvent("run.failed",{reason:"error",error:V instanceof Error?V.message:String(V)},J)),V}if(H){let V=await l0($,J),A=Ly(H);if($.publish($.buildEvent(Uy(H.finishReason),{reason:H.finishReason,...A?{error:A}:{},result:H,...V?{snapshot:V}:{}},J)),$.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J)}else $.suppressNextTerminalEventBySession.delete(J);let Y=await l0($,J);return c(f,H||Y?{...H?{result:H}:{},...Y?{snapshot:Y}:{}}:void 0)}async function UV($,f){let J=M0(f),Q=typeof f.payload?.reason==="string"?f.payload.reason:"Run was aborted before pending approval or capability request was resolved.";return bQ($,(Z)=>Z.sessionId===J,Q),await $.sessionHost.abort(J,f.payload?.reason),K1($,(Z)=>Z.sessionId===J,Q),$.publish($.buildEvent("run.aborted",{reason:Q},J)),c(f,{applied:!0})}async function LV($,f){let J=A2(f.payload?.payload);if(!J)return x(f,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(J),c(f,{applied:!0})}async function OV($,f){switch(f.type){case"chunk":return;case"agent_event":await yy($,f);return;case"hook":if(f.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:f.payload.toolName},f.payload.sessionId));else if(f.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:f.payload.toolName},f.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:f.payload.sessionId,summary:f.payload.summary,lastEvent:f.payload.lifecycle};$.publish($.buildEvent("team.progress",J,f.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:f.payload.sessionId,prompts:f.payload.prompts},f.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:f.payload.id,prompt:f.payload.prompt,delivery:f.payload.delivery,attachmentCount:f.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:f.payload.sessionId,prompt:J},f.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:f.payload.sessionId,snapshot:f.payload.snapshot},f.payload.sessionId));return;case"status":{let[J,Q]=await Promise.all([d0($,f.payload.sessionId),l0($,f.payload.sessionId)]);if(J)$.publish($.buildEvent("session.updated",{session:J,...Q?{snapshot:Q}:{}},f.payload.sessionId));return}case"ended":await Ty($,f);return;default:return}}async function yy($,f){let{sessionId:J,event:Q}=f.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},J));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},J));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},J));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},J));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},J));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},J));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},J));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},J));break}return}if(Q.type==="usage"){let Z;try{Z=await $.sessionHost.getAccumulatedUsage?.(J)}catch{Z=void 0}$.publish($.buildEvent("usage.updated",{sessionId:J,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:Z?.usage,aggregateUsage:Z?.aggregateUsage,agent:{kind:f.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:f.payload.teamAgentId,teamRole:f.payload.teamRole}},J));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},J))}async function Ty($,f){let J=$.suppressNextTerminalEventBySession.get(f.payload.sessionId),Q=J===f.payload.reason||J==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(f.payload.sessionId);let[Z,W]=await Promise.all([d0($,f.payload.sessionId),l0($,f.payload.sessionId)]);if(f.payload.reason==="completed"){let j=await XV(Z);$.publish($.buildEvent("ui.notify",j,f.payload.sessionId))}if(Q)return;$.publish($.buildEvent(f.payload.reason==="aborted"?"run.aborted":f.payload.reason==="error"||f.payload.reason==="failed"?"run.failed":"run.completed",{reason:f.payload.reason,...W?{snapshot:W}:{}},f.payload.sessionId))}import{createSessionId as MV,parseRuntimeConfigExtensions as qV}from"@cline/shared";var TV={};q(TV,{SessionVersioningService:()=>G1,SessionVersioningError:()=>q0});var yV={};q(yV,{trimMessagesToCheckpoint:()=>_V,trimMessagesBeforeCheckpoint:()=>xQ,readSessionCheckpointHistory:()=>C4,createRestoredCheckpointMetadata:()=>IQ,createCheckpointRestorePlan:()=>gQ,applyCheckpointToWorktree:()=>mQ});import{execFile as Ny}from"node:child_process";import{promisify as My}from"node:util";var R2=My(Ny);function C4($){let f=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(f?.history)?f.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let Z=String(Q.ref??"").trim(),W=Number(Q.createdAt??0),j=Number(Q.runCount??0);if(Z.length===0||!Number.isFinite(W)||!Number.isInteger(j)||j<1)return[];let X=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:Z,createdAt:W,runCount:j,...X?{kind:X}:{}}]})}function IQ($,f){let J=C4($).filter((Z)=>Z.runCount<=f),Q=J.at(-1);return Q?{latest:Q,history:J}:void 0}function qy($,f){return $.reduce((J,Q)=>{if(Q.runCount>f)return J;if(!J||Q.runCount>J.runCount)return Q;return J},void 0)}function zV($,f){let J=0;for(let Q=0;Q<$.length;Q+=1){let Z=$[Q];if(Z?.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"?Z.metadata:void 0)?.kind==="recovery_notice")continue;if(J+=1,J===f)return Q}throw Error(`Could not find user message for checkpoint run ${f}`)}function _V($,f){let J=zV($,f);return $.slice(0,J+1)}function xQ($,f){let J=zV($,f);return $.slice(0,J)}function gQ($){let f=$.checkpointRunCount;if(!Number.isInteger(f)||f<1)throw Error("checkpointRunCount must be a positive integer");let J=qy(C4($.session),f);if(!J)throw Error(`No checkpoint found at or before run ${f} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:J,cwd:Q,...$.restoreMessages!==!1?{messages:_V($.messages??[],f)}:{}}}async function mQ($,f){if((await R2("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await R2("git",["-C",$,"cat-file","-e",`${f.ref}^{commit}`],{windowsHide:!0}),await R2("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await R2("git",["-C",$,"clean","-fd"],{windowsHide:!0}),f.kind==="commit"){await R2("git",["-C",$,"reset","--hard",f.ref],{windowsHide:!0});return}await R2("git",["-C",$,"stash","apply",f.ref],{windowsHide:!0})}class q0 extends Error{code;constructor($,f){super(f);this.code=$;this.name="SessionVersioningError"}}function wy($){let f=$.sessionId.trim();if(!f)throw new q0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new q0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new q0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new q0("invalid_restore","checkpointRunCount must be a positive integer");return f}class G1{async restoreCheckpoint($){let f=$.restore?.messages!==!1,J=$.restore?.workspace!==!1,Q=wy({sessionId:$.sessionId,restoreMessages:f,restoreWorkspace:J,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),Z=await $.getSession(Q);if(!Z)throw new q0("session_not_found",`Session ${Q} not found`);let W=f?await $.readMessages(Q):void 0;if(f&&W?.length===0)throw new q0("session_messages_not_found",`No messages found for session ${Q}`);let j=gQ({session:Z,messages:W,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:f});if(J)await($.applyWorkspaceCheckpoint??mQ)(j.cwd,j.checkpoint);let X=j$({session:Z,messages:W});if(!f)return{checkpoint:j.checkpoint,sourceSnapshot:X};let H=IQ(Z,$.checkpointRunCount),Y=$.restore?.omitCheckpointMessageFromSession?xQ(W??[],$.checkpointRunCount):j.messages??[],V={sourceSession:Z,sourceMessages:W,sourceSnapshot:X,plan:j,restoredCheckpointMetadata:H,initialMessages:Y,restoreMessages:f,restoreWorkspace:J,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new q0("invalid_restore","start is required when restore.messages is true");let A=$.buildStartInput?await $.buildStartInput(V,$.start):$.start,B=await $.startSession(A),K=$.getStartedSessionId?.(B);if(K)await($.retainCheckpointRefs??Rj)(j.cwd,K,H?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:B,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:X,...G?{restoredSnapshot:j$({session:G,messages:Y})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as ag,HUB_COMPACTION_CAPABILITY as tg,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as sg,HUB_HOOK_CAPABILITY_PREFIX as og,HUB_MISTAKE_LIMIT_CAPABILITY as eg,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as $m,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as fm,isHubToolExecutorName as Sy}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as jm,HUB_COMPACTION_CAPABILITY as Xm,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Hm,HUB_HOOK_CAPABILITY_PREFIX as Ym,HUB_MISTAKE_LIMIT_CAPABILITY as Vm,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Am,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Bm}from"@cline/shared";var Cy=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function Zf($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Ey($,f){let J=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",Z=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=Zf($.inputSchema);if(!J||!Q||!W||!Z||f.has(Z))return;return f.add(Z),{kind:"tool",capabilityName:Z,name:J,description:Q,inputSchema:W,...Zf($.lifecycle)?{lifecycle:Zf($.lifecycle)}:{}}}function cQ($){if(!Array.isArray($))return[];let f=[],J=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let Z=Q,W=Z.kind,j=typeof Z.capabilityName==="string"?Z.capabilityName.trim():"";if(!j||J.has(j))continue;if(W==="tool"){let X=Ey(Z,J);if(X)f.push(X);continue}if(W==="toolExecutor"){let X=Z.executor;if(!Sy(X))continue;J.add(j),f.push({kind:"toolExecutor",capabilityName:j,executor:X});continue}if(W==="hook"){let X=typeof Z.name==="string"?Z.name.trim():"";if(!X)continue;J.add(j),f.push({kind:"hook",capabilityName:j,name:X});continue}if(W==="compaction"){J.add(j),f.push({kind:"compaction",capabilityName:j,...Zf(Z.config)?{config:Zf(Z.config)}:{}});continue}if(W==="checkpoint"){J.add(j),f.push({kind:"checkpoint",capabilityName:j,...Zf(Z.config)?{config:Zf(Z.config)}:{}});continue}if(W==="mistakeLimit"){J.add(j),f.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")J.add(j),f.push({kind:"userInstructionService",capabilityName:j})}return f}function NV($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function hy($){return Object.hasOwn($,"update")?$.update:$}function E4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function by($){let f=($??[]).map(E4).filter(Boolean);return f.length>0?new Set(f):void 0}function ky($,f,J){if(!J)return!0;let Q=E4($),Z=E4(f),W=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=Z.includes(":")?Z.split(":").at(-1)??Z:Z;return J.has(Q)||J.has(Z)||J.has(W)||J.has(j)}function vQ($,f){let J=by(f);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>ky(Q.id,Q.name,J))}function Iy($,f){let J=async(Q,Z)=>{let W=E4(Q),X=vQ($,f).filter((B)=>B.id===W||E4(B.name)===W||B.id.endsWith(`:${W}`)).filter((B)=>!B.disabled);if(X.length!==1)return X.length>1?`Skill "${Q}" is ambiguous. Use one of: ${X.map((B)=>B.id).join(", ")}`:`Skill "${Q}" not found.`;let H=X[0].skill,Y=Z?.trim(),V=Y?`
562
+ <command-args>${Y}</command-args>`:"",A=H.description?.trim()?`Description: ${H.description.trim()}
561
563
 
562
- `:"";return`<command-name>${X.name}</command-name>${P}
564
+ `:"";return`<command-name>${H.name}</command-name>${V}
563
565
  <command-instructions>
564
- ${B}${X.instructions}
565
- </command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>_H(f,$).map(({skill:W,...H})=>H),enumerable:!0}),J}function bM(f,$,J,W){let H={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},Q=async()=>{let Z=await W(f,J.capabilityName,{},$);if(Z?.snapshot)H=Z.snapshot};return{start:Q,stop:()=>{},refreshType:async()=>{await Q()},listRecords:(Z)=>[...H.records[Z]],listRuntimeCommands:()=>[...H.runtimeCommands],resolveRuntimeSlashCommand:(Z)=>{if(!Z.startsWith("/")||Z.length<2)return Z;let X=Z.match(/^\/(\S+)/)?.[1];if(!X)return Z;let A=H.runtimeCommands.find((P)=>P.name===X);return A?`${A.instructions}${Z.slice(X.length+1)}`:Z},hasConfiguredSkills:(Z)=>_H(H,Z).some((j)=>!j.disabled),createExtension:(Z)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Z.includeRules?"rules":void 0,Z.registerSkillsTool?"tools":void 0,Z.includeSkills||Z.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Z.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>u1(H.records.rule.map((X)=>X.item).filter((X)=>X.disabled!==!0))});if(Z.registerSkillsTool)j.registerTool(K$(wM(H,Z.allowedSkillNames)));for(let X of H.runtimeCommands.filter((A)=>A.kind==="skill"&&Z.includeSkills||A.kind==="workflow"&&Z.includeWorkflows))j.registerCommand({name:X.name,description:X.description,handler:(A)=>{let P=A.trim();return P?`${X.instructions}
566
+ ${A}${H.instructions}
567
+ </command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>vQ($,f).map(({skill:Q,...Z})=>Z),enumerable:!0}),J}function xy($,f,J,Q){let Z={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},W=async()=>{let j=await Q($,J.capabilityName,{},f);if(j?.snapshot)Z=j.snapshot};return{start:W,stop:()=>{},refreshType:async()=>{await W()},listRecords:(j)=>[...Z.records[j]],listRuntimeCommands:()=>[...Z.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let H=j.match(/^\/(\S+)/)?.[1];if(!H)return j;let Y=Z.runtimeCommands.find((V)=>V.name===H);return Y?`${Y.instructions}${j.slice(H.length+1)}`:j},hasConfiguredSkills:(j)=>vQ(Z,j).some((X)=>!X.disabled),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((X)=>Boolean(X))},setup(X){if(j.includeRules)X.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>af(Z.records.rule.map((H)=>H.item).filter((H)=>H.disabled!==!0))});if(j.registerSkillsTool)X.registerTool(R1(Iy(Z,j.allowedSkillNames)));for(let H of Z.runtimeCommands.filter((Y)=>Y.kind==="skill"&&j.includeSkills||Y.kind==="workflow"&&j.includeWorkflows))X.registerCommand({name:H.name,description:H.description,handler:(Y)=>{let V=Y.trim();return V?`${H.instructions}
566
568
 
567
- ${P}`:X.instructions}})}})}}function CM(f,$,J,W){let H=J.map((Q)=>[Q.executor,async(...Z)=>{let j=Z.at(-1),X=Z.slice(0,-1);return(await W(f,Q.capabilityName,{executor:Q.executor,args:X,context:nA(j)},$))?.result}]);return H.length>0?Object.fromEntries(H):void 0}function EM(f,$,J,W){if(J.length===0)return;return J.map((H)=>({name:H.name,description:H.description,inputSchema:H.inputSchema,lifecycle:H.lifecycle,async execute(Q,Z){return(await W(f,H.capabilityName,{toolName:H.name,input:Q,context:nA(Z)},$,Z.emitUpdate?(X)=>{Z.emitUpdate?.(zM(X))}:void 0))?.result}}))}function SM(f,$,J,W){let H=new Map(J.map((Z)=>[Z.name,Z])),Q={};for(let Z of hM){let j=H.get(Z);if(!j)continue;Q[Z]=async(X)=>{return(await W(f,j.capabilityName,{context:X},$))?.control}}return Object.keys(Q).length>0?Q:void 0}function LH(f){let $=f.contributions.filter((X)=>X.kind==="toolExecutor"),J=f.contributions.filter((X)=>X.kind==="tool"),W=f.contributions.filter((X)=>X.kind==="hook"),H=f.contributions.find((X)=>X.kind==="compaction"),Q=f.contributions.find((X)=>X.kind==="checkpoint"),Z=f.contributions.find((X)=>X.kind==="mistakeLimit"),j=f.contributions.find((X)=>X.kind==="userInstructionService");return{hasClientContributions:f.contributions.length>0,toolExecutors:CM(f.sessionId,f.targetClientId,$,f.requestCapability),localRuntime:{...W.length>0?{hooks:SM(f.sessionId,f.targetClientId,W,f.requestCapability)}:{},...J.length>0?{extraTools:EM(f.sessionId,f.targetClientId,J,f.requestCapability)}:{},...H?{compaction:{...f.sessionConfig?.compaction??{},...H.config,compact:async(X)=>{return(await f.requestCapability(f.sessionId,H.capabilityName,{context:X},f.targetClientId))?.result}}}:{},...Q?{checkpoint:{...f.sessionConfig?.checkpoint??{},...Q.config,createCheckpoint:async(X)=>{return(await f.requestCapability(f.sessionId,Q.capabilityName,{context:X},f.targetClientId))?.result}}}:{},...Z?{onConsecutiveMistakeLimitReached:async(X)=>{return(await f.requestCapability(f.sessionId,Z.capabilityName,{context:X},f.targetClientId))?.result}}:{},...j?{userInstructionService:bM(f.sessionId,f.targetClientId,j,f.requestCapability)}:{}}}}var sA="hubCapabilityOwnerClientId";function oA(f,$){f[sA]=$}function kM(f){let $=f?.[sA];return typeof $==="string"&&$.trim()?$.trim():void 0}async function eA(f,$,J){let W=performance.now(),H={command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:$.sessionId};g("info","session.create.begin",H);let Q=$.payload&&typeof $.payload==="object"?$.payload:{},Z=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{},j=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0,X=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{};if(typeof j?.mode==="string")Z.mode=j.mode;else if(typeof X.mode==="string")Z.mode=X.mode;if(typeof j?.systemPrompt==="string")Z.systemPrompt=j.systemPrompt;else if(typeof X.systemPrompt==="string")Z.systemPrompt=X.systemPrompt;if(j?.checkpoint?.enabled===!0)Z.checkpointEnabled=!0;else if(X.checkpointEnabled===!0)Z.checkpointEnabled=!0;let A=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},P=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():"";if(!P)return g("warn","session.create.invalid",{...H,reason:"missing_workspace_root"}),m($,"invalid_session_create","session.create requires workspaceRoot or cwd");let B=$.clientId?.trim()||"hub-client",Y=MH(X.clientContributions);if(g("info","session.create.contributions_parsed",{...H,clientId:B,workspaceRoot:P,cwd:typeof Q.cwd==="string"?Q.cwd:void 0,contributionCount:Y.length}),Y.length>0)oA(Z,B);let R=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||aA(),U=tA(X.configExtensions);g("info","session.create.runtime_build.begin",{...H,sessionId:R,configExtensionCount:U?.length??0});let K=LH({sessionId:R,targetClientId:B,contributions:Y,sessionConfig:j,requestCapability:f.requestCapability});g("info","session.create.start_session.begin",{...H,sessionId:R,provider:j?.providerId??(typeof A.provider==="string"?A.provider:typeof Z.provider==="string"?Z.provider:"hub"),model:j?.modelId??(typeof A.model==="string"?A.model:typeof Z.model==="string"?Z.model:"hub")});let F=await f.sessionHost.startSession({source:typeof Z.source==="string"?Z.source:void 0,interactive:Z.interactive!==!1,sessionMetadata:Object.keys(Z).length>0?Z:void 0,initialMessages:Array.isArray(Q.initialMessages)?Q.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,...K.localRuntime},capabilities:{toolExecutors:K.toolExecutors,requestToolApproval:J},config:{...j??{},sessionId:R,providerId:j?.providerId??(typeof A.provider==="string"?A.provider:typeof Z.provider==="string"?Z.provider:"hub"),modelId:j?.modelId??(typeof A.model==="string"?A.model:typeof Z.model==="string"?Z.model:"hub"),apiKey:j?.apiKey??(typeof A.apiKey==="string"?A.apiKey:void 0),cwd:j?.cwd??(typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():P),workspaceRoot:j?.workspaceRoot??P,systemPrompt:j?.systemPrompt??(typeof X.systemPrompt==="string"?X.systemPrompt:""),mode:j?.mode??(X.mode==="plan"||X.mode==="yolo"?X.mode:"act"),maxIterations:j?.maxIterations??(typeof X.maxIterations==="number"?X.maxIterations:void 0),enableTools:j?.enableTools??X.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??X.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??X.enableTeams!==!1,checkpoint:j?.checkpoint??(X.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Z.teamName==="string"?Z.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):X.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});g("info","session.create.start_session.end",{...H,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!F.result}),mJ(f,F.sessionId,B,"creator",{interactive:Z.interactive!==!1}),g("info","session.create.read_records.begin",{...H,sessionId:F.sessionId});let[y,D]=await Promise.all([cf(f,F.sessionId),df(f,F.sessionId)]);if(g("info","session.create.read_records.end",{...H,sessionId:F.sessionId,hasSession:!!y,hasSnapshot:!!D,elapsedMs:Math.round(performance.now()-W)}),y)f.publish(f.buildEvent("session.created",{session:y,...D?{snapshot:D}:{}},F.sessionId));return g("info","session.create.reply",{...H,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-W)}),u($,{session:y,...D?{snapshot:D}:{}})}async function fP(f,$,J){let W=$.payload&&typeof $.payload==="object"?$.payload:{},H=typeof W.sessionId==="string"?W.sessionId.trim():$.sessionId?.trim()||"",Q=W.checkpointRunCount;if(!H)return m($,"invalid_restore","session.restore requires a session id");let Z=W.restore&&typeof W.restore==="object"?W.restore:{},j=Z.messages!==!1;if(typeof Q!=="number")return m($,"invalid_restore","checkpointRunCount must be a positive integer");try{let X=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!X)return m($,"invalid_restore","sessionConfig is required when restore.messages is true");let A=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},P=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof X?.mode==="string")P.mode=X.mode;else if(typeof A.mode==="string")P.mode=A.mode;if(typeof X?.systemPrompt==="string")P.systemPrompt=X.systemPrompt;else if(typeof A.systemPrompt==="string")P.systemPrompt=A.systemPrompt;if(X?.checkpoint?.enabled===!0)P.checkpointEnabled=!0;else if(A.checkpointEnabled===!0)P.checkpointEnabled=!0;let B=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},Y=$.clientId?.trim()||"hub-client",V=MH(A.clientContributions);if(V.length>0)oA(P,Y);let U=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||aA(),K=tA(A.configExtensions),F=LH({sessionId:U,targetClientId:Y,contributions:V,sessionConfig:X,requestCapability:f.requestCapability}),D=await new Y$().restoreCheckpoint({sessionId:H,checkpointRunCount:Q,restore:{messages:Z.messages,workspace:Z.workspace,omitCheckpointMessageFromSession:Z.omitCheckpointMessageFromSession===!0},start:X,cwd:typeof X?.cwd==="string"&&X.cwd.trim()||typeof X?.workspaceRoot==="string"&&X.workspaceRoot.trim()||void 0,getSession:(L)=>f.sessionHost.getSession(L),readMessages:(L)=>f.sessionHost.readSessionMessages(L),buildStartInput:(L)=>{if(L.restoredCheckpointMetadata)P.checkpoint=L.restoredCheckpointMetadata;let q=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():L.sourceSession.workspaceRoot||L.sourceSession.cwd;return{source:typeof P.source==="string"?P.source:void 0,interactive:P.interactive!==!1,sessionMetadata:{...P,restoredFromSessionId:H,restoredCheckpointRunCount:Q},initialMessages:L.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:K,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...X??{},sessionId:U,providerId:X?.providerId??(typeof B.provider==="string"?B.provider:L.sourceSession.provider),modelId:X?.modelId??(typeof B.model==="string"?B.model:L.sourceSession.model),apiKey:X?.apiKey??(typeof B.apiKey==="string"?B.apiKey:""),cwd:X?.cwd??L.plan.cwd,workspaceRoot:X?.workspaceRoot??q,systemPrompt:X?.systemPrompt??(typeof A.systemPrompt==="string"?A.systemPrompt:""),mode:X?.mode??(A.mode==="plan"||A.mode==="yolo"?A.mode:"act"),maxIterations:X?.maxIterations??(typeof A.maxIterations==="number"?A.maxIterations:void 0),enableTools:X?.enableTools??A.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??A.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??A.enableTeams!==!1,checkpoint:X?.checkpoint??(A.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof P.teamName==="string"?P.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):A.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(L)=>f.sessionHost.startSession(L),getStartedSessionId:(L)=>L.sessionId,readRestoredSession:(L)=>f.sessionHost.getSession(L)});if(!j)return u($,{checkpoint:D.checkpoint});let M=D.startResult;if(!M)return m($,"restore_failed","Checkpoint restore did not start a session");mJ(f,M.sessionId,Y,"creator",{interactive:P.interactive!==!1});let[T,_]=await Promise.all([cf(f,M.sessionId),df(f,M.sessionId)]);if(T)f.publish(f.buildEvent("session.created",{session:T,..._?{snapshot:_}:{}},M.sessionId));return u($,{session:T,..._?{snapshot:_}:{},messages:D.messages??[],checkpoint:D.checkpoint})}catch(X){if(X instanceof zf)return m($,X.code,X.code==="session_not_found"?`Unknown session: ${H}`:X.message);return m($,"restore_failed",X instanceof Error?X.message:String(X))}}async function $P(f,$){let J=Of($);if(!J)return m($,"invalid_session_attach","session.attach requires a session id");mJ(f,J,$.clientId?.trim()||"hub-client","participant");let W=await cf(f,J);if(W)f.publish(f.buildEvent("session.attached",{session:W},J));return W?u($,{session:W}):m($,"session_not_found",`Unknown session: ${J}`)}async function JP(f,$){let J=Of($);if(!J)return m($,"invalid_session_detach","session.detach requires a session id");let W=$.clientId?.trim()||"hub-client",[H]=await Promise.all([cf(f,J)]),Q=kM(H?.metadata)??W,Z=f.sessionState.get(J);if(Z){if(Z.participants.delete(W),Z.createdByClientId===W)Z.createdByClientId=Q;if(Z.participants.size===0)f.sessionState.delete(J)}B$(f,(A)=>A.sessionId===J&&A.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,X]=await Promise.all([cf(f,J),df(f,J)]);return f.publish(f.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:W}:{clientId:W},J)),u($)}async function WP(f,$){let J=Of($),W=$.payload?.includeSnapshot===!0,[H,Q]=await Promise.all([cf(f,J),W?df(f,J):Promise.resolve(void 0)]);return H?u($,{session:H,...Q?{snapshot:Q}:{}}):m($,"session_not_found",`Unknown session: ${J}`)}async function HP(f,$){let J=Of($);if(!J)return m($,"invalid_session_id","session.messages requires a session id");if(!await cf(f,J))return m($,"session_not_found",`Unknown session: ${J}`);let H=await f.sessionHost.readSessionMessages(J);return u($,{sessionId:J,messages:H})}async function QP(f,$){let J=typeof $.payload?.limit==="number"?$.payload.limit:200,H=(await f.sessionHost.listSessions(J)).map((Q)=>kJ(Q,f.sessionState.get(Q.sessionId)));return u($,{sessions:H})}async function ZP(f,$){let J=Of($),W=IJ($.payload?.metadata),H=await f.sessionHost.updateSession(J,{metadata:W}),[Q,Z]=await Promise.all([cf(f,J),df(f,J)]);if(Q)f.publish(f.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J));return{version:$.version,requestId:$.requestId,ok:H.updated,payload:{updated:H.updated,session:Q,...Z?{snapshot:Z}:{}}}}async function jP(f,$){let J=Of($),W=await f.sessionHost.deleteSession(J);return f.sessionState.delete(J),u($,{deleted:W})}async function XP(f,$){let J=Of($),W=f.sessionHost.pendingPrompts;if(!W)return m($,"pending_prompts_unavailable","Pending prompt service is not available.");let H=await W.list({sessionId:J});return u($,{sessionId:J,prompts:H})}async function AP(f,$){let J=Of($),W=typeof $.payload?.promptId==="string"?$.payload.promptId.trim():"",H=typeof $.payload?.prompt==="string"?$.payload.prompt:void 0,Q=$.payload?.delivery==="queue"||$.payload?.delivery==="steer"?$.payload.delivery:void 0,Z=f.sessionHost.pendingPrompts;if(!Z)return m($,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Z.update({sessionId:J,promptId:W,prompt:H,delivery:Q});return u($,j)}async function PP(f,$){let J=Of($),W=typeof $.payload?.promptId==="string"?$.payload.promptId.trim():"",H=f.sessionHost.pendingPrompts;if(!H)return m($,"pending_prompts_unavailable","Pending prompt service is not available.");let Q=await H.delete({sessionId:J,promptId:W});return u($,Q)}function BP(f){switch(f){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var mM=new Set(["skills","workflows","rules","tools"]);function hH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function L4(f,$){let J=f[$];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${$}' must be a string.`);return J}function xM(f,$){let J=f[$];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${$}' must be a boolean.`);return J}function YP(f){if(f===void 0)return{};if(!hH(f))throw Error("settings.list payload must be an object.");return{cwd:L4(f,"cwd"),workspaceRoot:L4(f,"workspaceRoot"),availabilityContext:hH(f.availabilityContext)?f.availabilityContext:void 0}}function gM(f){if(!hH(f))throw Error("settings.toggle payload must be an object.");let{type:$}=f;if(typeof $!=="string"||!mM.has($))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools.");return{...YP(f),type:$,id:L4(f,"id"),path:L4(f,"path"),name:L4(f,"name"),enabled:xM(f,"enabled")}}class Y2{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=IM("hub_");ctx;constructor(f){this.options=f;if(this.sessionHost=f.sessionHost??new X0({sessionService:new j0(new Q0),fetch:f.fetch,telemetry:f.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,sessionHost:this.sessionHost,publish:($)=>this.publish($),buildEvent:t$,requestCapability:($,J,W,H,Q)=>CA(this.ctx,$,J,W,H,Q)},this.schedules=new j2({...f.scheduleOptions,runtimeHandlers:f.runtimeHandlers,eventPublisher:($,J)=>{let W=$==="schedule.execution.completed"?"schedule.execution_completed":$==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(t$(W,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new Z2(this.schedules),this.settings=f.settingsService??new J$,f.cronOptions)this.cronService=new e8({runtimeHandlers:f.runtimeHandlers,...f.cronOptions});this.sessionHost.subscribe(($)=>{dA(this.ctx,$).catch((J)=>{yH("session event handling failed",J)})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch(f){console.error("[hub] cron service start failed",f)}}async stop(){for(let f of this.pendingApprovals.keys())FH(this.ctx,f,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(B$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch(f){console.error("[hub] cron service stop failed",f)}}async handleCommand(f){switch(f.command){case"client.register":return IA(this.ctx,f);case"client.update":return mA(this.ctx,f);case"client.unregister":return xA(this.ctx,f,($)=>{this.listeners.delete($),this.detachClientFromSessions($)});case"client.list":return gA(this.ctx,f);case"session.create":return await eA(this.ctx,f,($)=>RH(this.ctx,$));case"session.restore":return await fP(this.ctx,f,($)=>RH(this.ctx,$));case"session.attach":return await $P(this.ctx,f);case"session.detach":return await JP(this.ctx,f);case"session.get":return await WP(this.ctx,f);case"session.messages":return await HP(this.ctx,f);case"session.list":return await QP(this.ctx,f);case"session.update":return await ZP(this.ctx,f);case"session.pending_prompts":return await XP(this.ctx,f);case"session.update_pending_prompt":return await AP(this.ctx,f);case"session.remove_pending_prompt":return await PP(this.ctx,f);case"session.delete":return await jP(this.ctx,f);case"session.hook":return await cA(this.ctx,f);case"run.start":case"session.send_input":return await vA(this.ctx,f);case"run.abort":return await uA(this.ctx,f);case"capability.request":return await SA(this.ctx,f);case"approval.respond":return await wA(this.ctx,f);case"capability.respond":return kA(this.ctx,f);case"capability.progress":return EA(this.ctx,f);case"ui.notify":return this.publish(t$("ui.notify",f.payload??{})),u(f);case"ui.show_window":return this.publish(t$("ui.show_window",f.payload??{})),u(f);case"settings.list":return await this.handleSettingsList(f);case"settings.toggle":return await this.handleSettingsToggle(f);case"settings.get":case"settings.patch":return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"not_implemented",message:`${f.command} is not implemented yet.`}};default:{let $=await this.scheduleCommands.handleCommand(f);if($.ok){let J=BP(f.command);if(J)this.publish(t$(J,$.payload))}return $}}}async handleSettingsList(f){try{let $=await this.settings.list(YP(f.payload));return{version:f.version,requestId:f.requestId,ok:!0,payload:{snapshot:$}}}catch($){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"settings_list_failed",message:$ instanceof Error?$.message:String($)}}}}async handleSettingsToggle(f){try{let $=await this.settings.toggle(gM(f.payload));return this.publish(t$("settings.changed",{types:$.changedTypes,snapshot:$.snapshot})),{version:f.version,requestId:f.requestId,ok:!0,payload:{snapshot:$.snapshot,changedTypes:$.changedTypes}}}catch($){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"settings_toggle_failed",message:$ instanceof Error?$.message:String($)}}}}subscribe(f,$,J){let W=this.listeners.get(f)??new Set,H={sessionId:J?.sessionId,listener:$};return W.add(H),this.listeners.set(f,W),()=>{let Q=this.listeners.get(f);if(!Q)return;if(Q.delete(H),Q.size===0)this.listeners.delete(f)}}detachClientFromSessions(f){for(let[$,J]of this.sessionState.entries())if(J.participants.delete(f),J.participants.size===0)this.sessionState.delete($);B$(this.ctx,($)=>$.targetClientId===f,`Capability owner client ${f} disconnected before request was resolved.`)}publish(f){for(let $ of this.listeners.values())for(let J of $){if(J.sessionId&&J.sessionId!==f.sessionId)continue;try{J.listener(f)}catch(W){yH(`listener threw while publishing ${f.event}`,W)}}}}import{timingSafeEqual as dM}from"node:crypto";import rM from"node:http";import lM from"node:net";import{URL as FP}from"node:url";import{WebSocketServer as pM}from"ws";import{HUB_COMMAND_SLOW_LOG_MS as vM,resolveHubCommandTimeoutMs as uM,safeJsonParse as cM}from"@cline/shared";function VP(f){return{command:f.envelope.command,requestId:f.envelope.requestId,clientId:f.envelope.clientId,sessionId:f.envelope.sessionId}}function RP(f,$,J){return{version:f.envelope.version,requestId:f.envelope.requestId,ok:!1,error:{code:$,message:J}}}class h4{transport;constructor(f){this.transport=f}attach(f){let $=new Map,J=new Set,W=!1,H=(X)=>{try{f.send(JSON.stringify(X))}catch(A){console.error(`[hub] failed to send websocket frame: ${A instanceof Error?A.stack||A.message:String(A)}`)}},Q=(X)=>{H({kind:"event",envelope:X})},Z=async(X)=>{try{let A=JSON.parse(X.data);switch(A.kind){case"command":{let P=performance.now(),B=!1,Y=VP(A);g("info","command.start",Y);let V=setTimeout(()=>{if(B)return;g("warn","command.slow",{...Y,elapsedMs:Math.round(performance.now()-P)})},vM),R=this.transport.command(A.envelope);R.then((M)=>{if(!B)return;g(M.ok?"warn":"error","command.late_end",{...Y,elapsedMs:Math.round(performance.now()-P),ok:M.ok,errorCode:M.error?.code,errorMessage:M.error?.message})},(M)=>{if(!B)return;g("error","command.late_error",{...Y,elapsedMs:Math.round(performance.now()-P),error:M})});let U=!1,K,F,y=uM(A.envelope.command,A.envelope.timeoutMs);try{F=y===null?await R:await Promise.race([R,new Promise((M)=>{K=setTimeout(()=>{U=!0,M(RP(A,"hub_command_timeout",`Hub command ${A.envelope.command} did not complete within ${y}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${A.envelope.requestId}.`))},y)})])}catch(M){if(clearTimeout(V),K)clearTimeout(K);throw M}if(B=U,clearTimeout(V),K)clearTimeout(K);let D=Math.round(performance.now()-P);if(U)g("error","command.timeout",{...Y,durationMs:D,timeoutMs:y});else g(F.ok?"info":"warn","command.end",{...Y,durationMs:D,ok:F.ok,errorCode:F.error?.code,errorMessage:F.error?.message});if(A.envelope.command==="client.register"&&F.ok){let T=(A.envelope.payload??{}).clientId?.trim()||A.envelope.clientId?.trim();if(T)J.add(T)}else if(A.envelope.command==="client.unregister"&&F.ok){let M=A.envelope.clientId?.trim();if(M)J.delete(M)}H({kind:"reply",envelope:F});break}case"stream.subscribe":{let P=`${A.clientId}:${A.sessionId??"*"}`;if($.has(P))break;let B=await this.transport.subscribe(A.clientId,Q,{sessionId:A.sessionId});$.set(P,B);break}case"stream.unsubscribe":{let P=`${A.clientId}:${A.sessionId??"*"}`;$.get(P)?.(),$.delete(P);break}case"reply":case"event":break}}catch(A){let P=typeof X.data==="string"?cM(X.data):void 0;if(!P||P.kind!=="command"){g("error","rejected malformed websocket frame",{error:A});return}g("error","command.error",{...VP(P),error:A}),H({kind:"reply",envelope:RP(P,"command_failed",A instanceof Error?A.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let X of $.values())X();$.clear();for(let X of J)this.transport.command({version:"v1",command:"client.unregister",clientId:X});J.clear(),f.removeEventListener("message",Z),f.removeEventListener("close",j)};return f.addEventListener("message",Z),f.addEventListener("close",j),j}}class O4{transport;constructor(f){this.transport=f}command(f){return this.transport.handleCommand(f)}subscribe(f,$,J){return this.transport.subscribe(f,$,J)}}function iM(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString();if(f instanceof ArrayBuffer)return Buffer.from(f).toString();if(Array.isArray(f))return Buffer.concat(f.map(($)=>Buffer.from($))).toString();return String(f)}function nM(f){return{send($){f.send($)},addEventListener($,J){if($==="message"){f.on("message",(W)=>{J({data:iM(W)})});return}f.on("close",J)},removeEventListener(){}}}function aM(f){try{f.write(`HTTP/1.1 400 Bad Request\r
569
+ ${V}`:H.instructions}})}})}}function gy($,f,J,Q){let Z=J.map((W)=>[W.executor,async(...j)=>{let X=j.at(-1),H=j.slice(0,-1);return(await Q($,W.capabilityName,{executor:W.executor,args:H,context:NV(X)},f))?.result}]);return Z.length>0?Object.fromEntries(Z):void 0}function my($,f,J,Q){if(J.length===0)return;return J.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema,lifecycle:Z.lifecycle,async execute(W,j){return(await Q($,Z.capabilityName,{toolName:Z.name,input:W,context:NV(j)},f,j.emitUpdate?(H)=>{j.emitUpdate?.(hy(H))}:void 0))?.result}}))}function vy($,f,J,Q){let Z=new Map(J.map((j)=>[j.name,j])),W={};for(let j of Cy){let X=Z.get(j);if(!X)continue;W[j]=async(H)=>{return(await Q($,X.capabilityName,{context:H},f))?.control}}return Object.keys(W).length>0?W:void 0}function uQ($){let f=$.contributions.filter((H)=>H.kind==="toolExecutor"),J=$.contributions.filter((H)=>H.kind==="tool"),Q=$.contributions.filter((H)=>H.kind==="hook"),Z=$.contributions.find((H)=>H.kind==="compaction"),W=$.contributions.find((H)=>H.kind==="checkpoint"),j=$.contributions.find((H)=>H.kind==="mistakeLimit"),X=$.contributions.find((H)=>H.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:gy($.sessionId,$.targetClientId,f,$.requestCapability),localRuntime:{...Q.length>0?{hooks:vy($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J.length>0?{extraTools:my($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Z?{compaction:{...$.sessionConfig?.compaction??{},...Z.config,compact:async(H)=>{return(await $.requestCapability($.sessionId,Z.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(H)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(H)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:H},$.targetClientId))?.result}}:{},...X?{userInstructionService:xy($.sessionId,$.targetClientId,X,$.requestCapability)}:{}}}}var wV="hubCapabilityOwnerClientId";function SV($,f){$[wV]=f}function cy($){let f=$?.[wV];return typeof f==="string"&&f.trim()?f.trim():void 0}async function CV($,f,J){let Q=performance.now(),Z={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:f.sessionId};m("info","session.create.begin",Z);let W=f.payload&&typeof f.payload==="object"?f.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},X=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{};if(typeof X?.mode==="string")j.mode=X.mode;else if(typeof H.mode==="string")j.mode=H.mode;if(typeof X?.systemPrompt==="string")j.systemPrompt=X.systemPrompt;else if(typeof H.systemPrompt==="string")j.systemPrompt=H.systemPrompt;if(X?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)j.checkpointEnabled=!0;let Y=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},V=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():"";if(!V)return m("warn","session.create.invalid",{...Z,reason:"missing_workspace_root"}),x(f,"invalid_session_create","session.create requires workspaceRoot or cwd");let A=f.clientId?.trim()||"hub-client",B=cQ(H.clientContributions);if(m("info","session.create.contributions_parsed",{...Z,clientId:A,workspaceRoot:V,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:B.length}),B.length>0)SV(j,A);let G=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||MV(),R=qV(H.configExtensions);m("info","session.create.runtime_build.begin",{...Z,sessionId:G,configExtensionCount:R?.length??0});let F=uQ({sessionId:G,targetClientId:A,contributions:B,sessionConfig:X,requestCapability:$.requestCapability});m("info","session.create.start_session.begin",{...Z,sessionId:G,provider:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),model:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub")});let P=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(W.initialMessages)?W.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...X??{},sessionId:G,providerId:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub"),apiKey:X?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:void 0),cwd:X?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():V),workspaceRoot:X?.workspaceRoot??V,systemPrompt:X?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:X?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:X?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:X?.enableTools??H.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??H.enableTeams!==!1,checkpoint:X?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});m("info","session.create.start_session.end",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!P.result}),$5($,P.sessionId,A,"creator",{interactive:j.interactive!==!1}),m("info","session.create.read_records.begin",{...Z,sessionId:P.sessionId});let[D,O]=await Promise.all([d0($,P.sessionId),l0($,P.sessionId)]);if(m("info","session.create.read_records.end",{...Z,sessionId:P.sessionId,hasSession:!!D,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Q)}),D)$.publish($.buildEvent("session.created",{session:D,...O?{snapshot:O}:{}},P.sessionId));return m("info","session.create.reply",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q)}),c(f,{session:D,...O?{snapshot:O}:{}})}async function EV($,f,J){let Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.sessionId==="string"?Q.sessionId.trim():f.sessionId?.trim()||"",W=Q.checkpointRunCount;if(!Z)return x(f,"invalid_restore","session.restore requires a session id");let j=Q.restore&&typeof Q.restore==="object"?Q.restore:{},X=j.messages!==!1;if(typeof W!=="number")return x(f,"invalid_restore","checkpointRunCount must be a positive integer");try{let H=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(X&&!H)return x(f,"invalid_restore","sessionConfig is required when restore.messages is true");let Y=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},V=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof H?.mode==="string")V.mode=H.mode;else if(typeof Y.mode==="string")V.mode=Y.mode;if(typeof H?.systemPrompt==="string")V.systemPrompt=H.systemPrompt;else if(typeof Y.systemPrompt==="string")V.systemPrompt=Y.systemPrompt;if(H?.checkpoint?.enabled===!0)V.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)V.checkpointEnabled=!0;let A=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},B=f.clientId?.trim()||"hub-client",K=cQ(Y.clientContributions);if(K.length>0)SV(V,B);let R=(typeof H?.sessionId==="string"?H.sessionId.trim():"")||MV(),F=qV(Y.configExtensions),P=uQ({sessionId:R,targetClientId:B,contributions:K,sessionConfig:H,requestCapability:$.requestCapability}),O=await new G1().restoreCheckpoint({sessionId:Z,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:H,cwd:typeof H?.cwd==="string"&&H.cwd.trim()||typeof H?.workspaceRoot==="string"&&H.workspaceRoot.trim()||void 0,getSession:(y)=>$.sessionHost.getSession(y),readMessages:(y)=>$.sessionHost.readSessionMessages(y),buildStartInput:(y)=>{if(y.restoredCheckpointMetadata)V.checkpoint=y.restoredCheckpointMetadata;let w=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():y.sourceSession.workspaceRoot||y.sourceSession.cwd;return{source:typeof V.source==="string"?V.source:void 0,interactive:V.interactive!==!1,sessionMetadata:{...V,restoredFromSessionId:Z,restoredCheckpointRunCount:W},initialMessages:y.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:F,...P.localRuntime},capabilities:{toolExecutors:P.toolExecutors,requestToolApproval:J},config:{...H??{},sessionId:R,providerId:H?.providerId??(typeof A.provider==="string"?A.provider:y.sourceSession.provider),modelId:H?.modelId??(typeof A.model==="string"?A.model:y.sourceSession.model),apiKey:H?.apiKey??(typeof A.apiKey==="string"?A.apiKey:""),cwd:H?.cwd??y.plan.cwd,workspaceRoot:H?.workspaceRoot??w,systemPrompt:H?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:H?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:H?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:H?.enableTools??Y.enableTools!==!1,enableSpawnAgent:H?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:H?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:H?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:H?.teamName??(typeof V.teamName==="string"?V.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(y)=>$.sessionHost.startSession(y),getStartedSessionId:(y)=>y.sessionId,readRestoredSession:(y)=>$.sessionHost.getSession(y)});if(!X)return c(f,{checkpoint:O.checkpoint});let _=O.startResult;if(!_)return x(f,"restore_failed","Checkpoint restore did not start a session");$5($,_.sessionId,B,"creator",{interactive:V.interactive!==!1});let[L,z]=await Promise.all([d0($,_.sessionId),l0($,_.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...z?{snapshot:z}:{}},_.sessionId));return c(f,{session:L,...z?{snapshot:z}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(H){if(H instanceof q0)return x(f,H.code,H.code==="session_not_found"?`Unknown session: ${Z}`:H.message);return x(f,"restore_failed",H instanceof Error?H.message:String(H))}}async function hV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_attach","session.attach requires a session id");$5($,J,f.clientId?.trim()||"hub-client","participant");let Q=await d0($,J);if(Q)$.publish($.buildEvent("session.attached",{session:Q},J));return Q?c(f,{session:Q}):x(f,"session_not_found",`Unknown session: ${J}`)}async function bV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_detach","session.detach requires a session id");let Q=f.clientId?.trim()||"hub-client",[Z]=await Promise.all([d0($,J)]),W=cy(Z?.metadata)??Q,j=$.sessionState.get(J);if(j){if(j.participants.delete(Q),j.createdByClientId===Q)j.createdByClientId=W;if(j.participants.size===0)$.sessionState.delete(J)}K1($,(Y)=>Y.sessionId===J&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[X,H]=await Promise.all([d0($,J),l0($,J)]);return $.publish($.buildEvent("session.detached",X?{session:X,...H?{snapshot:H}:{},clientId:Q}:{clientId:Q},J)),c(f)}async function kV($,f){let J=M0(f),Q=f.payload?.includeSnapshot===!0,[Z,W]=await Promise.all([d0($,J),Q?l0($,J):Promise.resolve(void 0)]);return Z?c(f,{session:Z,...W?{snapshot:W}:{}}):x(f,"session_not_found",`Unknown session: ${J}`)}async function IV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_id","session.messages requires a session id");if(!await d0($,J))return x(f,"session_not_found",`Unknown session: ${J}`);let Z=await $.sessionHost.readSessionMessages(J);return c(f,{sessionId:J,messages:Z})}async function xV($,f){let J=typeof f.payload?.limit==="number"?f.payload.limit:200,Z=(await $.sessionHost.listSessions(J)).map((W)=>oJ(W,$.sessionState.get(W.sessionId)));return c(f,{sessions:Z})}async function gV($,f){let J=M0(f),Q=eJ(f.payload?.metadata),Z=await $.sessionHost.updateSession(J,{metadata:Q}),[W,j]=await Promise.all([d0($,J),l0($,J)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},J));return{version:f.version,requestId:f.requestId,ok:Z.updated,payload:{updated:Z.updated,session:W,...j?{snapshot:j}:{}}}}async function mV($,f){let J=M0(f),Q=await $.sessionHost.deleteSession(J);return $.sessionState.delete(J),c(f,{deleted:Q})}async function vV($,f){let J=M0(f),Q=$.sessionHost.pendingPrompts;if(!Q)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let Z=await Q.list({sessionId:J});return c(f,{sessionId:J,prompts:Z})}async function cV($,f){let J=M0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=typeof f.payload?.prompt==="string"?f.payload.prompt:void 0,W=f.payload?.delivery==="queue"||f.payload?.delivery==="steer"?f.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await j.update({sessionId:J,promptId:Q,prompt:Z,delivery:W});return c(f,X)}async function uV($,f){let J=M0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=$.sessionHost.pendingPrompts;if(!Z)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.delete({sessionId:J,promptId:Q});return c(f,W)}function dV($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var dy=new Set(["skills","workflows","rules","tools","mcp"]);function dQ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function h4($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${f}' must be a string.`);return J}function ly($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${f}' must be a boolean.`);return J}function lV($){if($===void 0)return{};if(!dQ($))throw Error("settings.list payload must be an object.");return{cwd:h4($,"cwd"),workspaceRoot:h4($,"workspaceRoot"),availabilityContext:dQ($.availabilityContext)?$.availabilityContext:void 0}}function py($){if(!dQ($))throw Error("settings.toggle payload must be an object.");let{type:f}=$;if(typeof f!=="string"||!dy.has(f))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...lV($),type:f,id:h4($,"id"),path:h4($,"path"),name:h4($,"name"),enabled:ly($,"enabled")}}class U2{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=uy("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new A$({sessionService:new V$(new H$),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(f)=>this.publish(f),buildEvent:Qf,requestCapability:(f,J,Q,Z,W)=>VV(this.ctx,f,J,Q,Z,W)},this.schedules=new G2({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(f,J)=>{let Q=f==="schedule.execution.completed"?"schedule.execution_completed":f==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(Qf(Q,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new K2(this.schedules),this.settings=$.settingsService??new W1,$.cronOptions)this.cronService=new A4({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((f)=>{OV(this.ctx,f).catch((J)=>{kQ("session event handling failed",J),f5(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:J,severity:"error",handled:!0,context:{eventType:f.type,sessionId:f.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())hQ(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(K1(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let f=await this.dispatchCommand($);return this.captureFailedReply($,f),f}catch(f){throw f5(this.options.telemetry,{component:"core",operation:"hub.command",error:f,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),f}}async dispatchCommand($){switch($.command){case"client.register":return GV(this.ctx,$);case"client.update":return PV(this.ctx,$);case"client.unregister":return FV(this.ctx,$,(f)=>{this.listeners.delete(f),this.detachClientFromSessions(f)});case"client.list":return DV(this.ctx,$);case"session.create":return await CV(this.ctx,$,(f)=>EQ(this.ctx,f));case"session.restore":return await EV(this.ctx,$,(f)=>EQ(this.ctx,f));case"session.attach":return await hV(this.ctx,$);case"session.detach":return await bV(this.ctx,$);case"session.get":return await kV(this.ctx,$);case"session.messages":return await IV(this.ctx,$);case"session.list":return await xV(this.ctx,$);case"session.update":return await gV(this.ctx,$);case"session.pending_prompts":return await vV(this.ctx,$);case"session.update_pending_prompt":return await cV(this.ctx,$);case"session.remove_pending_prompt":return await uV(this.ctx,$);case"session.delete":return await mV(this.ctx,$);case"session.hook":return await LV(this.ctx,$);case"run.start":case"session.send_input":return await RV(this.ctx,$);case"run.abort":return await UV(this.ctx,$);case"capability.request":return await BV(this.ctx,$);case"approval.respond":return await HV(this.ctx,$);case"capability.respond":return KV(this.ctx,$);case"capability.progress":return AV(this.ctx,$);case"ui.notify":return this.publish(Qf("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(Qf("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let f=await this.scheduleCommands.handleCommand($);if(f.ok){let J=dV($.command);if(J)this.publish(Qf(J,f.payload))}return f}}}captureFailedReply($,f){if(f.ok||!f.error||!ry(f.error.code))return;f5(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(f.error.message),severity:f.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:f.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let f=await this.settings.list(lV($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:f instanceof Error?f.message:String(f)}}}}async handleSettingsToggle($){try{let f=await this.settings.toggle(py($.payload));return this.publish(Qf("settings.changed",{types:f.changedTypes,snapshot:f.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f.snapshot,changedTypes:f.changedTypes}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:f instanceof Error?f.message:String(f)}}}}subscribe($,f,J){let Q=this.listeners.get($)??new Set,Z={sessionId:J?.sessionId,listener:f};return Q.add(Z),this.listeners.set($,Q),()=>{let W=this.listeners.get($);if(!W)return;if(W.delete(Z),W.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[f,J]of this.sessionState.entries())if(J.participants.delete($),J.participants.size===0)this.sessionState.delete(f);K1(this.ctx,(f)=>f.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let f of this.listeners.values())for(let J of f){if(J.sessionId&&J.sessionId!==$.sessionId)continue;try{J.listener($)}catch(Q){kQ(`listener threw while publishing ${$.event}`,Q),f5(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function ry($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as ty}from"node:crypto";import sy from"node:http";import oy from"node:net";import{URL as iV}from"node:url";import{WebSocketServer as ey}from"ws";import{captureSdkError as pV,HUB_COMMAND_SLOW_LOG_MS as iy,resolveHubCommandTimeoutMs as ny,safeJsonParse as ay}from"@cline/shared";function lQ($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function rV($,f,J){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:f,message:J}}}class b4{transport;telemetry;constructor($,f){this.transport=$;this.telemetry=f}attach($){let f=new Map,J=new Set,Q=!1,Z=(H)=>{try{$.send(JSON.stringify(H))}catch(Y){console.error(`[hub] failed to send websocket frame: ${Y instanceof Error?Y.stack||Y.message:String(Y)}`)}},W=(H)=>{Z({kind:"event",envelope:H})},j=async(H)=>{try{let Y=JSON.parse(H.data);switch(Y.kind){case"command":{let V=performance.now(),A=!1,B=lQ(Y);m("info","command.start",B);let K=setTimeout(()=>{if(A)return;m("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-V)})},iy),G=this.transport.command(Y.envelope);G.then((_)=>{if(!A)return;m(_.ok?"warn":"error","command.late_end",{...B,elapsedMs:Math.round(performance.now()-V),ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message})},(_)=>{if(!A)return;m("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-V),error:_})});let R=!1,F,P,D=ny(Y.envelope.command,Y.envelope.timeoutMs);try{P=D===null?await G:await Promise.race([G,new Promise((_)=>{F=setTimeout(()=>{R=!0,pV(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${Y.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...B,timeoutMs:D}}),_(rV(Y,"hub_command_timeout",`Hub command ${Y.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${Y.envelope.requestId}.`))},D)})])}catch(_){if(clearTimeout(K),F)clearTimeout(F);throw _}if(A=R,clearTimeout(K),F)clearTimeout(F);let O=Math.round(performance.now()-V);if(R)m("error","command.timeout",{...B,durationMs:O,timeoutMs:D});else m(P.ok?"info":"warn","command.end",{...B,durationMs:O,ok:P.ok,errorCode:P.error?.code,errorMessage:P.error?.message});if(Y.envelope.command==="client.register"&&P.ok){let L=(Y.envelope.payload??{}).clientId?.trim()||Y.envelope.clientId?.trim();if(L)J.add(L)}else if(Y.envelope.command==="client.unregister"&&P.ok){let _=Y.envelope.clientId?.trim();if(_)J.delete(_)}Z({kind:"reply",envelope:P});break}case"stream.subscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;if(f.has(V))break;let A=await this.transport.subscribe(Y.clientId,W,{sessionId:Y.sessionId});f.set(V,A);break}case"stream.unsubscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;f.get(V)?.(),f.delete(V);break}case"reply":case"event":break}}catch(Y){let V=typeof H.data==="string"?ay(H.data):void 0;if(!V||V.kind!=="command"){m("error","rejected malformed websocket frame",{error:Y});return}m("error","command.error",{...lQ(V),error:Y}),pV(this.telemetry,{component:"core",operation:"hub.websocket_command",error:Y,severity:"error",handled:!0,context:lQ(V)}),Z({kind:"reply",envelope:rV(V,"command_failed",Y instanceof Error?Y.message:"Unknown hub error")})}},X=()=>{if(Q)return;Q=!0;for(let H of f.values())H();f.clear();for(let H of J)this.transport.command({version:"v1",command:"client.unregister",clientId:H});J.clear(),$.removeEventListener("message",j),$.removeEventListener("close",X)};return $.addEventListener("message",j),$.addEventListener("close",X),X}}class k4{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,f,J){return this.transport.subscribe($,f,J)}}function $T($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();return String($)}function fT($){return{send(f){$.send(f)},addEventListener(f,J){if(f==="message"){$.on("message",(Q)=>{J({data:$T(Q)})});return}$.on("close",J)},removeEventListener(){}}}function JT($){try{$.write(`HTTP/1.1 400 Bad Request\r
568
570
  Connection: close\r
569
571
  Content-Length: 0\r
570
572
  \r
571
- `),f.end()}catch{f.destroy()}}function tM(f){try{f.write(`HTTP/1.1 401 Unauthorized\r
573
+ `),$.end()}catch{$.destroy()}}function QT($){try{$.write(`HTTP/1.1 401 Unauthorized\r
572
574
  Connection: close\r
573
575
  Content-Length: 0\r
574
576
  \r
575
- `),f.end()}catch{f.destroy()}}function KP(f,$){if(!f||!$)return!1;let J=Buffer.from(f,"utf8"),W=Buffer.from($,"utf8");return J.length===W.length&&dM(J,W)}function yP(f,$){let J=f&&typeof f==="object"&&"code"in f&&typeof f.code==="string"?f.code:void 0,W=f instanceof Error?f.message:typeof f==="string"?f:"Unknown startup error",H=`Failed to start hub server on ${$.host}:${$.port}${$.pathname}: ${W}`,Q=Error(J?`${H} (${J})`:H);if(J)f.code=J,Q.code=J;if(f instanceof Error&&f.stack)Q.stack=`${Q.name}: ${Q.message}
576
- Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($,J)=>{let W=lM.createServer();W.once("error",J),W.listen(0,f,()=>{let H=W.address();if(!H||typeof H==="string"){W.close(()=>J(Error("Failed to resolve free port")));return}let Q=H.port;W.close((Z)=>{if(Z){J(Z);return}$(Q)})})})}function oM(f){return f instanceof Error&&"code"in f&&f.code==="EADDRINUSE"}var OH=new Map,UP="cline-hub-auth.",eM=30000;function GP(f){return Array.isArray(f)?f.join(","):f??""}function fL(f){let $=GP(f).trim();return/^Bearer\s+(.+)$/i.exec($)?.[1]?.trim()||null}function $L(f){for(let $ of GP(f).split(",")){let J=$.trim();if(J.startsWith(UP))return J.slice(UP.length).trim()||null}return null}async function o$(f){let $=f.owner??z0(),J=f.host??"127.0.0.1",W=f.pathname??"/hub",H=f.port??d1(),Q=H===0?await sM(J):H,Z=Q,j=af(J,Q,W),X=Z$(),A=RJ(),P=new Y2(f);await P.start();let B=new h4(new O4(P)),Y=new Set,V=new Date().toISOString(),R={protocolVersion:"v1",buildId:X,pid:process.pid,startedAt:V},U=new Set,K,F,y=async()=>{if(F)return F;return F=(async()=>{if(K)clearInterval(K),K=void 0;for(let _ of U)_.terminate?.();U.clear();for(let _ of Y)_();if(Y.clear(),await new Promise((_,L)=>{M.close((q)=>{if(q){L(q);return}_()})}),await new Promise((_,L)=>{D.close((q)=>{if(q){L(q);return}_()})}),await P.stop(),(await Bf($.discoveryPath))?.url===j)await xf($.discoveryPath)})(),F},D=rM.createServer((T,_)=>{if((T.url??"/")==="/health"){let q=JSON.stringify({hubId:P.getHubId(),...R,authToken:"",host:J,port:Z,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(q);return}if((T.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(R));return}if(new FP(T.url??"/",`http://${J}:${Z}`).pathname==="/shutdown"&&T.method==="POST"){if(!KP(fL(T.headers.authorization),A)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{y()});return}_.statusCode=404,_.end("Not found")}),M=new pM({noServer:!0});K=setInterval(()=>{for(let T of U){if(T.isAlive===!1){try{T.terminate?.()}catch{}U.delete(T);continue}T.isAlive=!1;try{T.ping?.()}catch{try{T.terminate?.()}catch{}U.delete(T)}}},eM),D.on("upgrade",(T,_,L)=>{if(new FP(T.url??"/",`http://${J}:${Z}`).pathname!==W){_.destroy();return}if(!KP($L(T.headers["sec-websocket-protocol"]),A)){tM(_);return}try{M.handleUpgrade(T,_,L,(Wf)=>{let Hf=Wf;Hf.isAlive=!0,Hf.on("pong",()=>{Hf.isAlive=!0}),U.add(Hf);let o=B.attach(nM(Wf));Y.add(o),Wf.once("close",()=>{U.delete(Hf),o(),Y.delete(o)})})}catch{aM(_)}});try{await new Promise((T,_)=>{D.once("error",(L)=>{_(yP(L,{host:J,port:Q,pathname:W}))}),D.listen(Q,J,()=>{let L=D.address();if(!L||typeof L==="string"){_(yP(Error("Failed to resolve hub port"),{host:J,port:Q,pathname:W}));return}Z=L.port,j=af(J,Z,W),T()})})}catch(T){if(K)clearInterval(K),K=void 0;throw await P.stop().catch(()=>{return}),T}return await FJ($.discoveryPath,{hubId:P.getHubId(),protocolVersion:"v1",buildId:X,authToken:A,host:J,port:Z,url:j,pid:process.pid,startedAt:V,updatedAt:V}),{host:J,port:Z,url:j,authToken:A,close:y}}async function xJ(f){let $=f.owner??z0(),J=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=f.host??"127.0.0.1",H=f.port??d1(),Q=f.pathname??"/hub",Z=af(W,H,Q),j=$.discoveryPath,X=(P)=>{if(!J)j$(P.url,P.authToken);return P},A=OH.get(j);if(A){let P=await A;if(P.url===Z)return X({server:P,url:P.url,authToken:P.authToken,action:"reuse"})}return await KJ($.discoveryPath,async()=>{let P=await Bf($.discoveryPath);if(P?.url&&(P.url===Z||f.allowPortFallback===!0)){let R=await Uf(P.url);if(R?.url&&await J0(R.url,{authToken:P.authToken}))return X({url:R.url,authToken:P.authToken,action:"reuse"})}if((await Uf(Z))?.url||P?.url)await xf($.discoveryPath);let V=async(R)=>{let U=o$({...R,owner:$});OH.set(j,U);try{let K=await U;return X({server:K,url:K.url,authToken:K.authToken,action:"started"})}catch(K){throw OH.delete(j),K}};try{return await V(f)}catch(R){if(!f.allowPortFallback||!oM(R))throw R;return await V({...f,port:0})}})}async function TP(f){let $=gf({host:f.host,port:f.port,pathname:f.pathname});return await o$({...f,...$,owner:Af()})}async function DP(f){let $=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=gf({host:f.host,port:f.port,pathname:f.pathname});return await xJ({...f,...J,allowPortFallback:f.allowPortFallback??!$,owner:Af()})}zH();var LP={};N(LP,{registerRemoteConfigSessionBlobUpload:()=>cJ,readRemoteConfigSessionBlobUploadMetadata:()=>NH,prepareRemoteConfigCoreIntegration:()=>wH,createRemoteConfigSessionMessagesArtifactUploader:()=>qH,buildRemoteConfigSessionBlobUploadMetadata:()=>vJ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>uJ});import{buildRemoteConfigSessionBlobUploadMetadata as vJ,clearRemoteConfigSessionBlobUpload as JL,createClineTelemetryServiceConfig as WL,createSessionId as HL,createRemoteConfigSessionMessagesArtifactUploader as QL,prepareRemoteConfigRuntime as ZL,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as uJ,readRemoteConfigSessionBlobUploadMetadata as NH,registerRemoteConfigSessionBlobUpload as cJ}from"@cline/shared";function jL(f,$){let J=f.telemetry||$.telemetryService?{...$.telemetryService??{},...f.telemetry??{}}:void 0;if(!J)return;return C0(WL(J)).telemetry}function qH(){let f=QL();return{async uploadMessagesFile($){await f.uploadMessagesFile($)}}}async function wH(f){let $=await ZL(f),J=jL($,f),W=[$.pluginDefinition],H=$.claims?.subject,Q=vJ($.bundle?.remoteConfig,H),Z;return{prepared:$,extensions:W,telemetry:J,applyToStartSessionInput(j){let X=j.config.extensions??[],A=j.config.telemetry,P=Q?j.config.sessionId?.trim()||HL():j.config.sessionId;if(P&&Q)Z=P;let B=P&&Q?cJ(P,$.bundle?.remoteConfig,H):void 0,Y=B?{...j.sessionMetadata??{},[uJ]:B}:j.sessionMetadata;return{...j,...Y?{sessionMetadata:Y}:{},config:{...j.config,...P?{sessionId:P}:{},extensions:[...X,...W],telemetry:J??A}}},async dispose(){if(Z)JL(Z)}}}var CP={};N(CP,{createTeamName:()=>dJ,DefaultRuntimeBuilder:()=>F2});import{hasRuntimeConfigExtension as DL}from"@cline/shared";import{nanoid as _L}from"nanoid";M0();var wP={};N(wP,{createLocalTeamStore:()=>SH,SqliteTeamStore:()=>e$,FileTeamStore:()=>z4});import{appendFileSync as XL,existsSync as V2,mkdirSync as hP,readdirSync as AL,readFileSync as OP,renameSync as PL,writeFileSync as BL}from"node:fs";import{join as bH}from"node:path";import{resolveTeamDataDir as YL}from"@cline/shared/storage";function zP(){return new Date().toISOString()}function CH(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function NP(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}class z4{teamDirPath;constructor(f={}){this.teamDirPath=f.teamDir??YL()}init(){this.ensureTeamDir()}listTeamNames(){if(!V2(this.teamDirPath))return[];return AL(this.teamDirPath,{withFileTypes:!0}).filter((f)=>f.isDirectory()).filter((f)=>V2(this.statePath(f.name))).map((f)=>f.name).sort()}readState(f){let $=this.readEnvelope(f);return $?.teamState?NP($.teamState):void 0}readHistory(f,$=200){let J=this.historyPath(f);if(!V2(J))return[];return OP(J,"utf8").split(`
577
- `).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,$)}loadRuntime(f){let $=this.readEnvelope(f);return{state:$?.teamState?NP($.teamState):void 0,teammates:$?.teammates??[],interruptedRunIds:[]}}handleTeamEvent(f,$){this.ensureTeamSubdir(f),XL(this.historyPath(f),`${JSON.stringify({ts:zP(),eventType:$.type,payload:$})}
578
- `,"utf8")}persistRuntime(f,$,J){this.ensureTeamSubdir(f);let W={version:1,updatedAt:zP(),teamState:$,teammates:J},H=this.statePath(f),Q=`${H}.tmp`;BL(Q,`${JSON.stringify(W,null,2)}
579
- `,"utf8"),PL(Q,H)}markInProgressRunsInterrupted(f,$){let J=this.readEnvelope(f);if(!J?.teamState?.runs?.length)return[];let W=J.teamState.runs.filter((Q)=>Q.status==="queued"||Q.status==="running").map((Q)=>Q.id);if(W.length===0)return[];let H=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((Q)=>Q.status==="queued"||Q.status==="running"?{...Q,status:"interrupted",error:$,endedAt:H}:Q)},this.persistRuntime(f,J.teamState,J.teammates),W}ensureTeamDir(){if(!V2(this.teamDirPath))hP(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir(f){let $=bH(this.ensureTeamDir(),CH(f));if(!V2($))hP($,{recursive:!0});return $}statePath(f){return bH(this.ensureTeamDir(),CH(f),"state.json")}historyPath(f){return bH(this.ensureTeamDir(),CH(f),"task-history.jsonl")}readEnvelope(f){let $=this.statePath(f);if(!V2($))return;try{let J=JSON.parse(OP($,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as VL,mkdirSync as RL}from"node:fs";import{join as FL}from"node:path";import{safeJsonParse as qP}from"@cline/shared";import{loadSqliteDb as KL,nowIso as EH}from"@cline/shared/db";import{resolveDbDataDir as yL}from"@cline/shared/storage";function UL(){return yL()}function R2(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function GL(f){let $=qP(f);if(!Array.isArray($))return[];let J=[];for(let W of $){if(!W||typeof W!=="object")continue;let H=W,Q=H.agentId,Z=H.rolePrompt;if(typeof Q!=="string"||!Q.trim())continue;if(typeof Z!=="string"||!Z.trim())continue;let j={agentId:Q.trim(),rolePrompt:Z};if(typeof H.modelId==="string"&&H.modelId.trim())j.modelId=H.modelId.trim();if(typeof H.maxIterations==="number"&&Number.isFinite(H.maxIterations))j.maxIterations=Math.max(1,Math.floor(H.maxIterations));J.push(j)}return J}function TL(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}class e${teamDirPath;db;constructor(f={}){this.teamDirPath=f.teamDir??UL()}init(){this.getRawDb()}ensureTeamDir(){if(!VL(this.teamDirPath))RL(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return FL(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let f=KL(this.dbPath());return this.ensureSchema(f),this.db=f,f}ensureSchema(f){if(f.exec("PRAGMA journal_mode = WAL;"),f.exec("PRAGMA busy_timeout = 5000;"),f.exec(`
577
+ `),$.end()}catch{$.destroy()}}function nV($,f){if(!$||!f)return!1;let J=Buffer.from($,"utf8"),Q=Buffer.from(f,"utf8");return J.length===Q.length&&ty(J,Q)}function aV($,f){let J=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",Z=`Failed to start hub server on ${f.host}:${f.port}${f.pathname}: ${Q}`,W=Error(J?`${Z} (${J})`:Z);if(J)$.code=J,W.code=J;if($ instanceof Error&&$.stack)W.stack=`${W.name}: ${W.message}
578
+ Caused by: ${$.stack}`;return W}async function ZT($){return await new Promise((f,J)=>{let Q=oy.createServer();Q.once("error",J),Q.listen(0,$,()=>{let Z=Q.address();if(!Z||typeof Z==="string"){Q.close(()=>J(Error("Failed to resolve free port")));return}let W=Z.port;Q.close((j)=>{if(j){J(j);return}f(W)})})})}function WT($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var pQ=new Map,tV="cline-hub-auth.",jT=30000;function sV($){return Array.isArray($)?$.join(","):$??""}function XT($){let f=sV($).trim();return/^Bearer\s+(.+)$/i.exec(f)?.[1]?.trim()||null}function HT($){for(let f of sV($).split(",")){let J=f.trim();if(J.startsWith(tV))return J.slice(tV.length).trim()||null}return null}async function Wf($){let f=$.owner??w$(),J=$.host??"127.0.0.1",Q=$.pathname??"/hub",Z=$.port??$2(),W=Z===0?await ZT(J):Z,j=W,X=t0(J,W,Q),H=Y1(),Y=EJ(),V=new U2($);await V.start();let A=new b4(new k4(V),$.telemetry),B=new Set,K=new Date().toISOString(),G={protocolVersion:"v1",buildId:H,pid:process.pid,startedAt:K},R=new Set,F,P,D=async()=>{if(P)return P;return P=(async()=>{if(F)clearInterval(F),F=void 0;for(let z of R)z.terminate?.();R.clear();for(let z of B)z();if(B.clear(),await new Promise((z,y)=>{_.close((w)=>{if(w){y(w);return}z()})}),await new Promise((z,y)=>{O.close((w)=>{if(w){y(w);return}z()})}),await V.stop(),(await A0(f.discoveryPath))?.url===X)await v0(f.discoveryPath)})(),P},O=sy.createServer((L,z)=>{if((L.url??"/")==="/health"){let w=JSON.stringify({hubId:V.getHubId(),...G,authToken:"",host:J,port:j,url:X,updatedAt:new Date().toISOString()});z.statusCode=200,z.setHeader("content-type","application/json"),z.end(w);return}if((L.url??"/")==="/version"){z.statusCode=200,z.setHeader("content-type","application/json"),z.end(JSON.stringify(G));return}if(new iV(L.url??"/",`http://${J}:${j}`).pathname==="/shutdown"&&L.method==="POST"){if(!nV(XT(L.headers.authorization),Y)){z.statusCode=401,z.end("Unauthorized");return}z.statusCode=202,z.setHeader("content-type","application/json"),z.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}z.statusCode=404,z.end("Not found")}),_=new ey({noServer:!0});F=setInterval(()=>{for(let L of R){if(L.isAlive===!1){try{L.terminate?.()}catch{}R.delete(L);continue}L.isAlive=!1;try{L.ping?.()}catch{try{L.terminate?.()}catch{}R.delete(L)}}},jT),O.on("upgrade",(L,z,y)=>{if(new iV(L.url??"/",`http://${J}:${j}`).pathname!==Q){z.destroy();return}if(!nV(HT(L.headers["sec-websocket-protocol"]),Y)){QT(z);return}try{_.handleUpgrade(L,z,y,(Q0)=>{let Z0=Q0;Z0.isAlive=!0,Z0.on("pong",()=>{Z0.isAlive=!0}),R.add(Z0);let o=A.attach(fT(Q0));B.add(o),Q0.once("close",()=>{R.delete(Z0),o(),B.delete(o)})})}catch{JT(z)}});try{await new Promise((L,z)=>{O.once("error",(y)=>{z(aV(y,{host:J,port:W,pathname:Q}))}),O.listen(W,J,()=>{let y=O.address();if(!y||typeof y==="string"){z(aV(Error("Failed to resolve hub port"),{host:J,port:W,pathname:Q}));return}j=y.port,X=t0(J,j,Q),L()})})}catch(L){if(F)clearInterval(F),F=void 0;throw await V.stop().catch(()=>{return}),L}return await hJ(f.discoveryPath,{hubId:V.getHubId(),protocolVersion:"v1",buildId:H,authToken:Y,host:J,port:j,url:X,pid:process.pid,startedAt:K,updatedAt:K}),{host:J,port:j,url:X,authToken:Y,close:D}}async function J5($){let f=$.owner??w$(),J=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",Z=$.port??$2(),W=$.pathname??"/hub",j=t0(Q,Z,W),X=f.discoveryPath,H=(V)=>{if(!J)V1(V.url,V.authToken);return V},Y=pQ.get(X);if(Y){let V=await Y;if(V.url===j)return H({server:V,url:V.url,authToken:V.authToken,action:"reuse"})}return await bJ(f.discoveryPath,async()=>{let V=await A0(f.discoveryPath);if(V?.url&&(V.url===j||$.allowPortFallback===!0)){let G=await R0(V.url);if(G?.url&&await W$(G.url,{authToken:V.authToken}))return H({url:G.url,authToken:V.authToken,action:"reuse"})}if((await R0(j))?.url||V?.url)await v0(f.discoveryPath);let K=async(G)=>{let R=Wf({...G,owner:f});pQ.set(X,R);try{let F=await R;return H({server:F,url:F.url,authToken:F.authToken,action:"started"})}catch(F){throw pQ.delete(X),F}};try{return await K($)}catch(G){if(!$.allowPortFallback||!WT(G))throw G;return await K({...$,port:0})}})}async function oV($){let f=c0({host:$.host,port:$.port,pathname:$.pathname});return await Wf({...$,...f,owner:Y0()})}async function eV($){let f=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=c0({host:$.host,port:$.port,pathname:$.pathname});return await J5({...$,...J,allowPortFallback:$.allowPortFallback??!f,owner:Y0()})}rQ();var JA={};q(JA,{registerRemoteConfigSessionBlobUpload:()=>j5,readRemoteConfigSessionBlobUploadMetadata:()=>iQ,prepareRemoteConfigCoreIntegration:()=>aQ,createRemoteConfigSessionMessagesArtifactUploader:()=>nQ,buildRemoteConfigSessionBlobUploadMetadata:()=>Z5,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W5});import{buildRemoteConfigSessionBlobUploadMetadata as Z5,clearRemoteConfigSessionBlobUpload as YT,createClineTelemetryServiceConfig as VT,createSessionId as AT,createRemoteConfigSessionMessagesArtifactUploader as BT,prepareRemoteConfigRuntime as KT,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as W5,readRemoteConfigSessionBlobUploadMetadata as iQ,registerRemoteConfigSessionBlobUpload as j5}from"@cline/shared";function GT($,f){let J=$.telemetry||f.telemetryService?{...f.telemetryService??{},...$.telemetry??{}}:void 0;if(!J)return;return b$(VT(J)).telemetry}function nQ(){let $=BT();return{async uploadMessagesFile(f){await $.uploadMessagesFile(f)}}}async function aQ($){let f=await KT($),J=GT(f,$),Q=[f.pluginDefinition],Z=f.claims?.subject,W=Z5(f.bundle?.remoteConfig,Z),j;return{prepared:f,extensions:Q,telemetry:J,applyToStartSessionInput(X){let H=X.config.extensions??[],Y=X.config.telemetry,V=W?X.config.sessionId?.trim()||AT():X.config.sessionId;if(V&&W)j=V;let A=V&&W?j5(V,f.bundle?.remoteConfig,Z):void 0,B=A?{...X.sessionMetadata??{},[W5]:A}:X.sessionMetadata;return{...X,...B?{sessionMetadata:B}:{},config:{...X.config,...V?{sessionId:V}:{},extensions:[...H,...Q],telemetry:J??Y}}},async dispose(){if(j)YT(j)}}}var VA={};q(VA,{createTeamName:()=>X5,DefaultRuntimeBuilder:()=>z2});import{hasRuntimeConfigExtension as qT}from"@cline/shared";import{nanoid as wT}from"nanoid";T$();var HA={};q(HA,{createLocalTeamStore:()=>eQ,SqliteTeamStore:()=>jf,FileTeamStore:()=>I4});import{appendFileSync as PT,existsSync as L2,mkdirSync as QA,readdirSync as FT,readFileSync as ZA,renameSync as DT,writeFileSync as RT}from"node:fs";import{join as tQ}from"node:path";import{resolveTeamDataDir as UT}from"@cline/shared/storage";function WA(){return new Date().toISOString()}function sQ($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function jA($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class I4{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??UT()}init(){this.ensureTeamDir()}listTeamNames(){if(!L2(this.teamDirPath))return[];return FT(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>L2(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let f=this.readEnvelope($);return f?.teamState?jA(f.teamState):void 0}readHistory($,f=200){let J=this.historyPath($);if(!L2(J))return[];return ZA(J,"utf8").split(`
579
+ `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,f)}loadRuntime($){let f=this.readEnvelope($);return{state:f?.teamState?jA(f.teamState):void 0,teammates:f?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,f){this.ensureTeamSubdir($),PT(this.historyPath($),`${JSON.stringify({ts:WA(),eventType:f.type,payload:f})}
580
+ `,"utf8")}persistRuntime($,f,J){this.ensureTeamSubdir($);let Q={version:1,updatedAt:WA(),teamState:f,teammates:J},Z=this.statePath($),W=`${Z}.tmp`;RT(W,`${JSON.stringify(Q,null,2)}
581
+ `,"utf8"),DT(W,Z)}markInProgressRunsInterrupted($,f){let J=this.readEnvelope($);if(!J?.teamState?.runs?.length)return[];let Q=J.teamState.runs.filter((W)=>W.status==="queued"||W.status==="running").map((W)=>W.id);if(Q.length===0)return[];let Z=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((W)=>W.status==="queued"||W.status==="running"?{...W,status:"interrupted",error:f,endedAt:Z}:W)},this.persistRuntime($,J.teamState,J.teammates),Q}ensureTeamDir(){if(!L2(this.teamDirPath))QA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let f=tQ(this.ensureTeamDir(),sQ($));if(!L2(f))QA(f,{recursive:!0});return f}statePath($){return tQ(this.ensureTeamDir(),sQ($),"state.json")}historyPath($){return tQ(this.ensureTeamDir(),sQ($),"task-history.jsonl")}readEnvelope($){let f=this.statePath($);if(!L2(f))return;try{let J=JSON.parse(ZA(f,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as LT,mkdirSync as OT}from"node:fs";import{join as zT}from"node:path";import{safeJsonParse as XA}from"@cline/shared";import{loadSqliteDb as _T,nowIso as oQ}from"@cline/shared/db";import{resolveDbDataDir as yT}from"@cline/shared/storage";function TT(){return yT()}function O2($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function NT($){let f=XA($);if(!Array.isArray(f))return[];let J=[];for(let Q of f){if(!Q||typeof Q!=="object")continue;let Z=Q,W=Z.agentId,j=Z.rolePrompt;if(typeof W!=="string"||!W.trim())continue;if(typeof j!=="string"||!j.trim())continue;let X={agentId:W.trim(),rolePrompt:j};if(typeof Z.modelId==="string"&&Z.modelId.trim())X.modelId=Z.modelId.trim();if(typeof Z.maxIterations==="number"&&Number.isFinite(Z.maxIterations))X.maxIterations=Math.max(1,Math.floor(Z.maxIterations));J.push(X)}return J}function MT($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class jf{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??TT()}init(){this.getRawDb()}ensureTeamDir(){if(!LT(this.teamDirPath))OT(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return zT(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=_T(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
580
582
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
581
583
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
582
584
  version INTEGER NOT NULL
583
585
  );
584
- `),!f.prepare("SELECT version FROM team_store_schema_version WHERE lock = 1").get())f.prepare("INSERT INTO team_store_schema_version (lock, version) VALUES (1, 1)").run();f.exec(`
586
+ `),!$.prepare("SELECT version FROM team_store_schema_version WHERE lock = 1").get())$.prepare("INSERT INTO team_store_schema_version (lock, version) VALUES (1, 1)").run();$.exec(`
585
587
  CREATE TABLE IF NOT EXISTS team_events (
586
588
  id INTEGER PRIMARY KEY AUTOINCREMENT,
587
589
  team_name TEXT NOT NULL,
@@ -591,17 +593,17 @@ Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($
591
593
  causation_id TEXT,
592
594
  correlation_id TEXT
593
595
  );
594
- `),f.exec(`
596
+ `),$.exec(`
595
597
  CREATE INDEX IF NOT EXISTS idx_team_events_name_ts
596
598
  ON team_events(team_name, ts DESC);
597
- `),f.exec(`
599
+ `),$.exec(`
598
600
  CREATE TABLE IF NOT EXISTS team_runtime_snapshot (
599
601
  team_name TEXT PRIMARY KEY,
600
602
  state_json TEXT NOT NULL,
601
603
  teammates_json TEXT NOT NULL,
602
604
  updated_at TEXT NOT NULL
603
605
  );
604
- `),f.exec(`
606
+ `),$.exec(`
605
607
  CREATE TABLE IF NOT EXISTS team_tasks (
606
608
  team_name TEXT NOT NULL,
607
609
  task_id TEXT NOT NULL,
@@ -615,7 +617,7 @@ Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($
615
617
  updated_at TEXT NOT NULL,
616
618
  PRIMARY KEY(team_name, task_id)
617
619
  );
618
- `),f.exec(`
620
+ `),$.exec(`
619
621
  CREATE TABLE IF NOT EXISTS team_runs (
620
622
  team_name TEXT NOT NULL,
621
623
  run_id TEXT NOT NULL,
@@ -631,10 +633,10 @@ Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($
631
633
  version INTEGER NOT NULL DEFAULT 1,
632
634
  PRIMARY KEY(team_name, run_id)
633
635
  );
634
- `),f.exec(`
636
+ `),$.exec(`
635
637
  CREATE INDEX IF NOT EXISTS idx_team_runs_status
636
638
  ON team_runs(team_name, status);
637
- `),f.exec(`
639
+ `),$.exec(`
638
640
  CREATE TABLE IF NOT EXISTS team_outcomes (
639
641
  team_name TEXT NOT NULL,
640
642
  outcome_id TEXT NOT NULL,
@@ -645,7 +647,7 @@ Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($
645
647
  version INTEGER NOT NULL DEFAULT 1,
646
648
  PRIMARY KEY(team_name, outcome_id)
647
649
  );
648
- `),f.exec(`
650
+ `),$.exec(`
649
651
  CREATE TABLE IF NOT EXISTS team_outcome_fragments (
650
652
  team_name TEXT NOT NULL,
651
653
  outcome_id TEXT NOT NULL,
@@ -660,13 +662,13 @@ Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($
660
662
  version INTEGER NOT NULL DEFAULT 1,
661
663
  PRIMARY KEY(team_name, fragment_id)
662
664
  );
663
- `)}run(f,$=[]){return this.getRawDb().prepare(f).run(...$)}queryOne(f,$=[]){return this.getRawDb().prepare(f).get(...$)??void 0}queryAll(f,$=[]){return this.getRawDb().prepare(f).all(...$)}withTransaction(f){let $=this.getRawDb();$.exec("BEGIN IMMEDIATE;");try{f(),$.exec("COMMIT;")}catch(J){try{$.exec("ROLLBACK;")}catch{}throw J}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map((f)=>f.team_name)}readState(f){let $=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[R2(f)]);if(!$)return;let J=qP($.state_json);if(!J)return;try{return TL(J)}catch{return}}readHistory(f,$=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[R2(f),$]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime(f){let $=R2(f),J=this.readState($),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[$]),H=W?GL(W.teammates_json):[];return{state:J,teammates:H,interruptedRunIds:[]}}appendTeamEvent(f,$,J,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
664
- VALUES (?, ?, ?, ?, NULL, ?)`,[R2(f),EH(),$,JSON.stringify(J),W??null])}persistRuntime(f,$,J){let W=R2(f),H=EH();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
665
+ `)}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}withTransaction($){let f=this.getRawDb();f.exec("BEGIN IMMEDIATE;");try{$(),f.exec("COMMIT;")}catch(J){try{f.exec("ROLLBACK;")}catch{}throw J}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let f=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[O2($)]);if(!f)return;let J=XA(f.state_json);if(!J)return;try{return MT(J)}catch{return}}readHistory($,f=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[O2($),f]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime($){let f=O2($),J=this.readState(f),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[f]),Z=Q?NT(Q.teammates_json):[];return{state:J,teammates:Z,interruptedRunIds:[]}}appendTeamEvent($,f,J,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
666
+ VALUES (?, ?, ?, ?, NULL, ?)`,[O2($),oQ(),f,JSON.stringify(J),Q??null])}persistRuntime($,f,J){let Q=O2($),Z=oQ();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
665
667
  VALUES (?, ?, ?, ?)
666
668
  ON CONFLICT(team_name) DO UPDATE SET
667
669
  state_json = excluded.state_json,
668
670
  teammates_json = excluded.teammates_json,
669
- updated_at = excluded.updated_at`,[W,JSON.stringify($),JSON.stringify(J),H]);for(let Q of $.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
671
+ updated_at = excluded.updated_at`,[Q,JSON.stringify(f),JSON.stringify(J),Z]);for(let W of f.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
670
672
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
671
673
  ON CONFLICT(team_name, task_id) DO UPDATE SET
672
674
  title = excluded.title,
@@ -676,7 +678,7 @@ Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($
676
678
  depends_on_json = excluded.depends_on_json,
677
679
  summary = excluded.summary,
678
680
  version = team_tasks.version + 1,
679
- updated_at = excluded.updated_at`,[W,Q.id,Q.title,Q.description,Q.status,Q.assignee??null,JSON.stringify(Q.dependsOn??[]),Q.summary??null,Q.updatedAt.toISOString()]);for(let Q of $.runs??[])this.run(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
681
+ updated_at = excluded.updated_at`,[Q,W.id,W.title,W.description,W.status,W.assignee??null,JSON.stringify(W.dependsOn??[]),W.summary??null,W.updatedAt.toISOString()]);for(let W of f.runs??[])this.run(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
680
682
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
681
683
  ON CONFLICT(team_name, run_id) DO UPDATE SET
682
684
  agent_id = excluded.agent_id,
@@ -688,14 +690,14 @@ Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($
688
690
  error = excluded.error,
689
691
  lease_owner = excluded.lease_owner,
690
692
  heartbeat_at = excluded.heartbeat_at,
691
- version = team_runs.version + 1`,[W,Q.id,Q.agentId,Q.taskId??null,Q.status,Q.message,Q.startedAt?Q.startedAt.toISOString():null,Q.endedAt?Q.endedAt.toISOString():null,Q.error??null,Q.leaseOwner??null,Q.heartbeatAt?Q.heartbeatAt.toISOString():null]);for(let Q of $.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
693
+ version = team_runs.version + 1`,[Q,W.id,W.agentId,W.taskId??null,W.status,W.message,W.startedAt?W.startedAt.toISOString():null,W.endedAt?W.endedAt.toISOString():null,W.error??null,W.leaseOwner??null,W.heartbeatAt?W.heartbeatAt.toISOString():null]);for(let W of f.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
692
694
  VALUES (?, ?, ?, ?, ?, ?, 1)
693
695
  ON CONFLICT(team_name, outcome_id) DO UPDATE SET
694
696
  title = excluded.title,
695
697
  status = excluded.status,
696
698
  schema_json = excluded.schema_json,
697
699
  finalized_at = excluded.finalized_at,
698
- version = team_outcomes.version + 1`,[W,Q.id,Q.title,Q.status,JSON.stringify({requiredSections:Q.requiredSections}),Q.finalizedAt?Q.finalizedAt.toISOString():null]);for(let Q of $.outcomeFragments??[])this.run(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
700
+ version = team_outcomes.version + 1`,[Q,W.id,W.title,W.status,JSON.stringify({requiredSections:W.requiredSections}),W.finalizedAt?W.finalizedAt.toISOString():null]);for(let W of f.outcomeFragments??[])this.run(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
699
701
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
700
702
  ON CONFLICT(team_name, fragment_id) DO UPDATE SET
701
703
  outcome_id = excluded.outcome_id,
@@ -706,15 +708,15 @@ Caused by: ${f.stack}`;return Q}async function sM(f){return await new Promise(($
706
708
  status = excluded.status,
707
709
  reviewed_by = excluded.reviewed_by,
708
710
  reviewed_at = excluded.reviewed_at,
709
- version = team_outcome_fragments.version + 1`,[W,Q.outcomeId,Q.id,Q.section,Q.sourceAgentId,Q.sourceRunId??null,Q.content,Q.status,Q.reviewedBy??null,Q.reviewedAt?Q.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted(f,$){let J=R2(f),W=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[J]);if(W.length===0)return[];let H=EH();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
710
- WHERE team_name = ? AND status IN ('queued', 'running')`,[$,H,J]),W.map((Q)=>Q.run_id)}handleTeamEvent(f,$){this.appendTeamEvent(f,$.type,$)}}function SH(f={}){try{let $=new e$(f);return $.init(),$}catch{let $=new z4({teamDir:f.teamDir});return $.init(),$}}function kH(f,$){return DL(f,$)}function ML(f,$){let J=$?.["*"]??{},W=$?.[f]??{};return{...J,...W}.enabled!==!1}function LL(f,$){return f.filter((J)=>ML(J.name,$))}function bP(f,$){return w$(LL(f,$))}function dJ(){return`team-${_L(5)}`}function IH(f,$,J,W,H,Q,Z,j){let X=Ef[K0({mode:J})],A=A1($,W,J,H??X1);return bP(L$({cwd:f,...X,enableSkills:!!Z,...A,executors:{...Z?{skills:Z}:{},...j??{}}}),Q)}function hL(f){return IH(f.cwd,f.providerId,f.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,OL,f.toolExecutors).some(($)=>$.name==="skills")}var OL=async()=>"";async function zL(f){let $=P$();if(!f2({filePath:$}))return{tools:[]};let J=new i$({clientFactory:e1()}),W;try{W=await $2(J,{filePath:$})}catch(j){await J.dispose().catch(()=>{});let X=j instanceof Error?j.message:String(j);return f?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${X}`),{tools:[]}}let H=W.filter((j)=>j.disabled!==!0),Q=await Promise.allSettled(H.map((j)=>J2({serverName:j.name,provider:J}))),Z=[];for(let[j,X]of Q.entries())if(X.status==="fulfilled")Z.push(...X.value);else{let A=X.reason instanceof Error?X.reason.message:String(X.reason);f?.log(`[mcp] Failed to load tools from MCP server "${H[j].name}", skipping: ${A}`)}return{tools:Z,shutdown:async()=>{await J.dispose()}}}function NL(f,$){if(!f)return;for(let J of f.getTeammateIds())try{f.shutdownTeammate(J,$)}catch{}}function qL(f){if(f===void 0)return!0;switch(f){case"session_stop":case"session_complete":case"session_error":case"session_manager_dispose":case"cli_run_shutdown":case"cli_interactive_shutdown":case"cli_interactive_startup_cancelled":case"provider_change":case"acp_shutdown":case"hub_server_stop":case"vscode_webview_dispose":return!0;default:return!1}}function wL(f){let $=Ef[K0({mode:f.mode})];return{sessionId:f.sessionId||"",mode:f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act",enableTools:f.enableTools!==!1,enableSpawnAgent:f.enableSpawnAgent??$.enableSpawnAgent??!0,enableAgentTeams:f.enableAgentTeams??$.enableAgentTeams??!0,disableMcpSettingsTools:f.disableMcpSettingsTools===!0,yolo:f.yolo===!0,missionLogIntervalSteps:typeof f.missionLogIntervalSteps==="number"&&Number.isFinite(f.missionLogIntervalSteps)?f.missionLogIntervalSteps:3,missionLogIntervalMs:typeof f.missionLogIntervalMs==="number"&&Number.isFinite(f.missionLogIntervalMs)?f.missionLogIntervalMs:120000}}class F2{teamRuntimeEntries=new Map;async build(f){let{config:$,hooks:J,extensions:W,logger:H,telemetry:Q,createSpawnTool:Z,onTeamRestored:j,userInstructionService:X,configExtensions:A,toolExecutors:P}=f,B=f.onTeamEvent??(()=>{}),Y=wL($),V=nf(),R=[],U=$.teamName?.trim()||dJ(),K=$.sessionId?.trim()||U,F=kH(A,"rules"),y=kH(A,"skills"),D=kH(A,"workflows"),M=F||y||D,T=!1,_=Boolean(X),L=X,q;if(!L&&M)L=$$({skills:{workspacePath:$.cwd},rules:{workspacePath:$.cwd},workflows:{workspacePath:$.cwd}});if(L)await L.start().catch(()=>{});let Wf=Y.enableTools&&y&&Boolean(L)&&(_||L?.hasConfiguredSkills($.skills)===!0)&&hL({cwd:$.cwd,providerId:$.providerId,mode:Y.mode,modelId:$.modelId,toolRoutingRules:$.toolRoutingRules,toolPolicies:$.toolPolicies,toolExecutors:P}),Hf=L&&M?L.createExtension({includeRules:F,includeSkills:y,includeWorkflows:D,registerSkillsTool:Wf,allowedSkillNames:$.skills}):void 0,o=Hf?[...W??$.extensions??[],Hf]:W??$.extensions;if(Y.enableTools){if(R.push(...IH($.cwd,$.providerId,Y.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,void 0,P)),!Y.disableMcpSettingsTools){let r=await zL($.logger);R.push(...r.tools),q=r.shutdown}}let c,Gf=Y.enableAgentTeams?SH():void 0,E0=Gf?.loadRuntime(K),i=E0?.state,P0=E0?.teammates??[],S=new Map(P0.map((r)=>[r.agentId,r])),n=$.sessionId||U,B0,Y0=[],V$=!1,$1=B1({providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,apiKey:$.apiKey??"",baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking,maxIterations:$.maxIterations,hooks:J,extensions:o,logger:H??$.logger,telemetry:f.telemetry??$.telemetry,workspaceMetadata:$.workspaceMetadata});if(!this.teamRuntimeEntries.has(n))this.teamRuntimeEntries.set(n,{delegatedAgentConfigProvider:$1});let y2=()=>{if(!Y.enableAgentTeams)return;let r=this.teamRuntimeEntries.get(n)??{delegatedAgentConfigProvider:$1};if(this.teamRuntimeEntries.set(n,r),c=r.runtime,!c){if(c=new p$({teamName:U,leadAgentId:$.sessionId||"lead",missionLogIntervalSteps:Y.missionLogIntervalSteps,missionLogIntervalMs:Y.missionLogIntervalMs,onTeamEvent:($f)=>{if(B($f),c&&Gf){if($f.type==="teammate_spawned"&&$f.teammate?.rolePrompt){let V0={agentId:$f.agentId,rolePrompt:$f.teammate.rolePrompt,modelId:$f.teammate.modelId,maxIterations:$f.teammate.maxIterations};S.set(V0.agentId,V0)}if($f.type==="teammate_shutdown"&&!qL($f.reason))S.delete($f.agentId);Gf.handleTeamEvent(K,$f),Gf.persistRuntime(K,c.exportState(),Array.from(S.values()))}}}),i)c.hydrateState(i),V$=!0;r.runtime=c}if(!T){if(!c)return;T=!0;let $f=R1({runtime:c,leadAgentId:$.sessionId||"lead",restoredFromPersistence:Boolean(i),restoredTeammates:P0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(V0)=>{Y0=V0,B0?.addTools(V0)},createBaseTools:Y.enableTools?()=>IH($.cwd,$.providerId,Y.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,void 0,P):void 0,teammateConfigProvider:$1});if(V$)c.recoverActiveRuns("runtime_recovered");if($f.restoredFromPersistence)j?.();R.push(...$f.tools)}return c};if(Y.enableSpawnAgent&&Z){let r=Z();R.push({...r,execute:async($f,V0)=>{return y2(),r.execute($f,V0)}})}if(Y.enableAgentTeams)y2();let C4=bP(R,$.toolPolicies),Z5=C4.some((r)=>r.name===Jf.SUBMIT_AND_EXIT&&r.lifecycle?.completesRun===!0),J1=Y.enableAgentTeams?()=>{let r=this.teamRuntimeEntries.get(n)?.runtime;if(!r)return;let $f=r.listTasks(),V0=$f.some((S0)=>S0.status==="in_progress"||S0.status==="pending"),_3=r.listRuns({}),hB=_3.some((S0)=>S0.status==="running"||S0.status==="queued");if(V0||hB){let S0=$f.filter((qf)=>qf.status==="in_progress"||qf.status==="pending").map((qf)=>`${qf.id} (${qf.status}): ${qf.title}`).join(", "),M3=_3.filter((qf)=>qf.status==="running"||qf.status==="queued").map((qf)=>`${qf.id} (${qf.status})`).join(", "),j5=[];if(S0)j5.push(`Unfinished tasks: ${S0}`);if(M3)j5.push(`Active runs: ${M3}`);return`[SYSTEM] You still have team obligations. ${j5.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,U2=Z5?{requireCompletionTool:!0,...J1?{completionGuard:J1}:{}}:J1?{completionGuard:J1}:void 0;return{tools:C4,logger:H??$.logger,telemetry:Q??$.telemetry,teamRuntime:c,teamRestoredFromPersistence:Boolean(i),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(n)?.delegatedAgentConfigProvider??$1,extensions:o,completionPolicy:U2,registerLeadAgent:(r)=>{if(B0=r,Y0.length>0)r.addTools(w$(Y0,[...V]))},shutdown:async(r)=>{if(NL(c,r),this.teamRuntimeEntries.delete(n),await q?.(),!_)L?.stop()}}}}var SP={};N(SP,{requestDesktopToolApproval:()=>xH});import{mkdir as bL,readFile as CL,unlink as EL,writeFile as SL}from"node:fs/promises";import{join as EP}from"node:path";function kL(f){return f.replace(/[^a-zA-Z0-9._-]+/g,"_")}function IL(f){return new Promise(($)=>setTimeout($,f))}async function mH(f){try{await EL(f)}catch{}}async function xH(f,$={}){let J=$.approvalDir?.trim(),W=$.sessionId?.trim();if(!J||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await bL(J,{recursive:!0});let H=kL(`${f.toolCallId}`),Q=EP(J,`${W}.request.${H}.json`),Z=EP(J,`${W}.decision.${H}.json`),j=$.nowIso??(()=>new Date().toISOString());await SL(Q,`${JSON.stringify({requestId:H,sessionId:W,createdAt:j(),toolCallId:f.toolCallId,toolName:f.toolName,input:f.input,iteration:f.iteration,agentId:f.agentId,conversationId:f.conversationId},null,2)}
711
- `,"utf8");let X=$.timeoutMs??300000,A=$.pollIntervalMs??200,P=Date.now();while(Date.now()-P<X){try{let B=await CL(Z,"utf8"),Y=JSON.parse(B),V={approved:Y.approved===!0,reason:typeof Y.reason==="string"?Y.reason:void 0};return await Promise.all([mH(Z),mH(Q)]),V}catch{}await IL(A)}return await mH(Q),{approved:!1,reason:"Tool approval request timed out"}}M0();var sP={};N(sP,{updateLocalProvider:()=>aJ,saveLocalProviderSettings:()=>pH,saveLocalProviderOAuthCredentials:()=>tH,resolveLocalClineAuthToken:()=>sH,refreshProviderModelsFromSource:()=>iH,normalizeOAuthProvider:()=>nH,loginLocalProvider:()=>aH,listLocalProviders:()=>rH,getProviderConfigFields:()=>oH,getLocalProviderModels:()=>lH,ensureCustomProvidersLoaded:()=>nJ,deleteLocalProvider:()=>tJ,addLocalProvider:()=>dH});import*as Yf from"@cline/llms";import{getClineEnvironmentConfig as Hh,isOAuthProviderId as Qh}from"@cline/shared";import{existsSync as mL,mkdirSync as xL,readFileSync as gL,writeFileSync as vL}from"node:fs";import{mkdir as uL,readFile as cL,writeFile as dL}from"node:fs/promises";import{dirname as gH,join as rL}from"node:path";import*as Nf from"@cline/llms";import{ModelCapabilitySchema as lL,ProviderCapabilitySchema as pL,ProviderClientSchema as iL,ProviderProtocolSchema as nL}from"@cline/shared";import{z as p}from"zod";var aL=p.object({id:p.string().optional(),name:p.string().optional(),capabilities:p.array(lL).optional(),supportsVision:p.boolean().optional(),supportsAttachments:p.boolean().optional(),supportsReasoning:p.boolean().optional()}).passthrough(),tL=p.object({name:p.string(),baseUrl:p.string(),defaultModelId:p.string().optional(),protocol:nL.optional(),client:iL.optional(),capabilities:p.array(pL).optional(),modelsSourceUrl:p.string().optional()}).passthrough(),kP=p.object({provider:tL.optional(),models:p.record(p.string(),aL).optional()}).passthrough(),IP=p.object({version:p.literal(1),providers:p.record(p.string(),kP)}),sL=p.object({version:p.literal(1),providers:p.record(p.string(),p.unknown())}),rJ=new Set;function mP(f){return f.split(/[-_]/).filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}function f1(f){return rL(gH(f.getFilePath()),"models.json")}function lJ(){return{version:1,providers:{}}}function xP(f){let $=sL.safeParse(f);if(!$.success)return lJ();let J={};for(let[W,H]of Object.entries($.data.providers)){let Q=kP.safeParse(H);if(Q.success)J[W]=Q.data}return{version:1,providers:J}}function vH(f){if(!mL(f))return lJ();try{let $=gL(f,"utf8");return xP(JSON.parse($))}catch{}return lJ()}async function K2(f){try{let $=await cL(f,"utf8");return xP(JSON.parse($))}catch{}return lJ()}function gP(f,$){xL(gH(f),{recursive:!0});let J=IP.parse($);vL(f,`${JSON.stringify(J,null,2)}
712
- `,"utf8")}async function pJ(f,$){await uL(gH(f),{recursive:!0});let J=IP.parse($);await dL(f,`${JSON.stringify(J,null,2)}
713
- `,"utf8")}function vP(f,$){return{id:f,name:$.name??f,supportsAttachments:$.capabilities?.includes("files"),supportsVision:$.capabilities?.includes("images"),supportsReasoning:$.capabilities?.includes("reasoning")||$.thinkingConfig!=null}}function uP(f){if(!f||f.length===0)return;let $=new Set;if(f.includes("reasoning"))$.add("reasoning");if(f.includes("prompt-cache"))$.add("prompt-cache");if(f.includes("tools"))$.add("tools");return $.size>0?[...$]:void 0}function cP(f){let $=new Set;if(!f||f.length===0)return[...$];if(f.includes("streaming"))$.add("streaming");if(f.includes("tools"))$.add("tools");if(f.includes("reasoning"))$.add("reasoning");if(f.includes("prompt-cache"))$.add("prompt-cache");if(f.includes("vision"))$.add("images"),$.add("files");return[...$]}function oL(f){return f!=null&&typeof f.name==="string"&&typeof f.baseUrl==="string"}function dP(f,$){return f??$??"openai-chat"}function rP(f,$,J){return f??J??($==="openai-responses"?"openai":"openai-compatible")}function eL(f,$){let J=new Set($?.capabilities??[]);if($?.supportsVision)J.add("images");if($?.supportsAttachments)J.add("files");if($?.supportsReasoning)J.add("reasoning");return{id:f,name:$?.name??f,capabilities:J.size>0?[...J]:void 0}}function fh(f,$){for(let[J,W]of Object.entries($??{})){let H=W.id?.trim()||J.trim();if(!H)continue;Nf.registerModel(f,H,eL(H,W))}}function $h(f,$,J){return{...$??{},id:f,name:$?.name??f,capabilities:$?.capabilities??J}}function Jh(f){return Object.assign({},...Nf.resolveProviderModelCatalogKeys(f).map((J)=>Nf.getGeneratedModelsForProvider(J)))}function Wh(f){let $=f.provider.trim();if(!$||Nf.isBuiltInProviderId($))return;let J=f.baseUrl?.trim();if(!J)return;let W=Nf.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],H=Jh($),Q=cP(f.capabilities),Z=Q.length>0?Q:void 0,j=f.model?.trim(),X={...H,...W?.models??{}};if(j)X[j]=$h(j,X[j],Z);let A=Object.keys(X).filter(Boolean),P=j||A[0];if(!P)return;let B=dP(f.protocol,W?.provider.protocol),Y=rP(f.client,B,W?.provider.client);Nf.registerProvider({provider:{id:$,name:W?.provider.name??mP($),description:W?.provider.description,protocol:B,client:Y,baseUrl:J,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:P,capabilities:uP(f.capabilities)??W?.provider.capabilities,source:"file"},models:X})}function iJ(f){for(let $ of Object.values(f.providers))Wh($.settings)}function N4(f,$){let J=$.models??{};if(!oL($.provider)){fh(f,J);return}let W=cP($.provider.capabilities),H=Object.entries(J).map(([A,P])=>({id:P.id?.trim()||A.trim(),model:P})).filter(({id:A})=>A.length>0),Q=$.provider.defaultModelId?.trim()||H[0]?.id||"default",Z=dP($.provider.protocol,void 0),j=rP($.provider.client,Z,void 0),X=Object.fromEntries(H.map(({id:A,model:P})=>[A,{id:A,name:P.name??A,capabilities:W.length>0?W:void 0,status:"active"}]));Nf.registerProvider({provider:{id:f,name:$.provider.name.trim()||mP(f),protocol:Z,client:j,baseUrl:$.provider.baseUrl,modelsSourceUrl:$.provider.modelsSourceUrl,defaultModelId:Q,capabilities:uP($.provider.capabilities),source:"file"},models:X})}function lP(f){let $=f1(f);if(rJ.has($))return;let J=vH($);for(let[W,H]of Object.entries(J.providers))N4(W,H);rJ.add($)}async function nJ(f){let $=f1(f);if(rJ.has($))return;let J=await K2($);for(let[W,H]of Object.entries(J.providers))N4(W,H);rJ.add($)}function Zh(f){return f.apiKey??f.auth?.apiKey}function jh(f){return(f.auth?.accessToken?.trim()??"").length>0}function pP(f){return f.split(/[-_]/).filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}function Xh(f){let $=f.split(/\s+/).filter(Boolean);if($.length===0)return"?";if($.length===1)return $[0].slice(0,2).toUpperCase();return`${$[0][0]}${$[1][0]}`.toUpperCase()}function Ah(f){let $=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let W of f)J=J*31+W.charCodeAt(0)>>>0;return $[J%$.length]}function iP(f){return Object.entries(f).sort(([$],[J])=>$.localeCompare(J)).map(([$,J])=>vP($,J))}async function Ph(f,$){let J=await Yf.getModelsForProvider(f);if(!$)return J;let W=await K8(f,{loadPrivateOnAuth:!0,failOnError:!1},$);return W?.knownModels?{...J,...W.knownModels}:J}function uH(f){return[...new Set((f??[]).map(($)=>$.trim()).filter(Boolean))]}function nP(f){let $=Object.entries(f??{}).filter(([J])=>J.trim().length>0);return $.length>0?Object.fromEntries($):void 0}function cH(f,$){let J=$?.includes("vision")??!1,W=$?.includes("reasoning")??!1;return Object.fromEntries(f.map((H)=>[H,{id:H,name:H,supportsVision:J,supportsAttachments:J,supportsReasoning:W}]))}async function aP(f){if(!f.shouldRecompute)return f.fallbackModelIds??[];let $=f.modelsSourceUrl?await O6(f.modelsSourceUrl,f.providerId):[];return[...new Set([...f.explicitModels??[],...$])]}function tP(f,$){let J=f.read(),W=!1;if(J.providers[$])delete J.providers[$],W=!0;if(J.lastUsedProvider===$)delete J.lastUsedProvider,W=!0;if(W)f.write(J);Yf.unregisterProvider($)}async function dH(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let W=$.baseUrl.trim(),H=$.apiKey?.trim()??"";if(!W&&!H){let R=f1(f);if((await K2(R)).providers[J]){let K=await tJ(f,{providerId:J});return{providerId:J,settingsPath:K.settingsPath,modelsPath:K.modelsPath,modelsCount:0}}return tP(f,J),{providerId:J,settingsPath:f.getFilePath(),modelsPath:R,modelsCount:0}}if(Yf.hasProvider(J))throw Error(`provider "${J}" already exists`);let Q=$.name.trim();if(!Q)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Z=uH($.models),j=$.modelsSourceUrl?.trim(),X=await aP({providerId:J,explicitModels:Z,modelsSourceUrl:j,shouldRecompute:!0});if(X.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let A=$.defaultModelId?.trim()&&X.includes($.defaultModelId.trim())?$.defaultModelId.trim():X[0],P=$.capabilities?.length?[...new Set($.capabilities)]:void 0,B=nP($.headers);f.saveProviderSettings({provider:J,apiKey:H||void 0,baseUrl:W,headers:B,timeout:$.timeoutMs,model:A,protocol:$.protocol,client:$.client},{setLastUsed:!1});let Y=f1(f),V=await K2(Y);return V.providers[J]={provider:{name:Q,baseUrl:W,defaultModelId:A,protocol:$.protocol,client:$.client,capabilities:P,modelsSourceUrl:j},models:cH(X,P)},await pJ(Y,V),N4(J,V.providers[J]),{providerId:J,settingsPath:f.getFilePath(),modelsPath:Y,modelsCount:X.length}}async function aJ(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let W=f1(f),H=await K2(W),Q=H.providers[J];if(!Q){let M=f.getProviderSettings(J);if(!M)throw Error(`provider "${J}" does not exist`);let T=$.modelsSourceUrl?.trim(),_=uH($.models)[0]??M.model?.trim();if(!_&&!T)throw Error(`provider "${J}" cannot be updated because no model is configured`);Q={provider:{name:$.name?.trim()||pP(J),baseUrl:$.baseUrl?.trim()??M.baseUrl?.trim()??"",defaultModelId:_,protocol:M.protocol,client:M.client,capabilities:M.capabilities},models:_?cH([_],M.capabilities):{}}}if(!Q.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let Z=$.name?.trim()??Q.provider.name.trim();if(!Z)throw Error("name is required");let j=$.baseUrl?.trim()??Q.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let X=$.capabilities===void 0?Q.provider.capabilities:$.capabilities===null?void 0:[...new Set($.capabilities)],A=$.protocol===void 0?Q.provider.protocol:$.protocol??void 0,P=$.client===void 0?Q.provider.client:$.client??void 0,B=uH($.models),Y=$.modelsSourceUrl===void 0?Q.provider.modelsSourceUrl:$.modelsSourceUrl?.trim()||void 0,V=$.models!==void 0||$.modelsSourceUrl!==void 0&&!!Y,R=Object.keys(Q.models??{}).map((M)=>M.trim()).filter(Boolean),U=await aP({providerId:J,explicitModels:B,modelsSourceUrl:Y,fallbackModelIds:R,shouldRecompute:V});if(U.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let K=$.defaultModelId===void 0?Q.provider.defaultModelId?.trim():$.defaultModelId?.trim(),F=K&&U.includes(K)?K:U[0],D={...f.getProviderSettings(J)??{},provider:J,baseUrl:j,model:F};if(A)D.protocol=A;else delete D.protocol;if(P)D.client=P;else delete D.client;if($.apiKey!==void 0){let M=$.apiKey?.trim()??"";if(M)D.apiKey=M;else delete D.apiKey}if($.headers!==void 0){let M=nP($.headers);if(M)D.headers=M;else delete D.headers}if($.timeoutMs!==void 0)if(typeof $.timeoutMs==="number")D.timeout=$.timeoutMs;else delete D.timeout;return f.saveProviderSettings(D,{setLastUsed:!1}),H.providers[J]={provider:{name:Z,baseUrl:j,defaultModelId:F,protocol:A,client:P,capabilities:X,modelsSourceUrl:Y},models:cH(U,X)},await pJ(W,H),N4(J,H.providers[J]),{providerId:J,settingsPath:f.getFilePath(),modelsPath:W,modelsCount:U.length}}async function tJ(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let W=f1(f),H=await K2(W);if(!H.providers[J])throw Error(`provider "${J}" does not exist`);return delete H.providers[J],await pJ(W,H),Yf.unregisterProvider(J),tP(f,J),{providerId:J,settingsPath:f.getFilePath(),modelsPath:W}}async function rH(f){let $=f.read(),J=Yf.getProviderIds().sort((H,Q)=>H.localeCompare(Q));return{providers:await Promise.all(J.map(async(H)=>{let[Q,Z]=await Promise.all([Yf.getProvider(H),Yf.getModelsForProvider(H)]),j=iP(Z),X=$.providers[H]?.settings,A=Q?.name??pP(H);return{id:H,name:A,models:j.length,color:Ah(H),letter:Xh(A),enabled:Boolean(X),apiKey:X?Zh(X):void 0,oauthAccessTokenPresent:X?jh(X):void 0,baseUrl:X?.baseUrl??Q?.baseUrl,defaultModelId:Q?.defaultModelId,protocol:X?.protocol??Q?.protocol,client:X?.client??Q?.client,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",modelList:j}})),settingsPath:f.getFilePath()}}async function lH(f,$){let J=f.trim(),W=await Ph(J,$),H=iP(W);return{providerId:J,models:H}}function pH(f,$){let J=$.providerId.trim();if($.enabled===!1){let Q=f.read();if(delete Q.providers[J],Q.lastUsedProvider===J)delete Q.lastUsedProvider;return f.write(Q),{providerId:J,enabled:!1,settingsPath:f.getFilePath()}}let H={...f.getProviderSettings(J)??{},provider:J};for(let Q of["apiKey","baseUrl","model","region"])if(Object.hasOwn($,Q)&&typeof $[Q]==="string")if($[Q].trim().length===0)delete H[Q];else H[Q]=$[Q];for(let Q of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn($,Q))H[Q]=$[Q];for(let Q of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn($,Q)&&$[Q]!=null)H[Q]={...typeof H[Q]==="object"&&H[Q]!=null?H[Q]:{},...$[Q]};return f.saveProviderSettings(H,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:f.getFilePath()}}async function iH(f,$){let J=$.trim(),W=f.getProviderSettings(J),Q=Yf.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,Z=W?.baseUrl?.trim()||Q?.baseUrl?.trim(),j=z6(Z,Q?.baseUrl,Q?.modelsSourceUrl);if(!W||!Q||!Z||!j)return{providerId:J,refreshed:!1};let X=await aJ(f,{providerId:J,name:Q.name,baseUrl:Z,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??Q.protocol??null,client:W.client??Q.client??null,capabilities:W.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:X.modelsCount}}function nH(f){let $=f.trim().toLowerCase();if($==="codex"||$==="openai-codex")return"openai-codex";if($==="cline"||$==="oca")return $;throw Error(`provider "${f}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function Bh(f,$){if(f==="cline")return $.access.startsWith("workos:")?$.access:`workos:${$.access}`;return $.access}async function aH(f,$,J){let W=h8({onPrompt:async(H)=>H.defaultValue??"",openUrl:J,onOpenUrlError:({error:H})=>{throw H instanceof Error?H:Error(String(H))}});if(f==="cline")return x1({apiBaseUrl:$?.baseUrl?.trim()||Hh().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:W});if(f==="oca")return b1({mode:$?.oca?.mode,callbacks:W});return g1(W)}function tH(f,$,J,W){let H={...J?.auth??{},accessToken:Bh($,W),refreshToken:W.refresh,accountId:W.accountId,expiresAt:W.expires},Q={...J??{provider:$},provider:$,auth:H};return f.saveProviderSettings(Q,{tokenSource:"oauth"}),Q}function sH(f){let $=f?.auth?.accessToken?.trim()||f?.apiKey?.trim();return $&&$.length>0?$:void 0}var Yh=new Set(["ollama","lmstudio","litellm"]);function Vh(f,$){if(!$?.provider.baseUrl)return!1;if($.provider.source!=="system")return!0;return Yh.has(f)}function oH(f){let $=Yf.normalizeProviderId(f);if(Qh($))return{providerId:$,authMethod:"oauth",fields:{}};let J=Yf.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=J?.provider.baseUrl,H={apiKey:{}};if(Vh($,J))H.baseUrl={defaultValue:W};return{providerId:$,authMethod:"api-key",fields:H}}var JB={};N(JB,{resolveLegacyClineAuth:()=>$B,migrateLegacyProviderSettings:()=>q4});import{existsSync as Rh,readFileSync as Fh}from"node:fs";import{dirname as Kh,join as eH}from"node:path";import*as eP from"@cline/llms";import{resolveClineDataDir as yh}from"@cline/shared/storage";var fB="openai";function $B(f){let $=f?.trim();if(!$)return;try{let J=JSON.parse($);if(!J)return;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:J.expiresAt,accountId:J.userInfo?.id}}catch{return}}function E(f){let $=f?.trim();return $?$:void 0}function oP(f){if(!Rh(f))return;try{let $=Fh(f,"utf8"),J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function Uh(f){let $=f.dataDir??yh(),J=f.globalStatePath??eH($,"globalState.json"),W=f.secretsPath??eH($,"secrets.json"),H=oP(J),Q=oP(W);if(!H&&!Q)return;return{globalState:H??{},secrets:Q??{}}}function Gh(f){try{let J=new URL(f).hostname.toLowerCase();return J==="api.openai.com"||J.endsWith(".openai.azure.com")||J.endsWith(".services.ai.azure.com")}catch{return!1}}function Th(f){let $=E(f.openAiBaseUrl);if(!$)return!1;if(f.azureApiVersion||f.azureIdentity)return!1;return!Gh($)}function f3(f,$){if(f==="openai"&&Th($))return fB;return f}function Dh(f,$,J,W){let H=J==="plan"?"planMode":"actMode",Q=$===W?E(J==="plan"?f.planModeApiModelId:f.actModeApiModelId):void 0,j={openrouter:`${H}OpenRouterModelId`,cline:`${H}ClineModelId`,openai:`${H}OpenAiModelId`,ollama:`${H}OllamaModelId`,lmstudio:`${H}LmStudioModelId`,litellm:`${H}LiteLlmModelId`,requesty:`${H}RequestyModelId`,together:`${H}TogetherModelId`,fireworks:`${H}FireworksModelId`,sapaicore:`${H}SapAiCoreModelId`,groq:`${H}GroqModelId`,baseten:`${H}BasetenModelId`,huggingface:`${H}HuggingFaceModelId`,"huawei-cloud-maas":`${H}HuaweiCloudMaasModelId`,oca:`${H}OcaModelId`,aihubmix:`${H}AihubmixModelId`,hicap:`${H}HicapModelId`,nousResearch:`${H}NousResearchModelId`,"vercel-ai-gateway":`${H}VercelAiGatewayModelId`}[$];return(j?E(typeof f[j]==="string"?f[j]:void 0):void 0)??Q}function _h(f,$,J){let W=J==="plan"?f.planModeReasoningEffort:f.actModeReasoningEffort,H=J==="plan"?f.geminiPlanModeThinkingLevel:f.geminiActModeThinkingLevel,Q=J==="plan"?f.planModeThinkingBudgetTokens:f.actModeThinkingBudgetTokens,Z=($==="gemini"?H:void 0)??W,j=Z==="none"||Z==="low"||Z==="medium"||Z==="high"?Z:void 0,X=typeof Q==="number"&&Number.isInteger(Q)&&Q>0?Q:void 0;if(!j&&X===void 0)return;return{...j?{effort:j}:{},...X!==void 0?{budgetTokens:X}:{}}}function Mh(f){let $=f["openai-codex-oauth-credentials"];if(!$)return;try{let J=JSON.parse($),W=E(J.access_token),H=E(J.refresh_token),Q=E(J.accountId);if(!W&&!H&&!Q)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...H?{refreshToken:H}:{},...Q?{accountId:Q}:{}}}}catch{return}}function Lh(f){let $=eP.getGeneratedModelsForProvider(f);return Object.keys($)[0]??void 0}function hh(f,$,J,W){let H=f3(f,$),Q=E(W==="plan"?$.planModeApiProvider:$.actModeApiProvider),Z=Dh($,f,W,Q)??Lh(H),j=_h($,H,W),X=typeof $.requestTimeoutMs==="number"&&Number.isInteger($.requestTimeoutMs)&&$.requestTimeoutMs>0?$.requestTimeoutMs:void 0,A={anthropic:J.apiKey,cline:J.clineApiKey,openai:J.openAiApiKey,"openai-native":J.openAiNativeApiKey,openrouter:J.openRouterApiKey,bedrock:J.awsBedrockApiKey,gemini:J.geminiApiKey,ollama:J.ollamaApiKey,deepseek:J.deepSeekApiKey,requesty:J.requestyApiKey,together:J.togetherApiKey,fireworks:J.fireworksApiKey,qwen:J.qwenApiKey,doubao:J.doubaoApiKey,mistral:J.mistralApiKey,litellm:J.liteLlmApiKey,asksage:J.asksageApiKey,xai:J.xaiApiKey,moonshot:J.moonshotApiKey,zai:J.zaiApiKey,huggingface:J.huggingFaceApiKey,nebius:J.nebiusApiKey,sambanova:J.sambanovaApiKey,cerebras:J.cerebrasApiKey,groq:J.groqApiKey,"huawei-cloud-maas":J.huaweiCloudMaasApiKey,baseten:J.basetenApiKey,"vercel-ai-gateway":J.vercelAiGatewayApiKey,dify:J.difyApiKey,minimax:J.minimaxApiKey,hicap:J.hicapApiKey,aihubmix:J.aihubmixApiKey,nousResearch:J.nousResearchApiKey,oca:J.ocaApiKey,sapaicore:J.sapAiCoreClientId},P={};if(f==="openai-codex")Object.assign(P,Mh(J));if(f==="cline")try{let F=E(J["cline:clineAccountId"]);if(F)P.auth={...P.auth??{},...$B(F)}}catch{}if(f==="openai"&&$.openAiHeaders)P.headers=$.openAiHeaders;if(f==="bedrock")P.aws={accessKey:E(J.awsAccessKey),secretKey:E(J.awsSecretKey),sessionToken:E(J.awsSessionToken),region:E($.awsRegion),authentication:$.awsAuthentication,profile:$.awsUseProfile?E($.awsProfile):void 0,usePromptCache:$.awsBedrockUsePromptCache,useCrossRegionInference:$.awsUseCrossRegionInference,useGlobalInference:$.awsUseGlobalInference,endpoint:E($.awsBedrockEndpoint),customModelBaseId:E(W==="plan"?$.planModeAwsBedrockCustomModelBaseId:$.actModeAwsBedrockCustomModelBaseId)};if(f==="vertex")P.gcp={projectId:E($.vertexProjectId),region:E($.vertexRegion)};if(f==="openai"&&($.azureApiVersion||$.azureIdentity!==void 0))P.azure={apiVersion:E($.azureApiVersion),useIdentity:$.azureIdentity};if(f==="sapaicore")P.sap={clientId:E(J.sapAiCoreClientId),clientSecret:E(J.sapAiCoreClientSecret),tokenUrl:E($.sapAiCoreTokenUrl),resourceGroup:E($.sapAiResourceGroup),deploymentId:E(W==="plan"?$.planModeSapAiCoreDeploymentId:$.actModeSapAiCoreDeploymentId),useOrchestrationMode:$.sapAiCoreUseOrchestrationMode};if(f==="oca"){P.oca={mode:$.ocaMode};let F=E(J.ocaRefreshToken);if(F)P.auth={...P.auth??{},refreshToken:F}}if(f==="qwen")P.apiLine=$.qwenApiLine;if(f==="moonshot")P.apiLine=$.moonshotApiLine;if(f==="zai")P.apiLine=$.zaiApiLine;if(f==="minimax")P.apiLine=$.minimaxApiLine;let B={anthropic:$.anthropicBaseUrl,openai:$.openAiBaseUrl,ollama:$.ollamaBaseUrl,lmstudio:$.lmStudioBaseUrl,litellm:$.liteLlmBaseUrl,gemini:$.geminiBaseUrl,requesty:$.requestyBaseUrl,asksage:$.asksageApiUrl,dify:$.difyBaseUrl,oca:$.ocaBaseUrl,aihubmix:$.aihubmixBaseUrl,sapaicore:$.sapAiCoreBaseUrl},Y=E(A[f]),V=E(B[f]),R={provider:H,...Y?{apiKey:Y}:{},...Z?{model:Z}:{},...V?{baseUrl:V}:{},...j?{reasoning:j}:{},...X?{timeout:X}:{},...P},U=G8.safeParse(R);if(!U.success)return;return Object.keys(R).filter((F)=>F!=="provider").length>0?U.data:void 0}function Oh(f,$){if(f!==fB)return;if(!$.baseUrl||!$.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:$.baseUrl,defaultModelId:$.model},models:{[$.model]:{id:$.model,name:$.model}}}}function zh(f,$){let J=new Set;for(let W of[f.actModeApiProvider,f.planModeApiProvider]){let H=E(W);if(H)J.add(H)}if(E($.apiKey))J.add("anthropic");if(E($.openRouterApiKey))J.add("openrouter");if(E($.openAiApiKey))J.add("openai");if(E($.openAiNativeApiKey))J.add("openai-native");if(E($["openai-codex-oauth-credentials"]))J.add("openai-codex");if(E($.geminiApiKey))J.add("gemini");if(E($.ollamaApiKey))J.add("ollama");if(E($.awsAccessKey)||E($.awsBedrockApiKey))J.add("bedrock");if(E(f.vertexProjectId)||E(f.vertexRegion))J.add("vertex");if(E($.clineApiKey))J.add("cline");if(E($.ocaApiKey))J.add("oca");return J}function q4(f){let $=f.providerSettingsManager.read(),J=Uh(f);if(!J)return{migrated:!1,providerCount:Object.keys($.providers).length,lastUsedProvider:$.lastUsedProvider};let{globalState:W,secrets:H}=J,Q=W.mode==="plan"?"plan":"act",Z=zh(W,H),j=e0();j.providers={...$.providers},j.lastUsedProvider=$.lastUsedProvider;let X=new Date().toISOString(),A=0,P=eH(Kh(f.providerSettingsManager.getFilePath()),"models.json"),B=vH(P),Y=0;for(let U of Z){let K=f3(U,W);if(j.providers[K])continue;let F=hh(U,W,H,Q);if(!F)continue;j.providers[K]={settings:F,updatedAt:X,tokenSource:"migration"},A+=1;let y=Oh(K,F);if(y&&!B.providers[K])B.providers[K]=y,Y+=1}if(A===0&&Y===0)return{migrated:!1,providerCount:Object.keys($.providers).length,lastUsedProvider:$.lastUsedProvider};let V=E(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),R=V?f3(V,W):void 0;if(j.lastUsedProvider=$.lastUsedProvider??(R&&j.providers[R]?R:Object.keys(j.providers)[0]),f.providerSettingsManager.write(j),Y>0)gP(P,B);return{migrated:A>0||Y>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}Lf();CJ();var WB={};N(WB,{FileTeamPersistenceStore:()=>sJ});import{appendFileSync as Nh,existsSync as $3,mkdirSync as qh,readFileSync as wh,renameSync as bh,unlinkSync as Ch,writeFileSync as Eh}from"node:fs";import{join as J3}from"node:path";import{resolveTeamDataDir as Sh}from"@cline/shared/storage";function kh(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class sJ{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor(f){let $=kh(f.teamName),J=f.baseDir?.trim()||Sh();this.dirPath=J3(J,$),this.statePath=J3(this.dirPath,"state.json"),this.taskHistoryPath=J3(this.dirPath,"task-history.jsonl")}loadState(){if(!$3(this.statePath))return;try{let f=wh(this.statePath,"utf8"),$=JSON.parse(f);if($.version!==1||!$.teamState)return;for(let J of $.teammates??[])this.teammateSpecs.set(J.agentId,J);return fA($.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec(f){this.teammateSpecs.set(f.agentId,f)}removeTeammateSpec(f){this.teammateSpecs.delete(f)}persist(f){if(!this.hasPersistableState(f)){this.clearPersistedState();return}this.ensureDir();let $={version:1,updatedAt:new Date().toISOString(),teamState:f.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;Eh(J,`${JSON.stringify($,null,2)}
714
- `,"utf8"),bh(J,this.statePath)}appendTaskHistory(f){let $={};switch(f.type){case"team_task_updated":$=f.task;break;case"team_message":$={agentId:f.message.fromAgentId,toAgentId:f.message.toAgentId,subject:f.message.subject,taskId:f.message.taskId};break;case"team_mission_log":$={agentId:f.entry.agentId,kind:f.entry.kind,summary:f.entry.summary,taskId:f.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":$={agentId:f.agentId,message:"message"in f?f.message:void 0};break;case"task_end":$={agentId:f.agentId,finishReason:f.result?.finishReason,error:f.error?.message};break;case"agent_event":$={agentId:f.agentId,eventType:f.event.type};break}this.ensureDir(),Nh(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:f.type,task:$})}
715
- `,"utf8")}ensureDir(){if(!$3(this.dirPath))qh(this.dirPath,{recursive:!0})}hasPersistableState(f){let $=f.exportState();if(this.teammateSpecs.size>0)return!0;if($.members.some((J)=>J.role==="teammate"))return!0;return $.tasks.length>0||$.mailbox.length>0||$.missionLog.length>0}clearPersistedState(){if($3(this.statePath))Ch(this.statePath)}}var HB={};N(HB,{ChatViewStateSchema:()=>W3,ChatSummarySchema:()=>J5,ChatSessionStatusSchema:()=>eJ,ChatSessionConfigSchema:()=>oJ,ChatMessageSchema:()=>$5,ChatMessageRoleSchema:()=>f5});import{z as w}from"zod";var oJ=w.object({workspaceRoot:w.string().min(1),cwd:w.string().optional(),provider:w.string().min(1),model:w.string().min(1),mode:w.enum(["act","plan"]).default("act"),apiKey:w.string(),systemPrompt:w.string().optional(),rules:w.string().optional(),maxIterations:w.number().int().positive().optional(),enableTools:w.boolean(),enableSpawn:w.boolean().optional(),enableTeams:w.boolean().optional(),autoApproveTools:w.boolean().optional(),missionStepInterval:w.number().int().positive().optional(),missionTimeIntervalMs:w.number().int().positive().optional()}),eJ=w.enum(["idle","starting","running","stopping","completed","cancelled","failed","error"]),f5=w.enum(["user","assistant","tool","system","status","error"]),$5=w.object({id:w.string().min(1),sessionId:w.string().nullable(),role:f5,content:w.string(),createdAt:w.number().int().nonnegative(),meta:w.object({stream:w.enum(["stdout","stderr"]).optional(),toolName:w.string().optional(),iteration:w.number().int().nonnegative().optional(),agentId:w.string().optional(),conversationId:w.string().optional(),hookEventName:w.string().optional(),inputTokens:w.number().int().nonnegative().optional(),outputTokens:w.number().int().nonnegative().optional(),checkpoint:w.object({ref:w.string(),createdAt:w.number().int().nonnegative(),runCount:w.number().int().positive(),kind:w.enum(["stash","commit"]).optional()}).optional()}).optional()}),J5=w.object({toolCalls:w.number().int().nonnegative(),tokensIn:w.number().int().nonnegative(),tokensOut:w.number().int().nonnegative()}),W3=w.object({sessionId:w.string().nullable(),status:eJ,config:oJ,messages:w.array($5),rawTranscript:w.string(),error:w.string().nullable(),summary:J5});var QB={};N(QB,{CORE_BUILD_VERSION:()=>H3});var H3=QX;import{Agent as VO,createAgentRuntime as RO}from"@cline/agents";var jB={};N(jB,{fetchClineRecommendedModels:()=>Q3,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>W5});import{getClineEnvironmentConfig as Ih}from"@cline/shared";var mh=5000,W5={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function xh(f){return{recommended:f.recommended.map(($)=>({...$,tags:[...$.tags]})),free:f.free.map(($)=>({...$,tags:[...$.tags]}))}}function ZB(f){if(!f||typeof f!=="object")return null;let $=f;if(typeof $.id!=="string"||$.id.length===0)return null;return{id:$.id,name:typeof $.name==="string"&&$.name.length>0?$.name:$.id,description:typeof $.description==="string"?$.description:"",tags:Array.isArray($.tags)?$.tags.filter((J)=>typeof J==="string"):[]}}function gh(f){if(!f||typeof f!=="object")return null;let $=f,J=Array.isArray($.recommended)?$.recommended:[],W=Array.isArray($.free)?$.free:[],H=J.map(ZB).filter((Z)=>Z!==null),Q=W.map(ZB).filter((Z)=>Z!==null);if(H.length===0&&Q.length===0)return null;return{recommended:H,free:Q}}function vh(f){let $=f.baseUrl?.trim();if($)return $;let J=Ih().apiBaseUrl;try{return(f.providerSettingsManager??new A0).getProviderSettings("cline")?.baseUrl?.trim()||J}catch{return J}}async function uh(f,$,J){let W=new AbortController,H=setTimeout(()=>W.abort(),J);try{return await f($,{signal:W.signal})}finally{clearTimeout(H)}}async function Q3(f={}){try{let $=vh(f),J=f.fetchImpl??fetch,W=await uh(J,`${$}/api/v1/ai/cline/recommended-models`,f.timeoutMs??mh);if(!W.ok)throw Error(`HTTP ${W.status}`);let H=await W.json(),Q=gh(H);if(Q)return Q}catch{}return xh(W5)}var XB={};N(XB,{loadLlmsConfigFromFile:()=>j3,defineLlmsConfig:()=>Z3});import{readFile as ch}from"node:fs/promises";import dh from"node:path";function Z3(f){return f}async function j3(f){let $=dh.resolve(f),J=await ch($,"utf8"),W;try{W=JSON.parse(J)}catch(H){let Q=H instanceof Error?H.message:String(H);throw Error(`Failed to parse JSON config at "${$}": ${Q}`)}return rh(W,$)}function rh(f,$){if(!f||typeof f!=="object")throw Error(`Invalid llms config in "${$}": expected an object.`);let W=f.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${$}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${$}": "providers" cannot be empty.`);return f}var RB={};N(RB,{createLlmsSdk:()=>A3,DefaultLlmsSdk:()=>w4});import{BUILT_IN_PROVIDER_IDS as BB,createHandler as ih,createHandlerAsync as nh,getProviderCollection as ah,hasProvider as YB,registerAsyncHandler as th,registerHandler as sh,registerModel as oh,registerProvider as VB}from"@cline/llms";function AB(f){return f?{...f}:{}}function lh(f,$){if(f)return f;if(!$)return;let J=globalThis.process;if(!J?.env)return;return J.env[$]}function ph(f,$){if(!$.length)throw Error(`Provider "${f}" must include at least one model.`)}function PB(f){let $=Object.keys(f.collection.models);return{id:f.collection.provider.id,name:f.collection.provider.name,description:f.collection.provider.description,protocol:f.collection.provider.protocol,baseUrl:f.collection.provider.baseUrl,capabilities:f.collection.provider.capabilities,env:f.collection.provider.env,models:$,defaultModel:f.collection.provider.defaultModelId,modelCount:$.length}}class X3{providers=new Map;register(f){ph(f.id,f.models);let $=f.defaultModel??f.models[0];if(!$)throw Error(`Provider "${f.id}" must define a default model.`);if(!f.models.includes($))throw Error(`Default model "${$}" is not included in configured models for "${f.id}".`);let J=this.providers.get(f.id);this.providers.set(f.id,{id:f.id,models:new Set([...J?.models??[],...f.models]),defaultModel:$,defaults:{...J?.defaults??{},...AB(f.defaults)}})}registerSelectionConfig(f){this.register({id:f.id,models:f.models,defaultModel:f.defaultModel,defaults:{apiKey:lh(f.apiKey,f.apiKeyEnv),routingProviderId:f.builtinProviderId,baseUrl:f.baseUrl,headers:f.headers,timeoutMs:f.timeoutMs,capabilities:f.capabilities,...AB(f.settings)}})}registerModel(f,$){let J=this.providers.get(f);if(!J){this.providers.set(f,{id:f,models:new Set([$]),defaultModel:$,defaults:{}});return}J.models.add($)}createHandlerConfig(f){let $=this.require(f.providerId),J=f.modelId??$.defaultModel;if(!$.models.has(J))throw Error(`Model "${J}" is not configured for provider "${f.providerId}".`);return{providerId:f.providerId,modelId:J,...$.defaults,...f.overrides}}list(){return Array.from(this.providers.values()).map((f)=>({id:f.id,models:Array.from(f.models),defaultModel:f.defaultModel}))}getModels(f){return Array.from(this.require(f).models)}hasProvider(f){return this.providers.has(f)}hasModel(f,$){return this.providers.get(f)?.models.has($)??!1}require(f){let $=this.providers.get(f);if(!$)throw Error(`Provider "${f}" is not configured in this SDK instance.`);return $}}class w4{configuredProviders=new X3;constructor(f){this.applyConfig(f)}createHandler(f){return ih(this.configuredProviders.createHandlerConfig(f))}async createHandlerAsync(f){return nh(this.configuredProviders.createHandlerConfig(f))}registerProvider(f){if(VB(f.collection),f.handlerFactory&&f.asyncHandlerFactory)throw Error(`Provider "${f.collection.provider.id}" cannot register both sync and async handlers.`);if(f.handlerFactory)sh(f.collection.provider.id,f.handlerFactory);if(f.asyncHandlerFactory)th(f.collection.provider.id,f.asyncHandlerFactory);this.configuredProviders.register({id:f.collection.provider.id,models:f.exposeModels??Object.keys(f.collection.models),defaultModel:f.defaultModel??f.collection.provider.defaultModelId,defaults:f.defaults})}registerBuiltinProvider(f){let $=f.exposeModels??Object.keys(f.models),J=f.defaultModel??$[0];if(!J)throw Error(`Provider "${f.id}" must define a default model.`);VB({provider:{id:f.id,name:f.name??f.id,description:f.description,protocol:f.protocol,baseUrl:f.baseUrl,defaultModelId:J,client:f.client??"openai-compatible",capabilities:f.capabilities,env:f.env,source:"system"},models:f.models}),this.configuredProviders.register({id:f.id,models:$,defaultModel:J,defaults:{routingProviderId:f.builtinProviderId,...f.defaults??{}}})}registerModel(f){oh(f.providerId,f.modelId,f.info),this.configuredProviders.registerModel(f.providerId,f.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...BB]}async getBuiltInProviders(){return(await Promise.all(BB.map(($)=>ah($)))).filter(($)=>$!==void 0).map(($)=>PB({collection:$}))}getModels(f){return this.configuredProviders.getModels(f)}isProviderConfigured(f){return this.configuredProviders.hasProvider(f)}isModelConfigured(f,$){return this.configuredProviders.hasModel(f,$)}applyConfig(f){for(let $ of f.providers)this.configuredProviders.registerSelectionConfig($);for(let $ of f.models??[])this.registerModel($);for(let $ of f.customProviders??[])this.registerProvider($);for(let $ of this.configuredProviders.list()){let J=YB($.id),W=this.configuredProviders.createHandlerConfig({providerId:$.id,modelId:$.defaultModel}).routingProviderId,H=typeof W==="string"&&YB(W);if(!J&&!H)throw Error(`Provider "${$.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function A3(f){return new w4(f)}jH();async function eh(){return Promise.resolve().then(() => (zH(),MP))}function GO(){return new Date().toISOString()}function TO(f){if(UB(f)!=="providers.json")return;let $=B3(f);if(UB($)!=="settings")return;return B3($)}class A0{filePath;dataDir;constructor(f={}){if(this.filePath=f.filePath??UO(),this.dataDir=f.dataDir??TO(this.filePath),this.dataDir||!f.filePath)q4({providerSettingsManager:this,dataDir:this.dataDir});if(lP(this),iJ(this.read()),P3(this.filePath))try{yB(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!P3(this.filePath))return e0();try{let f=KO(this.filePath,"utf8"),$=JSON.parse(f),J=S1.safeParse($);if(J.success)return iJ(J.data),J.data}catch{}return e0()}write(f){let $=S1.parse(f),J=B3(this.filePath);if(!P3(J))FO(J,{recursive:!0,mode:448});yO(this.filePath,`${JSON.stringify($,null,2)}
716
- `,"utf8");try{yB(this.filePath,384)}catch{}iJ($)}saveProviderSettings(f,$={}){let J=G8.parse(f),W=this.read(),H=J.provider,Q=$.setLastUsed!==!1,Z=W.providers[H],j=$.tokenSource??Z?.tokenSource??"manual",X={...W,providers:{...W.providers,[H]:{settings:J,updatedAt:GO(),tokenSource:j}},lastUsedProvider:Q?H:W.lastUsedProvider};return this.write(X),X}getProviderSettings(f){return this.read().providers[f]?.settings}getLastUsedProviderSettings(){let f=this.read(),$=f.lastUsedProvider;if(!$)return;return f.providers[$]?.settings}getProviderConfig(f,$){let J=this.getProviderSettings(f);if(!J)return;return kf(J,$)}getLastUsedProviderConfig(f){let $=this.getLastUsedProviderSettings();if(!$)return;return kf($,f)}async refreshCatalog(){try{await C1({})}catch{}}}Lf();_J();import{getClineEnvironmentConfig as DO,isOAuthProviderId as _O}from"@cline/shared";var Y3="workos:";function MO(f,$){if(f==="cline")return`${Y3}${$}`;return $}function LO(f,$){if(f==="cline"&&$.toLowerCase().startsWith(Y3))return $.slice(Y3.length);return $}function hO(f){let J=Rf(f)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function OO(f,$){let J=f.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let W=hO($);if(W)return W;return Date.now()-1}function zO(f,$){let J=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!J||!W)return null;let H=LO(f,J);if(!H)return null;return{access:H,refresh:W,expires:OO($,H),accountId:$.auth?.accountId}}function NO(f,$){let J=f?.expiresAt,W=$?.expiresAt;return f?.accessToken===$?.accessToken&&f?.refreshToken===$?.refreshToken&&f?.accountId===$?.accountId&&J===W}class H5 extends Error{providerId;constructor(f){super(`OAuth credentials for provider "${f}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=f}}class V3{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor(f){this.providerSettingsManager=f?.providerSettingsManager??new A0,this.telemetry=f?.telemetry}async resolveProviderApiKey(f){if(!_O(f.providerId))return null;return this.resolveWithSingleFlight(f.providerId,f.forceRefresh)}async resolveWithSingleFlight(f,$=!1){let J=this.refreshInFlight.get(f);if(J)return J;let W=this.resolveProviderApiKeyInternal(f,$).catch((H)=>{throw H}).finally(()=>{this.refreshInFlight.delete(f)});return this.refreshInFlight.set(f,W),W}async resolveProviderApiKeyInternal(f,$){let J=this.providerSettingsManager.getProviderSettings(f);if(!J)return null;let W=zO(f,J);if(!W)return null;let H=await this.resolveCredentials(f,J,W,$);if(!H)throw new H5(f);let Q=MO(f,H.access),Z={...J.auth??{},accessToken:Q,refreshToken:H.refresh,accountId:H.accountId};Z.expiresAt=H.expires;let j={...J,auth:Z},X=!NO(J.auth,j.auth);if(X)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:f,apiKey:Q,accountId:H.accountId,refreshed:X}}async resolveCredentials(f,$,J,W){if(f==="cline")return z8(J,{apiBaseUrl:$.baseUrl?.trim()||DO().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:W});if(f==="oca")return Y8(J,{forceRefresh:W,telemetry:this.telemetry},{mode:$.oca?.mode,telemetry:this.telemetry});return q8(J,{forceRefresh:W,telemetry:this.telemetry})}}import{normalizeUserInput as qO}from"@cline/shared";import{nanoid as wO}from"nanoid";class GB{list(f){return f?rf(f):[]}update(f,$){if(!f)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=$.promptId.trim(),W=f.pendingPrompts.findIndex((X)=>X.id===J);if(W<0)return{sessionId:$.sessionId,prompts:rf(f),updated:!1};let H=f.pendingPrompts[W];if(!H)return{sessionId:$.sessionId,prompts:rf(f),updated:!1};let Q=$.prompt===void 0?H.prompt:qO($.prompt).trim();if(!Q)throw Error("prompt cannot be empty");let Z=$.delivery??H.delivery,j={...H,prompt:Q,delivery:Z};return f.pendingPrompts.splice(W,1),bO(f,j,W,H.delivery),{sessionId:$.sessionId,prompts:rf(f),prompt:Q5(j),updated:!0}}delete(f,$){if(!f)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=$.promptId.trim(),W=f.pendingPrompts.findIndex((Q)=>Q.id===J);if(W<0)return{sessionId:$.sessionId,prompts:rf(f),removed:!1};let[H]=f.pendingPrompts.splice(W,1);return{sessionId:$.sessionId,prompts:rf(f),prompt:H?Q5(H):void 0,removed:!0}}enqueue(f,$){let{prompt:J,delivery:W,userImages:H,userFiles:Q}=$,Z=f.pendingPrompts.findIndex((j)=>j.prompt===J);if(Z>=0){let[j]=f.pendingPrompts.splice(Z,1),X={...j,prompt:J,userImages:H??j.userImages,userFiles:Q??j.userFiles};if(W==="steer"||j.delivery==="steer")f.pendingPrompts.unshift({...X,delivery:"steer"});else f.pendingPrompts.push(X)}else{let j={id:`pending_${Date.now()}_${wO(5)}`,prompt:J,delivery:W,userImages:H,userFiles:Q};if(W==="steer")f.pendingPrompts.unshift(j);else f.pendingPrompts.push(j)}return rf(f)}consumeSteer(f){let $=f.pendingPrompts.findIndex((W)=>W.delivery==="steer");if($<0)return{prompts:rf(f)};let[J]=f.pendingPrompts.splice($,1);return{entry:J,prompts:rf(f)}}shiftNext(f){return{entry:f.pendingPrompts.shift(),prompts:rf(f)}}requeueFront(f,$){return f.pendingPrompts.unshift($),rf(f)}clear(f){return f.pendingPrompts.length=0,[]}}class R3{deps;service=new GB;constructor(f){this.deps=f}list(f){return this.service.list(this.deps.getSession(f))}update(f){let $=this.deps.getSession(f.sessionId);if(!$||$.aborting)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=this.service.update($,f);return this.emitPrompts($),this.scheduleDrain(f.sessionId,$),J}delete(f){let $=this.deps.getSession(f.sessionId);if(!$||$.aborting)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=this.service.delete($,f);return this.emitPrompts($),this.scheduleDrain(f.sessionId,$),J}enqueue(f,$){let J=this.deps.getSession(f);if(!J||J.aborting)return;this.service.enqueue(J,$),this.emitPrompts(J),this.scheduleDrain(f,J)}consumeSteer(f){let $=this.deps.getSession(f);if(!$)return;let{entry:J}=this.service.consumeSteer($);if(!J)return;return this.emitPrompts($),this.emitSubmitted($,J),J.prompt}clearAborted(f){if(f.pendingPrompts.length===0)return;this.service.clear(f),this.emitPrompts(f)}emitPrompts(f){this.deps.emit({type:"pending_prompts",payload:{sessionId:f.sessionId,prompts:rf(f)}})}scheduleDrain(f,$){if($.pendingPrompts.length===0||$.aborting||$.drainingPendingPrompts||!$.agent.canStartRun())return;queueMicrotask(()=>{this.drain(f)})}async drain(f){let $=this.deps.getSession(f);if(!$||$.aborting||$.drainingPendingPrompts)return;if(!$.agent.canStartRun())return;let{entry:J}=this.service.shiftNext($);if(!J)return;this.emitPrompts($),this.emitSubmitted($,J),$.drainingPendingPrompts=!0;try{await this.deps.send({sessionId:f,prompt:J.prompt,userImages:J.userImages,userFiles:J.userFiles})}catch(W){if((W instanceof Error?W.message:String(W)).includes("already in progress"))this.service.requeueFront($,J),this.emitPrompts($);else throw W}finally{if($.drainingPendingPrompts=!1,$.pendingPrompts.length>0&&$.status!=="failed"&&$.status!=="cancelled")queueMicrotask(()=>{this.drain(f)})}}emitSubmitted(f,$){let J=Q5($);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:f.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function Q5(f){return{id:f.id,prompt:f.prompt,delivery:f.delivery,attachmentCount:(f.userImages?.length??0)+(f.userFiles?.length??0)}}function rf(f){return f.pendingPrompts.map(Q5)}function bO(f,$,J,W){if($.delivery==="steer")f.pendingPrompts.unshift($);else if(W==="steer")f.pendingPrompts.push($);else f.pendingPrompts.splice(J,0,$)}Lf();class K3{deps;constructor(f){this.deps=f}dispatchAgentEvent(f,$,J){let W=this.deps.getSession(f),H={sessionId:f,config:$,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},Q=a5(J),Z=!!W&&(!Q.agentId||Q.agentId===F3(W.agent));t5(H,J,Z?{isPrimaryAgentEvent:!0,agentId:F3(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent(f,$){let J=this.deps.getSession(f);if(J){if(r9(J,$),$.type==="agent_event"){let W={sessionId:f,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};t5(W,$.event,{agentId:$.agentId,teamRole:"teammate",teamAgentId:$.agentId,isPrimaryAgentEvent:!1})}if($.type==="teammate_spawned"){let W=_0({agentId:$.teammate.runtimeAgentId??$.agentId,conversationId:$.teammate.conversationId,parentAgentId:$.teammate.parentAgentId,createdByAgentId:F3(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:$.agentId});if(W)p0(J.config.telemetry,{ulid:f,modelId:$.teammate.modelId??J.config.modelId,provider:J.config.providerId,...W})}}if(await l9(f,$,this.deps.invokeBackendOptional),J)p9(J,f,$,this.deps.emit)}async handlePluginEvent(f,$,J){if($.name==="plugin_log"){this.handlePluginLog(f,$.payload);return}if($.name==="automation_event"){let X=this.deps.getSession(f)?.config.extensionContext?.automation??J;if(!X)return;let A=$.payload&&typeof $.payload==="object"?$.payload:void 0;if(!A)return;await X.ingestEvent(A);return}if($.name!=="steer_message"&&$.name!=="queue_message"&&$.name!=="pending_prompt")return;let W=$.payload&&typeof $.payload==="object"?$.payload:void 0,H=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():f,Q=typeof W?.prompt==="string"?W.prompt.trim():"";if(!Q)return;let Z=$.name==="steer_message"?"steer":$.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(H,{prompt:Q,delivery:Z})}handlePluginLog(f,$,J){let W=this.deps.getSession(f),H=J??W?.config.extensionContext?.logger??W?.config.logger;if(!H||!$||typeof $!=="object")return;let Q=$,Z=typeof Q.message==="string"?Q.message:"";if(!Z)return;let j=Q.metadata&&typeof Q.metadata==="object"?{...Q.metadata}:{};if(j.sessionId??=f,typeof Q.pluginName==="string"&&Q.pluginName)j.pluginName=Q.pluginName;if(Q.level==="debug"){H.debug(Z,j);return}if(Q.level==="error"){if(H.error)H.error(Z,j);else H.log(Z,{...j,severity:"error"});return}H.log(Z,j)}}function F3(f){return f.getAgentId()}function y3(f){return{sessionId:f.sessionId,source:f.source,pid:process.pid,startedAt:f.startedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,status:f.status,interactive:f.interactive,provider:f.config.providerId,model:f.config.modelId,cwd:f.config.cwd,workspaceRoot:i0(f.config),teamName:f.config.teamName?.trim()||void 0,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,parentSessionId:typeof f.sessionMetadata?.parentSessionId==="string"?f.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof f.sessionMetadata?.parentAgentId==="string"?f.sessionMetadata.parentAgentId:void 0,agentId:typeof f.sessionMetadata?.agentId==="string"?f.sessionMetadata.agentId:void 0,conversationId:typeof f.sessionMetadata?.conversationId==="string"?f.sessionMetadata.conversationId:void 0,isSubagent:typeof f.sessionMetadata?.isSubagent==="boolean"?f.sessionMetadata.isSubagent:!1,prompt:f.pendingPrompt,metadata:f.sessionMetadata,messagesPath:f.artifacts?.messagesPath,updatedAt:f.updatedAt??f.endedAt??f.startedAt}}function U3(f,$){let J=f[$];return typeof J==="function"?J:null}async function TB(f,$,...J){let W=U3(f,$);if(!W)throw Error(`session service method not available: ${$}`);return Promise.resolve(W.apply(f,J))}async function DB(f,$,...J){let W=U3(f,$);if(!W)return;await Promise.resolve(W.apply(f,J))}async function _B(f,$,...J){let W=U3(f,$);if(!W)return;return await Promise.resolve(W.apply(f,J))}M0();Lf();function G3(f,$,J,W){return d0({configProvider:{getRuntimeConfig:()=>f.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking,maxIterations:$.maxIterations,hooks:$.hooks,extensions:$.extensions,logger:$.logger,telemetry:$.telemetry},getConnectionConfig:()=>f.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Q=$.enableTools?L$({cwd:$.cwd,...Ef[K0({mode:$.mode})],executors:W}):[];if($.enableSpawnAgent)Q.push(G3(f,$,J,W));return w$(Q)},onSubAgentEvent:(Q)=>f.onAgentEvent(J,$,Q),onSubAgentStart:(Q)=>{let Z=f.getSession(J)?.runtime.teamRuntime;f.subAgentStarts.set(Q.subAgentId,{startedAt:Date.now(),rootSessionId:J});let j=_0({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:Z?.getTeamId(),teamName:Z?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)p0($.telemetry,{ulid:J,modelId:$.modelId,provider:$.providerId,...j});t2($.telemetry,{event:"started",ulid:J,durationMs:0,parentId:Q.parentAgentId,agentId:Q.subAgentId,...j}),f.invokeBackendOptional("handleSubAgentStart",J,Q)},onSubAgentEnd:(Q)=>{let Z=f.getSession(J)?.runtime.teamRuntime,j=f.subAgentStarts.get(Q.subAgentId),X=j?Date.now()-j.startedAt:0,A=Q.result?.text?Q.result.text.split(`
717
- `).length:0;t2($.telemetry,{event:"ended",ulid:J,durationMs:X,outputLines:A,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,..._0({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:Z?.getTeamId(),teamName:Z?.getTeamName(),createdByAgentId:Q.parentAgentId})}),f.subAgentStarts.delete(Q.subAgentId),f.invokeBackendOptional("handleSubAgentEnd",J,Q)}})}import{readFile as CO,stat as EO}from"node:fs/promises";var SO=20480000;async function MB(f){let $=await EO(f);if(!$.isFile())throw Error("Path is not a file");if($.size>SO)throw Error("File is too large to read into context.");let J=await CO(f,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var LB=5000;function b4(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function cO(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let $=f,J=b4($.inputTokens),W=b4($.outputTokens),H=b4($.cacheReadTokens),Q=b4($.cacheWriteTokens),Z=b4($.totalCost);if(J===void 0||W===void 0||H===void 0||Q===void 0||Z===void 0)return;return{inputTokens:J,outputTokens:W,cacheReadTokens:H,cacheWriteTokens:Q,totalCost:Z}}function dO(f,$){return{inputTokens:Math.max(f.inputTokens,$.inputTokens),outputTokens:Math.max(f.outputTokens,$.outputTokens),cacheReadTokens:Math.max(f.cacheReadTokens,$.cacheReadTokens),cacheWriteTokens:Math.max(f.cacheWriteTokens,$.cacheWriteTokens),totalCost:Math.max(f.totalCost,$.totalCost)}}class X0{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new f4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new Y$;constructor(f){let $=IO();if($)uO($);let J=l$(f.distinctId);this.sessionService=f.sessionService,this.runtimeBuilder=f.runtimeBuilder??new F2,this.createAgentInstance=f.createAgent??((W)=>new c0(W)),this.defaultCapabilities=Kf(f.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=f.toolPolicies,this.providerSettingsManager=f.providerSettingsManager??new A0,this.oauthTokenManager=f.oauthTokenManager??new V3({providerSettingsManager:this.providerSettingsManager,telemetry:f.telemetry}),this.defaultTelemetry=f.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=f.fetch,this.pendingPromptsController=new R3({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new K3({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,H,Q)=>{this.invoke("persistSessionMessages",W,H,Q)},enqueuePendingPrompt:(W,H)=>this.pendingPromptsController.enqueue(W,H),invokeBackendOptional:(W,...H)=>this.invokeOptional(W,...H)})}async startSession(f){let $=f.source??Vf.CLI,J=s(),W=f.config.sessionId?.trim()??"",H=W||xO(),Q=f,Z=Q.initialMessages??[],j=Z.length>0?G1(Z):Pf(),X=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!X)throw Error("session service method not available: ensureSessionsDir");let A=T3(X,H),P=T3(A,`${H}.messages.json`),B=T3(A,`${H}.json`),Y=i0(f.config),V=Mf.parse({version:1,session_id:H,source:$,pid:process.pid,started_at:J,status:"running",interactive:f.interactive===!0,provider:Q.config.providerId,model:Q.config.modelId,cwd:Q.config.cwd,workspace_root:Y,team_name:Q.config.teamName,enable_tools:Q.config.enableTools,enable_spawn:Q.config.enableSpawnAgent,enable_teams:Q.config.enableAgentTeams,prompt:Q.prompt?.trim()||void 0,messages_path:P}),R;if(W.length>0&&Z.length>0&&!Q.prompt?.trim()){let S=await this.invokeOptionalValue("readSessionManifest",H);if(S)V=S,R={manifestPath:B,messagesPath:S.messages_path||P,manifest:S}}let K=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:A,rootMessagesPath:R?.messagesPath??P,manifest:V});this.usageBySession.set(H,j),this.aggregateUsageBySession.set(H,K);let F=Kf(this.defaultCapabilities,f.capabilities),y=F?.toolExecutors??this.toolExecutors,D=f.localRuntime,M=D?.extensionContext?.logger??D?.logger,T=D?.extensionContext?.automation,_;_=await mZ({input:Q,localRuntime:f.localRuntime,sessionId:H,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:F,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(S)=>{if(S.name==="plugin_log"){this.eventBridge.handlePluginLog(H,S.payload,M);return}this.eventBridge.handlePluginEvent(H,S,T)},onTeamEvent:(S)=>{this.eventBridge.handleTeamEvent(H,S),_.config.onTeamEvent?.(S)},createSpawnTool:()=>G3({getSession:(S)=>this.sessions.get(S),subAgentStarts:this.subAgentStarts,onAgentEvent:(S,n,B0)=>this.eventBridge.dispatchAgentEvent(S,n,B0),invokeBackendOptional:(S,...n)=>this.invokeOptional(S,...n)},_.config,H,y),readSessionMetadata:async()=>(await this.getSession(H))?.metadata,writeSessionMetadata:async(S)=>{await this.persistSessionMetadata(H,()=>S)}});let L=await this.runtimeBuilder.build(_.runtimeBuilderInput),q=_.config,Wf=_.providerConfig;if(L.teamRuntime&&!q.teamName?.trim())q.teamName=L.teamRuntime.getTeamName();let Hf=[...L.tools,...q.extraTools??[]],o=L.extensions??_.extensions,c={sessionId:H,providerId:Wf.providerId,modelId:Wf.modelId,apiKey:Wf.apiKey,baseUrl:Wf.baseUrl,headers:Wf.headers,knownModels:Wf.knownModels,providerConfig:Wf,thinking:q.thinking,reasoningEffort:q.reasoningEffort??Wf.reasoningEffort,systemPrompt:q.systemPrompt,maxIterations:q.maxIterations,execution:q.execution,prepareTurn:M2(q),tools:Hf,hooks:_.hooks,extensions:o,hookErrorMode:q.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:MB,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval,onConsecutiveMistakeLimitReached:q.onConsecutiveMistakeLimitReached,completionPolicy:L.completionPolicy,consumePendingUserMessage:()=>{let S=this.pendingPromptsController.consumeSteer(H);return S?P4(S,q.mode):S},logger:L.logger??q.logger,extensionContext:q.extensionContext,onEvent:(S)=>this.eventBridge.dispatchAgentEvent(H,q,S)};c.hooks={...c.hooks,onEvent:async(S)=>{if(await _.hooks?.onEvent?.(S),S.type!=="assistant-message")return;let n=this.sessions.get(H);if(!n)return;let B0=n.agent.getMessages();try{await this.invoke("persistSessionMessages",H,B0,q.systemPrompt)}catch(Y0){q.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:H,error:Y0})}}};let Gf=this.createAgentInstance(c);if(c.onEvent)Gf.subscribeEvents(c.onEvent);L.registerLeadAgent?.(Gf);let E0=_0({agentId:Gf.getAgentId(),conversationId:Gf.getConversationId(),teamId:L.teamRuntime?.getTeamId(),teamName:L.teamRuntime?.getTeamName(),teamRole:L.teamRuntime?"lead":void 0});if(gZ(q,H,W.length>0,Y,E0),E0)p0(q.telemetry,{ulid:H,modelId:q.modelId,provider:q.providerId,...E0});if(L.teamRuntime)j6(q.telemetry,{ulid:H,teamId:L.teamRuntime.getTeamId(),teamName:L.teamRuntime.getTeamName(),leadAgentId:Gf.getAgentId(),restoredFromPersistence:L.teamRestoredFromPersistence===!0});let i={sessionId:H,config:q,sessionMetadata:Q.sessionMetadata,...R?{artifacts:R}:{},source:$,startedAt:R?.manifest.started_at??J,updatedAt:R?.manifest.ended_at??R?.manifest.started_at??J,pendingPrompt:V.prompt,runtime:L,agent:Gf,started:!1,status:R?.manifest.status??"running",aborting:!1,interactive:f.interactive===!0,persistedMessages:Z,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1};if(this.sessions.set(H,i),this.emitStatus(H,"running"),Z.length>0&&!R){if(await this.ensureSessionPersisted(i),await this.invoke("persistSessionMessages",i.sessionId,Z,i.config.systemPrompt),!Q.prompt?.trim())await this.updateStatus(i,"completed",0)}let P0;try{if(Q.prompt?.trim())if(P0=await this.executeTurn(i,{prompt:Q.prompt,userImages:Q.userImages,userFiles:Q.userFiles}),!i.interactive)await this.finalizeSingleRun(i,P0.finishReason);else await this.completeInteractiveTurn(i,P0.finishReason)}catch(S){if(i.interactive&&i.aborting)P0=await this.completeAbortedInteractiveTurn(i);else throw await this.failSession(i),S}return{sessionId:H,manifest:V,manifestPath:B,messagesPath:P,result:P0}}async restoreSession(f){return this.sessionVersioning.restoreCheckpoint({...f,getSession:($)=>this.getSession($),readMessages:($)=>this.readSessionMessages($),buildStartInput:($,J)=>{let W=$.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:$.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...W?{sessionMetadata:W}:{},initialMessages:$.initialMessages}},startSession:($)=>this.startSession($),getStartedSessionId:($)=>$.sessionId,readRestoredSession:($)=>this.getSession($)})}async runTurn(f){let $=this.getSessionOrThrow(f.sessionId),J=$.agent.canStartRun(),W=f.delivery??($.interactive&&!J?"queue":void 0);if($.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:f.sessionId,promptLength:f.prompt.length,userImageCount:f.userImages?.length??0,userFileCount:f.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue(f.sessionId,{prompt:f.prompt,delivery:W,userImages:f.userImages,userFiles:f.userFiles});return}try{let H=await this.executeTurn($,{prompt:f.prompt,userImages:f.userImages,userFiles:f.userFiles});if(!$.interactive)await this.finalizeSingleRun($,H.finishReason);else await this.completeInteractiveTurn($,H.finishReason);if(H.finishReason==="error"||H.finishReason==="aborted")return H;return queueMicrotask(()=>{this.pendingPromptsController.drain(f.sessionId)}),H}catch(H){if($.interactive&&$.aborting)return await this.completeAbortedInteractiveTurn($);throw await this.failSession($),H}}async getAccumulatedUsage(f){let $=U9(this.usageBySession.get(f)),J=U9(this.aggregateUsageBySession.get(f));return $||J?{usage:$,aggregateUsage:J}:void 0}async abort(f,$){let J=this.sessions.get(f);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:f}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort($)}async stopSession(f){let $=this.sessions.get(f);if(!$)return;if($.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:f}}),$.interactive&&$.status!=="running"){await this.releaseSessionRuntime($,"session_stop");return}$.aborting=!0,$.agent.abort(Error("session_stop")),await this.shutdownSession($,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose(f="session_manager_dispose"){let $=[...this.sessions.values()];if($.length===0)return;await Promise.allSettled($.map((J)=>J.interactive&&J.status!=="running"?this.releaseSessionRuntime(J,f):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:f,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession(f){let $=this.sessions.get(f);if($)return y3($);let J=f.trim();if(!J)return;let W=await this.getRow(J);if(W)return p2(W);let H=await this.readManifest(J);return H?YJ(H):void 0}async listSessions(f=200){let J=(await this.listRows(f)).map(p2),W=new Set(J.map((H)=>H.sessionId));for(let H of this.sessions.values()){if(W.has(H.sessionId))continue;J.unshift(y3(H))}return J.slice(0,f)}async deleteSession(f){if(this.sessions.has(f))await this.stopSession(f);let $=await this.invoke("deleteSession",f);if($.deleted)this.usageBySession.delete(f),this.aggregateUsageBySession.delete(f);return $.deleted}async updateSession(f,$){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:f,prompt:$.prompt,metadata:$.metadata,title:$.title}))?.updated===!0}}async readSessionMessages(f){let $=f.trim();if(!$)return[];let J=await this.getRow($);if(J?.messagesPath)return Q$(J.messagesPath);let W=await this.readManifest($);return Q$(W?.messages_path)}async dispatchHookEvent(f){await sj(f,{queueSpawnRequest:($)=>this.invokeOptional("queueSpawnRequest",$),upsertSubagentSessionFromHook:($)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",$),appendSubagentHookAudit:($,J)=>this.invokeOptional("appendSubagentHookAudit",$,J),applySubagentStatus:($,J)=>this.invokeOptional("applySubagentStatus",$,J)})}subscribe(f,$){return this.events.subscribe(f,$)}async updateSessionModel(f,$){let J=this.getSessionOrThrow(f);J.config.modelId=$,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:$}),J.agent.updateConnection({modelId:$})}handlePluginEvent(f,$,J){return this.eventBridge.handlePluginEvent(f,$,J)}async executeTurn(f,$){let J=await this.prepareTurnInput(f,$),W=J.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!f.artifacts&&!f.pendingPrompt)f.pendingPrompt=W;await this.ensureSessionPersisted(f),await this.syncOAuthCredentials(f),await this.markTurnRunning(f);let H=await this.executeAgentTurn(f,W,J.userImages,J.userFiles);while(i9(f,H.finishReason)){let Q=await n9(f);if(Q.length===0)break;let Z=a9(f,Q);H=await this.executeAgentTurn(f,Z)}return H}async completeInteractiveTurn(f,$){if(A4(f))return;let J=$==="aborted"||f.aborting,W=$==="error";await this.updateStatus(f,J?"cancelled":W?"failed":"completed",W?1:0),this.emit({type:"ended",payload:{sessionId:f.sessionId,reason:$,ts:Date.now()}}),f.aborting=!1}async completeAbortedInteractiveTurn(f){let $=new Date,J=f.agent.getMessages();return f.persistedMessages=J,f.started=f.started||J.length>0,await this.completeInteractiveTurn(f,"aborted"),{text:"",usage:Pf(),messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:f.config.modelId,provider:f.config.providerId},startedAt:$,endedAt:$,durationMs:0}}async executeAgentTurn(f,$,J,W){let H=f.started||f.agent.getMessages().length>0,Q=f.persistedMessages??f.agent.getMessages(),Z=this.usageBySession.get(f.sessionId)??Pf(),j=this.aggregateUsageBySession.get(f.sessionId)??Z;f.turnUsageBaseline=Z,f.turnAggregateUsageBaseline=j,f.turnPrimaryUsage=Pf(),f.turnUsageByAgent=new Map,f6(f.config.telemetry,f.sessionId,f.config.mode),y1(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,model:f.config.modelId,source:"user",mode:f.config.mode,...this.getSessionAgentTelemetryIdentity(f)});try{let X=H?()=>f.agent.continue($,J,W):()=>f.agent.run($,J,W),A=await this.runWithAuthRetry(f,X,Q);f.started=!0;let P=i4(A.messages,A,Q);f.persistedMessages=P;let B=s2(f.turnUsageByAgent?.values()??[]),Y=Xf(Z,A.usage),V=Xf(Xf(Pf(),A.usage),B),R=Xf(j,V);return this.usageBySession.set(f.sessionId,Y),this.aggregateUsageBySession.set(f.sessionId,R),await this.persistSessionMetadata(f.sessionId,(U)=>({...U??{},totalCost:Y.totalCost,aggregatedAgentsCost:R.totalCost,usage:Y,aggregateUsage:R})),await this.invoke("persistSessionMessages",f.sessionId,P,f.config.systemPrompt),this.observeTaskCompletionTool(f,A),A}catch(X){throw await this.invoke("persistSessionMessages",f.sessionId,f.agent.getMessages(),f.config.systemPrompt),X}finally{f.turnUsageBaseline=void 0,f.turnAggregateUsageBaseline=void 0,f.turnPrimaryUsage=void 0,f.turnUsageByAgent=void 0}}observeTaskCompletionTool(f,$){if(f.submitAndExitObserved)return;if(!$.toolCalls.some((W)=>W.name===Jf.SUBMIT_AND_EXIT&&W.error===void 0))return;f.submitAndExitObserved=!0,n2(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,modelId:f.config.modelId,mode:f.config.mode,durationMs:Date.now()-Date.parse(f.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity(f)})}async prepareTurnInput(f,$){let J=i0(f.config),W=vO($.prompt).trim();if(!W)return{prompt:"",userImages:$.userImages,userFiles:this.resolveAbsoluteFilePaths(f.config.cwd,$.userFiles)};let H=await Z1(W,J);vZ(f.config.telemetry,H);let Q=P4(H.prompt,f.config.mode),Z=this.resolveAbsoluteFilePaths(f.config.cwd,$.userFiles),j=this.resolveAbsoluteFilePaths(J,H.matchedFiles),X=Array.from(new Set([...Z,...j]));return{prompt:Q,userImages:$.userImages,userFiles:X.length>0?X:void 0}}async ensureSessionPersisted(f){if(f.artifacts)return;let $=i0(f.config);f.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:f.sessionId,source:f.source,pid:process.pid,interactive:f.interactive,provider:f.config.providerId,model:f.config.modelId,cwd:f.config.cwd,workspaceRoot:$,teamName:f.config.teamName,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,prompt:f.pendingPrompt,metadata:f.sessionMetadata,startedAt:f.startedAt})}async markTurnRunning(f){if(f.status==="running")return;await this.updateStatus(f,"running",null)}async persistSessionMetadata(f,$){let J=this.sessions.get(f),W=await this.invokeOptionalValue("readSessionManifest",f)??J?.artifacts?.manifest,H=$(W?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:f,metadata:H}))?.updated===!1)return;J.sessionMetadata=H,J.artifacts.manifest.metadata=H}async finalizeSingleRun(f,$){if(A4(f))return;let J=$==="aborted"||f.aborting,W=$==="error";await this.shutdownSession(f,{status:J?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:$})}async failSession(f){await this.shutdownSession(f,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession(f,$){if($.status==="completed"&&!f.submitAndExitObserved)n2(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,modelId:f.config.modelId,mode:f.config.mode,durationMs:Date.now()-Date.parse(f.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity(f)});LJ(f);let J=[],W=(H,Q)=>{J.push(Q),f.config.logger?.log("Session shutdown cleanup failed",{sessionId:f.sessionId,stage:H,error:Q,severity:"warn"})};if(f.artifacts){try{await this.updateStatus(f,$.status,$.exitCode)}catch(H){W("update_status",H)}try{await f.agent.shutdown($.shutdownReason)}catch(H){W("agent_shutdown",H)}}try{await Promise.resolve(f.runtime.shutdown($.shutdownReason))}catch(H){W("runtime_shutdown",H)}try{await f.pluginSandboxShutdown?.()}catch(H){W("plugin_sandbox_shutdown",H)}if(this.sessions.delete(f.sessionId),this.emit({type:"ended",payload:{sessionId:f.sessionId,reason:$.endReason,ts:Date.now()}}),J.length>0&&$.status==="failed")throw J[0]}async releaseSessionRuntime(f,$){let J=[],W=(H,Q)=>{J.push(Q),f.config.logger?.log("Session runtime cleanup failed",{sessionId:f.sessionId,stage:H,error:Q,severity:"warn"})};try{await f.agent.shutdown($)}catch(H){W("agent_shutdown",H)}try{await Promise.resolve(f.runtime.shutdown($))}catch(H){W("runtime_shutdown",H)}try{await f.pluginSandboxShutdown?.()}catch(H){W("plugin_sandbox_shutdown",H)}if(this.sessions.delete(f.sessionId),J.length>0)throw J[0]}async updateStatus(f,$,J){if(!f.artifacts)return;let W=await this.invoke("updateSessionStatus",f.sessionId,$,J);if(!W.updated)return;let H=await this.invokeOptionalValue("readSessionManifest",f.sessionId)??f.artifacts.manifest;if(H.status=$,$==="running")delete H.ended_at,H.exit_code=null;else H.ended_at=W.endedAt??s(),H.exit_code=typeof J==="number"?J:null;f.artifacts.manifest=H,f.status=$,f.updatedAt=W.endedAt??s(),f.endedAt=$==="running"?null:H.ended_at,f.exitCode=H.exit_code,await this.invoke("writeSessionManifest",f.artifacts.manifestPath,H),this.emitStatus(f.sessionId,$)}async runWithAuthRetry(f,$,J){try{return await $()}catch(W){if(!gO(W,f.config.providerId))throw W;return await this.syncOAuthCredentials(f,{forceRefresh:!0}),f.agent.restore(J),$()}}async syncOAuthCredentials(f,$){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:f.config.providerId,forceRefresh:$?.forceRefresh})}catch(W){if(W instanceof H5)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!J?.apiKey||f.config.apiKey===J.apiKey)return;f.config.apiKey=J.apiKey,f.agent.updateConnection({apiKey:J.apiKey}),f.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),f.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow(f){let $=this.sessions.get(f);if(!$)throw Error(`session not found: ${f}`);return $}resolveAbsoluteFilePaths(f,$){if(!$||$.length===0)return[];let J=$.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>mO(W)?W:D3(f,W));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity(f){return _0({agentId:f.agent.getAgentId(),conversationId:f.agent.getConversationId(),teamId:f.runtime.teamRuntime?.getTeamId(),teamName:f.runtime.teamRuntime?.getTeamName(),teamRole:f.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts(f){let $=await this.summarizePersistedTeammateUsage(f.sessionDir,f.rootMessagesPath,f.manifest.session_id),J=Xf(f.initialUsage,$);return this.withPersistedAggregateUsageFloor(J,f.manifest)}async summarizePersistedTeammateUsage(f,$,J){let W=D3($),H=`${J}.messages.json`,Q;try{Q=kO(f)}catch{return Pf()}let Z=Pf();for(let j of Q){if(!j.endsWith(".messages.json"))continue;if(j===H)continue;let X=D3(f,j);if(X===W)continue;let A=await Q$(X);if(A.length===0)continue;Z=Xf(Z,G1(A))}return Z}withPersistedAggregateUsageFloor(f,$){let J=cO($.metadata?.aggregateUsage);if(J)return dO(f,J);let W=$.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=f.totalCost)return f;return{...f,totalCost:W}}emitStatus(f,$){this.emitSessionSnapshot(f),this.emit({type:"status",payload:{sessionId:f,status:$}})}async emitSessionSnapshot(f){let $=await this.getSession(f);if(!$)return;this.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:W0({session:$,messages:await this.readSessionMessages(f),usage:this.usageBySession.get(f),aggregateUsage:this.aggregateUsageBySession.get(f)})}})}emit(f){this.events.emit(f)}async listRows(f){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor(f)),LB))}async getRow(f){let $=f.trim();if(!$)return;return(await this.listRows(LB)).find((W)=>W.sessionId===$)}async readManifest(f){let $=f.trim();if(!$)return;return await this.invokeOptionalValue("readSessionManifest",$)}invoke(f,...$){return TB(this.sessionService,f,...$)}invokeOptional(f,...$){return DB(this.sessionService,f,...$)}invokeOptionalValue(f,...$){return _B(this.sessionService,f,...$)}}function lO(f){return{text:f.text,usage:f.usage,inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,iterations:f.iterations,finishReason:f.finishReason,toolCalls:f.toolCalls.map(($)=>({name:$.name,input:$.input,output:$.output,error:$.error,durationMs:$.durationMs}))}}function pO(f){return f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"}function gJ(f={}){let $=new X0({sessionService:new j0(new Q0),fetch:f.fetch,telemetry:f.telemetry});return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),H=await $.startSession({source:J.source?.trim()||Vf.CLI,interactive:!1,config:{providerId:rO(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:pO(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:H.sessionId,startResult:{sessionId:H.sessionId,manifestPath:H.manifestPath,messagesPath:H.messagesPath}}},async sendSession(J,W){let H=await $.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((Q)=>Q.content)});if(!H)throw Error("local hub schedule runtime returned no turn result");return{result:lO(H)}},async abortSession(J){return await $.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await $.stopSession(J),{applied:!0}}}}iO(process.env.CLINE_VCR);function nO(f){let $=process.cwd(),J,W,H;for(let Q=0;Q<f.length;Q+=1){let Z=f[Q],j=f[Q+1];if(Z==="--cwd"&&j){$=j,Q+=1;continue}if(Z==="--host"&&j){J=j,Q+=1;continue}if(Z==="--port"&&j){let X=Number(j);if(Number.isFinite(X))W=X;Q+=1;continue}if(Z==="--pathname"&&j)H=j,Q+=1}return{cwd:$,host:J,port:W,pathname:H}}async function aO(){let f=nO(process.argv.slice(2));process.chdir(f.cwd);let $=gf({host:f.host,port:f.port,pathname:f.pathname}),J=await o$({host:$.host,port:$.port,pathname:$.pathname,owner:Af(),runtimeHandlers:gJ(),cronOptions:{workspaceRoot:f.cwd}}),W=async()=>{await J.close(),process.exit(0)},H=!1,Q=(Z,j)=>{if(H)return;H=!0;let X=j instanceof Error?j.stack||j.message:String(j);process.stderr.write(`[hub-daemon] ${Z}: ${X}
718
- `),J.close().catch((A)=>{let P=A instanceof Error?A.stack||A.message:String(A);process.stderr.write(`[hub-daemon] shutdown after ${Z} failed: ${P}
719
- `)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{W()}),process.on("SIGTERM",()=>{W()}),process.on("uncaughtException",(Z)=>{Q("uncaughtException",Z)}),process.on("unhandledRejection",(Z)=>{Q("unhandledRejection",Z)}),await new Promise(()=>{})}aO().catch((f)=>{let $=f instanceof Error?f.stack||f.message:String(f);process.stderr.write(`[hub-daemon] fatal: ${$}
711
+ version = team_outcome_fragments.version + 1`,[Q,W.outcomeId,W.id,W.section,W.sourceAgentId,W.sourceRunId??null,W.content,W.status,W.reviewedBy??null,W.reviewedAt?W.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,f){let J=O2($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[J]);if(Q.length===0)return[];let Z=oQ();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
712
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[f,Z,J]),Q.map((W)=>W.run_id)}handleTeamEvent($,f){this.appendTeamEvent($,f.type,f)}}function eQ($={}){try{let f=new jf($);return f.init(),f}catch{let f=new I4({teamDir:$.teamDir});return f.init(),f}}function $Z($,f){return qT($,f)}function ST($,f){let J=f?.["*"]??{},Q=f?.[$]??{};return{...J,...Q}.enabled!==!1}function CT($,f){return $.filter((J)=>ST(J.name,f))}function YA($,f){return E1(CT($,f))}function X5(){return`team-${wT(5)}`}function fZ($,f,J,Q,Z,W,j,X){let H=b0[R$({mode:J})],Y=Ff(f,Q,J,Z??Pf);return YA(N1({cwd:$,...H,enableSkills:!!j,...Y,executors:{...j?{skills:j}:{},...X??{}}}),W)}function ET($){return fZ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,hT,$.toolExecutors).some((f)=>f.name==="skills")}var hT=async()=>"";async function bT($){let f=O0();if(!q$({filePath:f}))return{tools:[]};let J=new p1({clientFactory:of({settingsPath:f})}),Q;try{Q=await l1(J,{filePath:f})}catch(X){await J.dispose().catch(()=>{});let H=X instanceof Error?X.message:String(X);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${H}`),{tools:[]}}let Z=Q.filter((X)=>X.disabled!==!0),W=await Promise.allSettled(Z.map((X)=>ef({serverName:X.name,provider:J}))),j=[];for(let[X,H]of W.entries())if(H.status==="fulfilled")j.push(...H.value);else{let Y=H.reason instanceof Error?H.reason.message:String(H.reason);$?.log(`[mcp] Failed to load tools from MCP server "${Z[X].name}", skipping: ${Y}`)}return{tools:j,shutdown:async()=>{await J.dispose()}}}function kT($,f){if(!$)return;for(let J of $.getTeammateIds())try{$.shutdownTeammate(J,f)}catch{}}function IT($){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 xT($){let f=b0[R$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??f.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??f.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class z2{teamRuntimeEntries=new Map;async build($){let{config:f,hooks:J,extensions:Q,logger:Z,telemetry:W,createSpawnTool:j,onTeamRestored:X,userInstructionService:H,configExtensions:Y,toolExecutors:V}=$,A=$.onTeamEvent??(()=>{}),B=xT(f),K=n0(),G=[],R=f.teamName?.trim()||X5(),F=f.sessionId?.trim()||R,P=$Z(Y,"rules"),D=$Z(Y,"skills"),O=$Z(Y,"workflows"),_=P||D||O,L=!1,z=Boolean(H),y=H,w;if(!y&&_)y=Z1({skills:{workspacePath:f.cwd},rules:{workspacePath:f.cwd},workflows:{workspacePath:f.cwd}});if(y)await y.start().catch(()=>{});let Q0=B.enableTools&&D&&Boolean(y)&&(z||y?.hasConfiguredSkills(f.skills)===!0)&&ET({cwd:f.cwd,providerId:f.providerId,mode:B.mode,modelId:f.modelId,toolRoutingRules:f.toolRoutingRules,toolPolicies:f.toolPolicies,toolExecutors:V}),Z0=y&&_?y.createExtension({includeRules:P,includeSkills:D,includeWorkflows:O,registerSkillsTool:Q0,allowedSkillNames:f.skills}):void 0,o=Z0?[...Q??f.extensions??[],Z0]:Q??f.extensions;if(B.enableTools){if(G.push(...fZ(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V)),!B.disableMcpSettingsTools){let p=await bT(f.logger);G.push(...p.tools),w=p.shutdown}}let u,U0=B.enableAgentTeams?eQ():void 0,k$=U0?.loadRuntime(F),d=k$?.state,K$=k$?.teammates??[],k=new Map(K$.map((p)=>[p.agentId,p])),n=f.sessionId||R,G$,e0=[],P1=!1,Yf=Rf({providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey??"",baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:J,extensions:o,logger:Z??f.logger,telemetry:$.telemetry??f.telemetry,workspaceMetadata:f.workspaceMetadata});if(!this.teamRuntimeEntries.has(n))this.teamRuntimeEntries.set(n,{delegatedAgentConfigProvider:Yf});let y2=()=>{if(!B.enableAgentTeams)return;let p=this.teamRuntimeEntries.get(n)??{delegatedAgentConfigProvider:Yf};if(this.teamRuntimeEntries.set(n,p),u=p.runtime,!u){if(u=new $f({teamName:R,leadAgentId:f.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:(f0)=>{if(A(f0),u&&U0){if(f0.type==="teammate_spawned"&&f0.teammate?.rolePrompt){let P$={agentId:f0.agentId,rolePrompt:f0.teammate.rolePrompt,modelId:f0.teammate.modelId,maxIterations:f0.teammate.maxIterations};k.set(P$.agentId,P$)}if(f0.type==="teammate_shutdown"&&!IT(f0.reason))k.delete(f0.agentId);U0.handleTeamEvent(F,f0),U0.persistRuntime(F,u.exportState(),Array.from(k.values()))}}}),d)u.hydrateState(d),P1=!0;p.runtime=u}if(!L){if(!u)return;L=!0;let f0=Of({runtime:u,leadAgentId:f.sessionId||"lead",restoredFromPersistence:Boolean(d),restoredTeammates:K$,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(P$)=>{e0=P$,G$?.addTools(P$)},createBaseTools:B.enableTools?()=>fZ(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V):void 0,teammateConfigProvider:Yf});if(P1)u.recoverActiveRuns("runtime_recovered");if(f0.restoredFromPersistence)X?.();G.push(...f0.tools)}return u};if(B.enableSpawnAgent&&j){let p=j();G.push({...p,execute:async(f0,P$)=>{return y2(),p.execute(f0,P$)}})}if(B.enableAgentTeams)y2();let c4=YA(G,f.toolPolicies),y5=c4.some((p)=>p.name===J0.SUBMIT_AND_EXIT&&p.lifecycle?.completesRun===!0),Vf=B.enableAgentTeams?()=>{let p=this.teamRuntimeEntries.get(n)?.runtime;if(!p)return;let f0=p.listTasks(),P$=f0.some((I$)=>I$.status==="in_progress"||I$.status==="pending"),cZ=p.listRuns({}),QB=cZ.some((I$)=>I$.status==="running"||I$.status==="queued");if(P$||QB){let I$=f0.filter((S0)=>S0.status==="in_progress"||S0.status==="pending").map((S0)=>`${S0.id} (${S0.status}): ${S0.title}`).join(", "),uZ=cZ.filter((S0)=>S0.status==="running"||S0.status==="queued").map((S0)=>`${S0.id} (${S0.status})`).join(", "),T5=[];if(I$)T5.push(`Unfinished tasks: ${I$}`);if(uZ)T5.push(`Active runs: ${uZ}`);return`[SYSTEM] You still have team obligations. ${T5.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,T2=y5?{requireCompletionTool:!0,...Vf?{completionGuard:Vf}:{}}:Vf?{completionGuard:Vf}:void 0;return{tools:c4,logger:Z??f.logger,telemetry:W??f.telemetry,teamRuntime:u,teamRestoredFromPersistence:Boolean(d),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(n)?.delegatedAgentConfigProvider??Yf,extensions:o,completionPolicy:T2,registerLeadAgent:(p)=>{if(G$=p,e0.length>0)p.addTools(E1(e0,[...K]))},shutdown:async(p)=>{if(kT(u,p),this.teamRuntimeEntries.delete(n),await w?.(),!z)y?.stop()}}}}var BA={};q(BA,{requestDesktopToolApproval:()=>QZ});import{mkdir as gT,readFile as mT,unlink as vT,writeFile as cT}from"node:fs/promises";import{join as AA}from"node:path";function uT($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function dT($){return new Promise((f)=>setTimeout(f,$))}async function JZ($){try{await vT($)}catch{}}async function QZ($,f={}){let J=f.approvalDir?.trim(),Q=f.sessionId?.trim();if(!J||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await gT(J,{recursive:!0});let Z=uT(`${$.toolCallId}`),W=AA(J,`${Q}.request.${Z}.json`),j=AA(J,`${Q}.decision.${Z}.json`),X=f.nowIso??(()=>new Date().toISOString());await cT(W,`${JSON.stringify({requestId:Z,sessionId:Q,createdAt:X(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
713
+ `,"utf8");let H=f.timeoutMs??300000,Y=f.pollIntervalMs??200,V=Date.now();while(Date.now()-V<H){try{let A=await mT(j,"utf8"),B=JSON.parse(A),K={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([JZ(j),JZ(W)]),K}catch{}await dT(Y)}return await JZ(W),{approved:!1,reason:"Tool approval request timed out"}}T$();var wA={};q(wA,{updateLocalProvider:()=>K5,saveLocalProviderSettings:()=>AZ,saveLocalProviderOAuthCredentials:()=>PZ,resolveLocalClineAuthToken:()=>FZ,refreshProviderModelsFromSource:()=>BZ,normalizeOAuthProvider:()=>KZ,loginLocalProvider:()=>GZ,listLocalProviders:()=>YZ,getProviderConfigFields:()=>DZ,getLocalProviderModels:()=>VZ,ensureCustomProvidersLoaded:()=>B5,deleteLocalProvider:()=>G5,addLocalProvider:()=>HZ});import*as B0 from"@cline/llms";import{getClineEnvironmentConfig as AN,isOAuthProviderId as BN}from"@cline/shared";import{existsSync as lT,mkdirSync as pT,readFileSync as rT,writeFileSync as iT}from"node:fs";import{mkdir as nT,readFile as aT,writeFile as tT}from"node:fs/promises";import{dirname as ZZ,join as sT}from"node:path";import*as w0 from"@cline/llms";import{ModelCapabilitySchema as oT,ProviderCapabilitySchema as eT,ProviderClientSchema as $N,ProviderProtocolSchema as fN}from"@cline/shared";import{z as i}from"zod";var JN=i.object({id:i.string().optional(),name:i.string().optional(),capabilities:i.array(oT).optional(),supportsVision:i.boolean().optional(),supportsAttachments:i.boolean().optional(),supportsReasoning:i.boolean().optional()}).passthrough(),QN=i.object({name:i.string(),baseUrl:i.string(),defaultModelId:i.string().optional(),protocol:fN.optional(),client:$N.optional(),capabilities:i.array(eT).optional(),modelsSourceUrl:i.string().optional()}).passthrough(),KA=i.object({provider:QN.optional(),models:i.record(i.string(),JN).optional()}).passthrough(),GA=i.object({version:i.literal(1),providers:i.record(i.string(),KA)}),ZN=i.object({version:i.literal(1),providers:i.record(i.string(),i.unknown())}),H5=new Set;function PA($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function Xf($){return sT(ZZ($.getFilePath()),"models.json")}function Y5(){return{version:1,providers:{}}}function FA($){let f=ZN.safeParse($);if(!f.success)return Y5();let J={};for(let[Q,Z]of Object.entries(f.data.providers)){let W=KA.safeParse(Z);if(W.success)J[Q]=W.data}return{version:1,providers:J}}function WZ($){if(!lT($))return Y5();try{let f=rT($,"utf8");return FA(JSON.parse(f))}catch{}return Y5()}async function _2($){try{let f=await aT($,"utf8");return FA(JSON.parse(f))}catch{}return Y5()}function DA($,f){pT(ZZ($),{recursive:!0});let J=GA.parse(f);iT($,`${JSON.stringify(J,null,2)}
714
+ `,"utf8")}async function V5($,f){await nT(ZZ($),{recursive:!0});let J=GA.parse(f);await tT($,`${JSON.stringify(J,null,2)}
715
+ `,"utf8")}function RA($,f){return{id:$,name:f.name??$,supportsAttachments:f.capabilities?.includes("files"),supportsVision:f.capabilities?.includes("images"),supportsReasoning:f.capabilities?.includes("reasoning")||f.thinkingConfig!=null}}function UA($){if(!$||$.length===0)return;let f=new Set;if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("tools"))f.add("tools");return f.size>0?[...f]:void 0}function LA($){let f=new Set;if(!$||$.length===0)return[...f];if($.includes("streaming"))f.add("streaming");if($.includes("tools"))f.add("tools");if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("vision"))f.add("images"),f.add("files");return[...f]}function WN($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function OA($,f){return $??f??"openai-chat"}function zA($,f,J){return $??J??(f==="openai-responses"?"openai":"openai-compatible")}function jN($,f){let J=new Set(f?.capabilities??[]);if(f?.supportsVision)J.add("images");if(f?.supportsAttachments)J.add("files");if(f?.supportsReasoning)J.add("reasoning");return{id:$,name:f?.name??$,capabilities:J.size>0?[...J]:void 0}}function XN($,f){for(let[J,Q]of Object.entries(f??{})){let Z=Q.id?.trim()||J.trim();if(!Z)continue;w0.registerModel($,Z,jN(Z,Q))}}function HN($,f,J){return{...f??{},id:$,name:f?.name??$,capabilities:f?.capabilities??J}}function YN($){return Object.assign({},...w0.resolveProviderModelCatalogKeys($).map((J)=>w0.getGeneratedModelsForProvider(J)))}function VN($){let f=$.provider.trim();if(!f||w0.isBuiltInProviderId(f))return;let J=$.baseUrl?.trim();if(!J)return;let Q=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],Z=YN(f),W=LA($.capabilities),j=W.length>0?W:void 0,X=$.model?.trim(),H={...Z,...Q?.models??{}};if(X)H[X]=HN(X,H[X],j);let Y=Object.keys(H).filter(Boolean),V=X||Y[0];if(!V)return;let A=OA($.protocol,Q?.provider.protocol),B=zA($.client,A,Q?.provider.client);w0.registerProvider({provider:{id:f,name:Q?.provider.name??PA(f),description:Q?.provider.description,protocol:A,client:B,baseUrl:J,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:V,capabilities:UA($.capabilities)??Q?.provider.capabilities,source:"file"},models:H})}function A5($){for(let f of Object.values($.providers))VN(f.settings)}function x4($,f){let J=f.models??{};if(!WN(f.provider)){XN($,J);return}let Q=LA(f.provider.capabilities),Z=Object.entries(J).map(([Y,V])=>({id:V.id?.trim()||Y.trim(),model:V})).filter(({id:Y})=>Y.length>0),W=f.provider.defaultModelId?.trim()||Z[0]?.id||"default",j=OA(f.provider.protocol,void 0),X=zA(f.provider.client,j,void 0),H=Object.fromEntries(Z.map(({id:Y,model:V})=>[Y,{id:Y,name:V.name??Y,capabilities:Q.length>0?Q:void 0,status:"active"}]));w0.registerProvider({provider:{id:$,name:f.provider.name.trim()||PA($),protocol:j,client:X,baseUrl:f.provider.baseUrl,modelsSourceUrl:f.provider.modelsSourceUrl,defaultModelId:W,capabilities:UA(f.provider.capabilities),source:"file"},models:H})}function _A($){let f=Xf($);if(H5.has(f))return;let J=WZ(f);for(let[Q,Z]of Object.entries(J.providers))x4(Q,Z);H5.add(f)}async function B5($){let f=Xf($);if(H5.has(f))return;let J=await _2(f);for(let[Q,Z]of Object.entries(J.providers))x4(Q,Z);H5.add(f)}function KN($){return $.apiKey??$.auth?.apiKey}function GN($){return($.auth?.accessToken?.trim()??"").length>0}function yA($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function PN($){let f=$.split(/\s+/).filter(Boolean);if(f.length===0)return"?";if(f.length===1)return f[0].slice(0,2).toUpperCase();return`${f[0][0]}${f[1][0]}`.toUpperCase()}function FN($){let f=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let Q of $)J=J*31+Q.charCodeAt(0)>>>0;return f[J%f.length]}function TA($){return Object.entries($).sort(([f],[J])=>f.localeCompare(J)).map(([f,J])=>RA(f,J))}async function DN($,f){let J=await B0.getModelsForProvider($);if(!f)return J;let Q=await y8($,{loadPrivateOnAuth:!0,failOnError:!1},f);return Q?.knownModels?{...J,...Q.knownModels}:J}function jZ($){return[...new Set(($??[]).map((f)=>f.trim()).filter(Boolean))]}function RN($){if(!$?.length)return;return[...new Set($)]}function UN($,f){return RN([...$??[],...f??[]])}function LN($){let f=$?.popularRank;return typeof f==="number"&&Number.isFinite(f)?f:Number.MAX_SAFE_INTEGER}function NA($){let f=Object.entries($??{}).filter(([J])=>J.trim().length>0);return f.length>0?Object.fromEntries(f):void 0}function XZ($,f){let J=f?.includes("vision")??!1,Q=f?.includes("reasoning")??!1;return Object.fromEntries($.map((Z)=>[Z,{id:Z,name:Z,supportsVision:J,supportsAttachments:J,supportsReasoning:Q}]))}async function MA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let f=$.modelsSourceUrl?await x6($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...f])]}function qA($,f){let J=$.read(),Q=!1;if(J.providers[f])delete J.providers[f],Q=!0;if(J.lastUsedProvider===f)delete J.lastUsedProvider,Q=!0;if(Q)$.write(J);B0.unregisterProvider(f)}async function HZ($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=f.baseUrl.trim(),Z=f.apiKey?.trim()??"";if(!Q&&!Z){let G=Xf($);if((await _2(G)).providers[J]){let F=await G5($,{providerId:J});return{providerId:J,settingsPath:F.settingsPath,modelsPath:F.modelsPath,modelsCount:0}}return qA($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(B0.hasProvider(J))throw Error(`provider "${J}" already exists`);let W=f.name.trim();if(!W)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let j=jZ(f.models),X=f.modelsSourceUrl?.trim(),H=await MA({providerId:J,explicitModels:j,modelsSourceUrl:X,shouldRecompute:!0});if(H.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let Y=f.defaultModelId?.trim()&&H.includes(f.defaultModelId.trim())?f.defaultModelId.trim():H[0],V=f.capabilities?.length?[...new Set(f.capabilities)]:void 0,A=NA(f.headers);$.saveProviderSettings({provider:J,apiKey:Z||void 0,baseUrl:Q,headers:A,timeout:f.timeoutMs,model:Y,protocol:f.protocol,client:f.client},{setLastUsed:!1});let B=Xf($),K=await _2(B);return K.providers[J]={provider:{name:W,baseUrl:Q,defaultModelId:Y,protocol:f.protocol,client:f.client,capabilities:V,modelsSourceUrl:X},models:XZ(H,V)},await V5(B,K),x4(J,K.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:B,modelsCount:H.length}}async function K5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=Xf($),Z=await _2(Q),W=Z.providers[J];if(!W){let _=$.getProviderSettings(J);if(!_)throw Error(`provider "${J}" does not exist`);let L=f.modelsSourceUrl?.trim(),z=jZ(f.models)[0]??_.model?.trim();if(!z&&!L)throw Error(`provider "${J}" cannot be updated because no model is configured`);W={provider:{name:f.name?.trim()||yA(J),baseUrl:f.baseUrl?.trim()??_.baseUrl?.trim()??"",defaultModelId:z,protocol:_.protocol,client:_.client,capabilities:_.capabilities},models:z?XZ([z],_.capabilities):{}}}if(!W.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let j=f.name?.trim()??W.provider.name.trim();if(!j)throw Error("name is required");let X=f.baseUrl?.trim()??W.provider.baseUrl.trim();if(!X)throw Error("baseUrl is required");let H=f.capabilities===void 0?W.provider.capabilities:f.capabilities===null?void 0:[...new Set(f.capabilities)],Y=f.protocol===void 0?W.provider.protocol:f.protocol??void 0,V=f.client===void 0?W.provider.client:f.client??void 0,A=jZ(f.models),B=f.modelsSourceUrl===void 0?W.provider.modelsSourceUrl:f.modelsSourceUrl?.trim()||void 0,K=f.models!==void 0||f.modelsSourceUrl!==void 0&&!!B,G=Object.keys(W.models??{}).map((_)=>_.trim()).filter(Boolean),R=await MA({providerId:J,explicitModels:A,modelsSourceUrl:B,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let F=f.defaultModelId===void 0?W.provider.defaultModelId?.trim():f.defaultModelId?.trim(),P=F&&R.includes(F)?F:R[0],O={...$.getProviderSettings(J)??{},provider:J,baseUrl:X,model:P};if(Y)O.protocol=Y;else delete O.protocol;if(V)O.client=V;else delete O.client;if(f.apiKey!==void 0){let _=f.apiKey?.trim()??"";if(_)O.apiKey=_;else delete O.apiKey}if(f.headers!==void 0){let _=NA(f.headers);if(_)O.headers=_;else delete O.headers}if(f.timeoutMs!==void 0)if(typeof f.timeoutMs==="number")O.timeout=f.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),Z.providers[J]={provider:{name:j,baseUrl:X,defaultModelId:P,protocol:Y,client:V,capabilities:H,modelsSourceUrl:B},models:XZ(R,H)},await V5(Q,Z),x4(J,Z.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:R.length}}async function G5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=Xf($),Z=await _2(Q);if(!Z.providers[J])throw Error(`provider "${J}" does not exist`);return delete Z.providers[J],await V5(Q,Z),B0.unregisterProvider(J),qA($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q}}async function YZ($){let f=$.read(),J=B0.getProviderIds(),Q=await Promise.all(J.map(async(W)=>{let[j,X]=await Promise.all([B0.getProvider(W),B0.getModelsForProvider(W)]),H=TA(X),Y=f.providers[W]?.settings,V=j?.name??yA(W),A=UN(j?.capabilities,Y?.capabilities);return{provider:{id:W,name:V,models:H.length,color:FN(W),letter:PN(V),enabled:Boolean(Y),apiKey:Y?KN(Y):void 0,oauthAccessTokenPresent:Y?GN(Y):void 0,baseUrl:Y?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:Y?.protocol??j?.protocol,client:Y?.client??j?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",modelList:H},rank:LN(j?.metadata)}}));return Q.sort((W,j)=>{if(W.rank!==j.rank)return W.rank-j.rank;return W.provider.name.localeCompare(j.provider.name)||W.provider.id.localeCompare(j.provider.id)}),{providers:Q.map((W)=>W.provider),settingsPath:$.getFilePath()}}async function VZ($,f){let J=$.trim(),Q=await DN(J,f),Z=TA(Q);return{providerId:J,models:Z}}function AZ($,f){let J=f.providerId.trim();if(f.enabled===!1){let W=$.read();if(delete W.providers[J],W.lastUsedProvider===J)delete W.lastUsedProvider;return $.write(W),{providerId:J,enabled:!1,settingsPath:$.getFilePath()}}let Z={...$.getProviderSettings(J)??{},provider:J};for(let W of["apiKey","baseUrl","model","region"])if(Object.hasOwn(f,W)&&typeof f[W]==="string")if(f[W].trim().length===0)delete Z[W];else Z[W]=f[W];for(let W of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(f,W))Z[W]=f[W];for(let W of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(f,W)&&f[W]!=null)Z[W]={...typeof Z[W]==="object"&&Z[W]!=null?Z[W]:{},...f[W]};return $.saveProviderSettings(Z,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function BZ($,f){let J=f.trim(),Q=$.getProviderSettings(J),W=B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,j=Q?.baseUrl?.trim()||W?.baseUrl?.trim(),X=g6(j,W?.baseUrl,W?.modelsSourceUrl);if(!Q||!W||!j||!X)return{providerId:J,refreshed:!1};let H=await K5($,{providerId:J,name:W.name,baseUrl:j,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:X,protocol:Q.protocol??W.protocol??null,client:Q.client??W.client??null,capabilities:Q.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:H.modelsCount}}function KZ($){let f=$.trim().toLowerCase();if(f==="codex"||f==="openai-codex")return"openai-codex";if(f==="cline"||f==="oca")return f;throw Error(`provider "${$}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function ON($,f){if($==="cline")return f.access.startsWith("workos:")?f.access:`workos:${f.access}`;return f.access}async function GZ($,f,J){let Q=h8({onPrompt:async(Z)=>Z.defaultValue??"",openUrl:J,onOpenUrlError:({error:Z})=>{throw Z instanceof Error?Z:Error(String(Z))}});if($==="cline")return pf({apiBaseUrl:f?.baseUrl?.trim()||AN().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q});if($==="oca")return gf({mode:f?.oca?.mode,callbacks:Q});return rf(Q)}function PZ($,f,J,Q){let Z={...J?.auth??{},accessToken:ON(f,Q),refreshToken:Q.refresh,accountId:Q.accountId,expiresAt:Q.expires},W={...J??{provider:f},provider:f,auth:Z};return $.saveProviderSettings(W,{tokenSource:"oauth"}),W}function FZ($){let f=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return f&&f.length>0?f:void 0}var zN=new Set(["ollama","lmstudio","litellm"]);function _N($,f){if(!f?.provider.baseUrl)return!1;if(f.provider.source!=="system")return!0;return zN.has($)}function DZ($){let f=B0.normalizeProviderId($);if(BN(f))return{providerId:f,authMethod:"oauth",fields:{}};let J=B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f];if(J?.provider.capabilities?.includes("local-auth"))return{providerId:f,authMethod:"local",fields:{}};let Q=J?.provider.baseUrl,Z={apiKey:{}};if(_N(f,J))Z.baseUrl={defaultValue:Q};return{providerId:f,authMethod:"api-key",fields:Z}}var bA={};q(bA,{resolveLegacyClineAuth:()=>hA,migrateLegacyProviderSettings:()=>g4});import{existsSync as yN,readFileSync as TN}from"node:fs";import{dirname as NN,join as RZ}from"node:path";import*as CA from"@cline/llms";import{resolveClineDataDir as MN}from"@cline/shared/storage";var EA="openai";function hA($){let f=$?.trim();if(!f)return;try{let J=JSON.parse(f);if(!J)return;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:J.expiresAt,accountId:J.userInfo?.id}}catch{return}}function b($){let f=$?.trim();return f?f:void 0}function SA($){if(!yN($))return;try{let f=TN($,"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function qN($){let f=$.dataDir??MN(),J=$.globalStatePath??RZ(f,"globalState.json"),Q=$.secretsPath??RZ(f,"secrets.json"),Z=SA(J),W=SA(Q);if(!Z&&!W)return;return{globalState:Z??{},secrets:W??{}}}function wN($){try{let J=new URL($).hostname.toLowerCase();return J==="api.openai.com"||J.endsWith(".openai.azure.com")||J.endsWith(".services.ai.azure.com")}catch{return!1}}function SN($){let f=b($.openAiBaseUrl);if(!f)return!1;if($.azureApiVersion||$.azureIdentity)return!1;return!wN(f)}function UZ($,f){if($==="openai"&&SN(f))return EA;return $}function CN($,f,J,Q){let Z=J==="plan"?"planMode":"actMode",W=f===Q?b(J==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,X={openrouter:`${Z}OpenRouterModelId`,cline:`${Z}ClineModelId`,openai:`${Z}OpenAiModelId`,ollama:`${Z}OllamaModelId`,lmstudio:`${Z}LmStudioModelId`,litellm:`${Z}LiteLlmModelId`,requesty:`${Z}RequestyModelId`,together:`${Z}TogetherModelId`,fireworks:`${Z}FireworksModelId`,sapaicore:`${Z}SapAiCoreModelId`,groq:`${Z}GroqModelId`,baseten:`${Z}BasetenModelId`,huggingface:`${Z}HuggingFaceModelId`,"huawei-cloud-maas":`${Z}HuaweiCloudMaasModelId`,oca:`${Z}OcaModelId`,aihubmix:`${Z}AihubmixModelId`,hicap:`${Z}HicapModelId`,nousResearch:`${Z}NousResearchModelId`,"vercel-ai-gateway":`${Z}VercelAiGatewayModelId`}[f];return(X?b(typeof $[X]==="string"?$[X]:void 0):void 0)??W}function EN($,f,J){let Q=J==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,Z=J==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,W=J==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,j=(f==="gemini"?Z:void 0)??Q,X=j==="none"||j==="low"||j==="medium"||j==="high"?j:void 0,H=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&H===void 0)return;return{...X?{effort:X}:{},...H!==void 0?{budgetTokens:H}:{}}}function hN($){let f=$["openai-codex-oauth-credentials"];if(!f)return;try{let J=JSON.parse(f),Q=b(J.access_token),Z=b(J.refresh_token),W=b(J.accountId);if(!Q&&!Z&&!W)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...Z?{refreshToken:Z}:{},...W?{accountId:W}:{}}}}catch{return}}function bN($){let f=CA.getGeneratedModelsForProvider($);return Object.keys(f)[0]??void 0}function kN($,f,J,Q){let Z=UZ($,f),W=b(Q==="plan"?f.planModeApiProvider:f.actModeApiProvider),j=CN(f,$,Q,W)??bN(Z),X=EN(f,Z,Q),H=typeof f.requestTimeoutMs==="number"&&Number.isInteger(f.requestTimeoutMs)&&f.requestTimeoutMs>0?f.requestTimeoutMs:void 0,Y={anthropic:J.apiKey,cline:J.clineApiKey,openai:J.openAiApiKey,"openai-native":J.openAiNativeApiKey,openrouter:J.openRouterApiKey,bedrock:J.awsBedrockApiKey,gemini:J.geminiApiKey,ollama:J.ollamaApiKey,deepseek:J.deepSeekApiKey,requesty:J.requestyApiKey,together:J.togetherApiKey,fireworks:J.fireworksApiKey,qwen:J.qwenApiKey,doubao:J.doubaoApiKey,mistral:J.mistralApiKey,litellm:J.liteLlmApiKey,asksage:J.asksageApiKey,xai:J.xaiApiKey,moonshot:J.moonshotApiKey,zai:J.zaiApiKey,huggingface:J.huggingFaceApiKey,nebius:J.nebiusApiKey,sambanova:J.sambanovaApiKey,cerebras:J.cerebrasApiKey,groq:J.groqApiKey,"huawei-cloud-maas":J.huaweiCloudMaasApiKey,baseten:J.basetenApiKey,"vercel-ai-gateway":J.vercelAiGatewayApiKey,dify:J.difyApiKey,minimax:J.minimaxApiKey,hicap:J.hicapApiKey,aihubmix:J.aihubmixApiKey,nousResearch:J.nousResearchApiKey,oca:J.ocaApiKey,sapaicore:J.sapAiCoreClientId},V={};if($==="openai-codex")Object.assign(V,hN(J));if($==="cline")try{let P=b(J["cline:clineAccountId"]);if(P)V.auth={...V.auth??{},...hA(P)}}catch{}if($==="openai"&&f.openAiHeaders)V.headers=f.openAiHeaders;if($==="bedrock")V.aws={accessKey:b(J.awsAccessKey),secretKey:b(J.awsSecretKey),sessionToken:b(J.awsSessionToken),region:b(f.awsRegion),authentication:f.awsAuthentication,profile:f.awsUseProfile?b(f.awsProfile):void 0,usePromptCache:f.awsBedrockUsePromptCache,useCrossRegionInference:f.awsUseCrossRegionInference,useGlobalInference:f.awsUseGlobalInference,endpoint:b(f.awsBedrockEndpoint),customModelBaseId:b(Q==="plan"?f.planModeAwsBedrockCustomModelBaseId:f.actModeAwsBedrockCustomModelBaseId)};if($==="vertex")V.gcp={projectId:b(f.vertexProjectId),region:b(f.vertexRegion)};if($==="openai"&&(f.azureApiVersion||f.azureIdentity!==void 0))V.azure={apiVersion:b(f.azureApiVersion),useIdentity:f.azureIdentity};if($==="sapaicore")V.sap={clientId:b(J.sapAiCoreClientId),clientSecret:b(J.sapAiCoreClientSecret),tokenUrl:b(f.sapAiCoreTokenUrl),resourceGroup:b(f.sapAiResourceGroup),deploymentId:b(Q==="plan"?f.planModeSapAiCoreDeploymentId:f.actModeSapAiCoreDeploymentId),useOrchestrationMode:f.sapAiCoreUseOrchestrationMode};if($==="oca"){V.oca={mode:f.ocaMode};let P=b(J.ocaRefreshToken);if(P)V.auth={...V.auth??{},refreshToken:P}}if($==="qwen")V.apiLine=f.qwenApiLine;if($==="moonshot")V.apiLine=f.moonshotApiLine;if($==="zai")V.apiLine=f.zaiApiLine;if($==="minimax")V.apiLine=f.minimaxApiLine;let A={anthropic:f.anthropicBaseUrl,openai:f.openAiBaseUrl,ollama:f.ollamaBaseUrl,lmstudio:f.lmStudioBaseUrl,litellm:f.liteLlmBaseUrl,gemini:f.geminiBaseUrl,requesty:f.requestyBaseUrl,asksage:f.asksageApiUrl,dify:f.difyBaseUrl,oca:f.ocaBaseUrl,aihubmix:f.aihubmixBaseUrl,sapaicore:f.sapAiCoreBaseUrl},B=b(Y[$]),K=b(A[$]),G={provider:Z,...B?{apiKey:B}:{},...j?{model:j}:{},...K?{baseUrl:K}:{},...X?{reasoning:X}:{},...H?{timeout:H}:{},...V},R=M8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((P)=>P!=="provider").length>0?R.data:void 0}function IN($,f){if($!==EA)return;if(!f.baseUrl||!f.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:f.baseUrl,defaultModelId:f.model},models:{[f.model]:{id:f.model,name:f.model}}}}function xN($,f){let J=new Set;for(let Q of[$.actModeApiProvider,$.planModeApiProvider]){let Z=b(Q);if(Z)J.add(Z)}if(b(f.apiKey))J.add("anthropic");if(b(f.openRouterApiKey))J.add("openrouter");if(b(f.openAiApiKey))J.add("openai");if(b(f.openAiNativeApiKey))J.add("openai-native");if(b(f["openai-codex-oauth-credentials"]))J.add("openai-codex");if(b(f.geminiApiKey))J.add("gemini");if(b(f.ollamaApiKey))J.add("ollama");if(b(f.awsAccessKey)||b(f.awsBedrockApiKey))J.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))J.add("vertex");if(b(f.clineApiKey))J.add("cline");if(b(f.ocaApiKey))J.add("oca");return J}function g4($){let f=$.providerSettingsManager.read(),J=qN($);if(!J)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let{globalState:Q,secrets:Z}=J,W=Q.mode==="plan"?"plan":"act",j=xN(Q,Z),X=J1();X.providers={...f.providers},X.lastUsedProvider=f.lastUsedProvider;let H=new Date().toISOString(),Y=0,V=RZ(NN($.providerSettingsManager.getFilePath()),"models.json"),A=WZ(V),B=0;for(let R of j){let F=UZ(R,Q);if(X.providers[F])continue;let P=kN(R,Q,Z,W);if(!P)continue;X.providers[F]={settings:P,updatedAt:H,tokenSource:"migration"},Y+=1;let D=IN(F,P);if(D&&!A.providers[F])A.providers[F]=D,B+=1}if(Y===0&&B===0)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let K=b(W==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),G=K?UZ(K,Q):void 0;if(X.lastUsedProvider=f.lastUsedProvider??(G&&X.providers[G]?G:Object.keys(X.providers)[0]),$.providerSettingsManager.write(X),B>0)DA(V,A);return{migrated:Y>0||B>0,providerCount:Object.keys(X.providers).length,lastUsedProvider:X.lastUsedProvider}}T0();aJ();var kA={};q(kA,{FileTeamPersistenceStore:()=>P5});import{appendFileSync as gN,existsSync as LZ,mkdirSync as mN,readFileSync as vN,renameSync as cN,unlinkSync as uN,writeFileSync as dN}from"node:fs";import{join as OZ}from"node:path";import{resolveTeamDataDir as lN}from"@cline/shared/storage";function pN($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class P5{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let f=pN($.teamName),J=$.baseDir?.trim()||lN();this.dirPath=OZ(J,f),this.statePath=OZ(this.dirPath,"state.json"),this.taskHistoryPath=OZ(this.dirPath,"task-history.jsonl")}loadState(){if(!LZ(this.statePath))return;try{let $=vN(this.statePath,"utf8"),f=JSON.parse($);if(f.version!==1||!f.teamState)return;for(let J of f.teammates??[])this.teammateSpecs.set(J.agentId,J);return cY(f.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let f={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;dN(J,`${JSON.stringify(f,null,2)}
716
+ `,"utf8"),cN(J,this.statePath)}appendTaskHistory($){let f={};switch($.type){case"team_task_updated":f=$.task;break;case"team_message":f={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":f={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":f={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":f={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":f={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),gN(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:f})}
717
+ `,"utf8")}ensureDir(){if(!LZ(this.dirPath))mN(this.dirPath,{recursive:!0})}hasPersistableState($){let f=$.exportState();if(this.teammateSpecs.size>0)return!0;if(f.members.some((J)=>J.role==="teammate"))return!0;return f.tasks.length>0||f.mailbox.length>0||f.missionLog.length>0}clearPersistedState(){if(LZ(this.statePath))uN(this.statePath)}}var IA={};q(IA,{ChatViewStateSchema:()=>zZ,ChatSummarySchema:()=>L5,ChatSessionStatusSchema:()=>D5,ChatSessionConfigSchema:()=>F5,ChatMessageSchema:()=>U5,ChatMessageRoleSchema:()=>R5});import{z as C}from"zod";var F5=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()}),D5=C.enum(["idle","starting","running","stopping","completed","cancelled","failed","error"]),R5=C.enum(["user","assistant","tool","system","status","error"]),U5=C.object({id:C.string().min(1),sessionId:C.string().nullable(),role:R5,content:C.string(),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()}),L5=C.object({toolCalls:C.number().int().nonnegative(),tokensIn:C.number().int().nonnegative(),tokensOut:C.number().int().nonnegative()}),zZ=C.object({sessionId:C.string().nullable(),status:D5,config:F5,messages:C.array(U5),rawTranscript:C.string(),error:C.string().nullable(),summary:L5});var xA={};q(xA,{CORE_BUILD_VERSION:()=>_Z});var _Z=rH;import{Agent as MM,createAgentRuntime as qM}from"@cline/agents";var mA={};q(mA,{fetchClineRecommendedModels:()=>yZ,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>O5});import{getClineEnvironmentConfig as rN}from"@cline/shared";var iN=5000,O5={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function nN($){return{recommended:$.recommended.map((f)=>({...f,tags:[...f.tags]})),free:$.free.map((f)=>({...f,tags:[...f.tags]}))}}function gA($){if(!$||typeof $!=="object")return null;let f=$;if(typeof f.id!=="string"||f.id.length===0)return null;return{id:f.id,name:typeof f.name==="string"&&f.name.length>0?f.name:f.id,description:typeof f.description==="string"?f.description:"",tags:Array.isArray(f.tags)?f.tags.filter((J)=>typeof J==="string"):[]}}function aN($){if(!$||typeof $!=="object")return null;let f=$,J=Array.isArray(f.recommended)?f.recommended:[],Q=Array.isArray(f.free)?f.free:[],Z=J.map(gA).filter((j)=>j!==null),W=Q.map(gA).filter((j)=>j!==null);if(Z.length===0&&W.length===0)return null;return{recommended:Z,free:W}}function tN($){let f=$.baseUrl?.trim();if(f)return f;let J=rN().apiBaseUrl;try{return($.providerSettingsManager??new B$).getProviderSettings("cline")?.baseUrl?.trim()||J}catch{return J}}async function sN($,f,J){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await $(f,{signal:Q.signal})}finally{clearTimeout(Z)}}async function yZ($={}){try{let f=tN($),J=$.fetchImpl??fetch,Q=await sN(J,`${f}/api/v1/ai/cline/recommended-models`,$.timeoutMs??iN);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let Z=await Q.json(),W=aN(Z);if(W)return W}catch{}return nN(O5)}var vA={};q(vA,{loadLlmsConfigFromFile:()=>NZ,defineLlmsConfig:()=>TZ});import{readFile as oN}from"node:fs/promises";import eN from"node:path";function TZ($){return $}async function NZ($){let f=eN.resolve($),J=await oN(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to parse JSON config at "${f}": ${W}`)}return $M(Q,f)}function $M($,f){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${f}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${f}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${f}": "providers" cannot be empty.`);return $}var rA={};q(rA,{createLlmsSdk:()=>qZ,DefaultLlmsSdk:()=>m4});import{BUILT_IN_PROVIDER_IDS as dA,createHandler as QM,createHandlerAsync as ZM,getProviderCollection as WM,hasProvider as lA,registerAsyncHandler as jM,registerHandler as XM,registerModel as HM,registerProvider as pA}from"@cline/llms";function cA($){return $?{...$}:{}}function fM($,f){if($)return $;if(!f)return;let J=globalThis.process;if(!J?.env)return;return J.env[f]}function JM($,f){if(!f.length)throw Error(`Provider "${$}" must include at least one model.`)}function uA($){let f=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:f,defaultModel:$.collection.provider.defaultModelId,modelCount:f.length}}class MZ{providers=new Map;register($){JM($.id,$.models);let f=$.defaultModel??$.models[0];if(!f)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(f))throw Error(`Default model "${f}" is not included in configured models for "${$.id}".`);let J=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...J?.models??[],...$.models]),defaultModel:f,defaults:{...J?.defaults??{},...cA($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:fM($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...cA($.settings)}})}registerModel($,f){let J=this.providers.get($);if(!J){this.providers.set($,{id:$,models:new Set([f]),defaultModel:f,defaults:{}});return}J.models.add(f)}createHandlerConfig($){let f=this.require($.providerId),J=$.modelId??f.defaultModel;if(!f.models.has(J))throw Error(`Model "${J}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:J,...f.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,f){return this.providers.get($)?.models.has(f)??!1}require($){let f=this.providers.get($);if(!f)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return f}}class m4{configuredProviders=new MZ;constructor($){this.applyConfig($)}createHandler($){return QM(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return ZM(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(pA($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)XM($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)jM($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let f=$.exposeModels??Object.keys($.models),J=$.defaultModel??f[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);pA({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:J,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:f,defaultModel:J,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){HM($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...dA]}async getBuiltInProviders(){return(await Promise.all(dA.map((f)=>WM(f)))).filter((f)=>f!==void 0).map((f)=>uA({collection:f}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,f){return this.configuredProviders.hasModel($,f)}applyConfig($){for(let f of $.providers)this.configuredProviders.registerSelectionConfig(f);for(let f of $.models??[])this.registerModel(f);for(let f of $.customProviders??[])this.registerProvider(f);for(let f of this.configuredProviders.list()){let J=lA(f.id),Q=this.configuredProviders.createHandlerConfig({providerId:f.id,modelId:f.defaultModel}).routingProviderId,Z=typeof Q==="string"&&lA(Q);if(!J&&!Z)throw Error(`Provider "${f.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qZ($){return new m4($)}TQ();async function YM(){return Promise.resolve().then(() => (rQ(),fA))}function hM(){return new Date().toISOString()}function bM($){if(tA($)!=="providers.json")return;let f=SZ($);if(tA(f)!=="settings")return;return SZ(f)}class B${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??EM(),this.dataDir=$.dataDir??bM(this.filePath),this.dataDir||!$.filePath)g4({providerSettingsManager:this,dataDir:this.dataDir});if(_A(this),A5(this.read()),wZ(this.filePath))try{aA(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!wZ(this.filePath))return J1();try{let $=SM(this.filePath,"utf8"),f=JSON.parse($),J=cf.safeParse(f);if(J.success)return A5(J.data),J.data}catch{}return J1()}write($){let f=cf.parse($),J=SZ(this.filePath);if(!wZ(J))wM(J,{recursive:!0,mode:448});CM(this.filePath,`${JSON.stringify(f,null,2)}
718
+ `,"utf8");try{aA(this.filePath,384)}catch{}A5(f)}saveProviderSettings($,f={}){let J=M8.parse($),Q=this.read(),Z=J.provider,W=f.setLastUsed!==!1,j=Q.providers[Z],X=f.tokenSource??j?.tokenSource??"manual",H={...Q,providers:{...Q.providers,[Z]:{settings:J,updatedAt:hM(),tokenSource:X}},lastUsedProvider:W?Z:Q.lastUsedProvider};return this.write(H),H}getProviderSettings($){return this.read().providers[$]?.settings}getLastUsedProviderSettings(){let $=this.read(),f=$.lastUsedProvider;if(!f)return;return $.providers[f]?.settings}getProviderConfig($,f){let J=this.getProviderSettings($);if(!J)return;return I0(J,f)}getLastUsedProviderConfig($){let f=this.getLastUsedProviderSettings();if(!f)return;return I0(f,$)}async refreshCatalog(){try{await mf({})}catch{}}}T0();cJ();import{getClineEnvironmentConfig as kM,isOAuthProviderId as IM}from"@cline/shared";var CZ="workos:";function xM($,f){if($==="cline")return`${CZ}${f}`;return f}function gM($,f){if($==="cline"&&f.toLowerCase().startsWith(CZ))return f.slice(CZ.length);return f}function mM($){let J=G0($)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function vM($,f){let J=$.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let Q=mM(f);if(Q)return Q;return Date.now()-1}function cM($,f){let J=f.auth?.accessToken?.trim(),Q=f.auth?.refreshToken?.trim();if(!J||!Q)return null;let Z=gM($,J);if(!Z)return null;return{access:Z,refresh:Q,expires:vM(f,Z),accountId:f.auth?.accountId}}function uM($,f){let J=$?.expiresAt,Q=f?.expiresAt;return $?.accessToken===f?.accessToken&&$?.refreshToken===f?.refreshToken&&$?.accountId===f?.accountId&&J===Q}class z5 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 EZ{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new B$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){if(!IM($.providerId))return null;return this.resolveWithSingleFlight($.providerId,$.forceRefresh)}async resolveWithSingleFlight($,f=!1){let J=this.refreshInFlight.get($);if(J)return J;let Q=this.resolveProviderApiKeyInternal($,f).catch((Z)=>{throw Z}).finally(()=>{this.refreshInFlight.delete($)});return this.refreshInFlight.set($,Q),Q}async resolveProviderApiKeyInternal($,f){let J=this.providerSettingsManager.getProviderSettings($);if(!J)return null;let Q=cM($,J);if(!Q)return null;let Z=await this.resolveCredentials($,J,Q,f);if(!Z)throw new z5($);let W=xM($,Z.access),j={...J.auth??{},accessToken:W,refreshToken:Z.refresh,accountId:Z.accountId};j.expiresAt=Z.expires;let X={...J,auth:j},H=!uM(J.auth,X.auth);if(H)this.providerSettingsManager.saveProviderSettings(X,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:$,apiKey:W,accountId:Z.accountId,refreshed:H}}async resolveCredentials($,f,J,Q){if($==="cline")return k8(J,{apiBaseUrl:f.baseUrl?.trim()||kM().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:Q});if($==="oca")return L8(J,{forceRefresh:Q,telemetry:this.telemetry},{mode:f.oca?.mode,telemetry:this.telemetry});return x8(J,{forceRefresh:Q,telemetry:this.telemetry})}}import{normalizeUserInput as dM}from"@cline/shared";import{nanoid as lM}from"nanoid";class sA{list($){return $?p0($):[]}update($,f){if(!$)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((H)=>H.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:p0($),updated:!1};let Z=$.pendingPrompts[Q];if(!Z)return{sessionId:f.sessionId,prompts:p0($),updated:!1};let W=f.prompt===void 0?Z.prompt:dM(f.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=f.delivery??Z.delivery,X={...Z,prompt:W,mode:f.mode??Z.mode,delivery:j};return $.pendingPrompts.splice(Q,1),pM($,X,Q,Z.delivery),{sessionId:f.sessionId,prompts:p0($),prompt:_5(X),updated:!0}}delete($,f){if(!$)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((W)=>W.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:p0($),removed:!1};let[Z]=$.pendingPrompts.splice(Q,1);return{sessionId:f.sessionId,prompts:p0($),prompt:Z?_5(Z):void 0,removed:!0}}enqueue($,f){let{prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j}=f,X=$.pendingPrompts.findIndex((H)=>H.prompt===J);if(X>=0){let[H]=$.pendingPrompts.splice(X,1),Y={...H,prompt:J,mode:Q??H.mode,userImages:W??H.userImages,userFiles:j??H.userFiles};if(Z==="steer"||H.delivery==="steer")$.pendingPrompts.unshift({...Y,delivery:"steer"});else $.pendingPrompts.push(Y)}else{let H={id:`pending_${Date.now()}_${lM(5)}`,prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j};if(Z==="steer")$.pendingPrompts.unshift(H);else $.pendingPrompts.push(H)}return p0($)}consumeSteer($){let f=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(f<0)return{prompts:p0($)};let[J]=$.pendingPrompts.splice(f,1);return{entry:J,prompts:p0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:p0($)}}requeueFront($,f){return $.pendingPrompts.unshift(f),p0($)}clear($){return $.pendingPrompts.length=0,[]}}class hZ{deps;service=new sA;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=this.service.update(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}delete($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=this.service.delete(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}enqueue($,f){let J=this.deps.getSession($);if(!J||J.aborting)return;this.service.enqueue(J,f),this.emitPrompts(J),this.scheduleDrain($,J)}consumeSteer($){let f=this.deps.getSession($);if(!f)return;let{entry:J}=this.service.consumeSteer(f);if(!J)return;return this.emitPrompts(f),this.emitSubmitted(f,J),J}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:p0($)}})}scheduleDrain($,f){if(f.pendingPrompts.length===0||f.aborting||f.drainingPendingPrompts||!f.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let f=this.deps.getSession($);if(!f)return;if(f.aborting||f.drainingPendingPrompts)return;if(!f.agent.canStartRun())return;let{entry:J}=this.service.shiftNext(f);if(!J)return;this.emitPrompts(f),this.emitSubmitted(f,J),f.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:J.prompt,...J.mode?{mode:J.mode}:{},userImages:J.userImages,userFiles:J.userFiles})}catch{Q=!1,this.service.requeueFront(f,J),this.emitPrompts(f)}finally{if(f.drainingPendingPrompts=!1,Q&&f.pendingPrompts.length>0&&f.status!=="failed"&&f.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,f){let J=_5(f);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function _5($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function p0($){return $.pendingPrompts.map(_5)}function pM($,f,J,Q){if(f.delivery==="steer")$.pendingPrompts.unshift(f);else if(Q==="steer")$.pendingPrompts.push(f);else $.pendingPrompts.splice(J,0,f)}T0();class kZ{deps;constructor($){this.deps=$}dispatchAgentEvent($,f,J){let Q=this.deps.getSession($),Z={sessionId:$,config:f,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=P9(J),j=!!Q&&(!W.agentId||W.agentId===bZ(Q.agent));F9(Z,J,j?{isPrimaryAgentEvent:!0,agentId:bZ(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,f){let J=this.deps.getSession($);if(J){if(AQ(J,f),f.type==="agent_event"){let Q={sessionId:$,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};F9(Q,f.event,{agentId:f.agentId,teamRole:"teammate",teamAgentId:f.agentId,isPrimaryAgentEvent:!1})}if(f.type==="teammate_spawned"){let Q=y$({agentId:f.teammate.runtimeAgentId??f.agentId,conversationId:f.teammate.conversationId,parentAgentId:f.teammate.parentAgentId,createdByAgentId:bZ(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:f.agentId});if(Q)a$(J.config.telemetry,{ulid:$,modelId:f.teammate.modelId??J.config.modelId,provider:J.config.providerId,...Q})}}if(await BQ($,f,this.deps.invokeBackendOptional),J)KQ(J,$,f,this.deps.emit)}async handlePluginEvent($,f,J){if(f.name==="plugin_log"){this.handlePluginLog($,f.payload);return}if(f.name==="automation_event"){let H=this.deps.getSession($)?.config.extensionContext?.automation??J;if(!H)return;let Y=f.payload&&typeof f.payload==="object"?f.payload:void 0;if(!Y)return;await H.ingestEvent(Y);return}if(f.name!=="steer_message"&&f.name!=="queue_message"&&f.name!=="pending_prompt")return;let Q=f.payload&&typeof f.payload==="object"?f.payload:void 0,Z=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,W=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!W)return;let j=f.name==="steer_message"?"steer":f.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(Z,{prompt:W,delivery:j})}handlePluginLog($,f,J){let Q=this.deps.getSession($),Z=J??Q?.config.extensionContext?.logger??Q?.config.logger;if(!Z||!f||typeof f!=="object")return;let W=f,j=typeof W.message==="string"?W.message:"";if(!j)return;let X=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(X.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)X.pluginName=W.pluginName;if(W.level==="debug"){Z.debug(j,X);return}if(W.level==="error"){if(Z.error)Z.error(j,X);else Z.log(j,{...X,severity:"error"});return}Z.log(j,X)}}function bZ($){return $.getAgentId()}function IZ($){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:t$($.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 xZ($,f){let J=$[f];return typeof J==="function"?J:null}async function oA($,f,...J){let Q=xZ($,f);if(!Q)throw Error(`session service method not available: ${f}`);return Promise.resolve(Q.apply($,J))}async function eA($,f,...J){let Q=xZ($,f);if(!Q)return;await Promise.resolve(Q.apply($,J))}async function $B($,f,...J){let Q=xZ($,f);if(!Q)return;return await Promise.resolve(Q.apply($,J))}T$();T0();function gZ($,f,J,Q){return r$({configProvider:{getRuntimeConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:f.hooks,extensions:f.extensions,logger:f.logger,telemetry:f.telemetry},getConnectionConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let W=f.enableTools?N1({cwd:f.cwd,...b0[R$({mode:f.mode})],executors:Q}):[];if(f.enableSpawnAgent)W.push(gZ($,f,J,Q));return E1(W)},onSubAgentEvent:(W)=>$.onAgentEvent(J,f,W),onSubAgentStart:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:J});let X=y$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)a$(f.telemetry,{ulid:J,modelId:f.modelId,provider:f.providerId,...X});Z8(f.telemetry,{event:"started",ulid:J,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",J,W)},onSubAgentEnd:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),H=X?Date.now()-X.startedAt:0,Y=W.result?.text?W.result.text.split(`
719
+ `).length:0;Z8(f.telemetry,{event:"ended",ulid:J,durationMs:H,outputLines:Y,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...y$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",J,W)}})}import{readFile as rM,stat as iM}from"node:fs/promises";var nM=20480000;async function fB($){let f=await iM($);if(!f.isFile())throw Error("Path is not a file");if(f.size>nM)throw Error("File is too large to read into context.");let J=await rM($,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var JB=5000;function v4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Jq($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=v4(f.inputTokens),Q=v4(f.outputTokens),Z=v4(f.cacheReadTokens),W=v4(f.cacheWriteTokens),j=v4(f.totalCost);if(J===void 0||Q===void 0||Z===void 0||W===void 0||j===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:Z,cacheWriteTokens:W,totalCost:j}}function Qq($,f){return{inputTokens:Math.max($.inputTokens,f.inputTokens),outputTokens:Math.max($.outputTokens,f.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,f.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,f.cacheWriteTokens),totalCost:Math.max($.totalCost,f.totalCost)}}class A${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new B4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new G1;constructor($){let f=tM();if(f)fq(f);let J=e1($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new z2,this.createAgentInstance=$.createAgent??((Q)=>new p$(Q)),this.defaultCapabilities=F0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new B$,this.oauthTokenManager=$.oauthTokenManager??new EZ({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=$.fetch,this.pendingPromptsController=new hZ({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new kZ({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,Z,W)=>{this.invoke("persistSessionMessages",Q,Z,W)},enqueuePendingPrompt:(Q,Z)=>this.pendingPromptsController.enqueue(Q,Z),invokeBackendOptional:(Q,...Z)=>this.invokeOptional(Q,...Z)})}async startSession($){let f=$.source??K0.CLI,J=s(),Q=$.config.sessionId?.trim()??"",Z=Q||oM(),W=$,j=W.initialMessages??[],X=j.length>0?Nf(j):V0(),H=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!H)throw Error("session service method not available: ensureSessionsDir");let Y=mZ(H,Z),V=mZ(Y,`${Z}.messages.json`),A=mZ(Y,`${Z}.json`),B=t$($.config),K=y0.parse({version:1,session_id:Z,source:f,pid:process.pid,started_at:J,status:"running",interactive:$.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:W.config.cwd,workspace_root:B,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,messages_path:V}),G;if(Q.length>0&&j.length>0&&!W.prompt?.trim()){let k=await this.invokeOptionalValue("readSessionManifest",Z);if(k)K=k,G={manifestPath:A,messagesPath:k.messages_path||V,manifest:k}}let F=await this.seedAggregateUsageFromArtifacts({initialUsage:X,sessionDir:Y,rootMessagesPath:G?.messagesPath??V,manifest:K});this.usageBySession.set(Z,X),this.aggregateUsageBySession.set(Z,F);let P=F0(this.defaultCapabilities,$.capabilities),D=P?.toolExecutors??this.toolExecutors,O=$.localRuntime,_=O?.extensionContext?.logger??O?.logger,L=O?.extensionContext?.automation,z;z=await jX({input:W,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:P,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(k)=>{if(k.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,k.payload,_);return}this.eventBridge.handlePluginEvent(Z,k,L)},onTeamEvent:(k)=>{this.eventBridge.handleTeamEvent(Z,k),z.config.onTeamEvent?.(k)},createSpawnTool:()=>gZ({getSession:(k)=>this.sessions.get(k),subAgentStarts:this.subAgentStarts,onAgentEvent:(k,n,G$)=>this.eventBridge.dispatchAgentEvent(k,n,G$),invokeBackendOptional:(k,...n)=>this.invokeOptional(k,...n)},z.config,Z,D),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(k)=>{await this.persistSessionMetadata(Z,()=>k)}});let y=await this.runtimeBuilder.build(z.runtimeBuilderInput),w=z.config,Q0=z.providerConfig;if(y.teamRuntime&&!w.teamName?.trim())w.teamName=y.teamRuntime.getTeamName();let Z0=[...y.tools,...w.extraTools??[]],o=y.extensions??z.extensions,u={sessionId:Z,providerId:Q0.providerId,modelId:Q0.modelId,apiKey:Q0.apiKey,baseUrl:Q0.baseUrl,headers:Q0.headers,knownModels:Q0.knownModels,providerConfig:Q0,thinking:w.thinking,reasoningEffort:w.reasoningEffort??Q0.reasoningEffort,systemPrompt:w.systemPrompt,maxIterations:w.maxIterations,execution:w.execution,prepareTurn:C2(w),tools:Z0,hooks:z.hooks,extensions:o,hookErrorMode:w.hookErrorMode,initialMessages:z.effectiveInput.initialMessages,userFileContentLoader:fB,toolPolicies:z.toolPolicies,requestToolApproval:z.requestToolApproval,telemetry:w.telemetry,onConsecutiveMistakeLimitReached:w.onConsecutiveMistakeLimitReached,completionPolicy:y.completionPolicy,consumePendingUserMessage:()=>{let k=this.pendingPromptsController.consumeSteer(Z);return k?_4(k.prompt,k.mode??w.mode):void 0},logger:y.logger??w.logger,extensionContext:w.extensionContext,onEvent:(k)=>this.eventBridge.dispatchAgentEvent(Z,w,k)};u.hooks={...u.hooks,onEvent:async(k)=>{if(await z.hooks?.onEvent?.(k),k.type!=="assistant-message")return;let n=this.sessions.get(Z);if(!n)return;let G$=n.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,G$,w.systemPrompt)}catch(e0){w.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:e0}),Hf(w.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:e0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:w.providerId,modelId:w.modelId}})}}};let U0=this.createAgentInstance(u);if(u.onEvent)U0.subscribeEvents(u.onEvent);y.registerLeadAgent?.(U0);let k$=y$({agentId:U0.getAgentId(),conversationId:U0.getConversationId(),teamId:y.teamRuntime?.getTeamId(),teamName:y.teamRuntime?.getTeamName(),teamRole:y.teamRuntime?"lead":void 0});if(HX(w,Z,Q.length>0,B,k$),k$)a$(w.telemetry,{ulid:Z,modelId:w.modelId,provider:w.providerId,...k$});if(y.teamRuntime)D6(w.telemetry,{ulid:Z,teamId:y.teamRuntime.getTeamId(),teamName:y.teamRuntime.getTeamName(),leadAgentId:U0.getAgentId(),restoredFromPersistence:y.teamRestoredFromPersistence===!0});let d={sessionId:Z,config:w,sessionMetadata:W.sessionMetadata,...G?{artifacts:G}:{},source:f,startedAt:G?.manifest.started_at??J,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??J,pendingPrompt:K.prompt,runtime:y,agent:U0,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:j,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:z.pluginSandboxShutdown,submitAndExitObserved:!1};if(this.sessions.set(Z,d),this.emitStatus(Z,"running"),j.length>0&&!G){if(await this.ensureSessionPersisted(d),await this.invoke("persistSessionMessages",d.sessionId,j,d.config.systemPrompt),!W.prompt?.trim())await this.updateStatus(d,"completed",0)}let K$;try{if(W.prompt?.trim())if(K$=await this.executeTurn(d,{prompt:W.prompt,userImages:W.userImages,userFiles:W.userFiles}),!d.interactive)await this.finalizeSingleRun(d,K$.finishReason);else await this.completeInteractiveTurn(d,K$.finishReason)}catch(k){if(d.interactive&&d.aborting)K$=await this.completeAbortedInteractiveTurn(d);else throw Hf(d.config.telemetry,{component:"core",operation:"session.start",error:k,severity:"error",handled:!1,context:{sessionId:d.sessionId,providerId:d.config.providerId,modelId:d.config.modelId}}),await this.failSession(d),k}return{sessionId:Z,manifest:K,manifestPath:A,messagesPath:V,result:K$}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(f)=>this.getSession(f),readMessages:(f)=>this.readSessionMessages(f),buildStartInput:(f,J)=>{let Q=f.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:f.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...Q?{sessionMetadata:Q}:{},initialMessages:f.initialMessages}},startSession:(f)=>this.startSession(f),getStartedSessionId:(f)=>f.sessionId,readRestoredSession:(f)=>this.getSession(f)})}async runTurn($){let f=this.getSessionOrThrow($.sessionId),J=f.agent.canStartRun(),Q=$.delivery??(f.interactive&&!J?"queue":void 0);if(f.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let Z=await this.executeTurn(f,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!f.interactive)await this.finalizeSingleRun(f,Z.finishReason);else await this.completeInteractiveTurn(f,Z.finishReason);if(Z.finishReason==="error"||Z.finishReason==="aborted")return Z;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),Z}catch(Z){if(f.interactive&&f.aborting)return await this.completeAbortedInteractiveTurn(f);throw Hf(f.config.telemetry,{component:"core",operation:"session.submit",error:Z,severity:"error",handled:!1,context:{sessionId:f.sessionId,providerId:f.config.providerId,modelId:f.config.modelId}}),await this.failSession(f),Z}}async getAccumulatedUsage($){let f=v7(this.usageBySession.get($)),J=v7(this.aggregateUsageBySession.get($));return f||J?{usage:f,aggregateUsage:J}:void 0}async abort($,f){let J=this.sessions.get($);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort(f)}async stopSession($){let f=this.sessions.get($);if(!f)return;if(f.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),f.interactive&&f.status!=="running"){await this.releaseSessionRuntime(f,"session_stop");return}f.aborting=!0,f.agent.abort(Error("session_stop")),await this.shutdownSession(f,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let f=[...this.sessions.values()];if(f.length===0)return;await Promise.allSettled(f.map((J)=>J.interactive&&J.status!=="running"?this.releaseSessionRuntime(J,$):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let f=this.sessions.get($);if(f)return IZ(f);let J=$.trim();if(!J)return;let Q=await this.getRow(J);if(Q)return $8(Q);let Z=await this.readManifest(J);return Z?SJ(Z):void 0}async listSessions($=200){let J=(await this.listRows($)).map($8),Q=new Set(J.map((Z)=>Z.sessionId));for(let Z of this.sessions.values()){if(Q.has(Z.sessionId))continue;J.unshift(IZ(Z))}return J.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let f=await this.invoke("deleteSession",$);if(f.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return f.deleted}async updateSession($,f){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:f.prompt,metadata:f.metadata,title:f.title}))?.updated===!0}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.getRow(f);if(J?.messagesPath)return H1(J.messagesPath);let Q=await this.readManifest(f);return H1(Q?.messages_path)}async dispatchHookEvent($){await gH($,{queueSpawnRequest:(f)=>this.invokeOptional("queueSpawnRequest",f),upsertSubagentSessionFromHook:(f)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",f),appendSubagentHookAudit:(f,J)=>this.invokeOptional("appendSubagentHookAudit",f,J),applySubagentStatus:(f,J)=>this.invokeOptional("applySubagentStatus",f,J)})}subscribe($,f){return this.events.subscribe($,f)}async updateSessionModel($,f){let J=this.getSessionOrThrow($);J.config.modelId=f,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:f}),J.agent.updateConnection({modelId:f})}handlePluginEvent($,f,J){return this.eventBridge.handlePluginEvent($,f,J)}async executeTurn($,f){let J=await this.prepareTurnInput($,f),Q=J.prompt.trim();if(!Q)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let Z=await this.executeAgentTurn($,Q,J.userImages,J.userFiles);while(GQ($,Z.finishReason)){let W=await PQ($);if(W.length===0)break;let j=FQ($,W);Z=await this.executeAgentTurn($,j)}return Z}async completeInteractiveTurn($,f){if(z4($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.updateStatus($,J?"cancelled":Q?"failed":"completed",Q?1:0),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f,ts:Date.now()}}),$.aborting=!1}async completeAbortedInteractiveTurn($){let f=new Date,J=$.agent.getMessages(),Q=V0();return $.persistedMessages=J,$.started=$.started||J.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:f,endedAt:f,durationMs:0}}async executeAgentTurn($,f,J,Q){let Z=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??V0(),X=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=X,$.turnPrimaryUsage=V0(),$.turnUsageByAgent=new Map,V6($.config.telemetry,$.sessionId,$.config.mode),yf($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let H=Z?()=>$.agent.continue(f,J,Q):()=>$.agent.run(f,J,Q),Y=await this.runWithAuthRetry($,H,W);$.started=!0;let V=Q6(Y.messages,Y,W);$.persistedMessages=V;let A=W8($.turnUsageByAgent?.values()??[]),B=H0(j,Y.usage),K=H0(H0(V0(),Y.usage),A),G=H0(X,K);return this.usageBySession.set($.sessionId,B),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:B.totalCost,aggregatedAgentsCost:G.totalCost,usage:B,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,V,$.config.systemPrompt),this.observeTaskCompletionTool($,Y),Y}catch(H){throw Hf($.config.telemetry,{component:"core",operation:"session.turn",error:H,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),H}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,f){if($.submitAndExitObserved)return;if(!f.toolCalls.some((Q)=>Q.name===J0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,J8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,f){let J=t$($.config),Q=$q(f.prompt).trim();if(!Q)return{prompt:"",userImages:f.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles)};let Z=await Kf(Q,J);YX($.config.telemetry,Z);let W=_4(Z.prompt,f.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles),X=this.resolveAbsoluteFilePaths(J,Z.matchedFiles),H=Array.from(new Set([...j,...X]));return{prompt:W,userImages:f.userImages,userFiles:H.length>0?H:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let f=t$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:f,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async persistSessionMetadata($,f){let J=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??J?.artifacts?.manifest,Z=f(Q?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:Z}))?.updated===!1)return;J.sessionMetadata=Z,J.artifacts.manifest.metadata=Z}async finalizeSingleRun($,f){if(z4($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.shutdownSession($,{status:J?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:f})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,f){if(f.status==="completed"&&!$.submitAndExitObserved)J8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});dJ($);let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),Hf($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,status:f.status,shutdownReason:f.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,f.status,f.exitCode)}catch(Z){Q("update_status",Z)}try{await $.agent.shutdown(f.shutdownReason)}catch(Z){Q("agent_shutdown",Z)}}try{await Promise.resolve($.runtime.shutdown(f.shutdownReason))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f.endReason,ts:Date.now()}}),J.length>0&&f.status==="failed")throw J[0]}async releaseSessionRuntime($,f){let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),Hf($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,reason:f,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(f)}catch(Z){Q("agent_shutdown",Z)}try{await Promise.resolve($.runtime.shutdown(f))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),J.length>0)throw J[0]}async updateStatus($,f,J){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,f,J);if(!Q.updated)return;let Z=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(Z.status=f,f==="running")delete Z.ended_at,Z.exit_code=null;else Z.ended_at=Q.endedAt??s(),Z.exit_code=typeof J==="number"?J:null;$.artifacts.manifest=Z,$.status=f,$.updatedAt=Q.endedAt??s(),$.endedAt=f==="running"?null:Z.ended_at,$.exitCode=Z.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,Z),this.emitStatus($.sessionId,f)}async runWithAuthRetry($,f,J){try{return await f()}catch(Q){if(!eM(Q,$.config.providerId))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(J),f()}}async syncOAuthCredentials($,f){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:f?.forceRefresh})}catch(Q){if(Q instanceof z5)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!J?.apiKey||$.config.apiKey===J.apiKey)return;$.config.apiKey=J.apiKey,$.agent.updateConnection({apiKey:J.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow($){let f=this.sessions.get($);if(!f){let J=Error(`session not found: ${$}`);throw Hf(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:J,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),J}return f}resolveAbsoluteFilePaths($,f){if(!f||f.length===0)return[];let J=f.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>sM(Q)?Q:vZ($,Q));return Array.from(new Set(J))}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 f=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),J=H0($.initialUsage,f);return this.withPersistedAggregateUsageFloor(J,$.manifest)}async summarizePersistedTeammateUsage($,f,J){let Q=vZ(f),Z=`${J}.messages.json`,W;try{W=aM($)}catch{return V0()}let j=V0();for(let X of W){if(!X.endsWith(".messages.json"))continue;if(X===Z)continue;let H=vZ($,X);if(H===Q)continue;let Y=await H1(H);if(Y.length===0)continue;j=H0(j,Nf(Y))}return j}withPersistedAggregateUsageFloor($,f){let J=Jq(f.metadata?.aggregateUsage);if(J)return Qq($,J);let Q=f.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,f){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:f}})}async emitSessionSnapshot($){let f=await this.getSession($);if(!f)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:j$({session:f,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),JB))}async getRow($){let f=$.trim();if(!f)return;return(await this.listRows(JB)).find((Q)=>Q.sessionId===f)}async readManifest($){let f=$.trim();if(!f)return;return await this.invokeOptionalValue("readSessionManifest",f)}invoke($,...f){return oA(this.sessionService,$,...f)}invokeOptional($,...f){return eA(this.sessionService,$,...f)}invokeOptionalValue($,...f){return $B(this.sessionService,$,...f)}}function Wq($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function jq($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Q5($={}){let f=new A$({sessionService:new V$(new H$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||K0.CLI,interactive:!1,config:{providerId:Zq(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:jq(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content)});if(!Z)throw Error("local hub schedule runtime returned no turn result");return{result:Wq(Z)}},async abortSession(J){return await f.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}Xq(process.env.CLINE_VCR);function Hq($){let f=process.cwd(),J,Q,Z;for(let W=0;W<$.length;W+=1){let j=$[W],X=$[W+1];if(j==="--cwd"&&X){f=X,W+=1;continue}if(j==="--host"&&X){J=X,W+=1;continue}if(j==="--port"&&X){let H=Number(X);if(Number.isFinite(H))Q=H;W+=1;continue}if(j==="--pathname"&&X)Z=X,W+=1}return{cwd:f,host:J,port:Q,pathname:Z}}async function Yq(){let $=Hq(process.argv.slice(2));process.chdir($.cwd);let f=c0({host:$.host,port:$.port,pathname:$.pathname}),J=await Wf({host:f.host,port:f.port,pathname:f.pathname,owner:Y0(),runtimeHandlers:Q5(),cronOptions:{workspaceRoot:$.cwd}}),Q=async()=>{await J.close(),process.exit(0)},Z=!1,W=(j,X)=>{if(Z)return;Z=!0;let H=X instanceof Error?X.stack||X.message:String(X);process.stderr.write(`[hub-daemon] ${j}: ${H}
720
+ `),J.close().catch((Y)=>{let V=Y instanceof Error?Y.stack||Y.message:String(Y);process.stderr.write(`[hub-daemon] shutdown after ${j} failed: ${V}
721
+ `)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Q()}),process.on("SIGTERM",()=>{Q()}),process.on("uncaughtException",(j)=>{W("uncaughtException",j)}),process.on("unhandledRejection",(j)=>{W("unhandledRejection",j)}),await new Promise(()=>{})}Yq().catch(($)=>{let f=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${f}
720
722
  `),process.exit(1)});