@cline/core 0.0.93-nightly.1792117748 → 0.0.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var n0=Object.defineProperty;var r0=(e)=>e;function o0(e,t){this[e]=r0.bind(null,t)}var s0=(e,t)=>{for(var n in t)n0(e,n,{get:t[n],enumerable:!0,configurable:!0,set:o0.bind(t,n)})};var Wt=(e,t,n)=>()=>{if(e)try{t=e(e=0)}catch(r){n=[r]}if(n)throw n[0];return t};import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as c0,captureAgentUnexpectedReasoningTokens as u0,captureTaskLifecycleEvent as lse,SDK_ERROR_TELEMETRY_EVENT as l0,TASK_CANCELLED_EVENT as p0,TASK_FIRST_CHUNK_RECEIVED_EVENT as m0,TASK_MAX_TOKENS_RECOVERY_EVENT as g0,TASK_PROVIDER_REQUEST_STARTED_EVENT as f0,TASK_PROVIDER_STREAM_FAILED_EVENT as h0,TASK_PROVIDER_STREAM_STARTED_EVENT as y0}from"@cline/shared";function b0(e,t){Q(e,K.TASK.GIT_SNAPSHOT,{...t})}function Q(e,t,n){e?.capture({event:t,properties:n})}function Ic(e){if(!e)return;return e.substring(0,S0)}function v0(e){if(typeof e==="string")return"Error";return e.name?.trim()||e.constructor?.name||"Error"}function T0(e){return typeof e==="string"?e:e.message}function $T(e,t){return e.some((n)=>t.has(n.trim().toLowerCase()))}function w0(e){Q(e,K.CLIENT.EXTENSION_ACTIVATED)}function Gm(e,t){let n=[...t.vcs_types],r={root_count:t.root_count,vcs_types:n,is_multi_root:t.root_count>1,has_git:$T(n,new Set(["git"])),has_mercurial:$T(n,new Set(["mercurial","hg"]))};if(t.init_duration_ms!==void 0)r.init_duration_ms=t.init_duration_ms;if(t.feature_flag_enabled!==void 0)r.feature_flag_enabled=t.feature_flag_enabled;if(t.is_remote_workspace!==void 0)r.is_remote_workspace=t.is_remote_workspace;Q(e,K.WORKSPACE.INITIALIZED,r)}function Vm(e,t,n){Q(e,K.WORKSPACE.INIT_ERROR,{error_type:v0(t),error_message:Ic(T0(t)),fallback_to_single_root:n.fallback_to_single_root,workspace_count:n.workspace_count??0})}function C0(e,t){Q(e,K.WORKSPACE.PATH_RESOLVED,{...t})}function Zn(e,t){Q(e,K.USER.AUTH_STARTED,{provider:t})}function er(e,t,n){Q(e,K.USER.AUTH_SUCCEEDED,{provider:t,...n})}function Tn(e,t,n,r){Q(e,K.USER.AUTH_FAILED,{provider:t,errorMessage:Ic(n),...r?.requestId?{request_id:r.requestId}:{}})}function jr(e,t,n,r){Q(e,K.USER.AUTH_LOGGED_OUT,{provider:t,reason:n,...r})}function tr(e,t,n){Q(e,K.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:t,...n})}function WT(e,t,n){Q(e,K.USER.AUTH_RUN_RETRY,{provider:t,recovered:n?.recovered})}function k0(e,t){Q(e,K.USER.PROVIDER_CONFIGURED,{provider:t})}function jT(e,t){e?.captureRequired(K.USER.TELEMETRY_OPT_OUT,t)}function nr(e,t){let n=t.id?.trim();if(n)e?.setDistinctId(n);e?.updateCommonProperties({user_id:n||t.id,account_id:t.id,account_email:t.email,provider:t.provider,organization_id:t.organizationId,organization_name:t.organizationName,member_id:t.memberId})}function P0(e,t){e?.setDistinctId(t?.trim()||void 0),e?.updateCommonProperties({user_id:void 0,account_id:void 0,account_email:void 0,provider:void 0,organization_id:void 0,organization_name:void 0,member_id:void 0})}function Jm(e,t){Q(e,K.TASK.CREATED,t)}function Xm(e,t){Q(e,K.TASK.RESTARTED,t)}function Rc(e,t){Q(e,K.TASK.COMPLETED,t)}function Ui(e,t){Q(e,K.TASK.CONVERSATION_TURN,{...t,timestamp:new Date().toISOString()})}function Ym(e,t){Q(e,K.TASK.TOKEN_USAGE,t)}function Qm(e,t,n){Q(e,K.TASK.MODE_SWITCH,{ulid:t,mode:n})}function wn(e,t){Q(e,K.TASK.TOOL_USED,t)}function Zm(e,t){Q(e,K.TASK.SKILL_USED,t)}function eg(e,t){Q(e,K.TASK.DIFF_EDIT_FAILED,t)}function I0(e,t){Q(e,K.TASK.PROVIDER_API_ERROR,{...t,errorMessage:Ic(t.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function tg(e,t){Q(e,K.TASK.MISTAKE_LIMIT_REACHED,{...t,timestamp:new Date().toISOString()})}function qT(e,t){Q(e,K.SDK.TOOL_TIMEOUT,KT(t))}function zT(e,t){Q(e,K.SDK.PLAN_MODE_COMMAND_BLOCKED,KT(t))}function KT(e){let t={};for(let[n,r]of Object.entries(e))if(r!==void 0)t[n]=r;return t}function ng(e,t,n){Q(e,K.TASK.MENTION_USED,{mentionType:t,contentLength:n,timestamp:new Date().toISOString()})}function rg(e,t,n,r){Q(e,K.TASK.MENTION_FAILED,{mentionType:t,errorType:n,errorMessage:Ic(r),timestamp:new Date().toISOString()})}function og(e,t,n,r,o){Q(e,K.TASK.MENTION_SEARCH_RESULTS,{queryLength:t.length,resultCount:n,searchType:r,isEmpty:o,timestamp:new Date().toISOString()})}function qr(e,t){Q(e,K.TASK.AGENT_CREATED,{...t,timestamp:new Date().toISOString()})}function sg(e,t){Q(e,K.TASK.AGENT_TEAM_CREATED,{...t,timestamp:new Date().toISOString()})}function Ac(e,t){Q(e,t.event==="ended"?K.TASK.SUBAGENT_COMPLETED:K.TASK.SUBAGENT_STARTED,{...t,timestamp:new Date().toISOString()})}function GT(e,t){Q(e,K.HOOKS.DETACHED_RUNTIME,{hookName:t.hookName,durationMs:t.durationMs,exitCode:t.exitCode??void 0,exited:t.exited,timestamp:new Date().toISOString()})}function ig(e,t,n,r){Q(e,K.HOOKS.DISCOVERY_COMPLETED,{hookName:t,globalCount:n,workspaceCount:r,totalCount:n+r,timestamp:new Date().toISOString()})}function ag(e,t){Q(e,K.TASK.COMPACTION_EXECUTED,{...t,timestamp:new Date().toISOString()})}function dg(e,t){Q(e,K.TASK.COMPACTION_SKIPPED,{...t,timestamp:new Date().toISOString()})}function VT(e,t){Q(e,K.TASK.COMPACTION_BUDGET_EMERGENCY,{...t,timestamp:new Date().toISOString()})}function JT(e,t){Q(e,K.SESSION.ERROR_RECORDED,t)}function ns(e,t){try{Q(e,t.phase==="started"?K.SCHEDULE.RUN_STARTED:K.SCHEDULE.RUN_FINISHED,{triggerKind:t.triggerKind,attemptCount:t.attemptCount,startDelayMs:t.startDelayMs,...t.phase==="finished"?{outcome:t.outcome,durationMs:t.durationMs}:{}})}catch{}}var S0=500,K;var ve=Wt(()=>{K={SCHEDULE:{RUN_STARTED:"schedule.run_started",RUN_FINISHED:"schedule.run_finished"},CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended",ERROR_RECORDED:"session.error_recorded"},AGENT:{UNEXPECTED_REASONING_TOKENS:c0},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",GIT_SNAPSHOT:"task.git_snapshot",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:f0,PROVIDER_STREAM_STARTED:y0,FIRST_CHUNK_RECEIVED:m0,PROVIDER_STREAM_FAILED:h0,MAX_TOKENS_RECOVERY:g0,CANCELLED:p0,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed",DETACHED_RUNTIME:"hooks.detached_runtime"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:l0,TOOL_TIMEOUT:"sdk.tool_timeout",PLAN_MODE_COMMAND_BLOCKED:"sdk.plan_mode_command_blocked"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{SESSION_STATUS_VALUES as oH}from"@cline/shared";function iH(e){return!sH.includes(e)}function xe(e){return!iH(e)}var Ug,sH,ie;var Ke=Wt(()=>{Ug=oH,sH=["idle","running","pending"];ie={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"}});function ls(e){return typeof e==="string"&&e.trim()?e.trim():void 0}function ps(e){let t=[e?.name,e?.platform].filter((n)=>typeof n==="string").join(" ").toLowerCase();if(!t)return;if(t.includes("vscode")||t.includes("visual studio code"))return ie.VSCODE;if(t.includes("jetbrains")||t.includes("webstorm")||t.includes("intellij")||t.includes("pycharm")||t.includes("goland")||t.includes("clion")||t.includes("rider")||t.includes("android studio"))return ie.JETBRAINS;if(t.includes("neovim"))return ie.NEOVIM;if(t.includes("kanban"))return ie.KANBAN;if(t.includes("desktop"))return ie.DESKTOP;if(t.includes("cline-platform"))return ie.WEB;if(t.includes("cline-cli")||t.includes("cline-acp"))return ie.CLI;if(t.includes("cline-sdk")||t.includes("cline-core"))return ie.CORE;return}function kn(e){let t=e?.[Bw];if(!t||typeof t!=="object"||Array.isArray(t))return;let n=t,r=ls(n.mode);if(!r)return;let o=ls(n.version),s=ls(n.trigger);return{mode:r,...o?{version:o}:{},...s?{trigger:s}:{}}}function Re(e,t){let n=kn(e),r=ls(t.mode)??n?.mode??"user",o=ls(t.version)??n?.version,s=ls(t.trigger)??n?.trigger;return{...e??{},[Bw]:{mode:r,...o?{version:o}:{},...s?{trigger:s}:{}}}}var Bw="sessionHistoryOrigin";var Ct=Wt(()=>{Ke()});import{mkdirSync as XH,readFileSync as YH,statSync as QH,writeFileSync as ZH}from"node:fs";import{dirname as eF}from"node:path";import{CONFIGURABLE_MODEL_TOOL_NAMES as eC}from"@cline/shared";import{resolveGlobalSettingsPath as tC}from"@cline/shared/storage";import{z as tt}from"zod";function qc(){return Kc.parse({})}function oF(){zc=void 0}function sF(e){if(e.disabledTools)Object.freeze(e.disabledTools);if(e.tools){for(let t of Object.values(e.tools))Object.freeze(t);Object.freeze(e.tools)}if(e.disabledPlugins)Object.freeze(e.disabledPlugins);if(e.disabledAgentPlugins)Object.freeze(e.disabledAgentPlugins);return Object.freeze(e)}function iF(e){let t;try{t=YH(e,"utf8")}catch{return{value:qc(),loadFailed:!0}}try{let n=Kc.safeParse(JSON.parse(t));return n.success?{value:n.data,loadFailed:!1}:{value:qc(),loadFailed:!0}}catch{return{value:qc(),loadFailed:!0}}}function nC(){let e=tC(),t=QH(e,{throwIfNoEntry:!1}),n=t?.mtimeMs??0,r=t?.size??0,o=zc;if(o&&o.path===e&&o.mtimeMs===n&&o.size===r)return o;let s=t?iF(e):{value:qc(),loadFailed:!1},i=sF(s.value);return zc={path:e,mtimeMs:n,size:r,value:i,loadFailed:s.loadFailed},zc}function ce(){return nC().value}function Ve(e,t={}){let n=tC(),r=ce();XH(eF(n),{recursive:!0});let o=Kc.parse(e);if(!r.telemetryOptOut&&o.telemetryOptOut)jT(t.telemetry);ZH(n,`${JSON.stringify(o,null,2)}
2
2
  `,"utf8"),oF()}function Yg(){return ce().telemetryOptOut}function aF(e,t={}){Ve({...ce(),telemetryOptOut:e},t)}function dF(){return ce().autoUpdateEnabled}function cF(e,t={}){Ve({...ce(),autoUpdateEnabled:e},t)}function uF(){return ce().compactionStrategy??"agentic"}function lF(e){Ve({...ce(),compactionStrategy:e})}function pF(){let e=ce();if(e.compactionEnabled===!1)return"off";return e.compactionStrategy}function mF(e){let t=ce();if(e==="off"){Ve({...t,compactionEnabled:!1});return}Ve({...t,compactionEnabled:!0,compactionStrategy:e})}function gF(){return ce().planActMode}function fF(e){Ve({...ce(),planActMode:e})}function hF(){return ce().toolAutoApprove}function yF(){return ce().tuiTheme}function SF(e){Ve({...ce(),tuiTheme:e})}function bF(e){Ve({...ce(),toolAutoApprove:e})}function Pn(e){return new Set(e??ce().disabledTools??[])}function Gc(e){return new Set(e??ce().disabledPlugins??[])}function Qr(e){return new Set(e??ce().disabledAgentPlugins??[])}function vF(e){if(Qg(e))return!Ji(e);return Pn().has(e)}function Qg(e){return eC.includes(e)}function rC(){let e=nC();return{web_search:{enabled:!e.loadFailed},...e.value.tools}}function Ji(e){return rC()[e]?.enabled===!0}function oC(e,t){let n=ce();Ve({...n,tools:{...n.tools,[e]:{enabled:t}}})}function Zg(e){if(Qg(e)){let o=Ji(e);return oC(e,!o),o}let t=ce(),n=new Set(t.disabledTools??[]),r=n.has(e);if(r)n.delete(e);else n.add(e);return Ve({...t,disabledTools:[...n]}),!r}function sC(e,t){let n=[...new Set(e.map((i)=>i.trim()).filter(Boolean))];if(n.length===0)return;let r=ce(),o=Pn(r.disabledTools),s={...r.tools};for(let i of n){if(Qg(i)){s[i]={enabled:!t};continue}if(t)o.add(i);else o.delete(i)}Ve({...r,disabledTools:[...o],tools:s})}function iC(e,t){return sC([e],t),t}function TF(e){return Gc().has(e)}function ef(e,t){let n=e.trim();if(!n)return;let r=ce(),o=Gc(r.disabledPlugins);if(t)o.add(n);else o.delete(n);Ve({...r,disabledPlugins:[...o]})}function wF(e){return Qr().has(e)}function tf(e,t){let n=e.trim();if(!n)return;let r=ce(),o=Qr(r.disabledAgentPlugins);if(t)o.add(n);else o.delete(n);Ve({...r,disabledAgentPlugins:[...o]})}function Vc(e,t){let n=Gc(t);if(n.size===0)return[...e];return e.filter((r)=>!n.has(r))}function ir(e,t){let n=Pn(t);if(n.size===0)return[...e];return e.filter((r)=>!n.has(r.name))}function nf(e,t){if(!e||e.length===0)return e;let n=Pn(t);if(n.size===0)return e;return e.map((r)=>{if(!r.setup)return r;return{...r,setup:(o,s)=>r.setup?.({...o,registerTool:(i)=>{if(!n.has(i.name))o.registerTool(i)}},s)}})}var Xg,tF,nF,rF,Kc,zc;var qt=Wt(()=>{ve();Xg=tt.preprocess((e)=>Array.isArray(e)?e.filter((t)=>typeof t==="string").map((t)=>t.trim()).filter(Boolean):void 0,tt.array(tt.string()).optional()).transform((e)=>{if(!e)return;let t=[...new Set(e)].sort((n,r)=>n.localeCompare(r));return t.length>0?t:void 0}),tF=tt.enum(["basic","agentic"]).catch("agentic"),nF=tt.partialRecord(tt.enum(eC),tt.object({enabled:tt.boolean()}).strip()).optional(),rF=tt.enum(["plan","act"]),Kc=tt.object({telemetryOptOut:tt.boolean().default(!1).catch(!1),autoUpdateEnabled:tt.boolean().default(!0).catch(!0),compactionStrategy:tF.optional(),compactionEnabled:tt.boolean().optional().catch(void 0),planActMode:rF.optional().catch(void 0),toolAutoApprove:tt.boolean().optional().catch(void 0),tuiTheme:tt.string().optional().catch(void 0),disabledTools:Xg.optional(),tools:nF,disabledPlugins:Xg.optional(),disabledAgentPlugins:Xg.optional()}).strip().transform((e)=>{let t={autoUpdateEnabled:e.autoUpdateEnabled,telemetryOptOut:e.telemetryOptOut};if(e.compactionStrategy)t.compactionStrategy=e.compactionStrategy;if(e.compactionEnabled!==void 0)t.compactionEnabled=e.compactionEnabled;if(e.planActMode)t.planActMode=e.planActMode;if(e.toolAutoApprove!==void 0)t.toolAutoApprove=e.toolAutoApprove;if(e.tuiTheme?.trim())t.tuiTheme=e.tuiTheme.trim();if(e.disabledTools?.length)t.disabledTools=e.disabledTools;if(e.tools&&Object.keys(e.tools).length>0)t.tools=e.tools;if(e.disabledPlugins?.length)t.disabledPlugins=e.disabledPlugins;if(e.disabledAgentPlugins?.length)t.disabledAgentPlugins=e.disabledAgentPlugins;return t})});async function LP(e,t,n,r){let o=kq(t),s=await Iq(n,r);if(o.length===0&&!s)return e;let i=[{type:"text",text:e},...o];if(s)i.push(...s);return i}function kq(e){if(!e||e.length===0)return[];let t=[];for(let n of e){let r=Pq(n);if(r)t.push(r)}return t}function Pq(e){let t=e.trim();if(!t)return;let n=t.match(/^data:([^;,]+);base64,(.+)$/);if(n){let r=n[1],o=n[2];if(!r||!o)return;return{type:"image",mediaType:r,data:o}}return{type:"image",mediaType:"image/png",data:t}}async function Iq(e,t){if(!e||e.length===0)return;let n=t??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),r=await Promise.all(e.map(async(o)=>{let s=o.replace(/\\/g,"/");try{let i=await n(o);return{type:"file",path:s,content:i}}catch(i){let a=i instanceof Error?i.message:String(i);return{type:"file",path:s,content:`Error fetching content: ${a}`}}}));if(r.length===0)return;return r}function Az(e){return e.trim().split(/[\\/]/).at(-1)?.toLowerCase().replace(/\.(?:cmd|exe)$/i,"")??""}function Ez(e){if(Az(e.command)!=="npx")return;if(Object.keys(e.env??{}).length>0)return;let t=e.args??[],n=0;while(t[n]==="-y"||t[n]==="--yes")n+=1;if(!/^mcp-remote(?:@[^/\s]+)?$/.test(t[n]??""))return;let r=t[n+1];if(!r||t.length!==n+2)return;try{let o=new URL(r);if(o.protocol!=="http:"&&o.protocol!=="https:")return;return{type:"streamableHttp",url:o.toString()}}catch{return}}function rl(e){return e.type==="stdio"?Ez(e)??e:e}import{randomUUID as xz}from"node:crypto";import{existsSync as EI,mkdirSync as Sh,readFileSync as xI,renameSync as Th,rmdirSync as _z,rmSync as bh,statSync as Mz,unlinkSync as _I,writeFileSync as MI}from"node:fs";import{dirname as OI,join as AI}from"node:path";import{setTimeout as Oz}from"node:timers/promises";import{isMcpTimeoutConfigured as Lz,resolveMcpTimeoutSeconds as Nz}from"@cline/shared";import{resolveMcpSettingsPath as Dz}from"@cline/shared/storage";import{z as H}from"zod";function vh(e){if(!e)return;if(e==="http")return"streamableHttp";return e}function ye(){return Dz()}function Kz(e,t){Sh(OI(e),{recursive:!0});let n=`${e}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{MI(n,t,{encoding:"utf8",flag:"wx"}),Th(n,e)}catch(r){try{_I(n)}catch{}throw r}}function Vz(e){Atomics.wait(Gz,0,0,e)}function Jz(e){return`${e}.lock`}function FI(){return`${process.pid}.${Date.now()}.${xz()}`}function BI(e,t){Sh(OI(e),{recursive:!0});let n=`${e}.tmp.${t}`;bh(n,{recursive:!0,force:!0}),Sh(n,{recursive:!0}),MI(AI(n,`owner.${t}`),t,{encoding:"utf8",flag:"wx"});try{return Th(n,e),{lockDir:e,ownerFile:AI(e,`owner.${t}`)}}catch(r){if(bh(n,{recursive:!0,force:!0}),EI(e))return;throw r}}function $I(e,t){let n;try{n=Date.now()-Mz(e).mtimeMs}catch(o){if(o.code==="ENOENT")return;throw o}if(n<Ph)return;t.logger?.log(`[mcp-settings] Stale lock directory at ${e} (age ${n}ms); reclaiming.`,{severity:"warn"});let r=`${e}.stale.${FI()}`;try{Th(e,r)}catch(o){if(o.code==="ENOENT")return;throw o}bh(r,{recursive:!0,force:!0})}function Xz(e){try{_I(e.ownerFile)}catch(t){if(t.code!=="ENOENT")throw t}try{_z(e.lockDir)}catch(t){let n=t.code;if(n!=="ENOENT"&&n!=="ENOTEMPTY"&&n!=="EEXIST")throw t}}function WI(e){let t=Jz(e);if(ol.has(t))throw Error(`Reentrant MCP settings update for ${e}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:t,token:FI()}}function Yz(e,t){let{lockDir:n,token:r}=WI(e),o=t.timeoutMs??Ph,s=Date.now();while(!0){let i=BI(n,r);if(i)return ol.add(n),i;if(Date.now()-s>o)throw new Ba(`Timed out waiting for MCP settings lock at ${n} after ${o}ms.`);$I(n,t),Vz(HI)}}async function Qz(e,t){let{lockDir:n,token:r}=WI(e),o=t.timeoutMs??Ph,s=Date.now();while(!0){let i=BI(n,r);if(i)return ol.add(n),i;if(Date.now()-s>o)throw new Ba(`Timed out waiting for MCP settings lock at ${n} after ${o}ms.`);$I(n,t),await Oz(HI)}}function jI(e,t,n){try{let r=Zz(t),o=e1(r,n);return Kz(t,`${JSON.stringify(r,null,2)}
3
- `),o}finally{ol.delete(e.lockDir),Xz(e)}}function _n(e,t,n={}){let r=Yz(e,n);return jI(r,e,t)}async function Ih(e,t,n={}){let r=await Qz(e,n);return jI(r,e,t)}function Zz(e){let t=t1(e);if(!t.mcpServers||typeof t.mcpServers!=="object"||Array.isArray(t.mcpServers))t.mcpServers={};return t}function e1(e,t){let n=JSON.stringify(e),r=JSON.parse(n),o=t(r),s=JSON.stringify(r),i=t(e);if(JSON.stringify(e)!==s)throw new Ha("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(i)!==JSON.stringify(o))throw new Ha("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return i}function qI(e){let t=xI(e,"utf8"),n;try{n=JSON.parse(t)}catch(r){let o=r instanceof Error?r.message:String(r);throw Error(`Failed to parse MCP settings JSON at "${e}": ${o}`)}if(!n||typeof n!=="object"||Array.isArray(n))throw Error(`Invalid MCP settings at "${e}": expected object.`);return n}function t1(e){try{return qI(e)}catch(t){if(t.code==="ENOENT")return{};throw t}}function Rh(e,t){if(!Object.hasOwn(e,t))return;let n=e[t];if(!n||typeof n!=="object"||Array.isArray(n))return;return n}function n1(e,t,n){Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0})}function sl(e={}){let t=e.filePath??ye(),n=xI(t,"utf8"),r;try{r=JSON.parse(n)}catch(s){let i=s instanceof Error?s.message:String(s);throw Error(`Failed to parse MCP settings JSON at "${t}": ${i}`)}let o=zz.safeParse(r);if(!o.success){let s=o.error.issues.map((i)=>{let a=i.path.join(".");return a?`${a}: ${i.message}`:i.message}).join("; ");throw Error(`Invalid MCP settings at "${t}": ${s}`)}return o.data}function $a(e){if(!e)return;let t={...e.clientInformation?{clientInformation:e.clientInformation}:{},...e.tokens?{tokens:e.tokens}:{},...e.codeVerifier?{codeVerifier:e.codeVerifier}:{},...e.discoveryState?{discoveryState:e.discoveryState}:{},...e.redirectUrl?{redirectUrl:e.redirectUrl}:{},...e.lastError?{lastError:e.lastError}:{},...e.lastAuthenticatedAt?{lastAuthenticatedAt:e.lastAuthenticatedAt}:{},...e.authorizationRequired?{authorizationRequired:!0}:{}};return Object.keys(t).length>0?t:void 0}function r1(e){if(e===void 0)return;let t=wh.safeParse(e);if(!t.success)return;return $a(t.data)}function Fs(e={}){let t=e.filePath??ye();return EI(t)}function Mn(e={}){let t=sl(e);return Object.entries(t.mcpServers).map(([n,r])=>zI(n,r))}function zI(e,t){return{name:e,transport:rl(t.transport),disabled:t.disabled,timeoutSeconds:t.timeoutSeconds,metadata:t.metadata,oauthClient:t.oauthClient,oauth:t.oauth}}function Ah(e,t){let n=UI.safeParse(t);if(!n.success){let r=n.error.issues.map((o)=>{let s=o.path.join(".");return s?`${s}: ${o.message}`:o.message}).join("; ");throw Error(`Invalid MCP server "${e}": ${r}`)}return zI(e,n.data)}function yo(e,t={}){let n=t.filePath??ye(),o=qI(n).mcpServers;if(!o||typeof o!=="object"||Array.isArray(o))return;let s=Rh(o,e);return s?Ah(e,s):void 0}function il(e){let t=e.filePath??ye(),n=e.name.trim();if(!n)throw Error("MCP server settings toggle requires a server name.");_n(t,(r)=>{let o=r.mcpServers;if(!o||typeof o!=="object"||Array.isArray(o))throw Error(`Invalid MCP settings at "${t}": mcpServers must be an object.`);let s={...o},i=Rh(s,n);if(!i)throw Error(`Unknown MCP server: ${n}`);let a={...i};if(e.disabled)a.disabled=!0;else delete a.disabled;n1(s,n,a),r.mcpServers=s})}function al(e,t={}){let n=sl(t);if(!Object.hasOwn(n.mcpServers,e))return;return $a(n.mcpServers[e]?.oauth)}function KI(e,t,n){return(r)=>{let o=r.mcpServers,s=Rh(o,e);if(!s)throw Error(`Unknown MCP server: ${e}`);if(n.expectedOAuthClient!==void 0){let d=Ch.safeParse(s.oauthClient),c=d.success?d.data:void 0,u=n.expectedOAuthClient??void 0;if(c?.clientId!==u?.clientId||c?.clientSecret!==u?.clientSecret)throw new ho(e)}let i=r1(s.oauth)??{},a=$a(t(i));if(a)s.oauth=a;else delete s.oauth;return a??{}}}function GI(e,t,n={}){let r=n.filePath??ye();return _n(r,KI(e,t,n))}async function dl(e,t,n={}){let r=n.filePath??ye();return Ih(r,KI(e,t,n))}function VI(e={}){return Mn(e).map(Wa).sort((n,r)=>n.serverName.localeCompare(r.serverName))}function Wa(e){let t=e.transport.type!=="stdio",n=e.oauth?.tokens?.access_token,r=e.oauth?.clientInformation,o=e.oauthClient?r?.client_id===e.oauthClient.clientId&&r?.client_secret===e.oauthClient.clientSecret:!0,s=t&&o&&typeof n==="string"&&n.trim().length>0;return{serverName:e.name,oauthSupported:t,oauthConfigured:s,authorizationRequired:t&&!s&&e.oauth?.authorizationRequired===!0,lastError:e.oauth?.lastError,lastAuthenticatedAt:e.oauth?.lastAuthenticatedAt}}async function cl(e,t={}){let n=Mn(t);for(let r of n)await e.registerServer(r);return n}var Fa,LI,NI,wh,Ch,Uz,Hz,Fz,Bz,$z,Wz,DI,jz,qz,UI,zz,kh,ho,Ba,Ha,Ph=1e4,HI=25,Gz,ol;var ja=Wt(()=>{Fa=H.record(H.string(),H.string()),LI=H.record(H.string(),H.unknown()),NI=H.preprocess((e)=>Lz(e)?Nz(e):void 0,H.number().optional()),wh=H.object({clientInformation:H.record(H.string(),H.unknown()).optional(),tokens:H.record(H.string(),H.unknown()).optional(),codeVerifier:H.string().optional(),discoveryState:H.record(H.string(),H.unknown()).optional(),redirectUrl:H.string().url().optional(),lastError:H.string().optional(),lastAuthenticatedAt:H.number().int().positive().optional(),authorizationRequired:H.boolean().optional()}).strip(),Ch=H.object({clientId:H.string().min(1),clientSecret:H.string().min(1).optional()}).strip(),Uz=H.object({type:H.literal("stdio"),command:H.string().min(1),args:H.array(H.string()).optional(),cwd:H.string().min(1).optional(),env:Fa.optional()}),Hz=H.object({type:H.literal("sse"),url:H.string().url(),headers:Fa.optional()}),Fz=H.object({type:H.literal("streamableHttp"),url:H.string().url(),headers:Fa.optional()}),Bz=H.discriminatedUnion("type",[Uz,Hz,Fz]),$z=H.object({transport:Bz,disabled:H.boolean().optional(),timeout:NI,metadata:LI.optional(),oauthClient:Ch.optional(),oauth:wh.optional()}).transform((e)=>({transport:e.transport,disabled:e.disabled,timeoutSeconds:e.timeout,metadata:e.metadata,oauthClient:e.oauthClient,oauth:e.oauth})),Wz=H.enum(["stdio","sse","http","streamableHttp"]).optional(),DI=H.object({type:H.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Wz,disabled:H.boolean().optional(),timeout:NI,metadata:LI.optional(),oauthClient:Ch.optional(),oauth:wh.optional()});jz=DI.extend({command:H.string().min(1),args:H.array(H.string()).optional(),cwd:H.string().min(1).optional(),env:Fa.optional()}).superRefine((e,t)=>{let n=e.type??vh(e.transportType);if(n&&n!=="stdio")t.addIssue({code:H.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform((e)=>({transport:{type:"stdio",command:e.command,args:e.args,cwd:e.cwd,env:e.env},disabled:e.disabled,timeoutSeconds:e.timeout,metadata:e.metadata,oauthClient:e.oauthClient,oauth:e.oauth})),qz=DI.extend({url:H.string().url(),headers:Fa.optional()}).superRefine((e,t)=>{let n=e.type??vh(e.transportType)??"sse";if(n!=="sse"&&n!=="streamableHttp")t.addIssue({code:H.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform((e)=>{if((e.type??vh(e.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:e.url,headers:e.headers},disabled:e.disabled,timeoutSeconds:e.timeout,metadata:e.metadata,oauthClient:e.oauthClient,oauth:e.oauth};return{transport:{type:"sse",url:e.url,headers:e.headers},disabled:e.disabled,timeoutSeconds:e.timeout,metadata:e.metadata,oauthClient:e.oauthClient,oauth:e.oauth}}),UI=H.union([$z,jz,qz]),zz=H.object({mcpServers:H.record(H.string(),UI)}).passthrough();kh=class kh extends Error{constructor(e){super(e);this.name="McpSettingsUpdateSkippedError"}};ho=class ho extends Error{constructor(e){super(`OAuth client configuration changed while authorizing MCP server "${e}". Start authorization again.`);this.name="McpOAuthClientChangedError"}};Ba=class Ba extends Error{constructor(e){super(e);this.name="McpSettingsLockTimeoutError"}};Ha=class Ha extends Error{constructor(e){super(e);this.name="McpSettingsMutatorPurityError"}};Gz=new Int32Array(new SharedArrayBuffer(4)),ol=new Set});import{existsSync as CX,mkdirSync as kX,readFileSync as PX,writeFileSync as IX}from"node:fs";import{resolve as RX}from"node:path";import{resolveSessionDataDir as AX}from"@cline/shared/storage";import{nanoid as EX}from"nanoid";import*as xX from"node-machine-id";function Td(){if(!bE)SE=vE(),bE=!0;return SE??TE()}function _t(e){let t=e?.trim();if(t)return t;let n=vE();if(n)return n;return TE()}function MX(){let e=xX;return e.machineIdSync??e.default?.machineIdSync}function vE(){try{let e=MX();if(!e)return;return e().trim()||void 0}catch{return}}function TE(){let e=AX(),t=RX(e,_X);try{if(CX(t)){let r=PX(t,"utf8").trim();if(r.length>0)return r}}catch{}let n=`cl-${EX()}`;try{kX(e,{recursive:!0}),IX(t,n,"utf8")}catch{}return n}var _X="machine-id",SE,bE=!1;var Mo=()=>{};function yn(e){let t=e?.trim();return t?t:void 0}function $p(e){let t=e.client,n=ps(t)??yn(e.source),r=yn(t.version),o=yn(t.platform)??yn(t.name),s=yn(t.platformVersion)??r,i={cline_type:n,extension_version:r,platform:o,platform_version:s};if(e.user?.accountId===void 0)return i;let a=typeof e.user.accountId==="string"?yn(e.user.accountId):void 0;return{...i,distinct_id:a??yn(e.user.distinctId),user_id:a,account_id:a,account_email:a?yn(e.user.email):void 0,organization_id:a?yn(e.user.organizationId):void 0}}function gi(e,t){let n={},r={},o,s=(i)=>({...t,...r,...n,...i,...o?{distinct_id:o}:{}});return{setDistinctId(i){o=yn(i)},setMetadata(i){n={...i}},updateMetadata(i){n={...n,...i}},setCommonProperties(i){r={...i}},updateCommonProperties(i){r={...r,...i}},isEnabled:()=>e.isEnabled(),capture:(i)=>e.capture({event:i.event,properties:s(i.properties)}),captureRequired:(i,a)=>e.captureRequired(i,s(a)),recordCounter:(i,a,d,c,u)=>e.recordCounter(i,a,s(d),c,u),recordHistogram:(i,a,d,c,u)=>e.recordHistogram(i,a,s(d),c,u),recordGauge:(i,a,d,c,u)=>e.recordGauge(i,a,s(d),c,u),flush:()=>e.flush(),dispose:async()=>{}}}function zd(e,t){return gi(e,$p(t))}var Wp=Wt(()=>{Ct()});import{SeverityNumber as Ai}from"@opentelemetry/api-logs";class oc{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(e){this.name=e.name??"OpenTelemetryAdapter",this.metadata={...e.metadata},this.meterProvider=e.meterProvider,this.loggerProvider=e.loggerProvider,this.meter=e.meterProvider?.getMeter("cline")??null,this.logger=e.loggerProvider?.getLogger("cline")??null,this.enabled=e.enabled??!0,this.distinctId=e.distinctId,this.commonProperties=e.commonProperties?{...e.commonProperties}:{}}emit(e,t){if(!this.isEnabled())return;this.emitLog(e,t,!1)}emitRequired(e,t){this.emitLog(e,t,!0)}recordCounter(e,t,n,r,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.counters.get(e);if(!s)s=this.meter.createCounter(e,r?{description:r}:void 0),this.counters.set(e,s);s.add(t,this.flattenProperties(this.buildAttributes(n)))}recordHistogram(e,t,n,r,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.histograms.get(e);if(!s)s=this.meter.createHistogram(e,r?{description:r}:void 0),this.histograms.set(e,s);s.record(t,this.flattenProperties(this.buildAttributes(n)))}recordGauge(e,t,n,r,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.buildAttributes(n),i=JSON.stringify(s),a=this.gaugeValues.get(e);if(t===null){if(a){if(a.delete(i),a.size===0)this.gaugeValues.delete(e),this.gauges.delete(e)}return}let d=a;if(!d)d=new Map,this.gaugeValues.set(e,d);if(!this.gauges.has(e)){let c=this.meter.createObservableGauge(e,r?{description:r}:void 0);c.addCallback((u)=>{for(let l of this.snapshotGaugeSeries(e))u.observe(l.value,this.flattenProperties(l.attributes))}),this.gauges.set(e,c)}d.set(i,{value:t,attributes:s})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(e){this.distinctId=e}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(e,t,n){if(!this.logger)return;let r=this.flattenProperties(this.buildAttributes(t,n)),o=B3(r.severity);this.logger.emit({severityText:o.text,severityNumber:o.number,body:e,attributes:r})}buildAttributes(e,t=!1){return{...this.commonProperties,...this.metadata,...e,...this.distinctId?{distinct_id:this.distinctId}:{},...t?{_required:!0}:{}}}snapshotGaugeSeries(e){let t=this.gaugeValues.get(e);if(!t)return[];return Array.from(t.values(),(n)=>({value:n.value,attributes:n.attributes?{...n.attributes}:void 0}))}flattenProperties(e,t="",n=new WeakSet,r=0){if(!e)return{};let o={},s=100,i=10;for(let[a,d]of Object.entries(e)){if(a==="__proto__"||a==="constructor"||a==="prototype")continue;let c=t?`${t}.${a}`:a;if(d===null||d===void 0){o[c]=String(d);continue}if(Array.isArray(d)){let u=d.length>s?d.slice(0,s):d;try{o[c]=JSON.stringify(u)}catch{o[c]="[UnserializableArray]"}if(d.length>s)o[`${c}_truncated`]=!0,o[`${c}_original_length`]=d.length;continue}if(typeof d==="object"){if(d instanceof Date){o[c]=d.toISOString();continue}if(d instanceof Error){o[c]=d.message;continue}if(n.has(d)){o[c]="[Circular]";continue}if(r>=i){o[c]="[MaxDepthExceeded]";continue}n.add(d),Object.assign(o,this.flattenProperties(d,c,n,r+1));continue}if($3(d)){o[c]=d;continue}try{o[c]=JSON.stringify(d)}catch{o[c]=String(d)}}return o}}function B3(e){switch(typeof e==="string"?e.toLowerCase():e){case"trace":return{text:"TRACE",number:Ai.TRACE};case"debug":return{text:"DEBUG",number:Ai.DEBUG};case"warn":case"warning":return{text:"WARN",number:Ai.WARN};case"error":return{text:"ERROR",number:Ai.ERROR};case"fatal":return{text:"FATAL",number:Ai.FATAL};default:return{text:"INFO",number:Ai.INFO}}}function $3(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"}var Yb=()=>{};class cm{name;logger;enabled;constructor(e={}){this.name=e.name??"TelemetryLoggerSink",this.logger=e.logger,this.enabled=e.enabled??!0}emit(e,t){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:e,properties:t})}emitRequired(e,t){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:e,properties:t})}recordCounter(e,t,n,r,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:e,value:t,attributes:n,description:r,required:o===!0})}recordHistogram(e,t,n,r,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:e,value:t,attributes:n,description:r,required:o===!0})}recordGauge(e,t,n,r,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:e,value:t,attributes:n,description:r,required:o===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class sc{adapters;metadata;distinctId;deviceId;commonProperties;constructor(e={}){if(this.adapters=[...e.adapters??[]],e.logger)this.adapters.push(new cm({logger:e.logger}));this.metadata={...e.metadata??{}},this.distinctId=e.distinctId,this.deviceId=e.deviceId??Td(),this.commonProperties={...e.commonProperties??{}}}addAdapter(e){this.adapters.push(e)}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return this.adapters.some((e)=>e.isEnabled())}capture(e){let t=this.buildAttributes(e.properties);for(let n of this.adapters)n.emit(e.event,t)}captureRequired(e,t){let n=this.buildAttributes(t);for(let r of this.adapters)r.emitRequired(e,n)}recordCounter(e,t,n,r,o=!1){let s=this.buildAttributes(n);for(let i of this.adapters)i.recordCounter(e,t,s,r,o)}recordHistogram(e,t,n,r,o=!1){let s=this.buildAttributes(n);for(let i of this.adapters)i.recordHistogram(e,t,s,r,o)}recordGauge(e,t,n,r,o=!1){let s=this.buildAttributes(n);for(let i of this.adapters)i.recordGauge(e,t,s,r,o)}async flush(){await Promise.all(this.adapters.map((e)=>e.flush()))}async dispose(){await Promise.all(this.adapters.map((e)=>e.dispose()))}buildAttributes(e){let t=typeof e?.distinct_id==="string"&&e.distinct_id.trim()?e.distinct_id.trim():this.distinctId,n={...this.commonProperties,...this.metadata,...e,...t?{distinct_id:t}:{},device_id:this.deviceId};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}}var Qb=Wt(()=>{Mo()});import{LangfuseAttributesSpanProcessor as W3}from"@cline/llms";import{markOtlpTraceRelayProvider as j3}from"@cline/shared";import{metrics as q3,trace as z3}from"@opentelemetry/api";import{logs as K3}from"@opentelemetry/api-logs";import{OTLPLogExporter as G3}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as V3}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as J3}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as X3}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Y3,ConsoleLogRecordExporter as Q3,LoggerProvider as Z3}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as e7,MeterProvider as t7,PeriodicExportingMetricReader as lO}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as n7,ConsoleSpanExporter as r7,SimpleSpanProcessor as o7}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as s7}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as i7,ATTR_SERVICE_VERSION as a7}from"@opentelemetry/semantic-conventions";class pO{distinctId;metadata;commonProperties;constructor(e={}){this.distinctId=e.distinctId,this.metadata={...e.metadata??{}},this.commonProperties={...e.commonProperties??{}}}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return!1}capture(e){this.resolveProperties(e.properties)}captureRequired(e,t){this.resolveProperties(t)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(e){let t=typeof e?.distinct_id==="string"&&e.distinct_id.trim()?e.distinct_id.trim():this.distinctId,n={...this.commonProperties,...this.metadata,...e,...t?{distinct_id:t}:{}};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}}class ic{meterProvider;loggerProvider;tracerProvider;options;constructor(e={}){this.options=e;let t=X3({[i7]:e.serviceName??"cline",...e.serviceVersion?{[a7]:e.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(t),this.loggerProvider=this.createLoggerProvider(t),this.tracerProvider=this.createTracerProvider(t),this.meterProvider)q3.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)K3.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(e="cline",t){return z3.getTracer(e,t??this.options.serviceVersion)}createAdapter(e){return new oc({...e,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(e){let t=this.createAdapter({name:e.name,enabled:this.options.enabled,metadata:e.metadata});return new sc({...e,adapters:[t],distinctId:_t(e.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(e){let t=Zb(this.options.metricsExporter);if(t.length===0)return null;let n=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),r=Math.min(30000,Math.floor(n*0.8)),o=t.map((s)=>u7(s,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:n,timeout:r})).filter((s)=>s!==null);if(o.length===0)return null;return new t7({resource:e,readers:o})}createTracerProvider(e){let t=Zb(this.options.tracesExporter);if(t.length===0)return null;let n=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,r=this.options.otlpTracesHeaders??this.options.otlpHeaders,o=[],s=!1;for(let a of t){let d=c7(a,{endpoint:n,headers:r,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(d){if(o.push(d),a!=="console")s=!0}}if(o.length===0)return null;let i=new s7({resource:e,spanProcessors:s?[new W3,...o]:o});if(s)j3(i);return i}createLoggerProvider(e){let t=Zb(this.options.logsExporter);if(t.length===0)return null;let n=t.map((r)=>{let o=d7(r,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!o)return null;return new Y3(o,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((r)=>r!==null);if(n.length===0)return null;return new Z3({resource:e,processors:n})}}function um(e){let t=new ic(e),n=t.createTelemetryService(e),r=()=>{n.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:e.enabled??!0,logsExporter:Array.isArray(e.logsExporter)?e.logsExporter.join(","):e.logsExporter,metricsExporter:Array.isArray(e.metricsExporter)?e.metricsExporter.join(","):e.metricsExporter,tracesExporter:Array.isArray(e.tracesExporter)?e.tracesExporter.join(","):e.tracesExporter,otlpProtocol:e.otlpProtocol,hasOtlpEndpoint:Boolean(e.otlpEndpoint),serviceName:e.serviceName,serviceVersion:e.serviceVersion})};if(!e.deferProviderCreatedEvent)r();return{provider:t,telemetry:n,emitProviderCreated:r}}function jo(e){if(Yg())return{telemetry:new pO(e)};if(e.enabled!==!0)return{telemetry:new sc({...e,distinctId:_t(e.distinctId)})};return um(e)}function lm(e){let{telemetry:t,provider:n,emitProviderCreated:r}=jo(e);return{telemetry:t,provider:n,flush:async()=>{let i=n;if(i&&typeof i.forceFlush==="function")try{await i.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([t.dispose(),n?.dispose()])},...e.deferProviderCreatedEvent&&r?{emitProviderCreated:r}:{}}}function Zb(e){if(!e)return[];return(Array.isArray(e)?e:e.split(",")).map((n)=>n.trim()).filter((n)=>n==="console"||n==="otlp")}function d7(e,t){if(e==="console")return new Q3;if(!t.endpoint)return null;let n=ev(t.endpoint,"/v1/logs");return new G3({url:n,headers:t.headers})}function c7(e,t){if(e==="console")return new o7(new r7);if(!t.endpoint)return null;let n=ev(t.endpoint,"/v1/traces");return new n7(new J3({url:n,headers:t.headers}))}function u7(e,t){if(e==="console")return new lO({exporter:new e7,exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout});if(!t.endpoint)return null;let n=ev(t.endpoint,"/v1/metrics");return new lO({exporter:new V3({url:n,headers:t.headers}),exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout})}function ev(e,t){let n=new URL(e),r=n.pathname.endsWith("/")?n.pathname.slice(0,-1):n.pathname;return n.pathname=r.endsWith(t)?r:`${r}${t}`,n.toString()}var pm=Wt(()=>{qt();Mo();Yb();Qb()});var FN={};s0(FN,{OpenTelemetryAdapter:()=>oc,OpenTelemetryProvider:()=>ic,createClientScopedTelemetryService:()=>zd,createConfiguredTelemetryHandle:()=>lm,createConfiguredTelemetryService:()=>jo,createOpenTelemetryTelemetryService:()=>um,createScopedTelemetryService:()=>gi,resolveClientTelemetryProperties:()=>$p,resolveCoreDeviceId:()=>Td,resolveCoreDistinctId:()=>_t});var xm=Wt(()=>{Mo();Yb();pm();Wp()});import*as tMe from"@cline/llms";import{buildClineClientHeaders as rMe,ClineFreeModelLimitError as oMe,ClineNotSubscribedError as sMe,ClineOrgIndividualInferenceSubscriptionError as iMe,ClinePassLimitError as aMe,extractClineFreeModelLimitResetTime as dMe,extractClinePassLimitMessage as cMe,getClineNotSubscribedMessage as uMe,getClineOrgIndividualInferenceSubscriptionMessage as lMe,getClinePassSubscriptionUrl as pMe,isClineFreeModelLimitError as mMe,isClineFreeModelLimitMessage as gMe,isClineModelNotFoundMessage as fMe,isClineNotSubscribedError as hMe,isClineNotSubscribedMessage as yMe,isClineOrgIndividualInferenceSubscriptionError as SMe,isClineOrgIndividualInferenceSubscriptionMessage as bMe,isClinePassLimitError as vMe,isClinePassLimitMessage as TMe}from"@cline/llms";import{buildClineSystemPrompt as CMe,buildSdkErrorProperties as kMe,ContributionRegistry as PMe,captureSdkError as IMe,createClineTelemetryServiceConfig as RMe,createClineTelemetryServiceMetadata as AMe,createContributionRegistry as EMe,createTool as xMe,emptyWorkspaceManifest as _Me,FEATURE_FLAGS as MMe,FeatureFlag as OMe,FeatureFlagDefaultValue as LMe,formatDisplayUserInput as NMe,noopBasicLogger as DMe,normalizeSdkError as UMe,normalizeUserInput as HMe,parseUserCommandEnvelope as FMe,registerDisposable as BMe,SDK_ERROR_TELEMETRY_EVENT as $Me,stripUtf8Bom as WMe}from"@cline/shared";export*from"@cline/shared/storage";function i0(e){if(typeof e!=="object"||e===null||!("error"in e))return;let t=e.error;return typeof t==="string"&&t.trim()?t:void 0}function NT(e,t,n){let r=i0(n);if(r)return r;let o=t.trim();if(o){let s=o.length>200?`${o.slice(0,200)}...`:o;return`Cline account request failed with status ${e}: ${s}`}return`Cline account request failed with status ${e}`}class zm{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor(e){let t=e.apiBaseUrl.trim();if(!t)throw Error("apiBaseUrl is required");this.apiBaseUrl=t,this.getAuthTokenFn=e.getAuthToken,this.getCurrentUserIdFn=e.getCurrentUserId,this.getOrganizationMemberIdFn=e.getOrganizationMemberId,this.getHeadersFn=e.getHeaders,this.requestTimeoutMs=e.requestTimeoutMs??30000,this.fetchImpl=e.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(e){let t=await this.resolveUserId(e);return this.request(`/api/v1/users/${encodeURIComponent(t)}/balance`)}async fetchUsageTransactions(e){let t=await this.resolveUserId(e);return(await this.request(`/api/v1/users/${encodeURIComponent(t)}/usages`)).items??[]}async fetchPaymentTransactions(e){let t=await this.resolveUserId(e);return(await this.request(`/api/v1/users/${encodeURIComponent(t)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans(e){let t=new URL("/api/v1/plans",this.apiBaseUrl);if(e?.type)t.searchParams.set("type",e.type);return this.request(`${t.pathname}${t.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization(e){let t=e.trim();if(!t)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(t)}`)}async fetchOrganizationBalance(e){let t=e.trim();if(!t)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(t)}/balance`)}async fetchOrganizationUsageTransactions(e){let t=e.organizationId.trim();if(!t)throw Error("organizationId is required");let n=await this.resolveOrganizationMemberId(t,e.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(t)}/members/${encodeURIComponent(n)}/usages`)).items??[]}async switchAccount(e){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:e?.trim()||null},expectNoContent:!0})}async resolveUserId(e){let t=e?.trim();if(t)return t;let r=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(r)return r;let o=await this.fetchMe();if(!o.id?.trim())throw Error("Unable to resolve current user id");return o.id}async resolveOrganizationMemberId(e,t){let n=t?.trim();if(n)return n;let o=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn(e):void 0)?.trim();if(o)return o;let i=(await this.fetchUserOrganizations()).find((a)=>a.organizationId===e)?.memberId;if(!i?.trim())throw Error(`Unable to resolve memberId for organization ${e}`);return i}async request(e,t){let n=(await this.getAuthTokenFn())?.trim();if(!n)throw Error("No Cline account auth token found");let r=this.getHeadersFn?await this.getHeadersFn():{},o=new AbortController,s=setTimeout(()=>o.abort(),this.requestTimeoutMs);try{let i=await this.fetchImpl(new URL(e,this.apiBaseUrl),{method:t?.method??"GET",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json",...r??{}},body:t?.body!==void 0?JSON.stringify(t.body):void 0,signal:o.signal});if(i.status===204||t?.expectNoContent){if(!i.ok)throw Error(`Cline account request failed with status ${i.status}`);return}let a=await i.text(),d;if(a.trim())try{d=JSON.parse(a)}catch{if(!i.ok)throw Error(NT(i.status,a,void 0));throw Error("Cline account response was not valid JSON")}if(!i.ok)throw Error(NT(i.status,a,d));if(typeof d==="object"&&d!==null){let c=d;if(typeof c.success==="boolean"){if(!c.success)throw Error(c.error||"Cline account request failed");return c.data}}if(d===void 0||d===null)throw Error("Cline account response payload was empty");return d}finally{clearTimeout(s)}}}function DT(e){return e.action==="clineAccount"}async function UT(e,t){switch(e.operation){case"fetchMe":return t.fetchMe();case"fetchBalance":return t.fetchBalance(e.userId);case"fetchUsageTransactions":return t.fetchUsageTransactions(e.userId);case"fetchPaymentTransactions":return t.fetchPaymentTransactions(e.userId);case"fetchUserOrganizations":return t.fetchUserOrganizations();case"fetchOrganizationBalance":return t.fetchOrganizationBalance(e.organizationId);case"fetchOrganizationUsageTransactions":return t.fetchOrganizationUsageTransactions({organizationId:e.organizationId,memberId:e.memberId});case"switchAccount":return await t.switchAccount(e.organizationId),{updated:!0};case"fetchFeaturebaseToken":return t.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String(e)}`)}}class Km{executor;constructor(e){this.executor=e}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance(e){return this.request({action:"clineAccount",operation:"fetchBalance",...e?.trim()?{userId:e.trim()}:{}})}async fetchUsageTransactions(e){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...e?.trim()?{userId:e.trim()}:{}})}async fetchPaymentTransactions(e){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...e?.trim()?{userId:e.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance(e){let t=e.trim();if(!t)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:t})}async fetchOrganizationUsageTransactions(e){let t=e.organizationId.trim();if(!t)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:t,...e.memberId?.trim()?{memberId:e.memberId.trim()}:{}})}async switchAccount(e){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:e?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request(e){return(await this.executor.runProviderAction(e)).result}}function HT(e){let t=e.organizations?.find((n)=>n.active);return{id:e.id,email:e.email,provider:"cline",organizationId:t?.organizationId,organizationName:t?.name,memberId:t?.memberId}}function FT(e,t){try{let n=e.getProviderSettings("cline");if(!n)return!1;return e.saveProviderSettings({...n,auth:{...n.auth,accountId:t.id,organizationId:t.organizationId,organizationName:t.organizationName,memberId:t.memberId}},{setLastUsed:!1}),!0}catch{return!1}}function Pc(e){return{onAuth:({url:t,instructions:n})=>{if(e.onOutput?.(n??"Complete sign-in in your browser."),e.openUrl)try{Promise.resolve(e.openUrl(t)).catch((r)=>{e.onOpenUrlError?.({url:t,error:r})})}catch(r){e.onOpenUrlError?.({url:t,error:r})}e.onOutput?.(t)},onPrompt:e.onPrompt,onServerListening:e.onServerListening,onServerClose:e.onServerClose}}import{setTimeout as YT}from"node:timers/promises";import{decodeJwtPayload as _0,getClineEnvironmentConfig as cg}from"@cline/shared";import{createHash as a0}from"node:crypto";var BT;function d0(e){BT=e}function it(e){if(typeof e!=="string"||e.length===0)return"unset";return a0("sha256").update(e).digest("hex").slice(0,8)}function me(e){try{BT?.debug(e)}catch{}}ve();function R0(){let e;return{promise:new Promise((n)=>{e=n}),resolve:e}}async function Cn(e){let t=await import("node:http"),n=e.host??"127.0.0.1",r=e.timeoutMs??300000,o=e.successHtml??A0,s=R0(),i=!1,a=null,d=null,c=null,u=(m)=>{if(i)return;i=!0,s.resolve(m)},l=()=>{if(a)clearTimeout(a),a=null;let m=c;if(c=null,d)d.close(),d.closeAllConnections?.(),d=null;if(m!==null&&e.onClose)Promise.resolve(e.onClose({host:n,port:m})).catch(()=>{})},p=async()=>(a=setTimeout(()=>{l(),u(null)},r),s.promise);for(let m of e.ports){let g=t.createServer((h,y)=>{try{let S=new URL(h.url||"",`http://${n}:${m}`);if(S.pathname!==e.callbackPath){y.statusCode=404,y.end("Not found");return}let b={url:S,code:S.searchParams.get("code")??void 0,state:S.searchParams.get("state")??void 0,provider:S.searchParams.get("provider")??void 0,error:S.searchParams.get("error")??void 0};if(b.error){y.statusCode=400,y.end(`Authentication failed: ${b.error}`),l(),u(b);return}if(!b.code){y.statusCode=400,y.end("Missing authorization code");return}if(e.expectedState&&b.state!==e.expectedState){y.statusCode=400,y.end("State mismatch");return}y.statusCode=200,y.setHeader("Content-Type","text/html; charset=utf-8"),y.end(o),l(),u(b)}catch{y.statusCode=500,y.end("Internal error")}}),f=await new Promise((h)=>{let y=(S)=>{g.off("error",y),h({bound:!1,error:S})};g.once("error",y),g.listen(m,n,()=>{g.off("error",y),d=g,h({bound:!0})})});if(f.error){if(f.error.code==="EADDRINUSE")continue;throw l(),f.error}if(f.bound){c=m;let h=`http://${n}:${m}${e.callbackPath}`;if(e.onListening)await Promise.resolve(e.onListening({host:n,port:m,callbackUrl:h})).catch(()=>{});return{callbackUrl:h,waitForCallback:p,cancelWait:()=>{l(),u(null)},close:()=>{l(),u(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var A0=`<!DOCTYPE html>
3
+ `),o}finally{ol.delete(e.lockDir),Xz(e)}}function _n(e,t,n={}){let r=Yz(e,n);return jI(r,e,t)}async function Ih(e,t,n={}){let r=await Qz(e,n);return jI(r,e,t)}function Zz(e){let t=t1(e);if(!t.mcpServers||typeof t.mcpServers!=="object"||Array.isArray(t.mcpServers))t.mcpServers={};return t}function e1(e,t){let n=JSON.stringify(e),r=JSON.parse(n),o=t(r),s=JSON.stringify(r),i=t(e);if(JSON.stringify(e)!==s)throw new Ha("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(i)!==JSON.stringify(o))throw new Ha("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return i}function qI(e){let t=xI(e,"utf8"),n;try{n=JSON.parse(t)}catch(r){let o=r instanceof Error?r.message:String(r);throw Error(`Failed to parse MCP settings JSON at "${e}": ${o}`)}if(!n||typeof n!=="object"||Array.isArray(n))throw Error(`Invalid MCP settings at "${e}": expected object.`);return n}function t1(e){try{return qI(e)}catch(t){if(t.code==="ENOENT")return{};throw t}}function Rh(e,t){if(!Object.hasOwn(e,t))return;let n=e[t];if(!n||typeof n!=="object"||Array.isArray(n))return;return n}function n1(e,t,n){Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0})}function sl(e={}){let t=e.filePath??ye(),n=xI(t,"utf8"),r;try{r=JSON.parse(n)}catch(s){let i=s instanceof Error?s.message:String(s);throw Error(`Failed to parse MCP settings JSON at "${t}": ${i}`)}let o=zz.safeParse(r);if(!o.success){let s=o.error.issues.map((i)=>{let a=i.path.join(".");return a?`${a}: ${i.message}`:i.message}).join("; ");throw Error(`Invalid MCP settings at "${t}": ${s}`)}return o.data}function $a(e){if(!e)return;let t={...e.clientInformation?{clientInformation:e.clientInformation}:{},...e.tokens?{tokens:e.tokens}:{},...e.codeVerifier?{codeVerifier:e.codeVerifier}:{},...e.discoveryState?{discoveryState:e.discoveryState}:{},...e.redirectUrl?{redirectUrl:e.redirectUrl}:{},...e.lastError?{lastError:e.lastError}:{},...e.lastAuthenticatedAt?{lastAuthenticatedAt:e.lastAuthenticatedAt}:{},...e.authorizationRequired?{authorizationRequired:!0}:{}};return Object.keys(t).length>0?t:void 0}function r1(e){if(e===void 0)return;let t=wh.safeParse(e);if(!t.success)return;return $a(t.data)}function Fs(e={}){let t=e.filePath??ye();return EI(t)}function Mn(e={}){let t=sl(e);return Object.entries(t.mcpServers).map(([n,r])=>zI(n,r))}function zI(e,t){return{name:e,transport:rl(t.transport),disabled:t.disabled,timeoutSeconds:t.timeoutSeconds,metadata:t.metadata,oauthClient:t.oauthClient,oauth:t.oauth}}function Ah(e,t){let n=UI.safeParse(t);if(!n.success){let r=n.error.issues.map((o)=>{let s=o.path.join(".");return s?`${s}: ${o.message}`:o.message}).join("; ");throw Error(`Invalid MCP server "${e}": ${r}`)}return zI(e,n.data)}function yo(e,t={}){let n=t.filePath??ye(),o=qI(n).mcpServers;if(!o||typeof o!=="object"||Array.isArray(o))return;let s=Rh(o,e);return s?Ah(e,s):void 0}function il(e){let t=e.filePath??ye(),n=e.name.trim();if(!n)throw Error("MCP server settings toggle requires a server name.");_n(t,(r)=>{let o=r.mcpServers;if(!o||typeof o!=="object"||Array.isArray(o))throw Error(`Invalid MCP settings at "${t}": mcpServers must be an object.`);let s={...o},i=Rh(s,n);if(!i)throw Error(`Unknown MCP server: ${n}`);let a={...i};if(e.disabled)a.disabled=!0;else delete a.disabled;n1(s,n,a),r.mcpServers=s})}function al(e,t={}){let n=sl(t);if(!Object.hasOwn(n.mcpServers,e))return;return $a(n.mcpServers[e]?.oauth)}function KI(e,t,n){return(r)=>{let o=r.mcpServers,s=Rh(o,e);if(!s)throw Error(`Unknown MCP server: ${e}`);if(n.expectedOAuthClient!==void 0){let d=Ch.safeParse(s.oauthClient),c=d.success?d.data:void 0,u=n.expectedOAuthClient??void 0;if(c?.clientId!==u?.clientId||c?.clientSecret!==u?.clientSecret)throw new ho(e)}let i=r1(s.oauth)??{},a=$a(t(i));if(a)s.oauth=a;else delete s.oauth;return a??{}}}function GI(e,t,n={}){let r=n.filePath??ye();return _n(r,KI(e,t,n))}async function dl(e,t,n={}){let r=n.filePath??ye();return Ih(r,KI(e,t,n))}function VI(e={}){return Mn(e).map(Wa).sort((n,r)=>n.serverName.localeCompare(r.serverName))}function Wa(e){let t=e.transport.type!=="stdio",n=e.oauth?.tokens?.access_token,r=e.oauth?.clientInformation,o=e.oauthClient?r?.client_id===e.oauthClient.clientId&&r?.client_secret===e.oauthClient.clientSecret:!0,s=t&&o&&typeof n==="string"&&n.trim().length>0;return{serverName:e.name,oauthSupported:t,oauthConfigured:s,authorizationRequired:t&&!s&&e.oauth?.authorizationRequired===!0,lastError:e.oauth?.lastError,lastAuthenticatedAt:e.oauth?.lastAuthenticatedAt}}async function cl(e,t={}){let n=Mn(t);for(let r of n)await e.registerServer(r);return n}var Fa,LI,NI,wh,Ch,Uz,Hz,Fz,Bz,$z,Wz,DI,jz,qz,UI,zz,kh,ho,Ba,Ha,Ph=1e4,HI=25,Gz,ol;var ja=Wt(()=>{Fa=H.record(H.string(),H.string()),LI=H.record(H.string(),H.unknown()),NI=H.preprocess((e)=>Lz(e)?Nz(e):void 0,H.number().optional()),wh=H.object({clientInformation:H.record(H.string(),H.unknown()).optional(),tokens:H.record(H.string(),H.unknown()).optional(),codeVerifier:H.string().optional(),discoveryState:H.record(H.string(),H.unknown()).optional(),redirectUrl:H.string().url().optional(),lastError:H.string().optional(),lastAuthenticatedAt:H.number().int().positive().optional(),authorizationRequired:H.boolean().optional()}).strip(),Ch=H.object({clientId:H.string().min(1),clientSecret:H.string().min(1).optional()}).strip(),Uz=H.object({type:H.literal("stdio"),command:H.string().min(1),args:H.array(H.string()).optional(),cwd:H.string().min(1).optional(),env:Fa.optional()}),Hz=H.object({type:H.literal("sse"),url:H.string().url(),headers:Fa.optional()}),Fz=H.object({type:H.literal("streamableHttp"),url:H.string().url(),headers:Fa.optional()}),Bz=H.discriminatedUnion("type",[Uz,Hz,Fz]),$z=H.object({transport:Bz,disabled:H.boolean().optional(),timeout:NI,metadata:LI.optional(),oauthClient:Ch.optional(),oauth:wh.optional()}).transform((e)=>({transport:e.transport,disabled:e.disabled,timeoutSeconds:e.timeout,metadata:e.metadata,oauthClient:e.oauthClient,oauth:e.oauth})),Wz=H.enum(["stdio","sse","http","streamableHttp"]).optional(),DI=H.object({type:H.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Wz,disabled:H.boolean().optional(),timeout:NI,metadata:LI.optional(),oauthClient:Ch.optional(),oauth:wh.optional()});jz=DI.extend({command:H.string().min(1),args:H.array(H.string()).optional(),cwd:H.string().min(1).optional(),env:Fa.optional()}).superRefine((e,t)=>{let n=e.type??vh(e.transportType);if(n&&n!=="stdio")t.addIssue({code:H.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform((e)=>({transport:{type:"stdio",command:e.command,args:e.args,cwd:e.cwd,env:e.env},disabled:e.disabled,timeoutSeconds:e.timeout,metadata:e.metadata,oauthClient:e.oauthClient,oauth:e.oauth})),qz=DI.extend({url:H.string().url(),headers:Fa.optional()}).superRefine((e,t)=>{let n=e.type??vh(e.transportType)??"sse";if(n!=="sse"&&n!=="streamableHttp")t.addIssue({code:H.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform((e)=>{if((e.type??vh(e.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:e.url,headers:e.headers},disabled:e.disabled,timeoutSeconds:e.timeout,metadata:e.metadata,oauthClient:e.oauthClient,oauth:e.oauth};return{transport:{type:"sse",url:e.url,headers:e.headers},disabled:e.disabled,timeoutSeconds:e.timeout,metadata:e.metadata,oauthClient:e.oauthClient,oauth:e.oauth}}),UI=H.union([$z,jz,qz]),zz=H.object({mcpServers:H.record(H.string(),UI)}).passthrough();kh=class kh extends Error{constructor(e){super(e);this.name="McpSettingsUpdateSkippedError"}};ho=class ho extends Error{constructor(e){super(`OAuth client configuration changed while authorizing MCP server "${e}". Start authorization again.`);this.name="McpOAuthClientChangedError"}};Ba=class Ba extends Error{constructor(e){super(e);this.name="McpSettingsLockTimeoutError"}};Ha=class Ha extends Error{constructor(e){super(e);this.name="McpSettingsMutatorPurityError"}};Gz=new Int32Array(new SharedArrayBuffer(4)),ol=new Set});import{existsSync as CX,mkdirSync as kX,readFileSync as PX,writeFileSync as IX}from"node:fs";import{resolve as RX}from"node:path";import{resolveSessionDataDir as AX}from"@cline/shared/storage";import{nanoid as EX}from"nanoid";import*as xX from"node-machine-id";function Td(){if(!bE)SE=vE(),bE=!0;return SE??TE()}function _t(e){let t=e?.trim();if(t)return t;let n=vE();if(n)return n;return TE()}function MX(){let e=xX;return e.machineIdSync??e.default?.machineIdSync}function vE(){try{let e=MX();if(!e)return;return e().trim()||void 0}catch{return}}function TE(){let e=AX(),t=RX(e,_X);try{if(CX(t)){let r=PX(t,"utf8").trim();if(r.length>0)return r}}catch{}let n=`cl-${EX()}`;try{kX(e,{recursive:!0}),IX(t,n,"utf8")}catch{}return n}var _X="machine-id",SE,bE=!1;var Mo=()=>{};function yn(e){let t=e?.trim();return t?t:void 0}function $p(e){let t=e.client,n=ps(t)??yn(e.source),r=yn(t.version),o=yn(t.platform)??yn(t.name),s=yn(t.platformVersion)??r,i={cline_type:n,extension_version:r,platform:o,platform_version:s};if(e.user?.accountId===void 0)return i;let a=typeof e.user.accountId==="string"?yn(e.user.accountId):void 0;return{...i,distinct_id:a??yn(e.user.distinctId),user_id:a,account_id:a,account_email:a?yn(e.user.email):void 0,organization_id:a?yn(e.user.organizationId):void 0}}function gi(e,t){let n={},r={},o,s=(i)=>({...t,...r,...n,...i,...o?{distinct_id:o}:{}});return{setDistinctId(i){o=yn(i)},setMetadata(i){n={...i}},updateMetadata(i){n={...n,...i}},setCommonProperties(i){r={...i}},updateCommonProperties(i){r={...r,...i}},isEnabled:()=>e.isEnabled(),capture:(i)=>e.capture({event:i.event,properties:s(i.properties)}),captureRequired:(i,a)=>e.captureRequired(i,s(a)),recordCounter:(i,a,d,c,u)=>e.recordCounter(i,a,s(d),c,u),recordHistogram:(i,a,d,c,u)=>e.recordHistogram(i,a,s(d),c,u),recordGauge:(i,a,d,c,u)=>e.recordGauge(i,a,s(d),c,u),flush:()=>e.flush(),dispose:async()=>{}}}function zd(e,t){return gi(e,$p(t))}var Wp=Wt(()=>{Ct()});import{SeverityNumber as Ai}from"@opentelemetry/api-logs";class oc{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(e){this.name=e.name??"OpenTelemetryAdapter",this.metadata={...e.metadata},this.meterProvider=e.meterProvider,this.loggerProvider=e.loggerProvider,this.meter=e.meterProvider?.getMeter("cline")??null,this.logger=e.loggerProvider?.getLogger("cline")??null,this.enabled=e.enabled??!0,this.distinctId=e.distinctId,this.commonProperties=e.commonProperties?{...e.commonProperties}:{}}emit(e,t){if(!this.isEnabled())return;this.emitLog(e,t,!1)}emitRequired(e,t){this.emitLog(e,t,!0)}recordCounter(e,t,n,r,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.counters.get(e);if(!s)s=this.meter.createCounter(e,r?{description:r}:void 0),this.counters.set(e,s);s.add(t,this.flattenProperties(this.buildAttributes(n)))}recordHistogram(e,t,n,r,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.histograms.get(e);if(!s)s=this.meter.createHistogram(e,r?{description:r}:void 0),this.histograms.set(e,s);s.record(t,this.flattenProperties(this.buildAttributes(n)))}recordGauge(e,t,n,r,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.buildAttributes(n),i=JSON.stringify(s),a=this.gaugeValues.get(e);if(t===null){if(a){if(a.delete(i),a.size===0)this.gaugeValues.delete(e),this.gauges.delete(e)}return}let d=a;if(!d)d=new Map,this.gaugeValues.set(e,d);if(!this.gauges.has(e)){let c=this.meter.createObservableGauge(e,r?{description:r}:void 0);c.addCallback((u)=>{for(let l of this.snapshotGaugeSeries(e))u.observe(l.value,this.flattenProperties(l.attributes))}),this.gauges.set(e,c)}d.set(i,{value:t,attributes:s})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(e){this.distinctId=e}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(e,t,n){if(!this.logger)return;let r=this.flattenProperties(this.buildAttributes(t,n)),o=B3(r.severity);this.logger.emit({severityText:o.text,severityNumber:o.number,body:e,attributes:r})}buildAttributes(e,t=!1){return{...this.commonProperties,...this.metadata,...e,...this.distinctId?{distinct_id:this.distinctId}:{},...t?{_required:!0}:{}}}snapshotGaugeSeries(e){let t=this.gaugeValues.get(e);if(!t)return[];return Array.from(t.values(),(n)=>({value:n.value,attributes:n.attributes?{...n.attributes}:void 0}))}flattenProperties(e,t="",n=new WeakSet,r=0){if(!e)return{};let o={},s=100,i=10;for(let[a,d]of Object.entries(e)){if(a==="__proto__"||a==="constructor"||a==="prototype")continue;let c=t?`${t}.${a}`:a;if(d===null||d===void 0){o[c]=String(d);continue}if(Array.isArray(d)){let u=d.length>s?d.slice(0,s):d;try{o[c]=JSON.stringify(u)}catch{o[c]="[UnserializableArray]"}if(d.length>s)o[`${c}_truncated`]=!0,o[`${c}_original_length`]=d.length;continue}if(typeof d==="object"){if(d instanceof Date){o[c]=d.toISOString();continue}if(d instanceof Error){o[c]=d.message;continue}if(n.has(d)){o[c]="[Circular]";continue}if(r>=i){o[c]="[MaxDepthExceeded]";continue}n.add(d),Object.assign(o,this.flattenProperties(d,c,n,r+1));continue}if($3(d)){o[c]=d;continue}try{o[c]=JSON.stringify(d)}catch{o[c]=String(d)}}return o}}function B3(e){switch(typeof e==="string"?e.toLowerCase():e){case"trace":return{text:"TRACE",number:Ai.TRACE};case"debug":return{text:"DEBUG",number:Ai.DEBUG};case"warn":case"warning":return{text:"WARN",number:Ai.WARN};case"error":return{text:"ERROR",number:Ai.ERROR};case"fatal":return{text:"FATAL",number:Ai.FATAL};default:return{text:"INFO",number:Ai.INFO}}}function $3(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"}var Yb=()=>{};class cm{name;logger;enabled;constructor(e={}){this.name=e.name??"TelemetryLoggerSink",this.logger=e.logger,this.enabled=e.enabled??!0}emit(e,t){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:e,properties:t})}emitRequired(e,t){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:e,properties:t})}recordCounter(e,t,n,r,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:e,value:t,attributes:n,description:r,required:o===!0})}recordHistogram(e,t,n,r,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:e,value:t,attributes:n,description:r,required:o===!0})}recordGauge(e,t,n,r,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:e,value:t,attributes:n,description:r,required:o===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class sc{adapters;metadata;distinctId;deviceId;commonProperties;constructor(e={}){if(this.adapters=[...e.adapters??[]],e.logger)this.adapters.push(new cm({logger:e.logger}));this.metadata={...e.metadata??{}},this.distinctId=e.distinctId,this.deviceId=e.deviceId??Td(),this.commonProperties={...e.commonProperties??{}}}addAdapter(e){this.adapters.push(e)}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return this.adapters.some((e)=>e.isEnabled())}capture(e){let t=this.buildAttributes(e.properties);for(let n of this.adapters)n.emit(e.event,t)}captureRequired(e,t){let n=this.buildAttributes(t);for(let r of this.adapters)r.emitRequired(e,n)}recordCounter(e,t,n,r,o=!1){let s=this.buildAttributes(n);for(let i of this.adapters)i.recordCounter(e,t,s,r,o)}recordHistogram(e,t,n,r,o=!1){let s=this.buildAttributes(n);for(let i of this.adapters)i.recordHistogram(e,t,s,r,o)}recordGauge(e,t,n,r,o=!1){let s=this.buildAttributes(n);for(let i of this.adapters)i.recordGauge(e,t,s,r,o)}async flush(){await Promise.all(this.adapters.map((e)=>e.flush()))}async dispose(){await Promise.all(this.adapters.map((e)=>e.dispose()))}buildAttributes(e){let t=typeof e?.distinct_id==="string"&&e.distinct_id.trim()?e.distinct_id.trim():this.distinctId,n={...this.commonProperties,...this.metadata,...e,...t?{distinct_id:t}:{},device_id:this.deviceId};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}}var Qb=Wt(()=>{Mo()});import{LangfuseAttributesSpanProcessor as W3}from"@cline/llms";import{markOtlpTraceRelayProvider as j3}from"@cline/shared";import{metrics as q3,trace as z3}from"@opentelemetry/api";import{logs as K3}from"@opentelemetry/api-logs";import{OTLPLogExporter as G3}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as V3}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as J3}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as X3}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Y3,ConsoleLogRecordExporter as Q3,LoggerProvider as Z3}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as e9,MeterProvider as t9,PeriodicExportingMetricReader as lO}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as n9,ConsoleSpanExporter as r9,SimpleSpanProcessor as o9}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as s9}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as i9,ATTR_SERVICE_VERSION as a9}from"@opentelemetry/semantic-conventions";class pO{distinctId;metadata;commonProperties;constructor(e={}){this.distinctId=e.distinctId,this.metadata={...e.metadata??{}},this.commonProperties={...e.commonProperties??{}}}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return!1}capture(e){this.resolveProperties(e.properties)}captureRequired(e,t){this.resolveProperties(t)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(e){let t=typeof e?.distinct_id==="string"&&e.distinct_id.trim()?e.distinct_id.trim():this.distinctId,n={...this.commonProperties,...this.metadata,...e,...t?{distinct_id:t}:{}};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}}class ic{meterProvider;loggerProvider;tracerProvider;options;constructor(e={}){this.options=e;let t=X3({[i9]:e.serviceName??"cline",...e.serviceVersion?{[a9]:e.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(t),this.loggerProvider=this.createLoggerProvider(t),this.tracerProvider=this.createTracerProvider(t),this.meterProvider)q3.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)K3.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(e="cline",t){return z3.getTracer(e,t??this.options.serviceVersion)}createAdapter(e){return new oc({...e,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(e){let t=this.createAdapter({name:e.name,enabled:this.options.enabled,metadata:e.metadata});return new sc({...e,adapters:[t],distinctId:_t(e.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(e){let t=Zb(this.options.metricsExporter);if(t.length===0)return null;let n=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),r=Math.min(30000,Math.floor(n*0.8)),o=t.map((s)=>u9(s,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:n,timeout:r})).filter((s)=>s!==null);if(o.length===0)return null;return new t9({resource:e,readers:o})}createTracerProvider(e){let t=Zb(this.options.tracesExporter);if(t.length===0)return null;let n=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,r=this.options.otlpTracesHeaders??this.options.otlpHeaders,o=[],s=!1;for(let a of t){let d=c9(a,{endpoint:n,headers:r,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(d){if(o.push(d),a!=="console")s=!0}}if(o.length===0)return null;let i=new s9({resource:e,spanProcessors:s?[new W3,...o]:o});if(s)j3(i);return i}createLoggerProvider(e){let t=Zb(this.options.logsExporter);if(t.length===0)return null;let n=t.map((r)=>{let o=d9(r,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!o)return null;return new Y3(o,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((r)=>r!==null);if(n.length===0)return null;return new Z3({resource:e,processors:n})}}function um(e){let t=new ic(e),n=t.createTelemetryService(e),r=()=>{n.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:e.enabled??!0,logsExporter:Array.isArray(e.logsExporter)?e.logsExporter.join(","):e.logsExporter,metricsExporter:Array.isArray(e.metricsExporter)?e.metricsExporter.join(","):e.metricsExporter,tracesExporter:Array.isArray(e.tracesExporter)?e.tracesExporter.join(","):e.tracesExporter,otlpProtocol:e.otlpProtocol,hasOtlpEndpoint:Boolean(e.otlpEndpoint),serviceName:e.serviceName,serviceVersion:e.serviceVersion})};if(!e.deferProviderCreatedEvent)r();return{provider:t,telemetry:n,emitProviderCreated:r}}function jo(e){if(Yg())return{telemetry:new pO(e)};if(e.enabled!==!0)return{telemetry:new sc({...e,distinctId:_t(e.distinctId)})};return um(e)}function lm(e){let{telemetry:t,provider:n,emitProviderCreated:r}=jo(e);return{telemetry:t,provider:n,flush:async()=>{let i=n;if(i&&typeof i.forceFlush==="function")try{await i.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([t.dispose(),n?.dispose()])},...e.deferProviderCreatedEvent&&r?{emitProviderCreated:r}:{}}}function Zb(e){if(!e)return[];return(Array.isArray(e)?e:e.split(",")).map((n)=>n.trim()).filter((n)=>n==="console"||n==="otlp")}function d9(e,t){if(e==="console")return new Q3;if(!t.endpoint)return null;let n=ev(t.endpoint,"/v1/logs");return new G3({url:n,headers:t.headers})}function c9(e,t){if(e==="console")return new o9(new r9);if(!t.endpoint)return null;let n=ev(t.endpoint,"/v1/traces");return new n9(new J3({url:n,headers:t.headers}))}function u9(e,t){if(e==="console")return new lO({exporter:new e9,exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout});if(!t.endpoint)return null;let n=ev(t.endpoint,"/v1/metrics");return new lO({exporter:new V3({url:n,headers:t.headers}),exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout})}function ev(e,t){let n=new URL(e),r=n.pathname.endsWith("/")?n.pathname.slice(0,-1):n.pathname;return n.pathname=r.endsWith(t)?r:`${r}${t}`,n.toString()}var pm=Wt(()=>{qt();Mo();Yb();Qb()});var FN={};s0(FN,{OpenTelemetryAdapter:()=>oc,OpenTelemetryProvider:()=>ic,createClientScopedTelemetryService:()=>zd,createConfiguredTelemetryHandle:()=>lm,createConfiguredTelemetryService:()=>jo,createOpenTelemetryTelemetryService:()=>um,createScopedTelemetryService:()=>gi,resolveClientTelemetryProperties:()=>$p,resolveCoreDeviceId:()=>Td,resolveCoreDistinctId:()=>_t});var xm=Wt(()=>{Mo();Yb();pm();Wp()});import*as tMe from"@cline/llms";import{buildClineClientHeaders as rMe,ClineFreeModelLimitError as oMe,ClineNotSubscribedError as sMe,ClineOrgIndividualInferenceSubscriptionError as iMe,ClinePassLimitError as aMe,extractClineFreeModelLimitResetTime as dMe,extractClinePassLimitMessage as cMe,getClineNotSubscribedMessage as uMe,getClineOrgIndividualInferenceSubscriptionMessage as lMe,getClinePassSubscriptionUrl as pMe,isClineFreeModelLimitError as mMe,isClineFreeModelLimitMessage as gMe,isClineModelNotFoundMessage as fMe,isClineNotSubscribedError as hMe,isClineNotSubscribedMessage as yMe,isClineOrgIndividualInferenceSubscriptionError as SMe,isClineOrgIndividualInferenceSubscriptionMessage as bMe,isClinePassLimitError as vMe,isClinePassLimitMessage as TMe}from"@cline/llms";import{buildClineSystemPrompt as CMe,buildSdkErrorProperties as kMe,ContributionRegistry as PMe,captureSdkError as IMe,createClineTelemetryServiceConfig as RMe,createClineTelemetryServiceMetadata as AMe,createContributionRegistry as EMe,createTool as xMe,emptyWorkspaceManifest as _Me,FEATURE_FLAGS as MMe,FeatureFlag as OMe,FeatureFlagDefaultValue as LMe,formatDisplayUserInput as NMe,noopBasicLogger as DMe,normalizeSdkError as UMe,normalizeUserInput as HMe,parseUserCommandEnvelope as FMe,registerDisposable as BMe,SDK_ERROR_TELEMETRY_EVENT as $Me,stripUtf8Bom as WMe}from"@cline/shared";export*from"@cline/shared/storage";function i0(e){if(typeof e!=="object"||e===null||!("error"in e))return;let t=e.error;return typeof t==="string"&&t.trim()?t:void 0}function NT(e,t,n){let r=i0(n);if(r)return r;let o=t.trim();if(o){let s=o.length>200?`${o.slice(0,200)}...`:o;return`Cline account request failed with status ${e}: ${s}`}return`Cline account request failed with status ${e}`}class zm{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor(e){let t=e.apiBaseUrl.trim();if(!t)throw Error("apiBaseUrl is required");this.apiBaseUrl=t,this.getAuthTokenFn=e.getAuthToken,this.getCurrentUserIdFn=e.getCurrentUserId,this.getOrganizationMemberIdFn=e.getOrganizationMemberId,this.getHeadersFn=e.getHeaders,this.requestTimeoutMs=e.requestTimeoutMs??30000,this.fetchImpl=e.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(e){let t=await this.resolveUserId(e);return this.request(`/api/v1/users/${encodeURIComponent(t)}/balance`)}async fetchUsageTransactions(e){let t=await this.resolveUserId(e);return(await this.request(`/api/v1/users/${encodeURIComponent(t)}/usages`)).items??[]}async fetchPaymentTransactions(e){let t=await this.resolveUserId(e);return(await this.request(`/api/v1/users/${encodeURIComponent(t)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans(e){let t=new URL("/api/v1/plans",this.apiBaseUrl);if(e?.type)t.searchParams.set("type",e.type);return this.request(`${t.pathname}${t.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization(e){let t=e.trim();if(!t)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(t)}`)}async fetchOrganizationBalance(e){let t=e.trim();if(!t)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(t)}/balance`)}async fetchOrganizationUsageTransactions(e){let t=e.organizationId.trim();if(!t)throw Error("organizationId is required");let n=await this.resolveOrganizationMemberId(t,e.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(t)}/members/${encodeURIComponent(n)}/usages`)).items??[]}async switchAccount(e){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:e?.trim()||null},expectNoContent:!0})}async resolveUserId(e){let t=e?.trim();if(t)return t;let r=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(r)return r;let o=await this.fetchMe();if(!o.id?.trim())throw Error("Unable to resolve current user id");return o.id}async resolveOrganizationMemberId(e,t){let n=t?.trim();if(n)return n;let o=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn(e):void 0)?.trim();if(o)return o;let i=(await this.fetchUserOrganizations()).find((a)=>a.organizationId===e)?.memberId;if(!i?.trim())throw Error(`Unable to resolve memberId for organization ${e}`);return i}async request(e,t){let n=(await this.getAuthTokenFn())?.trim();if(!n)throw Error("No Cline account auth token found");let r=this.getHeadersFn?await this.getHeadersFn():{},o=new AbortController,s=setTimeout(()=>o.abort(),this.requestTimeoutMs);try{let i=await this.fetchImpl(new URL(e,this.apiBaseUrl),{method:t?.method??"GET",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json",...r??{}},body:t?.body!==void 0?JSON.stringify(t.body):void 0,signal:o.signal});if(i.status===204||t?.expectNoContent){if(!i.ok)throw Error(`Cline account request failed with status ${i.status}`);return}let a=await i.text(),d;if(a.trim())try{d=JSON.parse(a)}catch{if(!i.ok)throw Error(NT(i.status,a,void 0));throw Error("Cline account response was not valid JSON")}if(!i.ok)throw Error(NT(i.status,a,d));if(typeof d==="object"&&d!==null){let c=d;if(typeof c.success==="boolean"){if(!c.success)throw Error(c.error||"Cline account request failed");return c.data}}if(d===void 0||d===null)throw Error("Cline account response payload was empty");return d}finally{clearTimeout(s)}}}function DT(e){return e.action==="clineAccount"}async function UT(e,t){switch(e.operation){case"fetchMe":return t.fetchMe();case"fetchBalance":return t.fetchBalance(e.userId);case"fetchUsageTransactions":return t.fetchUsageTransactions(e.userId);case"fetchPaymentTransactions":return t.fetchPaymentTransactions(e.userId);case"fetchUserOrganizations":return t.fetchUserOrganizations();case"fetchOrganizationBalance":return t.fetchOrganizationBalance(e.organizationId);case"fetchOrganizationUsageTransactions":return t.fetchOrganizationUsageTransactions({organizationId:e.organizationId,memberId:e.memberId});case"switchAccount":return await t.switchAccount(e.organizationId),{updated:!0};case"fetchFeaturebaseToken":return t.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String(e)}`)}}class Km{executor;constructor(e){this.executor=e}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance(e){return this.request({action:"clineAccount",operation:"fetchBalance",...e?.trim()?{userId:e.trim()}:{}})}async fetchUsageTransactions(e){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...e?.trim()?{userId:e.trim()}:{}})}async fetchPaymentTransactions(e){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...e?.trim()?{userId:e.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance(e){let t=e.trim();if(!t)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:t})}async fetchOrganizationUsageTransactions(e){let t=e.organizationId.trim();if(!t)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:t,...e.memberId?.trim()?{memberId:e.memberId.trim()}:{}})}async switchAccount(e){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:e?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request(e){return(await this.executor.runProviderAction(e)).result}}function HT(e){let t=e.organizations?.find((n)=>n.active);return{id:e.id,email:e.email,provider:"cline",organizationId:t?.organizationId,organizationName:t?.name,memberId:t?.memberId}}function FT(e,t){try{let n=e.getProviderSettings("cline");if(!n)return!1;return e.saveProviderSettings({...n,auth:{...n.auth,accountId:t.id,organizationId:t.organizationId,organizationName:t.organizationName,memberId:t.memberId}},{setLastUsed:!1}),!0}catch{return!1}}function Pc(e){return{onAuth:({url:t,instructions:n})=>{if(e.onOutput?.(n??"Complete sign-in in your browser."),e.openUrl)try{Promise.resolve(e.openUrl(t)).catch((r)=>{e.onOpenUrlError?.({url:t,error:r})})}catch(r){e.onOpenUrlError?.({url:t,error:r})}e.onOutput?.(t)},onPrompt:e.onPrompt,onServerListening:e.onServerListening,onServerClose:e.onServerClose}}import{setTimeout as YT}from"node:timers/promises";import{decodeJwtPayload as _0,getClineEnvironmentConfig as cg}from"@cline/shared";import{createHash as a0}from"node:crypto";var BT;function d0(e){BT=e}function it(e){if(typeof e!=="string"||e.length===0)return"unset";return a0("sha256").update(e).digest("hex").slice(0,8)}function me(e){try{BT?.debug(e)}catch{}}ve();function R0(){let e;return{promise:new Promise((n)=>{e=n}),resolve:e}}async function Cn(e){let t=await import("node:http"),n=e.host??"127.0.0.1",r=e.timeoutMs??300000,o=e.successHtml??A0,s=R0(),i=!1,a=null,d=null,c=null,u=(m)=>{if(i)return;i=!0,s.resolve(m)},l=()=>{if(a)clearTimeout(a),a=null;let m=c;if(c=null,d)d.close(),d.closeAllConnections?.(),d=null;if(m!==null&&e.onClose)Promise.resolve(e.onClose({host:n,port:m})).catch(()=>{})},p=async()=>(a=setTimeout(()=>{l(),u(null)},r),s.promise);for(let m of e.ports){let g=t.createServer((h,y)=>{try{let S=new URL(h.url||"",`http://${n}:${m}`);if(S.pathname!==e.callbackPath){y.statusCode=404,y.end("Not found");return}let b={url:S,code:S.searchParams.get("code")??void 0,state:S.searchParams.get("state")??void 0,provider:S.searchParams.get("provider")??void 0,error:S.searchParams.get("error")??void 0};if(b.error){y.statusCode=400,y.end(`Authentication failed: ${b.error}`),l(),u(b);return}if(!b.code){y.statusCode=400,y.end("Missing authorization code");return}if(e.expectedState&&b.state!==e.expectedState){y.statusCode=400,y.end("State mismatch");return}y.statusCode=200,y.setHeader("Content-Type","text/html; charset=utf-8"),y.end(o),l(),u(b)}catch{y.statusCode=500,y.end("Internal error")}}),f=await new Promise((h)=>{let y=(S)=>{g.off("error",y),h({bound:!1,error:S})};g.once("error",y),g.listen(m,n,()=>{g.off("error",y),d=g,h({bound:!0})})});if(f.error){if(f.error.code==="EADDRINUSE")continue;throw l(),f.error}if(f.bound){c=m;let h=`http://${n}:${m}${e.callbackPath}`;if(e.onListening)await Promise.resolve(e.onListening({host:n,port:m,callbackUrl:h})).catch(()=>{});return{callbackUrl:h,waitForCallback:p,cancelWait:()=>{l(),u(null)},close:()=>{l(),u(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var A0=`<!DOCTYPE html>
4
4
  <html lang="en">
5
5
  <head>
6
6
  <meta charset="utf-8">
@@ -198,7 +198,7 @@ Searched ${f} files.`;let y=[`Found ${g.length} result${g.length===1?"":"s"} for
198
198
 
199
199
  ...[assistant text truncated: omitted ${e} chars due to repeated tool-call markup]...
200
200
 
201
- `;function EP(e=process.env){return{maxToolResultChars:AP(e[eh.maxToolResultChars]),maxTotalTextBytes:AP(e[eh.maxTotalTextBytes]),minOutdatedRewriteBytes:oq(e[eh.minOutdatedRewriteBytes])}}class rh{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(e={}){this.getToolResultRecovery=e.getToolResultRecovery,this.maxToolResultChars=Ia(e.maxToolResultChars,nh),this.maxFileContentChars=Ia(e.maxFileContentChars,Vj),this.maxTotalTextBytes=Ia(e.maxTotalTextBytes,Jj),this.mediaBudget=e.mediaBudget??{},this.maxAssistantTextChars=Ia(e.maxAssistantTextChars,Xj),this.maxAssistantToolMarkupChars=Ia(e.maxAssistantToolMarkupChars,Yj),this.minOutdatedRewriteBytes=sq(e.minOutdatedRewriteBytes,Qj)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(e){this.recoveryNoticeBytes=0,this.reindex(e),this.commitOutdatedRewrites(e);let n=this.addMissingToolResults(e).map((o)=>{if(!Array.isArray(o.content)){if(o.role==="user"&&typeof o.content==="string"){let a=wP(o.content);if(a!==o.content)return{...o,content:a}}if(o.role==="assistant"&&typeof o.content==="string"){let a=this.truncateAssistantText(o.content);if(a!==o.content)return{...o,content:a}}return o}let s=!1,i=o.content.map((a)=>{let d=this.transformBlock(a,o.role);if(d!==a)s=!0;return d});return s?{...o,content:i}:o}),r=this.applyMediaBudget(n);return this.truncateToTotalTextBudget(r)}transformBlock(e,t){if(t==="user"&&e.type==="text"&&typeof e.text==="string"){let s=wP(e.text);if(s!==e.text)return{...e,text:s};return e}if(t==="assistant"&&e.type==="text"&&typeof e.text==="string"){let s=this.truncateAssistantText(e.text);return s===e.text?e:{...e,text:s}}if(e.type==="file"){let s=Ra(e.content,this.maxFileContentChars,PP);return s===e.content?e:{...e,content:s}}if(e.type!=="tool_result")return e;let n=this.resolveToolName(e),r=this.getToolResultRecovery?.({...e,name:n??e.name});if(r){let{text:s,images:i}=Nu(e.content);if(typeof s==="string"&&s.length>this.maxToolResultChars){let a=[{type:"text",text:this.truncateMiddle(s)},...i];if(r.uri){let d={type:"text",text:`Full result is temporarily saved to ${r.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},c=Te(d.text);if(this.recoveryNoticeBytes+c<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=c,this.recoveryNotices.add(d),a.push(d)}return{...e,content:a}}}let o=e.content;if(this.isReadTool(n)&&e.is_error!==!0){let s=this.committedOutdatedRewrites.get(e.tool_use_id);if(s&&s.size>0){let a=this.getReadLocators(e).filter((d)=>s.has(this.toReadLocatorKey(d))&&this.isOutdatedReadLocator(d,e.tool_use_id));if(a.length>0)o=this.replaceOutdatedReadContent(o,a)}}return o=this.truncateToolResultContent(o),o===e.content?e:{...e,content:o}}reindex(e){let t=this.indexedMessageCount===0||e.length>=this.indexedMessageCount&&e[this.indexedMessageCount-1]===this.indexedTailRef;if(e.length<this.indexedMessageCount||!t)this.resetIndexes();for(let n=this.indexedMessageCount;n<e.length;n++){let r=e[n];if(!Array.isArray(r.content))continue;for(let o=0;o<r.content.length;o++){let s=r.content[o];if(s.type==="file")this.latestFullContentOwnerByPathCache.set(s.path,`file:${n}:${o}`);else if(s.type==="tool_use"){let i=s.name.toLowerCase();if(this.toolNameByIdCache.set(s.id,i),this.isReadTool(i)){let a=this.extractLocatorsFromReadToolInput(s.input);if(a.length>0)this.readLocatorsByToolUseIdCache.set(s.id,a)}}else if(s.type==="tool_result"){let i=this.resolveToolName(s);if(!this.isReadTool(i)||s.is_error===!0)continue;let a=this.getReadLocators(s);for(let d of a)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(d),s.tool_use_id),this.isFullFileRead(d))this.latestFullContentOwnerByPathCache.set(d.path,s.tool_use_id)}}}this.indexedMessageCount=e.length,this.indexedTailRef=e.length>0?e[e.length-1]:void 0}commitOutdatedRewrites(e){let t=new Map,n=new Set,r=0;for(let o of e){if(!Array.isArray(o.content))continue;for(let s of o.content){if(s.type!=="tool_result"||s.is_error===!0)continue;let i=this.resolveToolName(s);if(!this.isReadTool(i))continue;n.add(s.tool_use_id);let a=this.committedOutdatedRewrites.get(s.tool_use_id),d=new Set,c=new Set;for(let l of this.getReadLocators(s)){let p=this.toReadLocatorKey(l);if(!this.isOutdatedReadLocator(l,s.tool_use_id))continue;if(c.add(p),!a?.has(p))d.add(p)}if(a){for(let l of a)if(!c.has(l))a.delete(l);if(a.size===0)this.committedOutdatedRewrites.delete(s.tool_use_id)}if(d.size===0)continue;let u=t.get(s.tool_use_id);if(!u)u=new Set,t.set(s.tool_use_id,u);for(let l of d)u.add(l);r+=this.estimateOutdatedReclaimBytes(s.content,d)}}for(let o of this.committedOutdatedRewrites.keys())if(!n.has(o))this.committedOutdatedRewrites.delete(o);if(t.size===0||r<this.minOutdatedRewriteBytes)return;for(let[o,s]of t){let i=this.committedOutdatedRewrites.get(o);if(!i)i=new Set,this.committedOutdatedRewrites.set(o,i);for(let a of s)i.add(a)}}estimateOutdatedReclaimBytes(e,t){let n=this.extractReadLocatorsFromToolResultContent(e),r=n.length>0&&n.every((d)=>t.has(this.toReadLocatorKey(d))),o=(d)=>{let c;try{c=JSON.parse(d)}catch{return r||n.length===0?Te(this.truncateMiddle(d)):0}let u=Array.isArray(c)?c:[c],l=0;for(let p of u){let m=this.extractLocatorFromResultEntry(p);if(m&&t.has(this.toReadLocatorKey(m)))l+=this.providerBoundEntryBytes(p)}return l};if(typeof e==="string")return o(e);let s=new Set(t),i=0;for(let d of e)if(d.type==="text")i+=this.countOutdatedImageEntries(d.text,s);let a=0;for(let d of e)if(d.type==="text")a+=o(d.text);else if(d.type==="image"){if(i>0)i-=1,a+=Te(d.data)}else if(hr(d)){let c=this.extractLocatorFromResultEntry(d);if(c&&t.has(this.toReadLocatorKey(c)))a+=this.providerBoundEntryBytes(d)}else if(d.type==="file"){if(t.has(this.toReadLocatorKey({path:d.path,startLine:null,endLine:null})))a+=Te(this.truncateMiddle(d.content))}return a}providerBoundEntryBytes(e){let t=this.truncateNestedStrings(e);return Te(JSON.stringify(t))}addMissingToolResults(e){let t=this.collectToolResultIds(e),n=[],r=new Map,o=!1,s=()=>{if(r.size===0)return;i(this.createMissingToolResultMessage(r)),r.clear(),o=!0},i=(a)=>{let d=n.at(-1);if(this.shouldMergeUserAfterToolResults(d,a)){n[n.length-1]={...d,content:[...d.content,...this.contentBlocksForUserMerge(a.content)]},o=!0;return}n.push(a)};for(let a of e){if(this.isToolResultOnlyMessage(a)){if(i(this.appendMissingToolResults(a,r)),r.size>0)r.clear(),o=!0;continue}if(Array.isArray(a.content)){let d=a.content.filter((u)=>u.type==="tool_result"),c=a.content.filter((u)=>u.type!=="tool_result");if(d.length>0){let u=this.appendMissingToolResults({...a,role:"user",content:d},r);if(i(u),r.size>0)r.clear();o=!0}if(c.length>0||d.length===0){if(d.length===0)s();let u=d.length>0?{...a,content:c}:a;if(i(u),u.role==="assistant")this.trackMissingToolCalls(u,t,r)}continue}s(),i(a)}return s(),o?n:e}appendMissingToolResults(e,t){if(t.size===0||!Array.isArray(e.content))return e;return{...e,role:"user",content:[...e.content,...this.createMissingToolResultBlocks(t)]}}shouldMergeUserAfterToolResults(e,t){return e?.role==="user"&&t.role==="user"&&this.isToolResultOnlyMessage(e)&&this.contentBlocksForUserMerge(t.content).length>0}contentBlocksForUserMerge(e){return typeof e==="string"?e.length>0?[{type:"text",text:e}]:[]:e}collectToolResultIds(e){let t=new Set;for(let n of e){if(!Array.isArray(n.content))continue;for(let r of n.content)if(r.type==="tool_result")t.add(r.tool_use_id)}return t}isToolResultOnlyMessage(e){return e.role==="user"&&Array.isArray(e.content)&&e.content.length>0&&e.content.every((t)=>t.type==="tool_result")}trackMissingToolCalls(e,t,n){if(!Array.isArray(e.content))return;for(let r of e.content){if(r.type!=="tool_use"||t.has(r.id))continue;n.set(r.id,r.name)}}createMissingToolResultMessage(e){return{role:"user",content:this.createMissingToolResultBlocks(e)}}createMissingToolResultBlocks(e){return Array.from(e,([t,n])=>({type:"tool_result",tool_use_id:t,name:n,content:[{type:"text",text:this.formatMissingToolResultText(n)}],is_error:!0}))}formatMissingToolResultText(e){return e?`${kP} Tool: ${e}.`:kP}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(e){let t=e,n=this.readResultLocatorCache.get(t);if(n===void 0)n=this.extractReadLocatorsFromToolResultContent(e.content),this.readResultLocatorCache.set(t,n);if(n.length>0)return n;return this.readLocatorsByToolUseIdCache.get(e.tool_use_id)??[]}extractLocatorsFromReadToolInput(e){if(!e||typeof e!=="object")return[];let t=e,n=[],r=this.extractLocatorFromReadRequest(t);if(r)n.push(r);if(Array.isArray(t.files))for(let o of t.files){let s=this.extractLocatorFromReadRequest(o);if(s)n.push(s)}if(Array.isArray(t.file_paths)){for(let o of t.file_paths)if(typeof o==="string"&&o.length>0)n.push({path:o,startLine:null,endLine:null})}return this.dedupeReadLocators(n)}extractReadLocatorsFromToolResultContent(e){if(typeof e==="string")return this.tryParseReadLocators(e);let t=[];for(let n of e){if(n.type==="text"){t.push(...this.tryParseReadLocators(n.text));continue}if(hr(n)){let r=this.extractLocatorFromResultEntry(n);if(r)t.push(r)}}return this.dedupeReadLocators(t)}tryParseReadLocators(e){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(e))}catch{return[]}}extractLocatorsFromParsedReadResult(e){if(Array.isArray(e)){let n=[];for(let r of e){let o=this.extractLocatorFromResultEntry(r);if(o)n.push(o)}return this.dedupeReadLocators(n)}let t=this.extractLocatorFromResultEntry(e);return t?[t]:[]}extractLocatorFromReadRequest(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(!n)return;return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)}}extractLocatorFromResultEntry(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(n)return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)};if(typeof t.query==="string"&&t.query.length>0)return this.parseReadQuery(t.query);return}extractPath(e){let t=[e.path,e.file_path,e.filePath];for(let n of t)if(typeof n==="string"&&n.length>0)return n;return}extractLineNumber(e){return typeof e==="number"&&Number.isInteger(e)?e:null}parseReadQuery(e){let t=/^(.*):(\d+)-(EOF|\d+)$/.exec(e);if(!t)return{path:e,startLine:null,endLine:null};return{path:t[1],startLine:Number(t[2]),endLine:t[3]==="EOF"?null:Number(t[3])}}dedupeReadLocators(e){let t=new Map;for(let n of e)t.set(this.toReadLocatorKey(n),n);return Array.from(t.values())}toReadLocatorKey(e){if(this.isFullFileRead(e))return e.path;return`${e.path}:${e.startLine??1}-${e.endLine??"EOF"}`}isFullFileRead(e){return e.startLine==null&&e.endLine==null}isOutdatedReadLocator(e,t){let n=this.latestFullContentOwnerByPathCache.get(e.path);if(n&&n!==t)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(e))!==t}replaceOutdatedReadContent(e,t){let n=new Set(t.map((s)=>this.toReadLocatorKey(s))),r=new Set(t.map((s)=>s.path));if(typeof e==="string")return this.replaceOutdatedInString(e,n)??mo;let o=0;for(let s of e)if(s.type==="text")o+=this.countOutdatedImageEntries(s.text,n);return e.map((s)=>{if(s.type==="file"){if(!r.has(s.path))return s;return{...s,content:mo}}if(s.type==="image"){if(o===0)return s;return o-=1,{type:"text",text:mo}}if(hr(s))return this.replaceOutdatedReadEntry(s,n);if(s.type!=="text")return s;let i=this.replaceOutdatedInString(s.text,n);if(i===null)return{...s,text:mo};return i===s.text?s:{...s,text:i}})}countOutdatedImageEntries(e,t){let n;try{n=JSON.parse(e)}catch{return 0}let r=Array.isArray(n)?n:[n],o=0;for(let s of r){if(!s||typeof s!=="object")continue;let i=s,a=this.extractLocatorFromResultEntry(i);if(!a)continue;if(!t.has(this.toReadLocatorKey(a)))continue;if(i.result==="Successfully read image"||i.content==="Successfully read image")o+=1}return o}replaceOutdatedInString(e,t){let n;try{n=JSON.parse(e)}catch{return null}let r=Array.isArray(n)?n.map((o)=>this.replaceOutdatedReadEntry(o,t)):this.replaceOutdatedReadEntry(n,t);return JSON.stringify(r)}replaceOutdatedReadEntry(e,t){if(!e||typeof e!=="object")return e;let n=this.extractLocatorFromResultEntry(e);if(!n||!t.has(this.toReadLocatorKey(n)))return e;let r={...e};if(typeof r.result==="string")r.result=mo;else if(typeof r.content==="string")r.content=mo;else r.result=mo;return r}isReadTool(e){return!!e&&eq.has(e)}resolveToolName(e){let t=this.toolNameByIdCache.get(e.tool_use_id);if(t!==void 0)return t;return typeof e.name==="string"&&e.name.length>0?e.name.toLowerCase():void 0}truncateToolResultContent(e){if(typeof e==="string")return this.truncateMiddle(e);return e.map((t)=>{if(this.recoveryNotices.has(t))return t;if(t.type==="file"){let n=this.truncateMiddle(t.content);return n===t.content?t:{...t,content:n}}if(t.type==="text"){let n=this.truncateMiddle(t.text);return n===t.text?t:{...t,text:n}}if(hr(t))return this.truncateNestedStrings(t);return t})}truncateNestedStrings(e){if(typeof e==="string")return this.truncateMiddle(e);if(Array.isArray(e)){let t=!1,n=e.map((r)=>{let o=this.truncateNestedStrings(r);if(o!==r)t=!0;return o});return t?n:e}if(e!==null&&typeof e==="object"){if(oh(e))return e;let t=!1,n={};for(let[r,o]of Object.entries(e)){let s=this.truncateNestedStrings(o);if(s!==o)t=!0;n[r]=s}return t?n:e}return e}truncateMiddle(e){return Ra(e,this.maxToolResultChars,PP)}truncateAssistantText(e){if(this.hasRepeatedToolCallMarkup(e))return Ra(e,this.maxAssistantToolMarkupChars,nq);return Ra(e,this.maxAssistantTextChars,tq)}hasRepeatedToolCallMarkup(e){if(e.length<=this.maxAssistantToolMarkupChars)return!1;let t=0;for(let n of e.matchAll(rq))if(t+=1,t>=Zj)return!0;return!1}truncateToTotalTextBudget(e){let t=this.countMessageTextBytes(e);if(t<=this.maxTotalTextBytes)return e;let n=e.map((s)=>{if(!Array.isArray(s.content))return{...s};return{...s,content:s.content.map((i)=>{let a=aq(i);if(i.type==="tool_result"&&a.type==="tool_result"&&Array.isArray(i.content)&&Array.isArray(a.content))i.content.forEach((d,c)=>{if(this.recoveryNotices.has(d))this.recoveryNotices.add(a.content[c])});return a})}}),r=this.collectTruncationCandidates(n),o=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,r.length)));for(let s of r){if(t<=this.maxTotalTextBytes)break;let i=s.byteLength,a=Math.min(s.minBytes,o);if(i<=a)continue;let d=t-this.maxTotalTextBytes,c=Math.max(a,i-d),u=iq(s.get(),c,s.makeMarker);s.set(u),t-=i-Te(u)}return n}countMessageTextBytes(e){let t=0;for(let n of e){if(typeof n.content==="string"){t+=Te(n.content);continue}for(let r of n.content)if(r.type==="text")t+=Te(r.text);else if(r.type==="thinking")t+=Te(r.thinking);else if(r.type==="file")t+=Te(r.content);else if(r.type==="tool_use")t+=Gu(r.input);else if(r.type==="tool_result"){if(typeof r.content==="string")t+=Te(r.content);else for(let o of r.content)if(o.type==="text")t+=Te(o.text);else if(o.type==="file")t+=Te(o.content);else if(hr(o))t+=Gu(o)}}return t}collectTruncationCandidates(e){let t=[],n=[];for(let r of e){if(r.role==="assistant"&&typeof r.content==="string"){t.push({byteLength:Te(r.content),minBytes:CP,makeMarker:IP,get:()=>r.content,set:(o)=>{r.content=o}});continue}if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){Vu(o.input,n);continue}if(r.role==="assistant"&&o.type==="text"){t.push({byteLength:Te(o.text),minBytes:CP,makeMarker:IP,get:()=>o.text,set:(s)=>{o.text=s}});continue}if(o.type!=="tool_result")continue;if(typeof o.content==="string"){t.push({byteLength:Te(o.content),minBytes:Aa,makeMarker:Ea,get:()=>o.content,set:(s)=>{o.content=s}});continue}for(let s of o.content){if(this.recoveryNotices.has(s))continue;if(s.type==="text")t.push({byteLength:Te(s.text),minBytes:Aa,makeMarker:Ea,get:()=>s.text,set:(i)=>{s.text=i}});else if(s.type==="file")t.push({byteLength:Te(s.content),minBytes:Aa,makeMarker:Ea,get:()=>s.content,set:(i)=>{s.content=i}});else if(hr(s))Vu(s,t)}}}return t.sort((r,o)=>o.byteLength-r.byteLength),n.sort((r,o)=>o.byteLength-r.byteLength),[...t,...n]}applyMediaBudget(e){let t=this.resolveMediaBudget();if(t.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&t.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&t.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return e;let n=zj(),r=!1,o=e.map((s)=>{if(!Array.isArray(s.content))return s;let i=!1,a=s.content.map((d)=>{let c=this.applyMediaBudgetToBlock(d,t,n);if(c!==d)i=!0;return c});if(!i)return s;return r=!0,{...s,content:a}});return r?o:e}resolveMediaBudget(){return Kj(this.mediaBudget)}applyMediaBudgetToBlock(e,t,n){if(th(e))return this.limitImageContent(e,t,n);if(e.type!=="tool_result"||typeof e.content==="string")return e;let r=!1,o=e.content.map((s)=>{let i=this.applyMediaBudgetToToolResultEntry(s,t,n);if(i!==s)r=!0;return i});return r?{...e,content:o}:e}applyMediaBudgetToToolResultEntry(e,t,n){if(th(e))return this.limitImageContent(e,t,n);if(hr(e))return this.limitNestedMedia(e,t,n);return e}limitNestedMedia(e,t,n){if(th(e)){let r=this.limitImageContent(e,t,n);return r.type==="text"?r.text:r}if(Array.isArray(e)){let r=!1,o=e.map((s)=>{let i=this.limitNestedMedia(s,t,n);if(i!==s)r=!0;return i});return r?o:e}if(e!==null&&typeof e==="object"){let r=!1,o={};for(let[s,i]of Object.entries(e)){let a=this.limitNestedMedia(i,t,n);if(a!==i)r=!0;o[s]=a}return r?o:e}return e}limitImageContent(e,t,n){if(!xP(e))return{type:"text",text:TP};let r=Gj(e.mediaType,e.data,{maxImageEncodedBytes:t.maxImageEncodedBytes,maxImageDecodedBytes:t.maxImageDecodedBytes,maxTotalMediaBytes:t.maxTotalMediaBytes},n);if(!r.ok)return{type:"text",text:TP};return{...e,data:r.base64,mediaType:r.mediaType}}}var RP=String.raw`[\|\uFF5C]`,rq=new RegExp(String.raw`<\s*(?:${RP}\s*)?DSML\s*(?:${RP}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Te(e){return Buffer.byteLength(e,"utf8")}function AP(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function oq(e){if(e===void 0)return;let t=e.trim().toLowerCase();if(t==="infinity"||t==="disable")return Number.POSITIVE_INFINITY;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:void 0}function Ia(e,t){return typeof e==="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t}function sq(e,t){if(typeof e!=="number"||Number.isNaN(e)||e<0)return t;return Number.isFinite(e)?Math.floor(e):e}function Ra(e,t,n){if(e.length<=t)return e;let r=n(e.length-t),o=Math.max(0,Math.floor((t-r.length)/2)),s=Math.max(0,e.length-o*2),i=n(s),a=Math.max(0,Math.floor((t-i.length)/2)),d=e.slice(0,a),c=a>0?e.slice(-a):"";return`${d}${i}${c}`}function iq(e,t,n){if(Te(e)<=t)return e;let r=0,o=e.length,s="";while(r<=o){let i=r+o>>>1,a=Ra(e,i,n);if(Te(a)<=t)s=a,r=i+1;else o=i-1}return s}function aq(e){if(e.type==="tool_use")return{...e,input:Ju(e.input)};if(e.type!=="tool_result"||typeof e.content==="string")return{...e};return{...e,content:e.content.map((t)=>hr(t)?Ju(t):{...t})}}function hr(e){if(e===null||typeof e!=="object")return!1;let t=e.type;return t!=="text"&&t!=="image"&&t!=="file"}function th(e){return e!==null&&typeof e==="object"&&e.type==="image"}function xP(e){return e!==null&&typeof e==="object"&&e.type==="image"&&typeof e.data==="string"&&typeof e.mediaType==="string"}function oh(e){return xP(e)}function Gu(e){if(typeof e==="string")return Te(e);if(Array.isArray(e)){let t=0;for(let n of e)t+=Gu(n);return t}if(e!==null&&typeof e==="object"){if(oh(e))return 0;let t=0;for(let n of Object.values(e))t+=Gu(n);return t}return 0}function Vu(e,t){if(Array.isArray(e)){e.forEach((n,r)=>{if(typeof n==="string")t.push({byteLength:Te(n),minBytes:Aa,makeMarker:Ea,get:()=>e[r],set:(o)=>{e[r]=o}});else Vu(n,t)});return}if(e!==null&&typeof e==="object"){if(oh(e))return;let n=e;for(let r of Object.keys(n)){let o=n[r];if(typeof o==="string")t.push({byteLength:Te(o),minBytes:Aa,makeMarker:Ea,get:()=>n[r],set:(s)=>{n[r]=s}});else Vu(o,t)}}}function Ju(e){if(Array.isArray(e))return e.map(Ju);if(e!==null&&typeof e==="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=Ju(r);return t}return e}function sh(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class ih{messages=[];conversationId=sh();sessionStarted=!1;constructor(e){if((e?.length??0)>0)this.restore(e??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(e){this.messages.push(e)}appendMessages(e){if(e.length===0)return;this.messages.push(...e)}replaceMessages(e){let t=new Map(e.map((o,s)=>[o.id,s])),n=new Map,r=-1;for(let o of this.messages){let s=o.id?t.get(o.id):void 0;if(s!==void 0)r=s;else if(o.metadata?.displayOnly===!0){let i=n.get(r)??[];i.push(o),n.set(r,i)}}this.messages=[...n.get(-1)??[]];for(let[o,s]of e.entries())this.messages.push(s,...n.get(o)??[])}resetForRun(){this.messages=[],this.conversationId=sh(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=sh(),this.sessionStarted=!1}restore(e){this.messages=[...e],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var yr="0.0.93-nightly.1792117748";var Sr={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:yr,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","proxy-from-env":"^2.1.0","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/proxy-from-env":"^1.0.4","@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function MP(e){let{agentConfig:t}=e,n=dq(t),r=cq(t),o=e.hooks,s=uq(t.maxParallelToolCalls);return{distinctId:t.distinctId,clientName:t.extensionContext?.client?.name,clientVersion:t.extensionContext?.client?.version,clineCoreVersion:yr,sessionId:e.sessionId??t.sessionId,agentId:e.agentId,conversationId:e.conversationId,parentAgentId:e.parentAgentId,agentRole:e.agentRole,systemPrompt:e.systemPrompt??t.systemPrompt,messageModelInfo:r,model:e.model,modelOptions:n,modelTools:t.modelTools,tools:e.tools,hooks:o,prepareTurn:e.prepareTurn,consumePendingUserMessage:t.consumePendingUserMessage,plugins:e.plugins,logger:e.logger??t.logger,telemetry:e.telemetry??t.telemetry,initialMessages:e.initialMessages,completionPolicy:e.completionPolicy===null?void 0:e.completionPolicy??t.completionPolicy,maxIterations:t.maxIterations,toolExecution:s,toolPolicies:t.toolPolicies,toolContextMetadata:e.toolContextMetadata,requestToolApproval:t.requestToolApproval}}function dq(e){let t={};if(e.thinking!==void 0)t.thinking=e.thinking;if(e.reasoningEffort!==void 0)t.reasoningEffort=e.reasoningEffort;if(e.thinkingBudgetTokens!==void 0)t.thinkingBudgetTokens=e.thinkingBudgetTokens;if(e.maxTokensPerTurn!==void 0)t.maxTokensPerTurn=e.maxTokensPerTurn;if(e.temperature!==void 0)t.temperature=e.temperature;if(e.apiTimeoutMs!==void 0)t.apiTimeoutMs=e.apiTimeoutMs;return Object.keys(t).length>0?t:void 0}function cq(e){let t=e.providerConfig?.family;return{id:e.modelId,provider:e.providerId,family:t}}function uq(e){if(e===void 0)return;return e>=2?"parallel":"sequential"}function lq(e){let t={};if(e.providerId!==void 0)t.providerId=e.providerId;if(e.modelId!==void 0)t.modelId=e.modelId;if(e.apiKey!==void 0)t.apiKey=e.apiKey;if(e.baseUrl!==void 0)t.baseUrl=e.baseUrl;if(e.headers!==void 0)t.headers=e.headers;if(e.providerConfig!==void 0)t.providerConfig=e.providerConfig;if(e.thinking===!1)return t.thinking=!1,t.reasoningEffort=null,t.thinkingBudgetTokens=null,t;if(e.thinking===!0)t.thinking=!0,t.reasoningEffort=e.reasoningEffort??null,t.thinkingBudgetTokens=null;else if(e.reasoningEffort!==void 0)t.thinking=!0,t.reasoningEffort=e.reasoningEffort;if(typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0,t.thinkingBudgetTokens=Math.trunc(e.thinkingBudgetTokens);return t}function Ls(e){let t={...e},n=Object.hasOwn(e,"thinking"),r=Object.hasOwn(e,"thinkingBudgetTokens");if(e.thinking===!1||e.thinking===null)return t.reasoningEffort=void 0,t.thinkingBudgetTokens=void 0,t;if(!n&&r&&typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0;return t}function pq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function mq(e){e.lastToolName="",e.lastToolSignature="",e.consecutiveIdenticalCount=0}function ah(e){if(e==null||typeof e!=="object")return e;if(Array.isArray(e))return e.map(ah);let t={};for(let n of Object.keys(e).sort())t[n]=ah(e[n]);return t}function gq(e){if(e==null)return"null";if(typeof e==="string")return e;if(typeof e!=="object")return String(e);try{return JSON.stringify(ah(e))}catch{return String(e)}}function fq(e,t,n,r){if(t===e.lastToolName&&n===e.lastToolSignature)e.consecutiveIdenticalCount++;else e.consecutiveIdenticalCount=1;return e.lastToolName=t,e.lastToolSignature=n,{softWarning:e.consecutiveIdenticalCount===r.softThreshold,hardEscalation:e.consecutiveIdenticalCount>=r.hardThreshold}}var OP={softThreshold:3,hardThreshold:5};class dh{config;state=pq();constructor(e){this.config={softThreshold:e?.softThreshold??OP.softThreshold,hardThreshold:e?.hardThreshold??OP.hardThreshold}}inspect(e){let t=gq(e.input),n=fq(this.state,e.name,t,this.config);if(n.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; stopping to avoid a loop.`};if(n.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){mq(this.state)}}class ch{consecutiveMistakes=0;options;constructor(e){this.options=e}async record(e){let t=this.options.maxConsecutiveMistakes,n=e.forceAtLimit&&t?t:this.consecutiveMistakes+1;this.consecutiveMistakes=n;let r=e.details?.trim()||`consecutive mistake (${e.reason})`;if(this.options.emit({type:"error",error:Error(r),recoverable:!0,iteration:e.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:e.iteration,reason:e.reason,details:e.details,consecutiveMistakes:n,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!t||n<t)return{action:"continue"};let o={iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details};this.options.onLimitTelemetry?.(o);let s=await yq(o,this.options.onLimitReached);if(s.action==="continue"){let i=s.guidance?.trim();if(i)this.options.appendRecoveryNotice(i,e.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:i}}return{action:"stop",reason:s.reason?.trim()||void 0,message:hq({iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details,stopReason:s.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function hq(e){let t=[`Stopped after ${e.consecutiveMistakes}/${e.maxConsecutiveMistakes} consecutive mistakes (${e.reason}) at iteration ${e.iteration}.`],n=e.details?.trim();if(n)t.push(`Error: ${n}`);let r=e.stopReason?.trim();if(r)t.push(`Decision: ${r}`);return t.push("Session state was preserved. Send a new prompt to resume from the latest state."),t.join(" ")}async function yq(e,t){if(!t)return{action:"stop",reason:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`};try{return await t(e)}catch(n){return{action:"stop",reason:n instanceof Error?n.message:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`}}}function Sq(e){switch(e){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return e;default:return}}function bq(e){let t=e.content.filter((n)=>n.type==="text");if(t.length===0)return;return t.map((n)=>n.text).join("")}function vq(e){let t=e.content.filter((n)=>n.type==="reasoning");if(t.length===0)return;return{reasoning:t.map((n)=>n.text).join(""),redacted:t.some((n)=>n.redacted===!0)}}function Tq(e){return e.content.find((t)=>t.type==="tool-result")}function wq(e){switch(e){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Cq(e){if(!e||e.isError!==!0)return;if(typeof e.output==="string")return e.output;if(e.output instanceof Error)return e.output.message;try{return JSON.stringify(e.output)}catch{return String(e.output)}}class uh{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(e){switch(e.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:e.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:e.iteration,hadToolCalls:e.toolCallCount>0,toolCallCount:e.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:e.text,accumulated:e.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:e.text,redacted:e.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:e.media}];case"assistant-message":return this.translateAssistantMessage(e.message);case"tool-started":return this.translateToolStarted(e);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,update:e.update}];case"tool-finished":return this.translateToolFinished(e);case"usage-updated":return this.translateUsage(e.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:e.message,reason:Sq(e.metadata?.reason),metadata:e.metadata}];case"run-finished":return this.translateRunFinished(e.result);case"run-failed":return[{type:"error",error:e.error,errorClass:e.errorClass,recoverable:!1,iteration:e.snapshot.iteration}];default:return e}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(e){let t=[],n=bq(e);if(n!==void 0)t.push({type:"content_end",contentType:"text",text:n});let r=vq(e);if(r!==void 0)t.push({type:"content_end",contentType:"reasoning",reasoning:r.reasoning});return t}translateToolStarted(e){return this.toolStartedAt.set(e.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,execution:e.toolCall.execution}]}translateToolFinished(e){let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=t===void 0?void 0:Date.now()-t;this.toolStartedAt.delete(e.toolCall.toolCallId);let r=Tq(e.message),o=r?.output,s=Cq(r);return[{type:"content_end",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,output:o,error:s,durationMs:n,execution:e.toolCall.execution}]}translateUsage(e){let t=e.inputTokens-this.lastUsage.inputTokens,n=e.outputTokens-this.lastUsage.outputTokens,r=e.cacheReadTokens-this.lastUsage.cacheReadTokens,o=e.cacheWriteTokens-this.lastUsage.cacheWriteTokens,s=this.lastUsage.totalCost??0,a=(e.totalCost??0)-s,d=this.lastUsage.reasoningTokenCount??0,u=(e.reasoningTokenCount??0)-d;return this.lastUsage={inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,totalCost:e.totalCost,reasoningTokenCount:e.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,t),outputTokens:Math.max(0,n),cacheReadTokens:r===0?void 0:Math.max(0,r),cacheWriteTokens:o===0?void 0:Math.max(0,o),cost:a===0?void 0:a,reasoningTokenCount:u===0?void 0:Math.max(0,u),totalInputTokens:e.inputTokens,totalOutputTokens:e.outputTokens,totalCacheReadTokens:e.cacheReadTokens===0?void 0:e.cacheReadTokens,totalCacheWriteTokens:e.cacheWriteTokens===0?void 0:e.cacheWriteTokens,totalCost:e.totalCost}]}translateRunFinished(e){let t={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens===0?void 0:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens===0?void 0:e.usage.cacheWriteTokens,totalCost:e.usage.totalCost};return[{type:"done",reason:wq(e.status),text:e.outputText,iterations:e.iterations,usage:t}]}}var Lq="session_run_in_progress";class HP extends Error{agentId;code=Lq;constructor(e){super(`SessionRuntime.shutdown called while a run is in progress${e?` (agentId=${e})`:""}`);this.agentId=e;this.name="SessionRunInProgressError"}}function Nq(e){if(typeof e==="string")return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}async function Dq(e){let n=(typeof e.content==="function"?await e.content():e.content).trim();return n.length>0?n:void 0}function Uq(e,t){let n=e.trim(),r=t.map((o)=>o.trim()).filter(Boolean).join(`
201
+ `;function EP(e=process.env){return{maxToolResultChars:AP(e[eh.maxToolResultChars]),maxTotalTextBytes:AP(e[eh.maxTotalTextBytes]),minOutdatedRewriteBytes:oq(e[eh.minOutdatedRewriteBytes])}}class rh{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(e={}){this.getToolResultRecovery=e.getToolResultRecovery,this.maxToolResultChars=Ia(e.maxToolResultChars,nh),this.maxFileContentChars=Ia(e.maxFileContentChars,Vj),this.maxTotalTextBytes=Ia(e.maxTotalTextBytes,Jj),this.mediaBudget=e.mediaBudget??{},this.maxAssistantTextChars=Ia(e.maxAssistantTextChars,Xj),this.maxAssistantToolMarkupChars=Ia(e.maxAssistantToolMarkupChars,Yj),this.minOutdatedRewriteBytes=sq(e.minOutdatedRewriteBytes,Qj)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(e){this.recoveryNoticeBytes=0,this.reindex(e),this.commitOutdatedRewrites(e);let n=this.addMissingToolResults(e).map((o)=>{if(!Array.isArray(o.content)){if(o.role==="user"&&typeof o.content==="string"){let a=wP(o.content);if(a!==o.content)return{...o,content:a}}if(o.role==="assistant"&&typeof o.content==="string"){let a=this.truncateAssistantText(o.content);if(a!==o.content)return{...o,content:a}}return o}let s=!1,i=o.content.map((a)=>{let d=this.transformBlock(a,o.role);if(d!==a)s=!0;return d});return s?{...o,content:i}:o}),r=this.applyMediaBudget(n);return this.truncateToTotalTextBudget(r)}transformBlock(e,t){if(t==="user"&&e.type==="text"&&typeof e.text==="string"){let s=wP(e.text);if(s!==e.text)return{...e,text:s};return e}if(t==="assistant"&&e.type==="text"&&typeof e.text==="string"){let s=this.truncateAssistantText(e.text);return s===e.text?e:{...e,text:s}}if(e.type==="file"){let s=Ra(e.content,this.maxFileContentChars,PP);return s===e.content?e:{...e,content:s}}if(e.type!=="tool_result")return e;let n=this.resolveToolName(e),r=this.getToolResultRecovery?.({...e,name:n??e.name});if(r){let{text:s,images:i}=Nu(e.content);if(typeof s==="string"&&s.length>this.maxToolResultChars){let a=[{type:"text",text:this.truncateMiddle(s)},...i];if(r.uri){let d={type:"text",text:`Full result is temporarily saved to ${r.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},c=Te(d.text);if(this.recoveryNoticeBytes+c<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=c,this.recoveryNotices.add(d),a.push(d)}return{...e,content:a}}}let o=e.content;if(this.isReadTool(n)&&e.is_error!==!0){let s=this.committedOutdatedRewrites.get(e.tool_use_id);if(s&&s.size>0){let a=this.getReadLocators(e).filter((d)=>s.has(this.toReadLocatorKey(d))&&this.isOutdatedReadLocator(d,e.tool_use_id));if(a.length>0)o=this.replaceOutdatedReadContent(o,a)}}return o=this.truncateToolResultContent(o),o===e.content?e:{...e,content:o}}reindex(e){let t=this.indexedMessageCount===0||e.length>=this.indexedMessageCount&&e[this.indexedMessageCount-1]===this.indexedTailRef;if(e.length<this.indexedMessageCount||!t)this.resetIndexes();for(let n=this.indexedMessageCount;n<e.length;n++){let r=e[n];if(!Array.isArray(r.content))continue;for(let o=0;o<r.content.length;o++){let s=r.content[o];if(s.type==="file")this.latestFullContentOwnerByPathCache.set(s.path,`file:${n}:${o}`);else if(s.type==="tool_use"){let i=s.name.toLowerCase();if(this.toolNameByIdCache.set(s.id,i),this.isReadTool(i)){let a=this.extractLocatorsFromReadToolInput(s.input);if(a.length>0)this.readLocatorsByToolUseIdCache.set(s.id,a)}}else if(s.type==="tool_result"){let i=this.resolveToolName(s);if(!this.isReadTool(i)||s.is_error===!0)continue;let a=this.getReadLocators(s);for(let d of a)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(d),s.tool_use_id),this.isFullFileRead(d))this.latestFullContentOwnerByPathCache.set(d.path,s.tool_use_id)}}}this.indexedMessageCount=e.length,this.indexedTailRef=e.length>0?e[e.length-1]:void 0}commitOutdatedRewrites(e){let t=new Map,n=new Set,r=0;for(let o of e){if(!Array.isArray(o.content))continue;for(let s of o.content){if(s.type!=="tool_result"||s.is_error===!0)continue;let i=this.resolveToolName(s);if(!this.isReadTool(i))continue;n.add(s.tool_use_id);let a=this.committedOutdatedRewrites.get(s.tool_use_id),d=new Set,c=new Set;for(let l of this.getReadLocators(s)){let p=this.toReadLocatorKey(l);if(!this.isOutdatedReadLocator(l,s.tool_use_id))continue;if(c.add(p),!a?.has(p))d.add(p)}if(a){for(let l of a)if(!c.has(l))a.delete(l);if(a.size===0)this.committedOutdatedRewrites.delete(s.tool_use_id)}if(d.size===0)continue;let u=t.get(s.tool_use_id);if(!u)u=new Set,t.set(s.tool_use_id,u);for(let l of d)u.add(l);r+=this.estimateOutdatedReclaimBytes(s.content,d)}}for(let o of this.committedOutdatedRewrites.keys())if(!n.has(o))this.committedOutdatedRewrites.delete(o);if(t.size===0||r<this.minOutdatedRewriteBytes)return;for(let[o,s]of t){let i=this.committedOutdatedRewrites.get(o);if(!i)i=new Set,this.committedOutdatedRewrites.set(o,i);for(let a of s)i.add(a)}}estimateOutdatedReclaimBytes(e,t){let n=this.extractReadLocatorsFromToolResultContent(e),r=n.length>0&&n.every((d)=>t.has(this.toReadLocatorKey(d))),o=(d)=>{let c;try{c=JSON.parse(d)}catch{return r||n.length===0?Te(this.truncateMiddle(d)):0}let u=Array.isArray(c)?c:[c],l=0;for(let p of u){let m=this.extractLocatorFromResultEntry(p);if(m&&t.has(this.toReadLocatorKey(m)))l+=this.providerBoundEntryBytes(p)}return l};if(typeof e==="string")return o(e);let s=new Set(t),i=0;for(let d of e)if(d.type==="text")i+=this.countOutdatedImageEntries(d.text,s);let a=0;for(let d of e)if(d.type==="text")a+=o(d.text);else if(d.type==="image"){if(i>0)i-=1,a+=Te(d.data)}else if(hr(d)){let c=this.extractLocatorFromResultEntry(d);if(c&&t.has(this.toReadLocatorKey(c)))a+=this.providerBoundEntryBytes(d)}else if(d.type==="file"){if(t.has(this.toReadLocatorKey({path:d.path,startLine:null,endLine:null})))a+=Te(this.truncateMiddle(d.content))}return a}providerBoundEntryBytes(e){let t=this.truncateNestedStrings(e);return Te(JSON.stringify(t))}addMissingToolResults(e){let t=this.collectToolResultIds(e),n=[],r=new Map,o=!1,s=()=>{if(r.size===0)return;i(this.createMissingToolResultMessage(r)),r.clear(),o=!0},i=(a)=>{let d=n.at(-1);if(this.shouldMergeUserAfterToolResults(d,a)){n[n.length-1]={...d,content:[...d.content,...this.contentBlocksForUserMerge(a.content)]},o=!0;return}n.push(a)};for(let a of e){if(this.isToolResultOnlyMessage(a)){if(i(this.appendMissingToolResults(a,r)),r.size>0)r.clear(),o=!0;continue}if(Array.isArray(a.content)){let d=a.content.filter((u)=>u.type==="tool_result"),c=a.content.filter((u)=>u.type!=="tool_result");if(d.length>0){let u=this.appendMissingToolResults({...a,role:"user",content:d},r);if(i(u),r.size>0)r.clear();o=!0}if(c.length>0||d.length===0){if(d.length===0)s();let u=d.length>0?{...a,content:c}:a;if(i(u),u.role==="assistant")this.trackMissingToolCalls(u,t,r)}continue}s(),i(a)}return s(),o?n:e}appendMissingToolResults(e,t){if(t.size===0||!Array.isArray(e.content))return e;return{...e,role:"user",content:[...e.content,...this.createMissingToolResultBlocks(t)]}}shouldMergeUserAfterToolResults(e,t){return e?.role==="user"&&t.role==="user"&&this.isToolResultOnlyMessage(e)&&this.contentBlocksForUserMerge(t.content).length>0}contentBlocksForUserMerge(e){return typeof e==="string"?e.length>0?[{type:"text",text:e}]:[]:e}collectToolResultIds(e){let t=new Set;for(let n of e){if(!Array.isArray(n.content))continue;for(let r of n.content)if(r.type==="tool_result")t.add(r.tool_use_id)}return t}isToolResultOnlyMessage(e){return e.role==="user"&&Array.isArray(e.content)&&e.content.length>0&&e.content.every((t)=>t.type==="tool_result")}trackMissingToolCalls(e,t,n){if(!Array.isArray(e.content))return;for(let r of e.content){if(r.type!=="tool_use"||t.has(r.id))continue;n.set(r.id,r.name)}}createMissingToolResultMessage(e){return{role:"user",content:this.createMissingToolResultBlocks(e)}}createMissingToolResultBlocks(e){return Array.from(e,([t,n])=>({type:"tool_result",tool_use_id:t,name:n,content:[{type:"text",text:this.formatMissingToolResultText(n)}],is_error:!0}))}formatMissingToolResultText(e){return e?`${kP} Tool: ${e}.`:kP}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(e){let t=e,n=this.readResultLocatorCache.get(t);if(n===void 0)n=this.extractReadLocatorsFromToolResultContent(e.content),this.readResultLocatorCache.set(t,n);if(n.length>0)return n;return this.readLocatorsByToolUseIdCache.get(e.tool_use_id)??[]}extractLocatorsFromReadToolInput(e){if(!e||typeof e!=="object")return[];let t=e,n=[],r=this.extractLocatorFromReadRequest(t);if(r)n.push(r);if(Array.isArray(t.files))for(let o of t.files){let s=this.extractLocatorFromReadRequest(o);if(s)n.push(s)}if(Array.isArray(t.file_paths)){for(let o of t.file_paths)if(typeof o==="string"&&o.length>0)n.push({path:o,startLine:null,endLine:null})}return this.dedupeReadLocators(n)}extractReadLocatorsFromToolResultContent(e){if(typeof e==="string")return this.tryParseReadLocators(e);let t=[];for(let n of e){if(n.type==="text"){t.push(...this.tryParseReadLocators(n.text));continue}if(hr(n)){let r=this.extractLocatorFromResultEntry(n);if(r)t.push(r)}}return this.dedupeReadLocators(t)}tryParseReadLocators(e){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(e))}catch{return[]}}extractLocatorsFromParsedReadResult(e){if(Array.isArray(e)){let n=[];for(let r of e){let o=this.extractLocatorFromResultEntry(r);if(o)n.push(o)}return this.dedupeReadLocators(n)}let t=this.extractLocatorFromResultEntry(e);return t?[t]:[]}extractLocatorFromReadRequest(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(!n)return;return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)}}extractLocatorFromResultEntry(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(n)return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)};if(typeof t.query==="string"&&t.query.length>0)return this.parseReadQuery(t.query);return}extractPath(e){let t=[e.path,e.file_path,e.filePath];for(let n of t)if(typeof n==="string"&&n.length>0)return n;return}extractLineNumber(e){return typeof e==="number"&&Number.isInteger(e)?e:null}parseReadQuery(e){let t=/^(.*):(\d+)-(EOF|\d+)$/.exec(e);if(!t)return{path:e,startLine:null,endLine:null};return{path:t[1],startLine:Number(t[2]),endLine:t[3]==="EOF"?null:Number(t[3])}}dedupeReadLocators(e){let t=new Map;for(let n of e)t.set(this.toReadLocatorKey(n),n);return Array.from(t.values())}toReadLocatorKey(e){if(this.isFullFileRead(e))return e.path;return`${e.path}:${e.startLine??1}-${e.endLine??"EOF"}`}isFullFileRead(e){return e.startLine==null&&e.endLine==null}isOutdatedReadLocator(e,t){let n=this.latestFullContentOwnerByPathCache.get(e.path);if(n&&n!==t)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(e))!==t}replaceOutdatedReadContent(e,t){let n=new Set(t.map((s)=>this.toReadLocatorKey(s))),r=new Set(t.map((s)=>s.path));if(typeof e==="string")return this.replaceOutdatedInString(e,n)??mo;let o=0;for(let s of e)if(s.type==="text")o+=this.countOutdatedImageEntries(s.text,n);return e.map((s)=>{if(s.type==="file"){if(!r.has(s.path))return s;return{...s,content:mo}}if(s.type==="image"){if(o===0)return s;return o-=1,{type:"text",text:mo}}if(hr(s))return this.replaceOutdatedReadEntry(s,n);if(s.type!=="text")return s;let i=this.replaceOutdatedInString(s.text,n);if(i===null)return{...s,text:mo};return i===s.text?s:{...s,text:i}})}countOutdatedImageEntries(e,t){let n;try{n=JSON.parse(e)}catch{return 0}let r=Array.isArray(n)?n:[n],o=0;for(let s of r){if(!s||typeof s!=="object")continue;let i=s,a=this.extractLocatorFromResultEntry(i);if(!a)continue;if(!t.has(this.toReadLocatorKey(a)))continue;if(i.result==="Successfully read image"||i.content==="Successfully read image")o+=1}return o}replaceOutdatedInString(e,t){let n;try{n=JSON.parse(e)}catch{return null}let r=Array.isArray(n)?n.map((o)=>this.replaceOutdatedReadEntry(o,t)):this.replaceOutdatedReadEntry(n,t);return JSON.stringify(r)}replaceOutdatedReadEntry(e,t){if(!e||typeof e!=="object")return e;let n=this.extractLocatorFromResultEntry(e);if(!n||!t.has(this.toReadLocatorKey(n)))return e;let r={...e};if(typeof r.result==="string")r.result=mo;else if(typeof r.content==="string")r.content=mo;else r.result=mo;return r}isReadTool(e){return!!e&&eq.has(e)}resolveToolName(e){let t=this.toolNameByIdCache.get(e.tool_use_id);if(t!==void 0)return t;return typeof e.name==="string"&&e.name.length>0?e.name.toLowerCase():void 0}truncateToolResultContent(e){if(typeof e==="string")return this.truncateMiddle(e);return e.map((t)=>{if(this.recoveryNotices.has(t))return t;if(t.type==="file"){let n=this.truncateMiddle(t.content);return n===t.content?t:{...t,content:n}}if(t.type==="text"){let n=this.truncateMiddle(t.text);return n===t.text?t:{...t,text:n}}if(hr(t))return this.truncateNestedStrings(t);return t})}truncateNestedStrings(e){if(typeof e==="string")return this.truncateMiddle(e);if(Array.isArray(e)){let t=!1,n=e.map((r)=>{let o=this.truncateNestedStrings(r);if(o!==r)t=!0;return o});return t?n:e}if(e!==null&&typeof e==="object"){if(oh(e))return e;let t=!1,n={};for(let[r,o]of Object.entries(e)){let s=this.truncateNestedStrings(o);if(s!==o)t=!0;n[r]=s}return t?n:e}return e}truncateMiddle(e){return Ra(e,this.maxToolResultChars,PP)}truncateAssistantText(e){if(this.hasRepeatedToolCallMarkup(e))return Ra(e,this.maxAssistantToolMarkupChars,nq);return Ra(e,this.maxAssistantTextChars,tq)}hasRepeatedToolCallMarkup(e){if(e.length<=this.maxAssistantToolMarkupChars)return!1;let t=0;for(let n of e.matchAll(rq))if(t+=1,t>=Zj)return!0;return!1}truncateToTotalTextBudget(e){let t=this.countMessageTextBytes(e);if(t<=this.maxTotalTextBytes)return e;let n=e.map((s)=>{if(!Array.isArray(s.content))return{...s};return{...s,content:s.content.map((i)=>{let a=aq(i);if(i.type==="tool_result"&&a.type==="tool_result"&&Array.isArray(i.content)&&Array.isArray(a.content))i.content.forEach((d,c)=>{if(this.recoveryNotices.has(d))this.recoveryNotices.add(a.content[c])});return a})}}),r=this.collectTruncationCandidates(n),o=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,r.length)));for(let s of r){if(t<=this.maxTotalTextBytes)break;let i=s.byteLength,a=Math.min(s.minBytes,o);if(i<=a)continue;let d=t-this.maxTotalTextBytes,c=Math.max(a,i-d),u=iq(s.get(),c,s.makeMarker);s.set(u),t-=i-Te(u)}return n}countMessageTextBytes(e){let t=0;for(let n of e){if(typeof n.content==="string"){t+=Te(n.content);continue}for(let r of n.content)if(r.type==="text")t+=Te(r.text);else if(r.type==="thinking")t+=Te(r.thinking);else if(r.type==="file")t+=Te(r.content);else if(r.type==="tool_use")t+=Gu(r.input);else if(r.type==="tool_result"){if(typeof r.content==="string")t+=Te(r.content);else for(let o of r.content)if(o.type==="text")t+=Te(o.text);else if(o.type==="file")t+=Te(o.content);else if(hr(o))t+=Gu(o)}}return t}collectTruncationCandidates(e){let t=[],n=[];for(let r of e){if(r.role==="assistant"&&typeof r.content==="string"){t.push({byteLength:Te(r.content),minBytes:CP,makeMarker:IP,get:()=>r.content,set:(o)=>{r.content=o}});continue}if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){Vu(o.input,n);continue}if(r.role==="assistant"&&o.type==="text"){t.push({byteLength:Te(o.text),minBytes:CP,makeMarker:IP,get:()=>o.text,set:(s)=>{o.text=s}});continue}if(o.type!=="tool_result")continue;if(typeof o.content==="string"){t.push({byteLength:Te(o.content),minBytes:Aa,makeMarker:Ea,get:()=>o.content,set:(s)=>{o.content=s}});continue}for(let s of o.content){if(this.recoveryNotices.has(s))continue;if(s.type==="text")t.push({byteLength:Te(s.text),minBytes:Aa,makeMarker:Ea,get:()=>s.text,set:(i)=>{s.text=i}});else if(s.type==="file")t.push({byteLength:Te(s.content),minBytes:Aa,makeMarker:Ea,get:()=>s.content,set:(i)=>{s.content=i}});else if(hr(s))Vu(s,t)}}}return t.sort((r,o)=>o.byteLength-r.byteLength),n.sort((r,o)=>o.byteLength-r.byteLength),[...t,...n]}applyMediaBudget(e){let t=this.resolveMediaBudget();if(t.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&t.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&t.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return e;let n=zj(),r=!1,o=e.map((s)=>{if(!Array.isArray(s.content))return s;let i=!1,a=s.content.map((d)=>{let c=this.applyMediaBudgetToBlock(d,t,n);if(c!==d)i=!0;return c});if(!i)return s;return r=!0,{...s,content:a}});return r?o:e}resolveMediaBudget(){return Kj(this.mediaBudget)}applyMediaBudgetToBlock(e,t,n){if(th(e))return this.limitImageContent(e,t,n);if(e.type!=="tool_result"||typeof e.content==="string")return e;let r=!1,o=e.content.map((s)=>{let i=this.applyMediaBudgetToToolResultEntry(s,t,n);if(i!==s)r=!0;return i});return r?{...e,content:o}:e}applyMediaBudgetToToolResultEntry(e,t,n){if(th(e))return this.limitImageContent(e,t,n);if(hr(e))return this.limitNestedMedia(e,t,n);return e}limitNestedMedia(e,t,n){if(th(e)){let r=this.limitImageContent(e,t,n);return r.type==="text"?r.text:r}if(Array.isArray(e)){let r=!1,o=e.map((s)=>{let i=this.limitNestedMedia(s,t,n);if(i!==s)r=!0;return i});return r?o:e}if(e!==null&&typeof e==="object"){let r=!1,o={};for(let[s,i]of Object.entries(e)){let a=this.limitNestedMedia(i,t,n);if(a!==i)r=!0;o[s]=a}return r?o:e}return e}limitImageContent(e,t,n){if(!xP(e))return{type:"text",text:TP};let r=Gj(e.mediaType,e.data,{maxImageEncodedBytes:t.maxImageEncodedBytes,maxImageDecodedBytes:t.maxImageDecodedBytes,maxTotalMediaBytes:t.maxTotalMediaBytes},n);if(!r.ok)return{type:"text",text:TP};return{...e,data:r.base64,mediaType:r.mediaType}}}var RP=String.raw`[\|\uFF5C]`,rq=new RegExp(String.raw`<\s*(?:${RP}\s*)?DSML\s*(?:${RP}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Te(e){return Buffer.byteLength(e,"utf8")}function AP(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function oq(e){if(e===void 0)return;let t=e.trim().toLowerCase();if(t==="infinity"||t==="disable")return Number.POSITIVE_INFINITY;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:void 0}function Ia(e,t){return typeof e==="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t}function sq(e,t){if(typeof e!=="number"||Number.isNaN(e)||e<0)return t;return Number.isFinite(e)?Math.floor(e):e}function Ra(e,t,n){if(e.length<=t)return e;let r=n(e.length-t),o=Math.max(0,Math.floor((t-r.length)/2)),s=Math.max(0,e.length-o*2),i=n(s),a=Math.max(0,Math.floor((t-i.length)/2)),d=e.slice(0,a),c=a>0?e.slice(-a):"";return`${d}${i}${c}`}function iq(e,t,n){if(Te(e)<=t)return e;let r=0,o=e.length,s="";while(r<=o){let i=r+o>>>1,a=Ra(e,i,n);if(Te(a)<=t)s=a,r=i+1;else o=i-1}return s}function aq(e){if(e.type==="tool_use")return{...e,input:Ju(e.input)};if(e.type!=="tool_result"||typeof e.content==="string")return{...e};return{...e,content:e.content.map((t)=>hr(t)?Ju(t):{...t})}}function hr(e){if(e===null||typeof e!=="object")return!1;let t=e.type;return t!=="text"&&t!=="image"&&t!=="file"}function th(e){return e!==null&&typeof e==="object"&&e.type==="image"}function xP(e){return e!==null&&typeof e==="object"&&e.type==="image"&&typeof e.data==="string"&&typeof e.mediaType==="string"}function oh(e){return xP(e)}function Gu(e){if(typeof e==="string")return Te(e);if(Array.isArray(e)){let t=0;for(let n of e)t+=Gu(n);return t}if(e!==null&&typeof e==="object"){if(oh(e))return 0;let t=0;for(let n of Object.values(e))t+=Gu(n);return t}return 0}function Vu(e,t){if(Array.isArray(e)){e.forEach((n,r)=>{if(typeof n==="string")t.push({byteLength:Te(n),minBytes:Aa,makeMarker:Ea,get:()=>e[r],set:(o)=>{e[r]=o}});else Vu(n,t)});return}if(e!==null&&typeof e==="object"){if(oh(e))return;let n=e;for(let r of Object.keys(n)){let o=n[r];if(typeof o==="string")t.push({byteLength:Te(o),minBytes:Aa,makeMarker:Ea,get:()=>n[r],set:(s)=>{n[r]=s}});else Vu(o,t)}}}function Ju(e){if(Array.isArray(e))return e.map(Ju);if(e!==null&&typeof e==="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=Ju(r);return t}return e}function sh(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class ih{messages=[];conversationId=sh();sessionStarted=!1;constructor(e){if((e?.length??0)>0)this.restore(e??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(e){this.messages.push(e)}appendMessages(e){if(e.length===0)return;this.messages.push(...e)}replaceMessages(e){let t=new Map(e.map((o,s)=>[o.id,s])),n=new Map,r=-1;for(let o of this.messages){let s=o.id?t.get(o.id):void 0;if(s!==void 0)r=s;else if(o.metadata?.displayOnly===!0){let i=n.get(r)??[];i.push(o),n.set(r,i)}}this.messages=[...n.get(-1)??[]];for(let[o,s]of e.entries())this.messages.push(s,...n.get(o)??[])}resetForRun(){this.messages=[],this.conversationId=sh(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=sh(),this.sessionStarted=!1}restore(e){this.messages=[...e],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var yr="0.0.94";var Sr={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:yr,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","proxy-from-env":"^2.1.0","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/proxy-from-env":"^1.0.4","@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function MP(e){let{agentConfig:t}=e,n=dq(t),r=cq(t),o=e.hooks,s=uq(t.maxParallelToolCalls);return{distinctId:t.distinctId,clientName:t.extensionContext?.client?.name,clientVersion:t.extensionContext?.client?.version,clineCoreVersion:yr,sessionId:e.sessionId??t.sessionId,agentId:e.agentId,conversationId:e.conversationId,parentAgentId:e.parentAgentId,agentRole:e.agentRole,systemPrompt:e.systemPrompt??t.systemPrompt,messageModelInfo:r,model:e.model,modelOptions:n,modelTools:t.modelTools,tools:e.tools,hooks:o,prepareTurn:e.prepareTurn,consumePendingUserMessage:t.consumePendingUserMessage,plugins:e.plugins,logger:e.logger??t.logger,telemetry:e.telemetry??t.telemetry,initialMessages:e.initialMessages,completionPolicy:e.completionPolicy===null?void 0:e.completionPolicy??t.completionPolicy,maxIterations:t.maxIterations,toolExecution:s,toolPolicies:t.toolPolicies,toolContextMetadata:e.toolContextMetadata,requestToolApproval:t.requestToolApproval}}function dq(e){let t={};if(e.thinking!==void 0)t.thinking=e.thinking;if(e.reasoningEffort!==void 0)t.reasoningEffort=e.reasoningEffort;if(e.thinkingBudgetTokens!==void 0)t.thinkingBudgetTokens=e.thinkingBudgetTokens;if(e.maxTokensPerTurn!==void 0)t.maxTokensPerTurn=e.maxTokensPerTurn;if(e.temperature!==void 0)t.temperature=e.temperature;if(e.apiTimeoutMs!==void 0)t.apiTimeoutMs=e.apiTimeoutMs;return Object.keys(t).length>0?t:void 0}function cq(e){let t=e.providerConfig?.family;return{id:e.modelId,provider:e.providerId,family:t}}function uq(e){if(e===void 0)return;return e>=2?"parallel":"sequential"}function lq(e){let t={};if(e.providerId!==void 0)t.providerId=e.providerId;if(e.modelId!==void 0)t.modelId=e.modelId;if(e.apiKey!==void 0)t.apiKey=e.apiKey;if(e.baseUrl!==void 0)t.baseUrl=e.baseUrl;if(e.headers!==void 0)t.headers=e.headers;if(e.providerConfig!==void 0)t.providerConfig=e.providerConfig;if(e.thinking===!1)return t.thinking=!1,t.reasoningEffort=null,t.thinkingBudgetTokens=null,t;if(e.thinking===!0)t.thinking=!0,t.reasoningEffort=e.reasoningEffort??null,t.thinkingBudgetTokens=null;else if(e.reasoningEffort!==void 0)t.thinking=!0,t.reasoningEffort=e.reasoningEffort;if(typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0,t.thinkingBudgetTokens=Math.trunc(e.thinkingBudgetTokens);return t}function Ls(e){let t={...e},n=Object.hasOwn(e,"thinking"),r=Object.hasOwn(e,"thinkingBudgetTokens");if(e.thinking===!1||e.thinking===null)return t.reasoningEffort=void 0,t.thinkingBudgetTokens=void 0,t;if(!n&&r&&typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0;return t}function pq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function mq(e){e.lastToolName="",e.lastToolSignature="",e.consecutiveIdenticalCount=0}function ah(e){if(e==null||typeof e!=="object")return e;if(Array.isArray(e))return e.map(ah);let t={};for(let n of Object.keys(e).sort())t[n]=ah(e[n]);return t}function gq(e){if(e==null)return"null";if(typeof e==="string")return e;if(typeof e!=="object")return String(e);try{return JSON.stringify(ah(e))}catch{return String(e)}}function fq(e,t,n,r){if(t===e.lastToolName&&n===e.lastToolSignature)e.consecutiveIdenticalCount++;else e.consecutiveIdenticalCount=1;return e.lastToolName=t,e.lastToolSignature=n,{softWarning:e.consecutiveIdenticalCount===r.softThreshold,hardEscalation:e.consecutiveIdenticalCount>=r.hardThreshold}}var OP={softThreshold:3,hardThreshold:5};class dh{config;state=pq();constructor(e){this.config={softThreshold:e?.softThreshold??OP.softThreshold,hardThreshold:e?.hardThreshold??OP.hardThreshold}}inspect(e){let t=gq(e.input),n=fq(this.state,e.name,t,this.config);if(n.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; stopping to avoid a loop.`};if(n.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){mq(this.state)}}class ch{consecutiveMistakes=0;options;constructor(e){this.options=e}async record(e){let t=this.options.maxConsecutiveMistakes,n=e.forceAtLimit&&t?t:this.consecutiveMistakes+1;this.consecutiveMistakes=n;let r=e.details?.trim()||`consecutive mistake (${e.reason})`;if(this.options.emit({type:"error",error:Error(r),recoverable:!0,iteration:e.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:e.iteration,reason:e.reason,details:e.details,consecutiveMistakes:n,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!t||n<t)return{action:"continue"};let o={iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details};this.options.onLimitTelemetry?.(o);let s=await yq(o,this.options.onLimitReached);if(s.action==="continue"){let i=s.guidance?.trim();if(i)this.options.appendRecoveryNotice(i,e.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:i}}return{action:"stop",reason:s.reason?.trim()||void 0,message:hq({iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details,stopReason:s.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function hq(e){let t=[`Stopped after ${e.consecutiveMistakes}/${e.maxConsecutiveMistakes} consecutive mistakes (${e.reason}) at iteration ${e.iteration}.`],n=e.details?.trim();if(n)t.push(`Error: ${n}`);let r=e.stopReason?.trim();if(r)t.push(`Decision: ${r}`);return t.push("Session state was preserved. Send a new prompt to resume from the latest state."),t.join(" ")}async function yq(e,t){if(!t)return{action:"stop",reason:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`};try{return await t(e)}catch(n){return{action:"stop",reason:n instanceof Error?n.message:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`}}}function Sq(e){switch(e){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return e;default:return}}function bq(e){let t=e.content.filter((n)=>n.type==="text");if(t.length===0)return;return t.map((n)=>n.text).join("")}function vq(e){let t=e.content.filter((n)=>n.type==="reasoning");if(t.length===0)return;return{reasoning:t.map((n)=>n.text).join(""),redacted:t.some((n)=>n.redacted===!0)}}function Tq(e){return e.content.find((t)=>t.type==="tool-result")}function wq(e){switch(e){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Cq(e){if(!e||e.isError!==!0)return;if(typeof e.output==="string")return e.output;if(e.output instanceof Error)return e.output.message;try{return JSON.stringify(e.output)}catch{return String(e.output)}}class uh{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(e){switch(e.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:e.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:e.iteration,hadToolCalls:e.toolCallCount>0,toolCallCount:e.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:e.text,accumulated:e.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:e.text,redacted:e.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:e.media}];case"assistant-message":return this.translateAssistantMessage(e.message);case"tool-started":return this.translateToolStarted(e);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,update:e.update}];case"tool-finished":return this.translateToolFinished(e);case"usage-updated":return this.translateUsage(e.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:e.message,reason:Sq(e.metadata?.reason),metadata:e.metadata}];case"run-finished":return this.translateRunFinished(e.result);case"run-failed":return[{type:"error",error:e.error,errorClass:e.errorClass,recoverable:!1,iteration:e.snapshot.iteration}];default:return e}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(e){let t=[],n=bq(e);if(n!==void 0)t.push({type:"content_end",contentType:"text",text:n});let r=vq(e);if(r!==void 0)t.push({type:"content_end",contentType:"reasoning",reasoning:r.reasoning});return t}translateToolStarted(e){return this.toolStartedAt.set(e.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,execution:e.toolCall.execution}]}translateToolFinished(e){let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=t===void 0?void 0:Date.now()-t;this.toolStartedAt.delete(e.toolCall.toolCallId);let r=Tq(e.message),o=r?.output,s=Cq(r);return[{type:"content_end",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,output:o,error:s,durationMs:n,execution:e.toolCall.execution}]}translateUsage(e){let t=e.inputTokens-this.lastUsage.inputTokens,n=e.outputTokens-this.lastUsage.outputTokens,r=e.cacheReadTokens-this.lastUsage.cacheReadTokens,o=e.cacheWriteTokens-this.lastUsage.cacheWriteTokens,s=this.lastUsage.totalCost??0,a=(e.totalCost??0)-s,d=this.lastUsage.reasoningTokenCount??0,u=(e.reasoningTokenCount??0)-d;return this.lastUsage={inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,totalCost:e.totalCost,reasoningTokenCount:e.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,t),outputTokens:Math.max(0,n),cacheReadTokens:r===0?void 0:Math.max(0,r),cacheWriteTokens:o===0?void 0:Math.max(0,o),cost:a===0?void 0:a,reasoningTokenCount:u===0?void 0:Math.max(0,u),totalInputTokens:e.inputTokens,totalOutputTokens:e.outputTokens,totalCacheReadTokens:e.cacheReadTokens===0?void 0:e.cacheReadTokens,totalCacheWriteTokens:e.cacheWriteTokens===0?void 0:e.cacheWriteTokens,totalCost:e.totalCost}]}translateRunFinished(e){let t={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens===0?void 0:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens===0?void 0:e.usage.cacheWriteTokens,totalCost:e.usage.totalCost};return[{type:"done",reason:wq(e.status),text:e.outputText,iterations:e.iterations,usage:t}]}}var Lq="session_run_in_progress";class HP extends Error{agentId;code=Lq;constructor(e){super(`SessionRuntime.shutdown called while a run is in progress${e?` (agentId=${e})`:""}`);this.agentId=e;this.name="SessionRunInProgressError"}}function Nq(e){if(typeof e==="string")return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}async function Dq(e){let n=(typeof e.content==="function"?await e.content():e.content).trim();return n.length>0?n:void 0}function Uq(e,t){let n=e.trim(),r=t.map((o)=>o.trim()).filter(Boolean).join(`
202
202
 
203
203
  `);if(n&&r)return`${n}
204
204
 
@@ -545,7 +545,7 @@ ${JSON.stringify(r,null,2)}`}startClaimLeaseHeartbeat(e){let t=Math.max(1000,Mat
545
545
  `)[0]?.trim())}function Ln(e){if(!e)return;let t={...e},n=ko(typeof t.title==="string"?t.title:void 0);if(n)t.title=n;else delete t.title;return Object.keys(t).length>0?t:void 0}function dd(e){let t=Ln(e.metadata)??{},n=e.title!==void 0?ko(e.title):py(e.prompt);if(n)t.title=n;return Object.keys(t).length>0?t:void 0}function my(e){let t=kn(e.metadata),n={source:e.source,mode:t?.mode??"user",sessionId:e.sessionId,...e.parentSessionId?{parentThreadId:e.parentSessionId}:{},...e.agentId?{subagent:e.agentId}:{},...t?.version?{version:t.version}:{},...t?.trigger?{trigger:t.trigger}:{}};if(id(e.sessionId))return{agent:"teammate",sessionId:e.sessionId,taskType:"team",origin:n};if(_l(e.sessionId))return{agent:"subagent",sessionId:e.sessionId,taskType:"subagent_task",origin:n};return{agent:"lead",sessionId:e.sessionId,origin:n}}function gy(e){return{version:1,updated_at:e.updatedAt,agent:e.context.agent,sessionId:e.context.sessionId,...e.context.taskType?{taskType:e.context.taskType}:{},origin:e.context.origin,messages:Ml(e.messages),...e.systemPrompt?{system_prompt:e.systemPrompt}:{}}}function pA(e,t,n){DG(HG(e),{recursive:!0}),UG(e,`${JSON.stringify(gy({updatedAt:t,context:n,messages:[]}),null,2)}
546
546
  `,"utf8")}function mA(e,t){return ht.parse({version:1,session_id:e.sessionId,source:e.source,pid:e.pid,started_at:e.startedAt,ended_at:t?.endedAt??e.endedAt??void 0,exit_code:t?.exitCode??e.exitCode??void 0,status:t?.status??e.status,interactive:e.interactive,provider:e.provider,model:e.model,cwd:e.cwd,workspace_root:e.workspaceRoot,team_name:e.teamName??void 0,enable_tools:e.enableTools,enable_spawn:e.enableSpawn,enable_teams:e.enableTeams,prompt:e.prompt??void 0,metadata:t?.metadata??e.metadata??void 0,messages_path:e.messagesPath??void 0})}async function gA(e,t,n){let r=0;while(!0){let o=await e();if(o===void 0)return{updated:!1};let s=await t(o);if(typeof s==="object"&&s!==null&&"updated"in s&&s.updated===!1){if(r+=1,r>=n)return s;continue}return s}}import{existsSync as jG}from"node:fs";import{readFile as qG}from"node:fs/promises";class cd{listeners=new Set;subscribe(e,t){let n={listener:e,sessionId:t?.sessionId?.trim()||void 0};return this.listeners.add(n),()=>{this.listeners.delete(n)}}emit(e){let t=e.payload.sessionId?.trim();for(let n of this.listeners){if(n.sessionId&&n.sessionId!==t)continue;n.listener(e)}}get size(){return this.listeners.size}}async function Ir(e){let t=e?.trim();if(!t||!jG(t))return[];try{let n=(await qG(t,"utf8")).trim();if(!n)return[];let r=JSON.parse(n);if(Array.isArray(r))return r;if(r&&typeof r==="object"&&!Array.isArray(r)){let o=r.messages;if(Array.isArray(o))return o}return[]}catch{return[]}}function fy(e){return e?{...e}:void 0}async function fA(e,t){if(!(e.hookName==="tool_call"||!!e.parent_agent_id))return;await t.queueSpawnRequest(e);let r=await t.upsertSubagentSessionFromHook(e);if(!r)return;await t.appendSubagentHookAudit(r,e),await t.applySubagentStatus(r,e)}function ud(e){if(typeof e!=="string")return;let t=e.trim();return t.length>0?t:void 0}function Et(e){let t=ud(e);if(!t)return;return t.toLowerCase()==="unknown"?void 0:t}function Ll(e){return typeof e==="number"&&Number.isFinite(e)?e:void 0}function VG(e){if(!e||typeof e!=="object"||Array.isArray(e))return;return{...e}}function Sy(e){let t=e??200;return Number.isFinite(t)?Math.max(0,Math.floor(t)):200}var hy=2000;function JG(e){if(e===0)return 0;return Math.min(Math.max(e*2,20),hy)}function XG(e){return e.isSubagent!==!0&&!ud(e.parentSessionId)}function YG(e){let t=e.match(/\d{13,}/g);if(!t||t.length===0)return 0;let n=0;for(let r of t){let o=Number.parseInt(r,10);if(Number.isFinite(o)&&o>n)n=o}return n}function by(e){return{sessionId:e.session_id,source:e.source,pid:e.pid,startedAt:e.started_at,endedAt:e.ended_at??null,exitCode:e.exit_code??null,status:e.status,interactive:e.interactive,provider:e.provider,model:e.model,cwd:e.cwd,workspaceRoot:e.workspace_root,teamName:e.team_name,enableTools:e.enable_tools,enableSpawn:e.enable_spawn,enableTeams:e.enable_teams,isSubagent:!1,prompt:e.prompt,metadata:e.metadata,messagesPath:e.messages_path,updatedAt:e.ended_at??e.started_at}}async function QG(e){let t=Sy(e);if(t===0)return[];let n=bA(),o=(await zG(n,{withFileTypes:!0}).catch(()=>[])).filter((i)=>i.isDirectory()).map((i)=>({entry:i,recency:YG(i.name.trim())})).sort((i,a)=>a.recency-i.recency||a.entry.name.localeCompare(i.entry.name));return(await Promise.all(o.map(async({entry:i})=>{let a=i.name.trim();if(!a)return;let d=SA(n,a,`${a}.json`),c=await yA(d,"utf8").catch(()=>{return});if(!c)return;let u;try{u=JSON.parse(c)}catch{return}let l=ht.safeParse(u);if(!l.success)return;return by(l.data)}))).filter((i)=>Boolean(i)).sort((i,a)=>a.startedAt.localeCompare(i.startedAt)).slice(0,t)}async function ZG(e,t,n){let r=Sy(t);if(r===0)return await e.listSessions(0),[];if(n.includeSubagents)return(await e.listSessions(r)).slice(0,r);let o=JG(r);for(;;){let s=await e.listSessions(o,{rootOnly:!0}),i=s.filter(XG);if(i.length>=r||s.length<o||o>=hy)return i.slice(0,r);o=Math.min(o*2,hy)}}function eV(e){if(typeof e==="string")return e.trim();let t=[];for(let n of e){if(!n||typeof n!=="object")continue;let r=n;if(r.type!=="text")continue;let o=r.text?.trim();if(o)t.push(o)}return t.join(`
547
547
  `).trim()}function hA(e){return e.replace(/\s+/g," ").trim()}function tV(e,t){if(e.length<=t)return e;return`${e.slice(0,Math.max(0,t-3)).trimEnd()}...`}function nV(e){for(let t of["user","assistant"])for(let n of e){if(n.role!==t)continue;let r=hA(eV(n.content));if(!r)continue;let o=t==="user"?hA(KG(r)):r,s=GG(o.split(`
548
- `)[0]??o);return tV(s,50)}return}function rV(e){let t=0;for(let n of e)t+=Ll(n.metrics?.cost)??0;return t}function oV(e){let t,n;for(let r=e.length-1;r>=0;r-=1){let o=e[r];if(!t)t=Et(o.modelInfo?.provider);if(!n)n=Et(o.modelInfo?.id);if(t&&n)break}return{provider:t,model:n}}function sV(e){return Et(e?.provider)??Et(e?.provider&&typeof e.provider==="object"&&!Array.isArray(e.provider)?e.provider.id:void 0)}function iV(e){return Et(e?.model)??Et(e?.model&&typeof e.model==="object"&&!Array.isArray(e.model)?e.model.id:void 0)}function yy(e,t){let n=VG(e.metadata),r=ud(t?.title)??ud(n?.title),o=Ll(t?.totalCost)??Ll(n?.totalCost),s=n||r!==void 0||o!==void 0?{...n??{},...r!==void 0?{title:r}:{},...o!==void 0?{totalCost:o}:{}}:void 0;return{...e,provider:Et(t?.provider)??Et(e.provider)??sV(n)??"",model:Et(t?.model)??Et(e.model)??iV(n)??"",metadata:s}}function aV(e){let t=e.content;if(!Array.isArray(t))return!1;return t.some((n)=>!!n&&typeof n==="object"&&n.type==="tool-call")}function dV(e,t){if(e.status!=="running"||e.interactive!==!0)return!1;let n=t.at(-1);return n?.role==="assistant"&&!aV(n)}async function cV(e,t){return await Promise.all(t.map(async(n)=>{if(n.status!=="running"||n.interactive!==!0)return n;let r=await e.readSessionMessages(n.sessionId);return dV(n,r)?{...n,status:"idle"}:n}))}async function uV(e,t){return await Promise.all(t.map(async(n)=>{let r=yy(n),o=Boolean(ud(r.metadata?.title)),s=Boolean(Et(r.provider)),i=Boolean(Et(r.model)),a=Ll(r.metadata?.totalCost),d=a!==void 0&&a>0;if(o&&s&&i&&d)return r;let c=await e.readSessionMessages(n.sessionId);if(c.length===0)return r;let u=oV(c),l=rV(c);return yy(n,{title:o?void 0:nV(c),provider:s?void 0:u.provider,model:i?void 0:u.model,totalCost:d||l<=0?void 0:l})}))}async function vy(e,t={}){let n=Sy(t.limit),r=t.includeSubagents===!0,o=await ZG(e,n,{includeSubagents:r}),s=t.includeManifestFallback===!0&&o.length<n?await QG(Math.min(Math.max(n*2,100),500)):[],i=new Map;for(let c of[...o,...s]){if(i.has(c.sessionId))continue;i.set(c.sessionId,c)}let a=s.length===0?o:Array.from(i.values()).sort((c,u)=>u.startedAt.localeCompare(c.startedAt)).slice(0,n),d=await cV(e,a);if(t.hydrate===!1)return d.map((c)=>yy(c));return await uV(e,d)}async function lV(e){let t=e.trim();if(!t)return;let n=SA(bA(),t,`${t}.json`),r=await yA(n,"utf8").catch(()=>{return});if(!r)return;try{let o=ht.safeParse(JSON.parse(r));return o.success?o.data.messages_path:void 0}catch{return}}async function pV(e,t={}){let n=new Map;return await vy({listSessions:async(o,s)=>{let i=await e.listSessions(o,s);n.clear();for(let a of i)n.set(a.sessionId,a);return i.map(ad)},readSessionMessages:async(o)=>{let s=n.get(o)?.messagesPath??await lV(o);return await Ir(s)}},t)}import{captureSdkError as WM}from"@cline/shared";import{createSessionId as CJ,ensureLoopbackProxyBypass as KA,isHubProtocolCompatible as kJ,resolveClineBuildEnv as PJ,resolveHubCommandTimeoutMs as IJ}from"@cline/shared";import{HttpProxyAgent as RJ}from"http-proxy-agent";import{HttpsProxyAgent as AJ}from"https-proxy-agent";import{getProxyForUrl as EJ}from"proxy-from-env";import xJ from"ws";import{spawn as KV}from"node:child_process";import{closeSync as GV,mkdirSync as VV,openSync as JV,readFileSync as XV,unlinkSync as YV}from"node:fs";import{basename as QV,dirname as ZV,join as eJ}from"node:path";import{fileURLToPath as tJ}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as nJ,isBunEmbeddedModulePath as rJ,isHubDaemonProcess as UA,resolveClineBuildEnv as HA,withResolvedClineBuildEnv as oJ}from"@cline/shared";import{createHash as mV,randomBytes as PA}from"node:crypto";import{existsSync as gV}from"node:fs";import{mkdir as wy,open as vA,readFile as IA,rename as fV,rm as Nl,writeFile as hV}from"node:fs/promises";import{dirname as RA,join as Cy}from"node:path";import{ensureLoopbackProxyBypass as yV,isHubProtocolCompatible as SV}from"@cline/shared";import{resolveClineDataDir as ld,resolveClineDir as yge}from"@cline/shared/storage";var bV="CLINE_HUB_DISCOVERY_PATH",vV="CLINE_HUB_BUILD_ID",TV="CLINE_HUB_BUILD_EPOCH_MS",wV=30000,CV=15000,TA=100;function kV(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function PV(e){return mV("sha256").update(e).digest("hex").slice(0,12)}function IV(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function AA(){return PA(32).toString("hex")}function wA(e){return new Promise((t)=>setTimeout(t,e))}function RV(e){return`${e}.lock`}async function AV(e){try{let t=JSON.parse(await IA(Cy(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function Ty(e){await Nl(e,{recursive:!0,force:!0}).catch(()=>{return})}function dn(){let e=process.env[vV]?.trim();if(e)return e;return"sdk-v1-5e06fb811141252389fcab998b27cb9bcc4040d538a2f4d71a315102afacb09c".trim()||`source-${String(Sr.version)}`}function ky(){let e=Number(process.env[TV]);if(Number.isFinite(e)&&e>0)return e;return Number.isFinite(1792117770623)?1792117770623:void 0}function Po(e,t=dn()){let n=SV(e);if(!n.compatible)return n;let r=e.buildId?.trim();if(!r)return{compatible:!1,reason:"missing_build"};if(r!==t)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function CA(e){return typeof e==="number"&&Number.isFinite(e)&&e>0?e:void 0}function kA(e){let t=e?.trim().split(/[-+]/,1)[0];if(!t)return;let n=t.split(".").map((r)=>Number(r));if(n.length===0||n.some((r)=>!Number.isInteger(r)||r<0))return;return n}function EV(e,t){for(let n=0;n<Math.max(e.length,t.length);n++){let r=e[n]??0,o=t[n]??0;if(r!==o)return r<o?-1:1}return 0}function pd(e,t){let n=e.buildId?.trim(),r=t.buildId?.trim();if(n&&r&&n===r)return 0;let o=CA(e.buildEpochMs),s=CA(t.buildEpochMs);if(o!==void 0&&s!==void 0&&o!==s)return o<s?-1:1;let i=kA(e.coreVersion),a=kA(t.coreVersion);if(i&&a){let d=EV(i,a);if(d!==0)return d}if(n&&r&&n!==r)return n<r?-1:1;return 0}function md(){return{buildId:dn(),buildEpochMs:ky(),coreVersion:String(Sr.version)}}function Vs(e,t){let n=t?.self??md(),r=Po(e,n.buildId??"");if(r.compatible)return!0;if(r.reason!=="build_mismatch"&&r.reason!=="missing_build")return!1;return pd(n,e)<=0}function Io(e=process.argv[1]?.trim()||process.cwd()){let t=`hub-${PV(e)}`,n=process.env[bV]?.trim()||Cy(ld(),"locks","hub","owners",`${kV(t)}.json`);return{ownerId:t,discoveryPath:n}}function bge(e=`hub-${Date.now().toString(36)}`){return Io(e)}async function $e(e,t={}){try{let n;try{n=await IA(e,"utf8")}catch(o){if(o.code==="ENOENT")return;throw o}let r;try{r=JSON.parse(n)}catch{throw Error(`Invalid JSON in Hub discovery record: ${e}`)}if(!r||typeof r.hubId!=="string"||typeof r.protocolVersion!=="string"||typeof r.authToken!=="string"||typeof r.host!=="string"||typeof r.port!=="number"||typeof r.url!=="string"||typeof r.startedAt!=="string"||typeof r.updatedAt!=="string")throw Error(`Invalid Hub discovery record: ${e}`);return{hubId:r.hubId,protocolVersion:r.protocolVersion,minClientProtocolVersion:typeof r.minClientProtocolVersion==="string"?r.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof r.maxClientProtocolVersion==="string"?r.maxClientProtocolVersion:void 0,capabilities:Array.isArray(r.capabilities)?r.capabilities.filter((o)=>typeof o==="string"):void 0,coreVersion:typeof r.coreVersion==="string"?r.coreVersion:void 0,buildId:typeof r.buildId==="string"?r.buildId:void 0,buildEpochMs:typeof r.buildEpochMs==="number"?r.buildEpochMs:void 0,authToken:r.authToken,host:r.host,port:r.port,url:r.url,pid:typeof r.pid==="number"?r.pid:void 0,startedAt:r.startedAt,updatedAt:r.updatedAt}}catch(n){if(t.onError==="throw")throw n;return}}async function Dl(e,t){await Py(e,async()=>{let n=RA(e);await wy(n,{recursive:!0});let r=`${e}.${process.pid}.${PA(6).toString("hex")}.tmp`,o;try{o=await vA(r,"wx",384),await o.writeFile(`${JSON.stringify(t,null,2)}
548
+ `)[0]??o);return tV(s,50)}return}function rV(e){let t=0;for(let n of e)t+=Ll(n.metrics?.cost)??0;return t}function oV(e){let t,n;for(let r=e.length-1;r>=0;r-=1){let o=e[r];if(!t)t=Et(o.modelInfo?.provider);if(!n)n=Et(o.modelInfo?.id);if(t&&n)break}return{provider:t,model:n}}function sV(e){return Et(e?.provider)??Et(e?.provider&&typeof e.provider==="object"&&!Array.isArray(e.provider)?e.provider.id:void 0)}function iV(e){return Et(e?.model)??Et(e?.model&&typeof e.model==="object"&&!Array.isArray(e.model)?e.model.id:void 0)}function yy(e,t){let n=VG(e.metadata),r=ud(t?.title)??ud(n?.title),o=Ll(t?.totalCost)??Ll(n?.totalCost),s=n||r!==void 0||o!==void 0?{...n??{},...r!==void 0?{title:r}:{},...o!==void 0?{totalCost:o}:{}}:void 0;return{...e,provider:Et(t?.provider)??Et(e.provider)??sV(n)??"",model:Et(t?.model)??Et(e.model)??iV(n)??"",metadata:s}}function aV(e){let t=e.content;if(!Array.isArray(t))return!1;return t.some((n)=>!!n&&typeof n==="object"&&n.type==="tool-call")}function dV(e,t){if(e.status!=="running"||e.interactive!==!0)return!1;let n=t.at(-1);return n?.role==="assistant"&&!aV(n)}async function cV(e,t){return await Promise.all(t.map(async(n)=>{if(n.status!=="running"||n.interactive!==!0)return n;let r=await e.readSessionMessages(n.sessionId);return dV(n,r)?{...n,status:"idle"}:n}))}async function uV(e,t){return await Promise.all(t.map(async(n)=>{let r=yy(n),o=Boolean(ud(r.metadata?.title)),s=Boolean(Et(r.provider)),i=Boolean(Et(r.model)),a=Ll(r.metadata?.totalCost),d=a!==void 0&&a>0;if(o&&s&&i&&d)return r;let c=await e.readSessionMessages(n.sessionId);if(c.length===0)return r;let u=oV(c),l=rV(c);return yy(n,{title:o?void 0:nV(c),provider:s?void 0:u.provider,model:i?void 0:u.model,totalCost:d||l<=0?void 0:l})}))}async function vy(e,t={}){let n=Sy(t.limit),r=t.includeSubagents===!0,o=await ZG(e,n,{includeSubagents:r}),s=t.includeManifestFallback===!0&&o.length<n?await QG(Math.min(Math.max(n*2,100),500)):[],i=new Map;for(let c of[...o,...s]){if(i.has(c.sessionId))continue;i.set(c.sessionId,c)}let a=s.length===0?o:Array.from(i.values()).sort((c,u)=>u.startedAt.localeCompare(c.startedAt)).slice(0,n),d=await cV(e,a);if(t.hydrate===!1)return d.map((c)=>yy(c));return await uV(e,d)}async function lV(e){let t=e.trim();if(!t)return;let n=SA(bA(),t,`${t}.json`),r=await yA(n,"utf8").catch(()=>{return});if(!r)return;try{let o=ht.safeParse(JSON.parse(r));return o.success?o.data.messages_path:void 0}catch{return}}async function pV(e,t={}){let n=new Map;return await vy({listSessions:async(o,s)=>{let i=await e.listSessions(o,s);n.clear();for(let a of i)n.set(a.sessionId,a);return i.map(ad)},readSessionMessages:async(o)=>{let s=n.get(o)?.messagesPath??await lV(o);return await Ir(s)}},t)}import{captureSdkError as WM}from"@cline/shared";import{createSessionId as CJ,ensureLoopbackProxyBypass as KA,isHubProtocolCompatible as kJ,resolveClineBuildEnv as PJ,resolveHubCommandTimeoutMs as IJ}from"@cline/shared";import{HttpProxyAgent as RJ}from"http-proxy-agent";import{HttpsProxyAgent as AJ}from"https-proxy-agent";import{getProxyForUrl as EJ}from"proxy-from-env";import xJ from"ws";import{spawn as KV}from"node:child_process";import{closeSync as GV,mkdirSync as VV,openSync as JV,readFileSync as XV,unlinkSync as YV}from"node:fs";import{basename as QV,dirname as ZV,join as eJ}from"node:path";import{fileURLToPath as tJ}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as nJ,isBunEmbeddedModulePath as rJ,isHubDaemonProcess as UA,resolveClineBuildEnv as HA,withResolvedClineBuildEnv as oJ}from"@cline/shared";import{createHash as mV,randomBytes as PA}from"node:crypto";import{existsSync as gV}from"node:fs";import{mkdir as wy,open as vA,readFile as IA,rename as fV,rm as Nl,writeFile as hV}from"node:fs/promises";import{dirname as RA,join as Cy}from"node:path";import{ensureLoopbackProxyBypass as yV,isHubProtocolCompatible as SV}from"@cline/shared";import{resolveClineDataDir as ld,resolveClineDir as yge}from"@cline/shared/storage";var bV="CLINE_HUB_DISCOVERY_PATH",vV="CLINE_HUB_BUILD_ID",TV="CLINE_HUB_BUILD_EPOCH_MS",wV=30000,CV=15000,TA=100;function kV(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function PV(e){return mV("sha256").update(e).digest("hex").slice(0,12)}function IV(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function AA(){return PA(32).toString("hex")}function wA(e){return new Promise((t)=>setTimeout(t,e))}function RV(e){return`${e}.lock`}async function AV(e){try{let t=JSON.parse(await IA(Cy(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function Ty(e){await Nl(e,{recursive:!0,force:!0}).catch(()=>{return})}function dn(){let e=process.env[vV]?.trim();if(e)return e;return"sdk-v1-0bd3204b218b3918f3be47e0c5b825d5625862104094e4ac1ea80bdac03636dd".trim()||`source-${String(Sr.version)}`}function ky(){let e=Number(process.env[TV]);if(Number.isFinite(e)&&e>0)return e;return Number.isFinite(1792122608862)?1792122608862:void 0}function Po(e,t=dn()){let n=SV(e);if(!n.compatible)return n;let r=e.buildId?.trim();if(!r)return{compatible:!1,reason:"missing_build"};if(r!==t)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function CA(e){return typeof e==="number"&&Number.isFinite(e)&&e>0?e:void 0}function kA(e){let t=e?.trim().split(/[-+]/,1)[0];if(!t)return;let n=t.split(".").map((r)=>Number(r));if(n.length===0||n.some((r)=>!Number.isInteger(r)||r<0))return;return n}function EV(e,t){for(let n=0;n<Math.max(e.length,t.length);n++){let r=e[n]??0,o=t[n]??0;if(r!==o)return r<o?-1:1}return 0}function pd(e,t){let n=e.buildId?.trim(),r=t.buildId?.trim();if(n&&r&&n===r)return 0;let o=CA(e.buildEpochMs),s=CA(t.buildEpochMs);if(o!==void 0&&s!==void 0&&o!==s)return o<s?-1:1;let i=kA(e.coreVersion),a=kA(t.coreVersion);if(i&&a){let d=EV(i,a);if(d!==0)return d}if(n&&r&&n!==r)return n<r?-1:1;return 0}function md(){return{buildId:dn(),buildEpochMs:ky(),coreVersion:String(Sr.version)}}function Vs(e,t){let n=t?.self??md(),r=Po(e,n.buildId??"");if(r.compatible)return!0;if(r.reason!=="build_mismatch"&&r.reason!=="missing_build")return!1;return pd(n,e)<=0}function Io(e=process.argv[1]?.trim()||process.cwd()){let t=`hub-${PV(e)}`,n=process.env[bV]?.trim()||Cy(ld(),"locks","hub","owners",`${kV(t)}.json`);return{ownerId:t,discoveryPath:n}}function bge(e=`hub-${Date.now().toString(36)}`){return Io(e)}async function $e(e,t={}){try{let n;try{n=await IA(e,"utf8")}catch(o){if(o.code==="ENOENT")return;throw o}let r;try{r=JSON.parse(n)}catch{throw Error(`Invalid JSON in Hub discovery record: ${e}`)}if(!r||typeof r.hubId!=="string"||typeof r.protocolVersion!=="string"||typeof r.authToken!=="string"||typeof r.host!=="string"||typeof r.port!=="number"||typeof r.url!=="string"||typeof r.startedAt!=="string"||typeof r.updatedAt!=="string")throw Error(`Invalid Hub discovery record: ${e}`);return{hubId:r.hubId,protocolVersion:r.protocolVersion,minClientProtocolVersion:typeof r.minClientProtocolVersion==="string"?r.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof r.maxClientProtocolVersion==="string"?r.maxClientProtocolVersion:void 0,capabilities:Array.isArray(r.capabilities)?r.capabilities.filter((o)=>typeof o==="string"):void 0,coreVersion:typeof r.coreVersion==="string"?r.coreVersion:void 0,buildId:typeof r.buildId==="string"?r.buildId:void 0,buildEpochMs:typeof r.buildEpochMs==="number"?r.buildEpochMs:void 0,authToken:r.authToken,host:r.host,port:r.port,url:r.url,pid:typeof r.pid==="number"?r.pid:void 0,startedAt:r.startedAt,updatedAt:r.updatedAt}}catch(n){if(t.onError==="throw")throw n;return}}async function Dl(e,t){await Py(e,async()=>{let n=RA(e);await wy(n,{recursive:!0});let r=`${e}.${process.pid}.${PA(6).toString("hex")}.tmp`,o;try{o=await vA(r,"wx",384),await o.writeFile(`${JSON.stringify(t,null,2)}
549
549
  `,{encoding:"utf8"}),await o.sync(),await o.close(),o=void 0,await fV(r,e);let s;try{s=await vA(n,"r"),await s.sync()}catch{}finally{await s?.close().catch(()=>{return})}}catch(s){throw await o?.close().catch(()=>{return}),await Nl(r,{force:!0}).catch(()=>{return}),s}})}async function Nn(e){await Py(e,async()=>{await Nl(e,{force:!0}).catch(()=>{return})})}async function EA(e,t){return await Py(e,async()=>{if((await $e(e))?.hubId!==t)return!1;return await Nl(e,{force:!0}),!0})}async function xA(e,t,n){let r=RV(e);await wy(RA(r),{recursive:!0});let o=Date.now()+CV;while(!0){try{await wy(r,{recursive:!1})}catch(s){if((s instanceof Error&&"code"in s?String(s.code):"")!=="EEXIST")throw s;let a=await AV(r);if(!a){if(Date.now()>=o){await Ty(r);continue}await wA(TA);continue}let d=Date.now()-Date.parse(a.acquiredAt);if(!IV(a.pid)||d>wV){await Ty(r);continue}if(Date.now()>=o)throw Error(`Timed out waiting for hub ${t} lock ${r}`);await wA(TA);continue}try{return await hV(Cy(r,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
550
550
  `,"utf8"),await n()}finally{await Ty(r)}}}function Py(e,t){return xA(`${e}.mutation`,"discovery mutation",t)}function Ul(e,t){return xA(e,"startup",t)}async function Dn(e,t){yV();try{let n=await fetch(t?.authToken?xV(e):_A(e),{headers:t?.authToken?{authorization:`Bearer ${t.authToken}`}:void 0,signal:t?.signal});if(!n.ok)return;let r=await n.json();if(typeof r.protocolVersion!=="string"||typeof r.host!=="string"||typeof r.port!=="number"||typeof r.url!=="string")return;return{protocolVersion:r.protocolVersion,minClientProtocolVersion:typeof r.minClientProtocolVersion==="string"?r.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof r.maxClientProtocolVersion==="string"?r.maxClientProtocolVersion:void 0,capabilities:Array.isArray(r.capabilities)?r.capabilities.filter((o)=>typeof o==="string"):void 0,coreVersion:typeof r.coreVersion==="string"?r.coreVersion:void 0,buildId:typeof r.buildId==="string"?r.buildId:void 0,buildEpochMs:typeof r.buildEpochMs==="number"?r.buildEpochMs:void 0,host:r.host,port:r.port,url:r.url,hubId:typeof r.hubId==="string"?r.hubId:void 0,authToken:typeof r.authToken==="string"?r.authToken:void 0,pid:typeof r.pid==="number"?r.pid:void 0,startedAt:typeof r.startedAt==="string"?r.startedAt:void 0,updatedAt:typeof r.updatedAt==="string"?r.updatedAt:void 0}}catch{return}}function Un(e,t,n="/hub"){return new URL(`ws://${e}:${t}${n}`).toString()}function _A(e){let t=new URL(e);return t.protocol=t.protocol==="wss:"?"https:":"http:",t.pathname="/health",t.search="",t.toString()}function xV(e){let t=new URL(_A(e));return t.pathname="/status",t.toString()}function vge(e){return gV(e)}import{CLINE_HUB_DEV_PORT as _V,CLINE_HUB_PORT as MV,resolveClineBuildEnv as OV}from"@cline/shared";var LV="CLINE_HUB_HOST",NV="CLINE_HUB_PORT",DV="CLINE_HUB_PATHNAME",UV="127.0.0.1",HV=MV,FV="/hub";function MA(e){return OV(e)==="development"?_V:HV}function BV(e={}){return(e.env??process.env)[LV]?.trim()||UV}function Hl(e={}){let n=(e.env??process.env)[NV]?.trim();if(!n)return MA(e);let r=Number.parseInt(n,10);if(!Number.isInteger(r)||r<1||r>65535)return MA(e);return r}function $V(e={}){return(e.env??process.env)[DV]?.trim()||FV}function Ro(e={},t={}){return{host:e.host??BV(t),port:e.port??Hl(t),pathname:e.pathname??$V(t)}}import{join as WV}from"node:path";var jV="shared:cline",qV="CLINE_HUB_DISCOVERY_PATH",zV="hub-production";function Rge(e){let t=Cr(e.trim());return Io(`workspace:${t||e.trim()}`)}function Gt(e=jV){return Io(`${e}@${dn()}`)}function cn(){return{ownerId:zV,discoveryPath:process.env[qV]?.trim()||WV(ld(),"locks","hub","production.json")}}var OA=15000,sJ=200,LA=3000,iJ=100,aJ=[100,250,500,1000,2000],FA="--cline-hub-daemon",dJ=3,cJ=60000,Ay=new Map,Hge={resetRetireAttempts(){Ay.clear()},resolveDaemonEntryArgs:$A,resolveLaunchCommand:(e,t={})=>WA(e,t)};function uJ(e,t=Date.now()){let n=Ay.get(e);if(!n||t-n.windowStartedAt>cJ)return Ay.set(e,{count:1,windowStartedAt:t}),!0;return n.count+=1,n.count<=dJ}function lJ(e){return[...e.host?["--host",e.host]:[],...typeof e.port==="number"?["--port",String(e.port)]:[],...e.pathname?["--pathname",e.pathname]:[]]}function pJ(){try{let e=eJ(ld(),"logs","hub-daemon.log");return VV(ZV(e),{recursive:!0}),{fd:JV(e,"a"),logPath:e}}catch{return}}function BA(){return HA()==="production"?cn():Gt()}function gd(e){return Vs(e)}function mJ(e){try{let t=JSON.parse(XV(`${e}.superseded`,"utf8"));return{url:typeof t.url==="string"?t.url:void 0,authToken:typeof t.authToken==="string"?t.authToken:void 0,pid:typeof t.pid==="number"?t.pid:void 0}}catch{return}}function Iy(e){try{YV(`${e}.superseded`)}catch{}}function NA(e,t,n){if(!t||t.url!==n)return e;return{...e,authToken:e.authToken??t.authToken,pid:e.pid??t.pid}}async function Js(e,t){try{return await Dn(e,{authToken:t})}catch{return}}async function DA(e,t){let n=Date.now()+t;while(Date.now()<n){if(!(await Js(e))?.url)return!0;await new Promise((o)=>setTimeout(o,iJ))}return!1}async function Xs(e,t){if(!uJ(e.url))return!1;await Ao(e.url,e.authToken,"retired by newer install").catch(()=>!1),await hd(e.url,e.authToken).catch(()=>!1);let n=await DA(e.url,LA);if(!n&&e.pid&&gJ(e.pid)){try{process.kill(e.pid,"SIGTERM")}catch{}n=await DA(e.url,LA)}if(n)await Nn(t).catch(()=>{return});return n}function gJ(e){try{return process.kill(e,0),!0}catch(t){return t?.code==="EPERM"}}async function Ey(e){try{return(await Qs(e.url,e.authToken)).activeSessionCount>0}catch{return!1}}async function Ry(e,t){if(gd(e))return"reusable";let n=await Ao(e.url,e.authToken,"retired by newer install").catch(()=>!1);if(await Ey(e)){if(n)await Ao(e.url,e.authToken,"hub retirement deferred",{off:!0}).catch(()=>!1);return"deferred_busy"}let r=await Xs(e,t);if(!r&&n)await Ao(e.url,e.authToken,"hub retirement failed",{off:!0}).catch(()=>!1);return r?"retired":"failed"}async function fJ(e){if(HA()!=="production")return;let t=Gt();if(t.discoveryPath===e.discoveryPath)return;let n=await $e(t.discoveryPath);if(n?.url)await Xs(n,t.discoveryPath);else await Nn(t.discoveryPath).catch(()=>{return})}function hJ(){let e=import.meta.url.endsWith(".ts")?"ts":"js";return tJ(new URL(`./entry.${e}`,import.meta.url))}function $A(e,t){if(rJ(e))return[FA];return[...t&&e.toLowerCase().endsWith(".ts")?["--conditions=development"]:[],e]}var Fl;function Fge(e){let t=e?.command.trim();Fl=t?{command:t,args:e?.args?[...e.args]:void 0}:void 0}function WA(e,t){let n,r;if(Fl)n=Fl.command,r=Fl.args??[FA];else{let o=process.execPath?.trim();if(!o)throw Error("unable to resolve runtime executable for hub daemon");let s=QV(o).toLowerCase().includes("bun");n=o,r=$A(hJ(),s)}return{launcher:n,args:[...r,"--cwd",e,...lJ(t),...t.manageConnectors===!1?["--no-connectors"]:[]],cwd:e,env:{...oJ(process.env),CLINE_NO_INTERACTIVE:"1",[nJ]:"1"}}}function yJ(e){if(!e||typeof e!=="object")return!1;if(("code"in e?e.code:void 0)==="ETXTBSY")return!0;let n="message"in e?e.message:void 0;return typeof n==="string"&&n.includes("ETXTBSY")}function SJ(e,t={}){if(UA())return;let n=WA(e,t),r=pJ();try{KV(n.launcher,n.args,{detached:!0,stdio:r?["ignore",r.fd,r.fd]:"ignore",env:n.env,cwd:n.cwd,windowsHide:!0}).unref()}finally{if(r)GV(r.fd)}}async function bJ(e,t={}){for(let n=0;;n++)try{SJ(e,t);return}catch(r){let o=aJ[n];if(!yJ(r)||o===void 0)throw r;await new Promise((s)=>setTimeout(s,o))}}function jA(e,t={}){if(UA())return;fd(e,t).catch(()=>{})}async function vJ(e,t,n={}){let r=n.host!==void 0||n.port!==void 0||n.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),o=Ro(n),s=Un(o.host,o.port,o.pathname),i=(g)=>{if(!r)Ys(g.url,g.authToken);return g};await fJ(e).catch(()=>{return});let a=await $e(e.discoveryPath),d=a?.url?void 0:mJ(e.discoveryPath),c=!1;if(a?.url){let g=a.authToken;if(!g)c=!0,await Xs(a,e.discoveryPath);else{let f=await Js(a.url,g);if(f?.url&&gd(f)&&await xt(f.url,{authToken:g}))return Iy(e.discoveryPath),i({url:f.url,authToken:g});if(f?.url){if(await Ry({...f,authToken:g},e.discoveryPath)==="deferred_busy"&&await xt(f.url,{authToken:g}))return i({url:f.url,authToken:g})}else await Nn(e.discoveryPath).catch(()=>{return})}}let u=await Js(s);if(u?.url){let g=NA(u,a??d,s);if(gd(u)){let h=[u.authToken,a?.authToken,d?.authToken].filter((S)=>typeof S==="string"&&S.trim().length>0);for(let S of h){if(!await xt(u.url,{authToken:S}))continue;let b={hubId:u.hubId??`repaired-${u.port}`,protocolVersion:u.protocolVersion,minClientProtocolVersion:u.minClientProtocolVersion,maxClientProtocolVersion:u.maxClientProtocolVersion,capabilities:u.capabilities,coreVersion:u.coreVersion,buildId:u.buildId,authToken:S,host:u.host,port:u.port,url:u.url,pid:u.pid??a?.pid??d?.pid,startedAt:u.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await Dl(e.discoveryPath,b)}catch{}return Iy(e.discoveryPath),i({url:u.url,authToken:S})}throw Error(`A compatible Cline Hub is already running at ${s}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${c?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`)}let f=await Ry(g,e.discoveryPath);if(f==="deferred_busy"){for(let h of[g.authToken,a?.authToken].filter((y)=>typeof y==="string"&&y.trim().length>0))if(await xt(u.url,{authToken:h}))return i({url:u.url,authToken:h});if(n.allowPortFallback!==!0&&o.port!==0)throw Error(`An older Cline Hub is running at ${s} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(f==="failed"&&n.allowPortFallback!==!0&&o.port!==0)throw Error(`An incompatible Cline Hub is already running at ${s} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let p=n.allowPortFallback===!0&&o.port!==0?{...o,port:0}:o;await n.beforeSpawn?.(),await bJ(t,{...p,manageConnectors:n.manageConnectors});let m=Date.now()+OA;while(Date.now()<m){let g=await $e(e.discoveryPath);if(g?.url&&g.authToken){let h=await Js(g.url,g.authToken);if(h?.url&&gd(h)&&await xt(h.url,{authToken:g.authToken}))return Iy(e.discoveryPath),i({url:h.url,authToken:g.authToken})}let f=await Js(s);if(f?.url&&!gd(f)){let h=NA(f,g??d,s),y=await Ry(h,e.discoveryPath);if(y==="deferred_busy"&&g?.authToken&&await xt(f.url,{authToken:g.authToken}))return i({url:f.url,authToken:g.authToken});if(y==="failed"&&n.allowPortFallback!==!0&&o.port!==0)throw Error(`An incompatible Cline Hub is still running at ${s} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((h)=>setTimeout(h,sJ))}throw Error(`Timed out after ${OA}ms waiting for detached hub startup.`)}async function fd(e,t={}){let n=BA();return await Ul(n.discoveryPath,async()=>vJ(n,e,t))}var TJ=5000,wJ=500;async function Bge(e={}){let t=BA(),n=e.workspaceRoot??process.cwd(),r=await $e(t.discoveryPath),o=r?.url?await Js(r.url,r.authToken):void 0;if(!o?.url)return{outcome:"started",...await fd(n)};let s={...o,authToken:o.authToken??r?.authToken,pid:o.pid??r?.pid};if(Po(o).compatible)return{outcome:"already_current",url:o.url,authToken:s.authToken};if(pd(md(),o)<=0)return{outcome:"hub_not_older",url:o.url,authToken:s.authToken};if(!await Ao(s.url,s.authToken,e.reason??"hub upgrade requested").catch(()=>!1))throw Error(`The running Cline Hub at ${s.url} did not accept a drain request, so it was not replaced. It is replaced automatically once idle when a Cline client next starts, or run 'cline doctor fix' to stop it now.`);let a=async()=>{await Ao(s.url,s.authToken,"hub upgrade aborted",{off:!0}).catch(()=>!1)},d=Date.now()+(e.waitForIdleMs??TJ),c;for(;;){try{if(c=(await Qs(s.url,s.authToken)).activeSessionCount,c===0)break}catch{}if(Date.now()>=d)break;await new Promise((p)=>setTimeout(p,wJ))}if(c!==0&&e.force!==!0)return await a(),{outcome:"still_busy",url:s.url,authToken:s.authToken,...c!==void 0?{activeSessionCount:c}:{}};if(!await Xs(s,t.discoveryPath))throw await a(),Error(`The running Cline Hub at ${s.url} could not be stopped. Run 'cline doctor fix' to stop stale hub daemons, then try again.`);return{outcome:"replaced",...await fd(n),activeSessionCount:c??0}}function Ny(){return PJ()==="production"?cn():Gt()}function _J(){let e=globalThis.WebSocket;if(!e)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return e}function MJ(e){let t=new URL(e);t.protocol=e.protocol==="wss:"?"https:":"http:";let n=EJ(t.toString());if(!n)return;return e.protocol==="wss:"?new AJ(n):new RJ(n)}function GA(e){if(typeof e==="string")return e;if(e instanceof Uint8Array)return Buffer.from(e).toString();if(e instanceof ArrayBuffer)return Buffer.from(e).toString();if(Array.isArray(e))return Buffer.concat(e.map((t)=>Buffer.from(t))).toString();if(e&&typeof e==="object"&&"data"in e&&typeof e.data<"u")return GA(e.data);return String(e)}function OJ(e){if(typeof e==="string")return e;if(e instanceof Uint8Array)return Buffer.from(e).toString("utf8");if(e instanceof ArrayBuffer)return Buffer.from(e).toString("utf8");return""}function qA(e){let t=e,n=OJ(t.reason);return new Xe("hub_connection_closed",t.code||n?`Hub connection closed (code=${t.code??0}${n?`, reason=${n}`:""})`:My,{closeCode:t.code,closeReason:n||void 0})}function xy(e,t){if(e instanceof Xe)return e;if(e instanceof Error)return new Xe("hub_connect_failed",e.message);if(e&&typeof e==="object"&&"error"in e&&e.error instanceof Error)return new Xe("hub_connect_failed",e.error.message);let n=e&&typeof e==="object"&&"message"in e&&typeof e.message==="string"?e.message.trim():"";if(n)return new Xe("hub_connect_failed",n);let r=e&&typeof e==="object"&&"type"in e&&typeof e.type==="string"?e.type.trim():"";return new Xe("hub_connect_failed",r?`Failed to connect to hub at ${t.toString()} (${r} event before socket open).`:`Failed to connect to hub at ${t.toString()}.`)}var _y="*",Bl=8000,LJ="cline-hub-auth.",VA=new Map,JA=new Set,NJ=3000,DJ=3000,UJ=100,My="Hub connection closed",HJ=250,FJ=5000,zA=0.5;class Xe extends Error{code;details;constructor(e,t,n){super(t);this.code=e;this.details=n;this.name="HubTransportError"}}function BJ(e){return e instanceof Xe}class $l extends Error{command;code;constructor(e,t,n){super(n);this.command=e;this.code=t;this.name="HubCommandError"}}function XA(e,t){return e instanceof $l&&e.code==="hub_command_timeout"&&(t===void 0||e.command===t)}function Dy(e,t={}){let n=e.searchParams.get("authToken")?.trim();if(e.searchParams.delete("authToken"),n)return n;if(t.skipRegistry)return;let r=Uy(e.toString());return r?VA.get(r):void 0}function $J(e){try{let n=new URL(e).hostname.toLowerCase().replace(/^\[|\]$/g,"");return n==="localhost"||n==="127.0.0.1"||n==="::1"}catch{return!1}}function Uy(e){if(!$J(e))return;let t=new URL(Zs(e));return t.search="",t.hash="",t.toString()}function Oy(e){let t=Uy(e);return!!t&&JA.has(t)}function Ys(e,t){let n=Uy(e);if(n){if(JA.add(n),t?.trim())VA.set(n,t)}return e}class Hn{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;connectGeneration=0;lastCloseError=new Xe("hub_connection_closed",My);sawSocketClose=!1;registered=!1;capabilities;constructor(e){this.options=e;if(e.authToken?.trim()&&e.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");this.clientId=e.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=e.url,this.capabilities=[...e.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities(e){if(this.capabilities=e.map((t)=>({...t})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.connectPromise)return this.connectPromise;if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let e=new URL(this.currentUrl),t=this.options.authToken?.trim()||Dy(e,{skipRegistry:Boolean(this.options.resolveConnectionHeaders)});if(e.hash="",t&&this.options.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");let n=++this.connectGeneration,r=this.openSocket(e,t,n),o;this.connectPromise=r.then(async(i)=>{if(o=i,await this.commandOnce("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",capabilities:this.capabilities,metadata:{...this.options.metadata,version:this.options.clientVersion??String(Sr.version),pid:process.pid},workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}},void 0,void 0,!1),n!==this.connectGeneration||this.closedByClient){try{i.close()}catch{}throw this.lastCloseError}this.registered=!0;for(let a of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(a));this.reconnectAttempt=0});let s=this.connectPromise;try{await s}catch(i){if(this.connectPromise===s)this.connectPromise=void 0;if(o&&this.socket===o){this.lastCloseError=xy(i,e),this.registered=!1,this.sawSocketClose=!1,this.socket=void 0;try{o.close()}catch{}}if(!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect();throw i}}async openSocket(e,t,n){let r=this.options.resolveConnectionHeaders,o;if(r){let c;try{o=await Promise.race([Promise.resolve().then(()=>r()),new Promise((u,l)=>{c=setTimeout(()=>{l(new Xe("hub_connect_timeout",`Timed out resolving hub connection headers after ${Bl}ms`))},Bl)})])}catch(u){let l=u instanceof Xe?u:new Xe("hub_connect_failed",u instanceof Error?u.message:String(u));if(n===this.connectGeneration)this.lastCloseError=l;throw l}finally{clearTimeout(c)}}if(n!==this.connectGeneration||this.closedByClient)throw this.lastCloseError;if(o&&Object.keys(o).some((c)=>c.toLowerCase()==="sec-websocket-protocol")){let c=new Xe("hub_connect_failed","Hub connection headers cannot set Sec-WebSocket-Protocol.");if(n===this.connectGeneration)this.lastCloseError=c;throw c}let s;try{s=o?MJ(e):void 0}catch(c){let u=xy(c,e);if(n===this.connectGeneration)this.lastCloseError=u;throw u}let i=o?new xJ(e.toString(),{headers:{...o},agent:s}):new(_J())(e.toString(),t?[`${LJ}${t}`]:void 0);this.socket=i;let a=!1,d=new Promise((c,u)=>{let l=!1,p=setTimeout(()=>{if(l)return;l=!0,a=!0;let m=new Xe("hub_connect_timeout",`Timed out connecting to hub after ${Bl}ms`);if(this.socket===i)this.lastCloseError=m,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{i.close()}catch{}u(m)},Bl);i.addEventListener("open",()=>{if(l)return;l=!0,clearTimeout(p),c()}),i.addEventListener("error",(m)=>{if(l)return;l=!0,clearTimeout(p);let g=xy(m,e);if(this.socket===i)this.lastCloseError=g,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;u(g)}),i.addEventListener("close",(m)=>{if(l)return;l=!0,clearTimeout(p);let g=a?this.lastCloseError:qA(m);if(this.socket===i){if(!a)this.lastCloseError=g,this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0}u(g)})});return i.addEventListener("message",(c)=>{this.handleFrame(JSON.parse(GA(c)))}),i.addEventListener("close",(c)=>{if(this.socket!==i)return;if(!a)this.lastCloseError=qA(c),this.sawSocketClose=!0;this.registered=!1;for(let u of this.pendingReplies.values())u.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await d,i}subscribe(e,t){let n=t?.sessionId?.trim()||void 0,r={listener:e,sessionId:n};return this.listeners.add(r),this.adjustSubscriptionCount(n,1),()=>{if(!this.listeners.delete(r))return;this.adjustSubscriptionCount(n,-1)}}async command(e,t,n,r){let o=0,s=e!=="client.register"&&e!=="client.unregister";while(!0)try{return await this.commandOnce(e,t,n,r)}catch(i){if(!s||o>=1||!await this.recoverLocalHubTransport(i))throw i;o+=1}}async commandOnce(e,t,n,r,o=!0){if(o)await this.connect();r?.beforeDispatch?.();let s=CJ("hubreq_");r?.onDispatch?.(s);let i=IJ(e,r?.timeoutMs),a=new Promise((c,u)=>{let l=i===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(s))return;u(new $l(e,"hub_command_timeout",`Hub command ${e} timed out after ${i}ms (hub=${this.currentUrl}, requestId=${s}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},i);this.pendingReplies.set(s,{resolve:(p)=>{if(l)clearTimeout(l);c(p)},reject:(p)=>{if(l)clearTimeout(l);u(p)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:e,requestId:s,clientId:this.clientId,sessionId:n,timeoutMs:i,payload:t}})}catch(c){throw this.pendingReplies.delete(s),c}let d=await a;if(!d.ok){if(d.error?.code===Va){let c=n??(typeof t?.sessionId==="string"?t.sessionId:void 0);throw new vo(c,d.error.message)}throw new $l(e,d.error?.code,d.error?.message??`Hub command ${e} failed`)}return d}async recoverLocalHubTransport(e){if(!Oy(this.currentUrl)||!BJ(e))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let t=await yd({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!t)return!1;return this.currentUrl=t,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 e=Math.min(HJ*2**this.reconnectAttempt,FJ),t=Math.round(e*(1-zA)+Math.random()*e*zA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},t)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!Oy(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let e=await yd({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if(e){this.currentUrl=e,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let e=this.socket;if(this.closedByClient=!0,this.connectGeneration+=1,this.clearReconnectTimer(),this.registered=!1,e)this.lastCloseError=new Xe("hub_connection_closed",My);for(let t of this.pendingReplies.values())t.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,!e)return;this.sawSocketClose=!1,this.socket=void 0;try{e.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(e){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new Xe("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify(e))}sendSubscriptionFrame(e,t){let n=e==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(t)):void 0;this.sendFrame({kind:e,clientId:this.clientId,...t?{sessionId:t}:{},...n!==void 0?{sinceSequence:n}:{}})}adjustSubscriptionCount(e,t){let n=this.subscriptionKeyForSessionId(e),r=(this.subscriptionCounts.get(n)??0)+t;if(r<=0){if(this.subscriptionCounts.delete(n),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(t<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",e);return}if(this.subscriptionCounts.set(n,r),t>0&&r===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",e)}subscriptionKeyForSessionId(e){return e??_y}subscriptionSessionIdFromKey(e){return e===_y?void 0:e}handleFrame(e){switch(e.kind){case"reply":{let t=e.envelope.requestId;if(!t)return;let n=this.pendingReplies.get(t);if(!n)return;this.pendingReplies.delete(t),n.resolve(e.envelope);return}case"event":{let t=e.envelope.sequence;if(typeof t==="number"){let n=e.envelope.sessionId?.trim();for(let r of[_y,n]){if(!r||!this.subscriptionCounts.has(r))continue;let o=this.lastEventSequenceByKey.get(r)??0;if(t>o)this.lastEventSequenceByKey.set(r,t)}}for(let n of this.listeners){if(n.sessionId&&n.sessionId!==e.envelope.sessionId?.trim())continue;n.listener(e.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function Zs(e){let t=new URL(e);if(t.protocol==="http:")t.protocol="ws:";else if(t.protocol==="https:")t.protocol="wss:";return t.toString()}async function xt(e,t){let n=new Hn({url:e,authToken:t?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:t?.workspaceRoot,cwd:t?.cwd});try{return await n.connect(),!0}catch{return!1}finally{n.close()}}async function Ly(e,t){let n=Zs(e),r=await Dn(n,{authToken:t?.authToken});if(!r)return{status:"unreachable",url:n};if(t?.requireCurrentBuild){let o=dn(),s=Po(r,o);if(!s.compatible&&!Vs(r))return{status:s.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:n}}else if(!kJ(r).compatible)return{status:"protocol_mismatch",url:n};if(t?.verifyConnection===!0&&!await xt(n,{workspaceRoot:t.workspaceRoot,cwd:t.cwd,authToken:t.authToken}))return{status:"unreachable",url:n};return{status:"compatible",url:n}}async function WJ(e){let t=Date.now()+DJ;while(Date.now()<t){if(!(await Dn(e).catch(()=>{return}))?.url)return!0;await new Promise((r)=>setTimeout(r,UJ))}return!1}function jJ(e,t){try{return Zs(e)===Zs(t)}catch{return!1}}function YA(e){let t=e&&typeof e==="object"&&Array.isArray(e.sessions)?e.sessions:[],n=0,r=new Set;for(let o of t){if(!o||typeof o!=="object")continue;let s=o.participants;if(!Array.isArray(s)||s.length===0)continue;n+=1;for(let i of s){let a=i&&typeof i==="object"?i.clientId:void 0;if(typeof a==="string"&&a.trim())r.add(a)}}return{activeSessionCount:n,participantClientCount:r.size}}function Qge(e){return YA(e).activeSessionCount>0}async function Qs(e,t,n){let r=new Hn({url:e,authToken:t,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:n?.workspaceRoot,cwd:n?.cwd});try{let o=await r.command("session.list",{limit:500},void 0,{timeoutMs:NJ});return YA(o.payload)}finally{await r.dispose().catch(()=>{return})}}async function QA(e,t,n){try{return(await Qs(e,t,n)).activeSessionCount===0}catch{return!1}}async function qJ(e,t){let n=`${e.discoveryPath}.superseded`,r=await $e(n);if(!r?.url||!r.authToken)return;let o=await Ly(r.url,{authToken:r.authToken});if(o.status!=="compatible")return;if(await QA(o.url,r.authToken,t))return;return Ys(o.url,r.authToken)}async function Hy(e={}){if(e.endpoint?.trim()){let o=await Ly(e.endpoint);return o.status==="compatible"?o.url:void 0}let t=Ny(),n=await $e(t.discoveryPath);if(!n?.url)return await qJ(t,e);let r=await Ly(n.url,{authToken:n.authToken,requireCurrentBuild:!0});if(r.status==="compatible")return Ys(r.url,n.authToken);if(r.status==="protocol_mismatch")await Nn(t.discoveryPath).catch(()=>{return});return}async function yd(e={}){let t=await Hy(e);if(t&&await xt(t,{workspaceRoot:e.workspaceRoot,cwd:e.cwd}))return t;if(e.endpoint?.trim())return;try{return(await fd(e.workspaceRoot??process.cwd())).url}catch(n){e.onStartupError?.(n);return}}async function Ao(e,t,n,r){KA();let o=new URL(e),s=t?.trim()||Dy(o);if(o.protocol==="ws:")o.protocol="http:";else if(o.protocol==="wss:")o.protocol="https:";if(o.pathname="/drain",o.hash="",n)o.searchParams.set("reason",n);if(r?.off)o.searchParams.set("off","1");return(await fetch(o,{method:"POST",headers:s?{authorization:`Bearer ${s}`}:void 0})).ok}async function hd(e,t){KA();let n=new URL(e),r=t?.trim()||Dy(n);if(n.protocol==="ws:")n.protocol="http:";else if(n.protocol==="wss:")n.protocol="https:";return n.pathname="/shutdown",n.hash="",(await fetch(n,{method:"POST",headers:r?{authorization:`Bearer ${r}`}:void 0})).ok}async function zJ(e=Ny()){let t=await $e(e.discoveryPath,{onError:"throw"});if(!t?.url)return!1;try{if(await hd(t.url,t.authToken))return!0}catch{}return!1}async function ZA(e){if(!Oy(e.url))return;let t=Ny(),n=await $e(t.discoveryPath);if(!n?.url||!jJ(n.url,e.url))return;if(!await QA(n.url,n.authToken,{workspaceRoot:e.workspaceRoot,cwd:e.cwd}))return;if(!await zJ())return;if(!await WJ(n.url))return;return await Nn(t.discoveryPath).catch(()=>{return}),await yd({workspaceRoot:e.workspaceRoot,cwd:e.cwd})}import{resolveProviderRequestHeaders as ZJ}from"@cline/llms";import{captureSdkError as $y,createSessionId as iE,HUB_CHECKPOINT_CAPABILITY as eX,HUB_COMPACTION_CAPABILITY as tX,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as nX,HUB_HOOK_CAPABILITY_PREFIX as rX,HUB_MISTAKE_LIMIT_CAPABILITY as oX,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as sX,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as iX,isGeneratedMedia as aX,isHubToolExecutorName as dX}from"@cline/shared";Ct();import{createHash as KJ}from"node:crypto";import{formatDisplayUserInput as eE}from"@cline/shared";import{z as un}from"zod";function GJ(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let t=e;if(t.role!=="user"&&t.role!=="assistant")return!1;return typeof t.content==="string"||Array.isArray(t.content)}var VJ=un.custom(GJ),Wl=un.object({version:un.literal(1),updated_at:un.string().datetime(),conversation_id:un.string().min(1).optional(),source_message_count:un.number().int().nonnegative(),source_prefix_hash:un.string().min(1).optional(),source_last_message_key:un.string().min(1).optional(),messages:un.array(VJ),system_prompt:un.string().optional()});function tE(e){return e.filter((t)=>t.metadata?.displayOnly!==!0)}function Fy(e){return JSON.parse(JSON.stringify(e))}function nE(e){if(e.role!=="user")return e;if(typeof e.content==="string")return{...e,content:eE(e.content)};return{...e,content:e.content.map((t)=>t.type==="text"?{...t,text:eE(t.text)}:t)}}function rE(e){if(e.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function JJ(e){let t=nE(e);return rE(t.role),[["role",t.role],["content",t.content],["agent",t.agent??null],["sessionId",t.sessionId??null],["metadata",t.metadata??null],["modelInfo",t.modelInfo??null],["metrics",t.metrics??null]]}function oE(e){if(!e)return"";let t=nE(e);if(typeof t.id==="string"&&t.id.trim())return`id:${t.id.trim()}`;if(rE(t.role),typeof t.ts==="number"&&Number.isFinite(t.ts))return`ts:${t.role}:${t.ts}`;return`content:${t.role}:${JSON.stringify(t.content)}`}function sE(e,t=e.length){let n=KJ("sha256");n.update(`cline-session-compaction-source-v2
551
551
  `),n.update(`${t}
@@ -882,9 +882,9 @@ ${b}`}]});continue}if(h.type!=="response_item")continue;switch(y.type){case"mess
882
882
  `)}
883
883
  `,"utf8"),PM(s,e)}persistRuntime(e,t,n){this.ensureTeamSubdir(e);let r={version:1,updatedAt:AM(),teamState:{...t,runs:t.runs.map((i)=>({...i,result:mn(i.result)}))},teammates:n},o=this.statePath(e),s=`${o}.tmp`;IM(s,`${JSON.stringify(r,null,2)}
884
884
  `,"utf8"),PM(s,o)}markInProgressRunsInterrupted(e,t){let n=this.readEnvelope(e);if(!n?.teamState?.runs?.length)return[];let r=n.teamState.runs.filter((s)=>s.status==="queued"||s.status==="running").map((s)=>s.id);if(r.length===0)return[];let o=new Date;return n.teamState={...n.teamState,runs:n.teamState.runs.map((s)=>s.status==="queued"||s.status==="running"?{...s,status:"interrupted",error:t,endedAt:o}:s)},this.persistRuntime(e,n.teamState,n.teammates),r}ensureTeamDir(){if(!vi(this.teamDirPath))kM(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir(e){let t=Ib(this.ensureTeamDir(),qe(e));if(!vi(t))kM(t,{recursive:!0});return t}statePath(e){return Ib(this.ensureTeamDir(),qe(e),"state.json")}historyPath(e){return Ib(this.ensureTeamDir(),qe(e),"task-history.jsonl")}readEnvelope(e){let t=this.statePath(e);if(!vi(t))return;try{let n=JSON.parse(Pb(t,"utf8"));if(n?.version===1&&n.teamState)return n}catch{}return}}function xM(e={}){try{let t=new Xd(e);return t.init(),t}catch{let t=new Qp({teamDir:e.teamDir});return t.init(),t}}var R4=300,A4=60000,_M=5000;class Rb{opts;pendingEvents=[];teammatesDirty=!1;timer;lastFlushAt=0;disposed=!1;constructor(e){this.opts={batchMs:R4,telemetryFlushMs:A4,now:Date.now,...e}}onEvent(e){if(this.disposed)return;if(!Bn(e)){if(this.opts.now()-this.lastFlushAt>=this.opts.telemetryFlushMs)this.schedule();return}if(this.pendingEvents.push({type:e.type,payload:Or(e)}),tS(e)){this.flush();return}this.schedule()}markTeammatesDirty(){this.teammatesDirty=!0}markStateDirty(){if(this.disposed)return;this.schedule()}flush(){this.clearTimer();let e=this.opts.source();if(!e)return;if(!e.hasPendingStateDelta()&&this.pendingEvents.length===0&&!this.teammatesDirty)return;let n=this.pendingEvents,r=this.teammatesDirty;this.pendingEvents=[],this.teammatesDirty=!1;let o=e.drainStateDelta();try{this.opts.store.persistBatch(this.opts.teamKey,{events:n,delta:o,teammates:this.opts.teammates(),getFullState:()=>e.exportState()}),this.lastFlushAt=this.opts.now()}catch(s){e.requeueStateDelta(o);let i=n.concat(this.pendingEvents);if(this.pendingEvents=i.length>_M?i.slice(-_M):i,this.teammatesDirty=this.teammatesDirty||r,!this.disposed)this.schedule();try{this.opts.onError?.(s)}catch{}}}dispose(){if(this.disposed)return;this.disposed=!0,this.flush()}schedule(){if(this.timer)return;this.timer=setTimeout(()=>{this.timer=void 0,this.flush()},this.opts.batchMs),this.timer.unref?.()}clearTimer(){if(this.timer)clearTimeout(this.timer),this.timer=void 0}}function Zp(e,t){return E4(e,t)}function M4(e,t){let n=t?.["*"]??{},r=t?.[e]??{};return{...n,...r}.enabled!==!1}function O4(e,t){return e.filter((n)=>M4(n.name,t))}function Ab(e,t){return ir(O4(e,t))}var L4={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function N4(e){let t=e.trim().toLowerCase();return L4[t]??t}function D4(e,t){if(t.tools===void 0)return e;let n=new Set(t.tools.map(N4));if(t.skills!==void 0)n.add("skills");return e.filter((r)=>n.has(r.name))}function OM(){return`team-${_4(5)}`}function em(e,t,n,r,o,s,i,a,d,c){let u=sn[fr({mode:n})],l=ka(t,r,n,o??Ca);return Ab(Na({cwd:e,telemetry:d,executorOptions:{bash:{executionController:c}},...u,enableSkills:!!i,...l,executors:{...i?{skills:i}:{},...a??{}}}),s)}function U4(e){return em(e.cwd,e.providerId,e.mode,e.modelId,e.toolRoutingRules,e.toolPolicies,H4,e.toolExecutors).some((t)=>t.name==="skills")}var H4=async()=>"";async function F4(e){let t=ye(),n=e.includeSettings&&Fs({filePath:t});if(!n&&!e.agentPluginServers?.length)return{tools:[]};let r=Bs({settingsPath:t}),o=Bs({restrictConfiguredHeadersToOrigin:!0}),s=new Ka({clientFactory:(l)=>l.metadata?.source==="agent-plugin"?o(l):r(l)}),i=[];if(n)try{i=await cl(s,{filePath:t})}catch(l){let p=l instanceof Error?l.message:String(l);e.logger?.log(`[mcp] Failed to load MCP settings, skipping settings-backed MCP tools: ${p}`)}let a=new Set(i.map((l)=>l.name));for(let l of e.agentPluginServers??[]){let p=l.registration;if(a.has(p.name)){e.logger?.log(`[agent-plugins] MCP server '${p.name}' conflicts with an existing server and was skipped.`,{severity:"error"});continue}try{await s.registerServer(p),i.push(p),a.add(p.name)}catch(m){let g=m instanceof Error?m.message:String(m);e.logger?.log(`[agent-plugins] Failed to register MCP server '${p.name}', skipping: ${g}`,{severity:"error"})}}if(i.length===0)return await s.dispose().catch(()=>{}),{tools:[]};let d=i.filter((l)=>l.disabled!==!0),c=await Promise.allSettled(d.map((l)=>yl({serverName:l.name,provider:s,timeoutMs:x4(l.timeoutSeconds)*1000}))),u=[];for(let[l,p]of c.entries())if(p.status==="fulfilled")u.push(...p.value);else{let m=p.reason instanceof Error?p.reason.message:String(p.reason);e.logger?.log(`[mcp] Failed to load tools from MCP server "${d[l].name}", skipping: ${m}`)}return{tools:u,shutdown:async()=>{await s.dispose()}}}function B4(e,t){if(!e)return;for(let n of e.getTeammateIds())try{e.shutdownTeammate(n,t)}catch{}}function $4(e){if(e===void 0)return!0;switch(e){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 W4(e){let t=sn[fr({mode:e.mode})];return{sessionId:e.sessionId||"",mode:e.mode==="plan"?"plan":e.mode==="yolo"?"yolo":"act",enableTools:e.enableTools!==!1,enableSpawnAgent:e.enableSpawnAgent??t.enableSpawnAgent??!0,enableAgentTeams:e.enableAgentTeams??t.enableAgentTeams??!0,disableMcpSettingsTools:e.disableMcpSettingsTools===!0,yolo:e.yolo===!0,missionLogIntervalSteps:typeof e.missionLogIntervalSteps==="number"&&Number.isFinite(e.missionLogIntervalSteps)?e.missionLogIntervalSteps:3,missionLogIntervalMs:typeof e.missionLogIntervalMs==="number"&&Number.isFinite(e.missionLogIntervalMs)?e.missionLogIntervalMs:120000}}class tm{teamRuntimeEntries=new Map;async build(e){let{config:t,hooks:n,extensions:r,logger:o,telemetry:s,createSpawnTool:i,onTeamRestored:a,userInstructionService:d,configExtensions:c,toolExecutors:u}=e,l=e.onTeamEvent??(()=>{}),p=W4(t),m=[];if(p.enableTools&&p.mode!=="yolo"&&Ji("web_search")&&MM({providerId:t.providerId,modelId:t.modelId},"web_search"))m.push({name:"web_search"});if(p.enableTools&&MM({providerId:t.providerId,modelId:t.modelId},"image_generation"))m.push({name:"image_generation",outputFormat:"png"});let g=t.workspaceRoot??t.cwd,f=e.toolPolicies??t.toolPolicies,h=Pn(),y=[],S=t.teamName?.trim()||OM(),b=t.sessionId?.trim()||S,w=p.enableSpawnAgent?Ql({workspaceRoot:g}):{configs:[],errors:[]},v=w.configs.some((N)=>N.skills!==void 0),T=Zp(c,"rules"),k=Zp(c,"skills"),P=k||v,I=Zp(c,"workflows"),C=Zp(c,"plugins"),E=T||k||I,x=!1,Y=[],M=d,le;for(let N of w.errors)(o??t.logger)?.log?.(`[agents] Failed to load agent config at ${N.path}: ${N.error.message}`);if(!M&&(E||v))M=fo({skills:P?{workspacePath:g,includePluginSkills:C,pluginSkillDirectories:C?e.pluginSkillDirectories:void 0,pluginPaths:t.pluginPaths,cwd:t.cwd,agentPluginSkills:C?e.agentPluginSkills:void 0}:{workspacePath:g},rules:{workspacePath:t.cwd},workflows:{workspacePath:t.cwd}}),Y.push(M);else if(M&&C&&e.agentPluginSkills?.length&&(E||v)){let N=fo({skills:{directories:[],agentPluginSkills:e.agentPluginSkills},rules:{directories:[]},workflows:{directories:[]}});Y.push(N),M=nl([M,N])}if(M)await M.start().catch(()=>{});let B=p.enableTools&&k&&Boolean(M)&&M?.hasConfiguredSkills(t.skills)===!0&&U4({cwd:t.cwd,providerId:t.providerId,mode:p.mode,modelId:t.modelId,toolRoutingRules:t.toolRoutingRules,toolPolicies:f,toolExecutors:u}),D=M&&E?M.createExtension({includeRules:T,includeSkills:k,includeWorkflows:I,registerSkillsTool:B,allowedSkillNames:t.skills}):void 0,j=p.mode==="plan"&&p.enableTools?jf({telemetry:s??t.telemetry}):void 0,W=[D,j].filter((N)=>N!==void 0),J=W.length>0?[...r??t.extensions??[],...W]:r??t.extensions;if(p.enableTools){y.push(...em(t.cwd,t.providerId,p.mode,t.modelId,t.toolRoutingRules,f,void 0,u,s??t.telemetry,e.runCommandExecutionController));let N=C?e.agentPluginMcpServers:void 0;if(!p.disableMcpSettingsTools||N?.length){let te=await F4({logger:t.logger,includeSettings:!p.disableMcpSettingsTools,agentPluginServers:N});y.push(...te.tools),le=te.shutdown}}let X,G=p.enableAgentTeams?xM():void 0,Ce=G?.loadRuntime(b),he=Ce?.state,Zt=Ce?.teammates??[],Ue=new Map(Zt.map((N)=>[N.agentId,N])),Ze=G?new Rb({teamKey:b,store:G,source:()=>X,teammates:()=>Array.from(Ue.values()),onError:(N)=>(o??t.logger)?.log?.(`[team] failed to persist team state: ${N instanceof Error?N.message:String(N)}`)}):void 0,je=t.sessionId||S,en,vt=[],$t=!1,pt=Ns({providerId:t.providerId,modelId:t.modelId,distinctId:e.distinctId,sessionId:t.sessionId,cwd:t.cwd,apiKey:t.apiKey??"",baseUrl:t.baseUrl,headers:t.headers,providerConfig:t.providerConfig,knownModels:t.knownModels,thinking:t.thinking,reasoningEffort:t.reasoningEffort,thinkingBudgetTokens:t.thinkingBudgetTokens,maxTokensPerTurn:t.maxTokensPerTurn,temperature:t.temperature,maxIterations:t.maxIterations,hooks:n,extensions:J,logger:o??t.logger,telemetry:e.telemetry??t.telemetry,workspaceMetadata:t.workspaceMetadata});if(p.enableSpawnAgent){if(w.configs.length>0)y.push(...Ab(ep({configProvider:pt,agents:w.configs,createSubAgentTools:(N)=>p.enableTools?D4(em(t.cwd,N.providerId??t.providerId,p.mode,N.modelId??t.modelId,t.toolRoutingRules,f,N.skills!==void 0&&M?.createSkillsExecutor?M.createSkillsExecutor(N.skills):void 0,u,s??t.telemetry,e.runCommandExecutionController),N):[],hookErrorMode:t.hookErrorMode,onSubAgentEvent:e.onSubAgentEvent,onSubAgentStart:e.onSubAgentStart,onSubAgentEnd:e.onSubAgentEnd}),f))}if(!this.teamRuntimeEntries.has(je))this.teamRuntimeEntries.set(je,{delegatedAgentConfigProvider:pt});let Z=()=>{if(!p.enableAgentTeams)return;let N=this.teamRuntimeEntries.get(je)??{delegatedAgentConfigProvider:pt};if(this.teamRuntimeEntries.set(je,N),X=N.runtime,!X){if(X=new Id({teamName:S,leadAgentId:t.sessionId||"lead",missionLogIntervalSteps:p.missionLogIntervalSteps,missionLogIntervalMs:p.missionLogIntervalMs,onStateDirty:()=>Ze?.markStateDirty(),onTeamEvent:(te)=>{if(l(te),Ze){if(te.type==="teammate_spawned"&&te.teammate?.rolePrompt){let ze={agentId:te.agentId,rolePrompt:te.teammate.rolePrompt,modelId:te.teammate.modelId,maxIterations:te.teammate.maxIterations};Ue.set(ze.agentId,ze),Ze.markTeammatesDirty()}if(te.type==="teammate_shutdown"&&!$4(te.reason))Ue.delete(te.agentId),Ze.markTeammatesDirty();Ze.onEvent(te)}}}),he)X.hydrateState(he),$t=!0;N.runtime=X}if(!x){if(!X)return;x=!0;let te=Qu({runtime:X,leadAgentId:t.sessionId||"lead",restoredFromPersistence:Boolean(he),restoredTeammates:Zt,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(ze)=>{vt=ze,en?.addTools(ze)},createBaseTools:p.enableTools?()=>em(t.cwd,t.providerId,p.mode,t.modelId,t.toolRoutingRules,f,void 0,u,s??t.telemetry,e.runCommandExecutionController):void 0,teammateConfigProvider:pt});if($t)X.recoverActiveRuns("runtime_recovered");if(te.restoredFromPersistence)a?.();y.push(...te.tools)}return X};if(p.enableSpawnAgent&&i){let N=i();y.push({...N,execute:async(te,ze)=>(Z(),N.execute(te,ze))})}if(p.enableAgentTeams)Z();let et=Ab(y,f),tn=et.some((N)=>N.name==="submit_and_exit"&&N.lifecycle?.completesRun===!0),O=p.enableAgentTeams?()=>{let N=this.teamRuntimeEntries.get(je)?.runtime;if(!N)return;let te=N.listTasks(),ze=te.some((nn)=>nn.status==="in_progress"||nn.status==="pending"),kc=N.listRuns({}),Di=kc.some((nn)=>nn.status==="running"||nn.status==="queued");if(ze||Di){let nn=te.filter((Tt)=>Tt.status==="in_progress"||Tt.status==="pending").map((Tt)=>`${Tt.id} (${Tt.status}): ${Tt.title}`).join(", "),st=kc.filter((Tt)=>Tt.status==="running"||Tt.status==="queued").map((Tt)=>`${Tt.id} (${Tt.status})`).join(", "),Qn=[];if(nn)Qn.push(`Unfinished tasks: ${nn}`);if(st)Qn.push(`Active runs: ${st}`);return`[SYSTEM] You still have team obligations. ${Qn.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,ke=tn?{requireCompletionTool:!0,...O?{completionGuard:O}:{}}:O?{completionGuard:O}:void 0;return{tools:et,modelTools:m,logger:o??t.logger,telemetry:s??t.telemetry,teamRuntime:X,teamRestoredFromPersistence:Boolean(he),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(je)?.delegatedAgentConfigProvider??pt,extensions:J,completionPolicy:ke,registerLeadAgent:(N)=>{if(en=N,vt.length>0)N.addTools(ir(vt,[...h]))},shutdown:async(N)=>{B4(X,N),Ze?.dispose(),this.teamRuntimeEntries.delete(je),await le?.();for(let te of Y)te.stop()}}}}import{normalizeUserInput as j4}from"@cline/shared";import{nanoid as q4}from"nanoid";class LM{list(e){return e?Nt(e):[]}update(e,t){if(!e)return{sessionId:t.sessionId,prompts:[],updated:!1};let n=t.promptId.trim(),r=e.pendingPrompts.findIndex((d)=>d.id===n);if(r<0)return{sessionId:t.sessionId,prompts:Nt(e),updated:!1};let o=e.pendingPrompts[r];if(!o)return{sessionId:t.sessionId,prompts:Nt(e),updated:!1};let s=t.prompt===void 0?o.prompt:j4(t.prompt).trim();if(!s)throw Error("prompt cannot be empty");let i=t.delivery??o.delivery,a={...o,prompt:s,mode:t.mode??o.mode,delivery:i};return e.pendingPrompts.splice(r,1),K4(e,a,r,o.delivery),{sessionId:t.sessionId,prompts:Nt(e),prompt:nm(a),updated:!0}}delete(e,t){if(!e)return{sessionId:t.sessionId,prompts:[],removed:!1};let n=t.promptId.trim(),r=e.pendingPrompts.findIndex((s)=>s.id===n);if(r<0)return{sessionId:t.sessionId,prompts:Nt(e),removed:!1};let[o]=e.pendingPrompts.splice(r,1);return{sessionId:t.sessionId,prompts:Nt(e),prompt:o?nm(o):void 0,removed:!0}}enqueue(e,t){let{prompt:n,mode:r,delivery:o,userImages:s,userFiles:i}=t,a=e.pendingPrompts.findIndex((d)=>d.prompt===n);if(a>=0){let[d]=e.pendingPrompts.splice(a,1),c={...d,prompt:n,mode:r??d.mode,userImages:s??d.userImages,userFiles:i??d.userFiles};if(o==="steer"||d.delivery==="steer")e.pendingPrompts.unshift({...c,delivery:"steer"});else e.pendingPrompts.push(c)}else{let d={id:`pending_${Date.now()}_${q4(5)}`,prompt:n,mode:r,delivery:o,userImages:s,userFiles:i};if(o==="steer")e.pendingPrompts.unshift(d);else e.pendingPrompts.push(d)}return Nt(e)}consumeSteer(e){let t=e.pendingPrompts.findIndex((r)=>r.delivery==="steer");if(t<0)return{prompts:Nt(e)};let[n]=e.pendingPrompts.splice(t,1);return{entry:n,prompts:Nt(e)}}shiftNext(e){return{entry:e.pendingPrompts.shift(),prompts:Nt(e)}}requeueFront(e,t){return e.pendingPrompts.unshift(t),Nt(e)}clear(e){return e.pendingPrompts.length=0,[]}}class Eb{deps;service=new LM;constructor(e){this.deps=e}list(e){return this.service.list(this.deps.getSession(e))}steerFirst(e){let t=this.deps.getSession(e),n=t?.pendingPrompts[0];if(!n||n.delivery==="steer")return{sessionId:e,prompts:this.service.list(t),updated:!1};return this.update({sessionId:e,promptId:n.id,delivery:"steer"})}update(e){let t=this.deps.getSession(e.sessionId);if(!t)return{sessionId:e.sessionId,prompts:[],updated:!1};let n=this.service.update(t,e);if(this.emitPrompts(t),n.updated&&n.prompt?.delivery==="steer"&&!t.aborting)t.agent.notifyPendingUserMessage();return this.scheduleDrain(e.sessionId,t),n}delete(e){let t=this.deps.getSession(e.sessionId);if(!t)return{sessionId:e.sessionId,prompts:[],removed:!1};let n=this.service.delete(t,e);return this.emitPrompts(t),this.scheduleDrain(e.sessionId,t),n}enqueue(e,t){let n=this.deps.getSession(e);if(!n)return;if(this.service.enqueue(n,t),this.emitPrompts(n),t.delivery==="steer"&&!n.aborting)n.agent.notifyPendingUserMessage();this.scheduleDrain(e,n)}consumeSteer(e){let t=this.deps.getSession(e);if(!t)return;let{entry:n}=this.service.consumeSteer(t);if(!n)return;return this.emitPrompts(t),this.emitSubmitted(t,n),n}discardQueue(e){if(e.pendingPrompts.length===0)return;this.service.clear(e),this.emitPrompts(e)}emitPrompts(e){this.deps.emit({type:"pending_prompts",payload:{sessionId:e.sessionId,prompts:Nt(e)}})}scheduleDrain(e,t){if(t.pendingPrompts.length===0||t.aborting||t.drainingPendingPrompts||!t.agent.canStartRun())return;queueMicrotask(()=>{this.drain(e)})}async drain(e){let t=this.deps.getSession(e);if(!t)return;if(t.aborting||t.drainingPendingPrompts)return;if(!t.agent.canStartRun())return;let{entry:n}=this.service.shiftNext(t);if(!n)return;this.emitPrompts(t),this.emitSubmitted(t,n),t.drainingPendingPrompts=!0;let r=!0;try{let o=await this.deps.send({sessionId:e,prompt:n.prompt,...n.mode?{mode:n.mode}:{},userImages:n.userImages,userFiles:n.userFiles});if(z4(o))r=!1}catch{r=!1,this.service.requeueFront(t,n),this.emitPrompts(t)}finally{if(t.drainingPendingPrompts=!1,r&&t.pendingPrompts.length>0&&t.status!=="failed"&&t.status!=="cancelled")queueMicrotask(()=>{this.drain(e)})}}emitSubmitted(e,t){let n=nm(t);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:e.sessionId,id:n.id,prompt:n.prompt,delivery:n.delivery,attachmentCount:n.attachmentCount,userImages:n.userImages,userFiles:n.userFiles}})}}function z4(e){return typeof e==="object"&&e!==null&&"finishReason"in e&&e.finishReason==="error"}function nm(e){return{id:e.id,prompt:e.prompt,delivery:e.delivery,attachmentCount:(e.userImages?.length??0)+(e.userFiles?.length??0),userImages:e.userImages,userFiles:e.userFiles}}function Nt(e){return e.pendingPrompts.map(nm)}function K4(e,t,n,r){if(t.delivery==="steer")e.pendingPrompts.unshift(t);else if(r==="steer")e.pendingPrompts.push(t);else e.pendingPrompts.splice(n,0,t)}ve();class rm{deps;constructor(e){this.deps=e}lastKnownIdentityBySession=new Map;static MAX_IDENTITY_SNAPSHOTS=512;dispatchAgentEvent(e,t,n){let r=this.deps.getSession(e),o={sessionId:e,config:t,liveSession:r,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},s=RS(n);if(!!r&&(!s.agentId||s.agentId===xb(r.agent))){let a={agentId:xb(r.agent),conversationId:r.agent.getConversationId(),...r?.runtime.teamRuntime?{teamRole:"lead"}:{}};this.rememberSessionIdentity(e,a),fp(o,n,{...a,isPrimaryAgentEvent:!0});return}fp(o,n,{...r?{}:this.lastKnownIdentityBySession.get(e),isPrimaryAgentEvent:!1})}rememberSessionIdentity(e,t){if(this.lastKnownIdentityBySession.delete(e),this.lastKnownIdentityBySession.set(e,t),this.lastKnownIdentityBySession.size>rm.MAX_IDENTITY_SNAPSHOTS){let n=this.lastKnownIdentityBySession.keys().next().value;if(n!==void 0)this.lastKnownIdentityBySession.delete(n)}}async handleTeamEvent(e,t){let n=this.deps.getSession(e);if(n){if(rS(n,t),t.type==="agent_event"){let r={sessionId:e,config:n.config,liveSession:n,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};fp(r,t.event,{agentId:t.agentId,teamRole:"teammate",teamAgentId:t.agentId,isPrimaryAgentEvent:!1})}if(t.type==="teammate_spawned"){let r=Wn({agentId:t.teammate.runtimeAgentId??t.agentId,conversationId:t.teammate.conversationId,parentAgentId:t.teammate.parentAgentId,createdByAgentId:xb(n.agent),teamId:n.runtime.teamRuntime?.getTeamId(),teamName:n.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:t.agentId});if(r)qr(n.config.telemetry,{ulid:e,modelId:t.teammate.modelId??n.config.modelId,provider:n.config.providerId,...r})}}if(await oS(e,t,this.deps.invokeBackendOptional),n)sS(n,e,t,this.deps.emit)}async handlePluginEvent(e,t,n,r){if(t.name==="plugin_log"){this.handlePluginLog(e,t.payload);return}if(t.name==="plugin_telemetry"){this.handlePluginTelemetry(e,t.payload,r);return}if(t.name==="automation_event"){let c=this.deps.getSession(e)?.config.extensionContext?.automation??n;if(!c)return;let u=t.payload&&typeof t.payload==="object"?t.payload:void 0;if(!u)return;await c.ingestEvent(u);return}if(t.name!=="steer_message"&&t.name!=="queue_message"&&t.name!=="pending_prompt")return;let o=t.payload&&typeof t.payload==="object"?t.payload:void 0,s=typeof o?.sessionId==="string"&&o.sessionId.trim().length>0?o.sessionId.trim():e,i=typeof o?.prompt==="string"?o.prompt.trim():"";if(!i)return;let a=t.name==="steer_message"?"steer":t.name==="queue_message"?"queue":o?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(s,{prompt:i,delivery:a})}handlePluginTelemetry(e,t,n){let o=this.deps.getSession(e)?.config.telemetry??n;if(!o||!t||typeof t!=="object")return;let s=t,i=typeof s.pluginName==="string"&&s.pluginName?s.pluginName:"unknown";if(s.kind==="event"){let a=typeof s.event==="string"?s.event.trim():"";if(!a)return;let d={...s.properties&&typeof s.properties==="object"?s.properties:{},plugin_name:i,session_id:e};if(s.required===!0)o.captureRequired(`plugin.${a}`,d);else o.capture({event:`plugin.${a}`,properties:d});return}if(s.kind==="metric"){let a=typeof s.name==="string"?s.name.trim():"",d=typeof s.value==="number"?s.value:NaN;if(!a||Number.isNaN(d))return;let c={...s.attributes&&typeof s.attributes==="object"?s.attributes:{},plugin_name:i},u=typeof s.description==="string"?s.description:void 0,l=s.required===!0,p=`plugin.${a}`;if(s.metric==="counter")o.recordCounter(p,d,c,u,l);else if(s.metric==="histogram")o.recordHistogram(p,d,c,u,l);else if(s.metric==="gauge")o.recordGauge(p,d,c,u,l)}}handlePluginLog(e,t,n){let r=this.deps.getSession(e),o=n??r?.config.extensionContext?.logger??r?.config.logger;if(!o||!t||typeof t!=="object")return;let s=t,i=typeof s.message==="string"?s.message:"";if(!i)return;let a=s.metadata&&typeof s.metadata==="object"?{...s.metadata}:{};if(a.sessionId??=e,typeof s.pluginName==="string"&&s.pluginName)a.pluginName=s.pluginName;if(s.level==="debug"){o.debug(i,a);return}if(s.level==="error"){if(o.error)o.error(i,a);else o.log(i,{...a,severity:"error"});return}o.log(i,a)}}function xb(e){return e.getAgentId()}function _b(e){return{sessionId:e.sessionId,source:e.source,pid:process.pid,startedAt:e.startedAt,endedAt:e.endedAt??null,exitCode:e.exitCode??null,status:e.status,interactive:e.interactive,provider:e.config.providerId,model:e.config.modelId,cwd:e.config.cwd,workspaceRoot:jn(e.config),teamName:e.config.teamName?.trim()||void 0,enableTools:e.config.enableTools,enableSpawn:e.config.enableSpawnAgent,enableTeams:e.config.enableAgentTeams,parentSessionId:typeof e.sessionMetadata?.parentSessionId==="string"?e.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof e.sessionMetadata?.parentAgentId==="string"?e.sessionMetadata.parentAgentId:void 0,agentId:typeof e.sessionMetadata?.agentId==="string"?e.sessionMetadata.agentId:void 0,conversationId:typeof e.sessionMetadata?.conversationId==="string"?e.sessionMetadata.conversationId:void 0,isSubagent:typeof e.sessionMetadata?.isSubagent==="boolean"?e.sessionMetadata.isSubagent:!1,prompt:e.pendingPrompt,metadata:e.sessionMetadata,messagesPath:e.artifacts?.messagesPath,updatedAt:e.updatedAt??e.endedAt??e.startedAt}}function Mb(e,t){let n=e[t];return typeof n==="function"?n:null}async function NM(e,t,...n){let r=Mb(e,t);if(!r)throw Error(`session service method not available: ${t}`);return Promise.resolve(r.apply(e,n))}async function DM(e,t,...n){let r=Mb(e,t);if(!r)return;await Promise.resolve(r.apply(e,n))}async function UM(e,t,...n){let r=Mb(e,t);if(!r)return;return await Promise.resolve(r.apply(e,n))}qt();ve();function Ob(e,t,n){return{onSubAgentEvent:(r)=>e.onAgentEvent(n,t,r),onSubAgentStart:(r)=>{let o=e.getSession(n)?.runtime.teamRuntime;e.subAgentStarts.set(r.subAgentId,{startedAt:Date.now(),rootSessionId:n});let s=Wn({agentId:r.subAgentId,conversationId:r.conversationId,parentAgentId:r.parentAgentId,teamId:o?.getTeamId(),teamName:o?.getTeamName(),createdByAgentId:r.parentAgentId});if(s)qr(t.telemetry,{ulid:n,modelId:t.modelId,provider:t.providerId,...s});Ac(t.telemetry,{event:"started",ulid:n,durationMs:0,parentId:r.parentAgentId,agentId:r.subAgentId,...s}),e.invokeBackendOptional("handleSubAgentStart",n,r)},onSubAgentEnd:(r)=>{let o=e.getSession(n)?.runtime.teamRuntime,s=e.subAgentStarts.get(r.subAgentId),i=s?Date.now()-s.startedAt:0,a=r.result?.text?r.result.text.split(`
885
- `).length:0;Ac(t.telemetry,{event:"ended",ulid:n,durationMs:i,outputLines:a,errorMessage:r.error?String(r.error):void 0,agentId:r.subAgentId,parentId:r.parentAgentId,...Wn({agentId:r.subAgentId,conversationId:r.conversationId,parentAgentId:r.parentAgentId,teamId:o?.getTeamId(),teamName:o?.getTeamName(),createdByAgentId:r.parentAgentId})}),e.subAgentStarts.delete(r.subAgentId),e.invokeBackendOptional("handleSubAgentEnd",n,r)}}}function Lb(e,t,n,r){let o=Ob(e,t,n);return Us({configProvider:{getRuntimeConfig:()=>e.getSession(n)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:t.providerId,modelId:t.modelId,cwd:t.cwd,apiKey:t.apiKey,baseUrl:t.baseUrl,headers:t.headers,providerConfig:t.providerConfig,knownModels:t.knownModels,thinking:t.thinking,maxIterations:t.maxIterations,hooks:t.hooks,extensions:t.extensions,logger:t.logger,telemetry:t.telemetry},getConnectionConfig:()=>e.getSession(n)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:t.providerId,modelId:t.modelId,apiKey:t.apiKey,baseUrl:t.baseUrl,headers:t.headers,providerConfig:t.providerConfig,knownModels:t.knownModels,thinking:t.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let i=t.enableTools?Na({cwd:t.cwd,telemetry:t.telemetry,...sn[fr({mode:t.mode})],executors:r}):[];if(t.enableSpawnAgent)i.push(Lb(e,t,n,r));return ir(i)},...o})}import{readFile as G4,stat as V4}from"node:fs/promises";var J4=20480000;async function HM(e){let t=await V4(e);if(!t.isFile())throw Error("Path is not a file");if(t.size>J4)throw Error("File is too large to read into context.");let n=await G4(e,"utf8");if(n.includes("\x00"))throw Error("Cannot read binary file into context.");return n}var FM=5000,Ub;function r3(e,t){if(Ub)return;Ub=Lk().then(()=>{return}).catch((n)=>{Ub=void 0,e?.error?.("Detached command log recovery failed",{error:n}),Dt(t,{component:"core",operation:"command.detached_log_recovery",error:n,severity:"warn",handled:!0})})}function Yd(e){return typeof e==="number"&&Number.isFinite(e)?e:void 0}function o3(e){if(!e||typeof e!=="object"||Array.isArray(e))return;let t=e,n=Yd(t.inputTokens),r=Yd(t.outputTokens),o=Yd(t.cacheReadTokens),s=Yd(t.cacheWriteTokens),i=Yd(t.totalCost);if(n===void 0||r===void 0||o===void 0||s===void 0||i===void 0)return;return{inputTokens:n,outputTokens:r,cacheReadTokens:o,cacheWriteTokens:s,totalCost:i}}function s3(e,t){return{inputTokens:Math.max(e.inputTokens,t.inputTokens),outputTokens:Math.max(e.outputTokens,t.outputTokens),cacheReadTokens:Math.max(e.cacheReadTokens,t.cacheReadTokens),cacheWriteTokens:Math.max(e.cacheWriteTokens,t.cacheWriteTokens),totalCost:Math.max(e.totalCost,t.totalCost)}}function BM(e,t){if(!t)return!1;if(e.source_message_count!==t.source_message_count)return e.source_message_count<t.source_message_count;return Date.parse(e.updated_at)<Date.parse(t.updated_at)}function i3(e){return e==="steer_message"||e==="queue_message"||e==="pending_prompt"}class Ur{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;connectorsRequest;events=new cd;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new yi;runCommandExecutionController=new wa;constructor(e){let t=Y4();if(t)n3(t);let n=_t(e.distinctId);if(this.distinctId=n,this.sessionService=e.sessionService,this.runtimeBuilder=e.runtimeBuilder??new tm,this.createAgentInstance=e.createAgent??((r)=>new br(r)),this.defaultCapabilities=at(e.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=e.toolPolicies,this.providerSettingsManager=e.providerSettingsManager??new yt,this.oauthTokenManager=e.oauthTokenManager??new di({providerSettingsManager:this.providerSettingsManager,telemetry:e.telemetry}),this.defaultTelemetry=e.telemetry,this.defaultLogger=e.logger,e.distinctId!==void 0)this.defaultTelemetry?.setDistinctId(n);this.defaultFetch=e.fetch,this.connectorsRequest=e.connectorsRequest,r3(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new Eb({getSession:(r)=>this.sessions.get(r),emit:(r)=>this.emit(r),send:(r)=>this.runTurn(r)}),this.pendingPrompts={steerFirst:async(r)=>this.pendingPromptsController.steerFirst(r.sessionId),list:async(r)=>this.pendingPromptsController.list(r.sessionId),update:async(r)=>this.pendingPromptsController.update(r),delete:async(r)=>this.pendingPromptsController.delete(r)},this.eventBridge=new rm({getSession:(r)=>this.sessions.get(r),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(r)=>this.emit(r),persistMessages:(r,o,s)=>{this.invoke("persistSessionMessages",r,o,s).catch((i)=>{let a=this.sessions.get(r);(a?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:r,error:i}),Dt(a?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:i,severity:"warn",handled:!0,context:{sessionId:r,providerId:a?.config.providerId,modelId:a?.config.modelId}})})},enqueuePendingPrompt:(r,o)=>this.pendingPromptsController.enqueue(r,o),invokeBackendOptional:(r,...o)=>this.invokeOptional(r,...o)})}async applyInitialOAuthCredentials(e){if(e.config.apiKey?.trim())return e;let t=await this.oauthTokenManager.resolveProviderApiKey({providerId:e.config.providerId});if(!t?.apiKey)return e;return{...e,config:{...e.config,apiKey:t.apiKey}}}async startSession(e){let t=e.config.sessionId?.trim()??"",n=t||Z4(),r=t.length>0&&(e.initialMessages?.length??0)>0&&!e.prompt?.trim(),o=Boolean(e.config.cwd?.trim()||e.config.workspaceRoot?.trim()),s=r&&!o?await this.invokeOptionalValue("readSessionManifest",n):void 0,i=s?{...e.config,cwd:s.cwd,workspaceRoot:s.workspace_root}:await tP(e.config);return await this.startResolvedSession({...e,config:i},n,t.length>0,s)}async startResolvedSession(e,t,n,r){let o=e.source??ie.CLI,s=be(),i=await this.applyInitialOAuthCredentials(e),a=i.initialMessages??[],d=a.length>0?gp(a):rt(),c=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!c)throw Error("session service method not available: ensureSessionsDir");let u=Nb(c,t),l=Nb(u,`${t}.messages.json`),p=Nb(u,`${t}.json`),m=jn(e.config),g=e.interactive===!0&&!i.prompt?.trim(),f=ht.parse({version:1,session_id:t,source:o,pid:process.pid,started_at:s,status:g?"idle":"running",interactive:e.interactive===!0,provider:i.config.providerId,model:i.config.modelId,cwd:i.config.cwd,workspace_root:m,team_name:i.config.teamName,enable_tools:i.config.enableTools,enable_spawn:i.config.enableSpawnAgent,enable_teams:i.config.enableAgentTeams,prompt:i.prompt?.trim()||void 0,messages_path:l}),h,y,S=n&&a.length>0&&!i.prompt?.trim();if(S){let O=r??await this.invokeOptionalValue("readSessionManifest",t);if(O)f=O,h={manifestPath:p,messagesPath:O.messages_path||l,compactionPath:O.compaction_path,manifest:O},y=await this.invokeOptionalValue("readSessionCompactionState",t)}let b=await this.seedAggregateUsageFromArtifacts({initialUsage:d,sessionDir:u,rootMessagesPath:h?.messagesPath??l,manifest:f});this.usageBySession.set(t,d),this.aggregateUsageBySession.set(t,b);let w=at(this.defaultCapabilities,e.capabilities),v=w?.toolExecutors??this.toolExecutors,T=e.localRuntime,k=T?.extensionContext?.logger??T?.logger,P=T?.extensionContext?.automation,I=T?.extensionContext?.telemetry??T?.telemetry??this.defaultTelemetry,C,E=[],x={getSession:(O)=>this.sessions.get(O),subAgentStarts:this.subAgentStarts,onAgentEvent:(O,ke,N)=>this.eventBridge.dispatchAgentEvent(O,ke,N),invokeBackendOptional:(O,...ke)=>this.invokeOptional(O,...ke)},Y=kn(h?.manifest.metadata),M=kn(Re(i.sessionMetadata,{mode:i.mode??Y?.mode,trigger:i.mode?void 0:Y?.trigger}));C=await J_({input:i,localRuntime:e.localRuntime,sessionId:t,sessionOrigin:M,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:w,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,connectorsRequest:this.connectorsRequest,onPluginEvent:(O)=>{if(O.name==="plugin_log"){this.eventBridge.handlePluginLog(t,O.payload,k);return}if(E&&i3(O.name)){E.push(O);return}this.eventBridge.handlePluginEvent(t,O,P,I)},onPluginIssue:(O)=>{if(!C)return;this.eventBridge.dispatchAgentEvent(t,C.config,{type:"notice",noticeType:"status",displayRole:"status",message:su(O),metadata:{pluginIssue:O}})},onTeamEvent:(O)=>{this.eventBridge.handleTeamEvent(t,O),C.config.onTeamEvent?.(O)},createSpawnTool:()=>Lb(x,C.config,t,v),createSubAgentLifecycleCallbacks:(O)=>Ob(x,O,t),readSessionMetadata:async()=>(await this.getSession(t))?.metadata,writeSessionMetadata:async(O)=>{await this.persistSessionMetadata(t,()=>O)}});let le=Re(Kh({...h?.manifest.metadata??{},...i.sessionMetadata??{}},C.gitState),{mode:M?.mode,trigger:M?.trigger,version:C.config.extensionContext?.client?.version});if(!h)f.metadata=le;let B;try{B=await this.runtimeBuilder.build({...C.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController})}catch(O){throw await C.pluginSandboxShutdown?.().catch(()=>{return}),O}let D=C.config,j=C.providerConfig;if(B.teamRuntime&&!D.teamName?.trim())D.teamName=B.teamRuntime.getTeamName();let W=async()=>{let O=this.sessions.get(t);if(!O||!or(O.config.providerId))return!1;try{return await this.syncOAuthCredentials(O,{forceRefresh:!0}),!0}catch{return!1}};B.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:W});let J=[...B.tools,...D.extraTools??[]],X=B.extensions??C.extensions,G=i.initialCompactionState,Ce,he=G??y,Zt=pp(D),Ue=S?Xp(f.metadata):void 0,Ze=Ue?Nx({config:D,importedFrom:Ue.tool,next:Zt}):Zt,je=he?{...he,conversation_id:he.conversation_id?.trim()||t}:void 0,en=IS({compact:Ze,getState:()=>Ce?.compactionState,saveState:async(O,ke)=>{let N=Ce;if(!N)return;let te={...O,conversation_id:N.sessionId};try{if(!(await this.persistActiveSessionCompactionState(N,te,ke)).updated)D.logger?.debug?.("Skipped stale session compaction state",{sessionId:N.sessionId,sourceMessageCount:te.source_message_count})}catch(ze){D.logger?.error?.("Failed to persist session compaction state",{sessionId:N.sessionId,error:ze}),Dt(D.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:ze,context:{sessionId:N.sessionId,providerId:D.providerId,modelId:D.modelId}})}}}),vt={distinctId:this.distinctId,sessionId:t,providerId:j.providerId,modelId:j.modelId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,onAuthError:W,knownModels:j.knownModels,providerConfig:j,thinking:D.thinking,reasoningEffort:D.reasoningEffort??j.reasoningEffort,thinkingBudgetTokens:D.thinkingBudgetTokens,maxTokensPerTurn:D.maxTokensPerTurn,temperature:D.temperature,systemPrompt:D.systemPrompt,maxIterations:D.maxIterations,execution:D.execution,prepareTurn:en,tools:J,modelTools:B.modelTools,hooks:C.hooks,extensions:X,hookErrorMode:D.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:HM,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(O)=>{let ke=C.requestToolApproval,N=this.sessions.get(t);if(N)await this.markTurnPending(N);try{if(!ke)return{approved:!1,reason:"Tool approval callback is not configured."};return await ke(O)}finally{let te=this.sessions.get(t);if(te?.status==="pending")await this.markTurnRunning(te)}}:void 0,telemetry:D.telemetry,onConsecutiveMistakeLimitReached:D.onConsecutiveMistakeLimitReached,completionPolicy:B.completionPolicy,consumePendingUserMessage:()=>{let O=this.pendingPromptsController.consumeSteer(t);return O?Ed(O.prompt,O.mode??D.mode):void 0},logger:B.logger??D.logger,extensionContext:D.extensionContext,onEvent:(O)=>this.eventBridge.dispatchAgentEvent(t,D,O)};vt.hooks={...vt.hooks,onEvent:async(O)=>{if(await C.hooks?.onEvent?.(O),O.type!=="assistant-message")return;let ke=this.sessions.get(t);if(!ke)return;let N=ke.agent.getMessages();try{await this.invoke("persistSessionMessages",t,N,D.systemPrompt)}catch(te){D.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:t,error:te}),Dt(D.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:te,severity:"warn",handled:!0,context:{sessionId:t,providerId:D.providerId,modelId:D.modelId}})}}};let $t=this.createAgentInstance(vt);if(vt.onEvent)$t.subscribeEvents(vt.onEvent);B.registerLeadAgent?.($t);let pt=Wn({agentId:$t.getAgentId(),conversationId:$t.getConversationId(),teamId:B.teamRuntime?.getTeamId(),teamName:B.teamRuntime?.getTeamName(),teamRole:B.teamRuntime?"lead":void 0});if(pM(D,t,n,m,pt),pt)qr(D.telemetry,{ulid:t,modelId:D.modelId,provider:D.providerId,...pt});if(B.teamRuntime)sg(D.telemetry,{ulid:t,teamId:B.teamRuntime.getTeamId(),teamName:B.teamRuntime.getTeamName(),leadAgentId:$t.getAgentId(),restoredFromPersistence:B.teamRestoredFromPersistence===!0});let Z={sessionId:t,config:D,sessionMetadata:le,...h?{artifacts:h}:{},source:o,startedAt:h?.manifest.started_at??s,updatedAt:h?.manifest.ended_at??h?.manifest.started_at??s,pendingPrompt:f.prompt,runtime:B,agent:$t,started:!1,status:h?.manifest.status??(g?"idle":"running"),aborting:!1,interactive:e.interactive===!0,persistedMessages:a,compactionState:je,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,taskCompletedEmitted:!1,lastInteractiveTurnFinishReason:void 0};if(Ce=Z,Z.compactionState&&!this.isCompactionStateForSession(Z.sessionId,Z.compactionState,Z))Z.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:Z.sessionId,conversationId:Z.compactionState.conversation_id}),Z.compactionState=void 0;this.sessions.set(t,Z);let et=E??[];E=null;for(let O of et)this.eventBridge.handlePluginEvent(t,O,P,I);if(h)await this.refreshActiveSessionGitMetadata(Z,C.gitState);if(a.length>0&&!h)try{await this.ensureSessionPersisted(Z),await this.invoke("persistSessionMessages",t,a,Z.config.systemPrompt)}catch(O){Z.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:t,error:O}),Dt(Z.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:O,severity:"warn",handled:!0,context:{sessionId:t,providerId:Z.config.providerId,modelId:Z.config.modelId}})}this.emitStatus(t,Z.status);let tn;try{if(i.prompt?.trim())if(tn=await this.executeTurn(Z,{prompt:i.prompt,userImages:i.userImages,userFiles:i.userFiles}),!Z.interactive)await this.finalizeSingleRun(Z,tn.finishReason);else await this.completeInteractiveTurn(Z,tn.finishReason)}catch(O){if(Z.interactive&&Z.aborting)tn=await this.completeAbortedInteractiveTurn(Z);else{Dt(Z.config.telemetry,{component:"core",operation:"session.start",error:O,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}});try{await this.failSession(Z)}catch(ke){Z.config.logger?.error?.("Session failure cleanup threw",{sessionId:Z.sessionId,error:ke})}throw O}}return{sessionId:t,manifest:f,manifestPath:p,messagesPath:l,result:tn,...C.pluginIssues.length>0?{pluginIssues:C.pluginIssues}:{}}}async restoreSession(e){return this.sessionVersioning.restoreCheckpoint({...e,telemetry:this.defaultTelemetry,getSession:(t)=>this.getSession(t),readMessages:(t)=>this.readSessionMessages(t),buildStartInput:(t,n)=>{let r=t.restoredCheckpointMetadata?{...n.sessionMetadata??{},checkpoint:t.restoredCheckpointMetadata}:n.sessionMetadata;return{...n,...r?{sessionMetadata:r}:{},initialMessages:t.initialMessages}},startSession:(t)=>this.startSession(t),getStartedSessionId:(t)=>t.sessionId,cleanupStartedSession:async(t)=>{if(!await this.deleteSession(t.sessionId))throw Error(`Failed to clean up restored session ${t.sessionId}`)},readRestoredSession:(t)=>this.getSession(t)})}async runTurn(e){let t=this.getSessionOrThrow(e.sessionId),n=t.agent.canStartRun(),r=e.delivery??(t.interactive&&!n?"queue":void 0);if(t.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:e.sessionId,promptLength:e.prompt.length,userImageCount:e.userImages?.length??0,userFileCount:e.userFiles?.length??0,delivery:r??"immediate"}}),r==="queue"||r==="steer"){this.pendingPromptsController.enqueue(e.sessionId,{prompt:e.prompt,mode:e.mode,delivery:r,userImages:e.userImages,userFiles:e.userFiles});return}try{let o=await this.executeTurn(t,{prompt:e.prompt,mode:e.mode,userImages:e.userImages,userFiles:e.userFiles});if(!t.interactive)await this.finalizeSingleRun(t,o.finishReason);else await this.completeInteractiveTurn(t,o.finishReason);if(o.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain(e.sessionId)});return o}catch(o){if(t.interactive&&t.aborting)return await this.completeAbortedInteractiveTurn(t);throw Dt(t.config.telemetry,{component:"core",operation:"session.submit",error:o,severity:"error",handled:!1,context:{sessionId:t.sessionId,providerId:t.config.providerId,modelId:t.config.modelId}}),await this.failSession(t),o}}async getAccumulatedUsage(e){let t=fy(this.usageBySession.get(e)),n=fy(this.aggregateUsageBySession.get(e));return t||n?{usage:t,aggregateUsage:n}:void 0}async abort(e,t){let n=this.sessions.get(e);if(!n)return;if(n.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:e}}),n.aborting=!0,n.drainingPendingPrompts)this.pendingPromptsController.discardQueue(n);let r=n.runtime.teamRuntime;try{r?.cancelOutstandingWork(t)}finally{if(r)n.activeTeamRunIds.clear(),n.pendingTeamRunUpdates.length=0,Ad(n);n.agent.abort(t)}}async proceedWhileRunning(e,t){return this.runCommandExecutionController.proceedWhileRunning(e,t)}async stopSession(e){let t=this.sessions.get(e);if(!t)return;if(t.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:e}}),t.interactive&&!xe(t.status)){await this.releaseSessionRuntime(t,"session_stop");return}if(t.interactive&&t.agent.canStartRun()){await this.shutdownSession(t,{status:this.resolveInteractiveStopStatus(t),exitCode:this.resolveInteractiveStopExitCode(t),shutdownReason:"session_stop",endReason:"stopped"});return}t.aborting=!0,t.agent.abort(Error("session_stop")),await this.shutdownSession(t,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose(e="session_manager_dispose"){let t=[...this.sessions.values()];if(t.length===0)return;await Promise.allSettled(t.map((n)=>n.interactive&&!xe(n.status)?this.releaseSessionRuntime(n,e):n.interactive&&n.agent.canStartRun()?this.shutdownSession(n,{status:this.resolveInteractiveStopStatus(n),exitCode:this.resolveInteractiveStopExitCode(n),shutdownReason:e,endReason:"disposed"}):this.shutdownSession(n,{status:"cancelled",exitCode:0,shutdownReason:e,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession(e){let t=this.sessions.get(e);if(t)return _b(t);let n=e.trim();if(!n)return;let r=await this.getRow(n);if(r)return ad(r);let o=await this.readManifest(n);return o?by(o):void 0}async listSessions(e=200,t={}){let r=(await this.listRows(e,t)).map(ad),o=new Set(r.map((s)=>s.sessionId));for(let s of this.sessions.values()){if(o.has(s.sessionId))continue;r.unshift(_b(s))}return r.slice(0,e)}async deleteSession(e){if(this.sessions.has(e))await this.stopSession(e);let t=await this.invoke("deleteSession",e);if(t.deleted)this.usageBySession.delete(e),this.aggregateUsageBySession.delete(e);return t.deleted}async updateSession(e,t){let n=await this.invokeOptionalValue("updateSession",{sessionId:e,prompt:t.prompt,metadata:t.metadata,title:t.title}),r=n?.updated===!0;if(r&&n.metadata!==void 0){let o=this.sessions.get(e.trim());if(o){if(o.sessionMetadata=n.metadata??void 0,o.artifacts)o.artifacts.manifest.metadata=o.sessionMetadata}}return{updated:r}}async updateSessionCompactionState(e,t){let n=e.trim();if(!n)return{updated:!1};let r=this.sessions.get(n),o=r?void 0:await this.getSession(n);if(!(r??o))return{updated:!1};if(r){let a=await this.readSessionMessages(n),d=t.source_message_count>0&&a.length>=t.source_message_count,c=d?a:void 0;if(d){if(!await this.canPersistCompactionState(n,t,r,void 0,a))return{updated:!1};r.agent.restore(a)}return await this.persistActiveSessionCompactionState(r,t,c)}if(!await this.canPersistCompactionState(n,t,void 0,o))return{updated:!1};let i=await this.invokeOptionalValue("readSessionCompactionState",n);if(BM(t,i))return{updated:!1};return await this.invoke("persistSessionCompactionState",n,t),{updated:!0}}async readSessionCompactionState(e){let t=e.trim();if(!t)return;let n=this.sessions.get(t);if(n)for(;;){let r=n.compactionStateWriteQueue;if(!r)return n.compactionState;await r.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",t)}isCompactionStateForSession(e,t,n,r){let o=t.conversation_id?.trim();if(!o)return!0;if(o===e)return!0;let s=n?.agent.getConversationId()?.trim()||r?.conversationId?.trim();return s?o===s:!1}async canPersistCompactionState(e,t,n,r,o){if(!t.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession(e,t,n,r))return!1;let s=o??n?.agent.getMessages()??await this.readSessionMessages(e);return ei(t,s)!==void 0}async persistActiveSessionCompactionState(e,t,n){if(!await this.canPersistCompactionState(e.sessionId,t,e,void 0,n))return{updated:!1};return await this.enqueueCompactionStateWrite(e,async()=>{let r=e.compactionState,o=r!==void 0&&ei(r,n??e.agent.getMessages())!==void 0;if(r&&(o?BM(t,r):Date.parse(t.updated_at)<Date.parse(r.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",e.sessionId,t),e.compactionState=t,{updated:!0}})}async enqueueCompactionStateWrite(e,t){let r=(e.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(t),o=r.then(()=>{return},()=>{return});e.compactionStateWriteQueue=o;try{return await r}finally{if(e.compactionStateWriteQueue===o)e.compactionStateWriteQueue=void 0}}async readLiveSessionMessages(e){let t=e.trim();if(!t)return[];let n=this.sessions.get(t);if(n){let r=n.agent.getMessages();if(r.length>0)return r}return this.readSessionMessages(t)}async readSessionMessages(e){let t=e.trim();if(!t)return[];let n=await this.getRow(t);if(n?.messagesPath)return Ir(n.messagesPath);let r=await this.readManifest(t);return Ir(r?.messages_path)}async dispatchHookEvent(e){await fA(e,{queueSpawnRequest:(t)=>this.invokeOptional("queueSpawnRequest",t),upsertSubagentSessionFromHook:(t)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",t),appendSubagentHookAudit:(t,n)=>this.invokeOptional("appendSubagentHookAudit",t,n),applySubagentStatus:(t,n)=>this.invokeOptional("applySubagentStatus",t,n)})}subscribe(e,t){return this.events.subscribe(e,t)}async updateSessionModel(e,t){await this.updateSessionConnection(e,{modelId:t})}async updateSessionConnection(e,t){let n=Ls(t),r=this.getSessionOrThrow(e);if(n.providerId!==void 0)r.config.providerId=n.providerId;if(n.modelId!==void 0)r.config.modelId=n.modelId;if(n.apiKey!==void 0)r.config.apiKey=n.apiKey;if(n.baseUrl!==void 0)r.config.baseUrl=n.baseUrl;if(n.headers!==void 0)r.config.headers=n.headers;if(n.providerConfig!==void 0)r.config.providerConfig=n.providerConfig;if(Object.hasOwn(n,"reasoningEffort"))r.config.reasoningEffort=n.reasoningEffort??void 0;if(Object.hasOwn(n,"thinkingBudgetTokens"))r.config.thinkingBudgetTokens=n.thinkingBudgetTokens??void 0;if(Object.hasOwn(n,"thinking")){if(r.config.thinking=n.thinking??void 0,n.thinking===!1||n.thinking===null)r.config.reasoningEffort=void 0,r.config.thinkingBudgetTokens=void 0}let o={...n.providerId!==void 0?{providerId:n.providerId}:{},...n.modelId!==void 0?{modelId:n.modelId}:{},...n.apiKey!==void 0?{apiKey:n.apiKey}:{},...n.baseUrl!==void 0?{baseUrl:n.baseUrl}:{},...n.headers!==void 0?{headers:n.headers}:{},...n.providerConfig!==void 0?{providerConfig:n.providerConfig}:{},...Object.hasOwn(n,"reasoningEffort")?{reasoningEffort:n.reasoningEffort??void 0}:{},...Object.hasOwn(n,"thinking")?{thinking:n.thinking??void 0}:{},...Object.hasOwn(n,"thinkingBudgetTokens")?{thinkingBudgetTokens:n.thinkingBudgetTokens??void 0}:{}};if(n.thinking===!1||n.thinking===null)o.reasoningEffort=void 0,o.thinkingBudgetTokens=void 0;let s={...n.apiKey!==void 0?{apiKey:n.apiKey}:{},...n.baseUrl!==void 0?{baseUrl:n.baseUrl}:{},...n.headers!==void 0?{headers:n.headers}:{}};if(r.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(o),r.agent.updateConnection(n),r.runtime.teamRuntime?.updateTeammateConnections(s),n.providerId||n.modelId)await this.mutateSessionManifest(r,(i)=>{if(n.providerId)i.provider=n.providerId;if(n.modelId)i.model=n.modelId})}async mutateSessionManifest(e,t){let n=e.artifacts;if(!n)return;let r=e.sessionId,s=(this.manifestMutationQueues.get(r)??Promise.resolve()).then(async()=>{let a=await this.invokeOptionalValue("readSessionManifest",r)??n.manifest;return t(a),n.manifest=a,await this.invoke("writeSessionManifest",n.manifestPath,a),a}),i=s.then(()=>{return},()=>{return});this.manifestMutationQueues.set(r,i);try{return await s}finally{if(this.manifestMutationQueues.get(r)===i)this.manifestMutationQueues.delete(r)}}handlePluginEvent(e,t,n){return this.eventBridge.handlePluginEvent(e,t,n)}async executeTurn(e,t){e.aborting=!1;let n=await this.prepareTurnInput(e,t),r=n.prompt.trim(),o=n?.userImages?.length,s=n?.userFiles?.length;if(!r&&!o&&!s)throw Error("prompt cannot be empty");if(!e.artifacts&&!e.pendingPrompt)e.pendingPrompt=r;if(await this.ensureSessionPersisted(e),!e.pendingPrompt){e.pendingPrompt=r;try{await this.invokeOptionalValue("updateSession",{sessionId:e.sessionId,prompt:r})}catch(i){e.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:e.sessionId,error:i})}}await this.refreshActiveSessionGitMetadata(e),await this.syncOAuthCredentials(e),await this.markTurnRunning(e);try{let i=await this.executeAgentTurn(e,r,n.userImages,n.userFiles);while(iS(e,i.finishReason)){let a=await aS(e);if(a.length===0)break;let d=dS(e,a);i=await this.executeAgentTurn(e,d)}return i}finally{await this.refreshActiveSessionGitMetadata(e)}}async completeInteractiveTurn(e,t){if(Rd(e))return;e.lastInteractiveTurnFinishReason=t,await this.markTurnIdle(e),e.aborting=!1}resolveInteractiveStopStatus(e){let t=e.lastInteractiveTurnFinishReason;if(!t)return"cancelled";switch(t){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return t}resolveInteractiveStopExitCode(e){return e.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn(e){let t=new Date,n=e.agent.getMessages(),r=rt();if(e.persistedMessages=n,e.started=e.started||n.length>0,n.length>0)try{await this.ensureSessionPersisted(e),await this.invoke("persistSessionMessages",e.sessionId,n,e.config.systemPrompt)}catch(o){e.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:e.sessionId,error:o}),Dt(e.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:o,severity:"warn",handled:!0,context:{sessionId:e.sessionId,providerId:e.config.providerId,modelId:e.config.modelId}})}return this.eventBridge.dispatchAgentEvent(e.sessionId,e.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:r}),await this.completeInteractiveTurn(e,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain(e.sessionId)}),{text:"",usage:r,messages:n,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:e.config.modelId,provider:e.config.providerId},startedAt:t,endedAt:t,durationMs:0}}async executeAgentTurn(e,t,n,r){let o=e.started||e.agent.getMessages().length>0,s=e.persistedMessages??e.agent.getMessages(),i=this.usageBySession.get(e.sessionId)??rt(),a=this.aggregateUsageBySession.get(e.sessionId)??i;e.turnUsageBaseline=i,e.turnAggregateUsageBaseline=a,e.turnPrimaryUsage=rt(),e.turnUsageByAgent=new Map,Qm(e.config.telemetry,e.sessionId,e.config.mode),Ui(e.config.telemetry,{ulid:e.sessionId,provider:e.config.providerId,model:e.config.modelId,source:"user",mode:e.config.mode,...this.getSessionAgentTelemetryIdentity(e)});try{let d=()=>{let f=o?e.agent.continue(t,n,r):e.agent.run(t,n,r);if(e.aborting)e.agent.abort(Error("Run aborted before it started"));return f},c=await this.runWithAuthRetry(e,d,s);e.started=!0;let u=Ol(c.messages,c,s);e.persistedMessages=u;let l=mp(e.turnUsageByAgent?.values()??[]),p=Ye(i,c.usage),m=Ye(Ye(rt(),c.usage),l),g=Ye(a,m);return this.usageBySession.set(e.sessionId,p),this.aggregateUsageBySession.set(e.sessionId,g),await this.persistSessionMetadata(e.sessionId,(f)=>({...f??{},totalCost:p.totalCost,aggregatedAgentsCost:g.totalCost,usage:p,aggregateUsage:g})),await this.invoke("persistSessionMessages",e.sessionId,u,e.config.systemPrompt),this.observeTaskCompletionTool(e,c),c}catch(d){Dt(e.config.telemetry,{component:"core",operation:"session.turn",error:d,severity:"error",handled:!1,context:{sessionId:e.sessionId,providerId:e.config.providerId,modelId:e.config.modelId}});try{await this.invoke("persistSessionMessages",e.sessionId,e.agent.getMessages(),e.config.systemPrompt)}catch(c){e.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:e.sessionId,error:c})}throw d}finally{e.turnUsageBaseline=void 0,e.turnAggregateUsageBaseline=void 0,e.turnPrimaryUsage=void 0,e.turnUsageByAgent=void 0}}observeTaskCompletionTool(e,t){if(e.submitAndExitObserved)return;if(!t.toolCalls.some((r)=>r.name===Me.SUBMIT_AND_EXIT&&r.error===void 0))return;e.submitAndExitObserved=!0,e.taskCompletedEmitted=!0,Rc(e.config.telemetry,{ulid:e.sessionId,provider:e.config.providerId,model:e.config.modelId,mode:e.config.mode,durationMs:Date.now()-Date.parse(e.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity(e)})}emitTaskCompletedOnTeardown(e,t){if(e.taskCompletedEmitted||e.submitAndExitObserved)return;if(!(e.interactive?e.lastInteractiveTurnFinishReason==="completed"&&!e.aborting&&e.agent.canStartRun():t==="completed"))return;e.taskCompletedEmitted=!0,Rc(e.config.telemetry,{ulid:e.sessionId,provider:e.config.providerId,model:e.config.modelId,mode:e.config.mode,durationMs:Date.now()-Date.parse(e.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity(e)})}async prepareTurnInput(e,t){let n=jn(e.config),r=t3(t.prompt).trim();if(!r)return{prompt:"",userImages:t.userImages,userFiles:this.resolveAbsoluteFilePaths(e.config.cwd,t.userFiles)};let o=await Bu(r,n);mM(e.config.telemetry,o);let s=Ed(o.prompt,t.mode??e.config.mode),i=this.resolveAbsoluteFilePaths(e.config.cwd,t.userFiles),a=this.resolveAbsoluteFilePaths(n,o.matchedFiles),d=Array.from(new Set([...i,...a]));return{prompt:s,userImages:t.userImages,userFiles:d.length>0?d:void 0}}async ensureSessionPersisted(e){if(e.artifacts)return;let t=jn(e.config);if(e.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:e.sessionId,source:e.source,pid:process.pid,status:e.status,interactive:e.interactive,provider:e.config.providerId,model:e.config.modelId,cwd:e.config.cwd,workspaceRoot:t,teamName:e.config.teamName,enableTools:e.config.enableTools,enableSpawn:e.config.enableSpawnAgent,enableTeams:e.config.enableAgentTeams,prompt:e.pendingPrompt,metadata:e.sessionMetadata,startedAt:e.startedAt}),e.compactionState){if(!(await this.persistActiveSessionCompactionState(e,e.compactionState)).updated)e.compactionState=void 0}}async markTurnRunning(e){if(e.status==="running")return;await this.updateStatus(e,"running",null)}async refreshActiveSessionGitMetadata(e,t){try{let n=t??await BR(jn(e.config));if(!n||!e.artifacts)return;if(HR(e.artifacts.manifest.metadata,n))return;await this.persistSessionMetadata(e.sessionId,(r)=>Kh({...r??{},...e.sessionMetadata??{}},n))}catch(n){e.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:e.sessionId,error:n})}}async markTurnPending(e){if(e.status==="pending")return;await this.updateStatus(e,"pending",null)}async markTurnIdle(e){if(e.status==="idle")return;await this.updateStatus(e,"idle",null)}async persistSessionMetadata(e,t){let n=this.sessions.get(e),r=await this.invokeOptionalValue("readSessionManifest",e)??n?.artifacts?.manifest,o=t(r?.metadata);if(!n?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:e,metadata:o}))?.updated===!1)return;n.sessionMetadata=o,n.artifacts.manifest.metadata=o}async finalizeSingleRun(e,t){if(Rd(e))return;let n=t==="aborted"||e.aborting,r=t==="error";await this.shutdownSession(e,{status:n?"cancelled":r?"failed":"completed",exitCode:r?1:0,shutdownReason:r?"session_error":"session_complete",endReason:t})}async failSession(e){e.lastInteractiveTurnFinishReason="error",await this.shutdownSession(e,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession(e,t){if(this.emitTaskCompletedOnTeardown(e,t.status),Ad(e),!e.aborting&&!e.agent.canStartRun())e.aborting=!0,e.agent.abort(Error(t.shutdownReason));let n=[],r=(o,s)=>{n.push(s),e.config.logger?.log("Session shutdown cleanup failed",{sessionId:e.sessionId,stage:o,error:s,severity:"warn"}),Dt(e.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:s,severity:"warn",handled:!0,context:{sessionId:e.sessionId,stage:o,status:t.status,shutdownReason:t.shutdownReason,providerId:e.config.providerId,modelId:e.config.modelId}})};if(e.artifacts){await this.refreshActiveSessionGitMetadata(e);try{await this.updateStatus(e,t.status,t.exitCode)}catch(o){r("update_status",o)}}try{await e.agent.shutdown(t.shutdownReason)}catch(o){r("agent_shutdown",o)}try{await Promise.resolve(e.runtime.shutdown(t.shutdownReason))}catch(o){r("runtime_shutdown",o)}try{await e.pluginSandboxShutdown?.()}catch(o){r("plugin_sandbox_shutdown",o)}if(this.sessions.delete(e.sessionId),this.emit({type:"ended",payload:{sessionId:e.sessionId,reason:t.endReason,ts:Date.now()}}),n.length>0&&t.status==="failed")throw n[0]}async releaseSessionRuntime(e,t){this.emitTaskCompletedOnTeardown(e);let n=[],r=(o,s)=>{n.push(s),e.config.logger?.log("Session runtime cleanup failed",{sessionId:e.sessionId,stage:o,error:s,severity:"warn"}),Dt(e.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:s,severity:"warn",handled:!0,context:{sessionId:e.sessionId,stage:o,reason:t,providerId:e.config.providerId,modelId:e.config.modelId}})};if(!e.aborting&&!e.agent.canStartRun())e.aborting=!0,e.agent.abort(Error(t));try{await e.agent.shutdown(t)}catch(o){r("agent_shutdown",o)}try{await Promise.resolve(e.runtime.shutdown(t))}catch(o){r("runtime_shutdown",o)}try{await e.pluginSandboxShutdown?.()}catch(o){r("plugin_sandbox_shutdown",o)}if(this.sessions.delete(e.sessionId),n.length>0)throw n[0]}async updateStatus(e,t,n){if(!e.artifacts)return;let r=await this.invoke("updateSessionStatus",e.sessionId,t,n);if(!r.updated)return;let o=await this.mutateSessionManifest(e,(s)=>{if(s.status=t,xe(t))delete s.ended_at,s.exit_code=null;else s.ended_at=r.endedAt??be(),s.exit_code=typeof n==="number"?n:null});if(!o)return;e.status=t,e.updatedAt=r.endedAt??be(),e.endedAt=xe(t)?null:o.ended_at,e.exitCode=o.exit_code,this.emitStatus(e.sessionId,t)}async runWithAuthRetry(e,t,n){try{return await t()}catch(r){if(!or(e.config.providerId)||!e3(r))throw r;return await this.syncOAuthCredentials(e,{forceRefresh:!0}),e.agent.restore(n),t()}}async syncOAuthCredentials(e,t){let n=null;try{n=await this.oauthTokenManager.resolveProviderApiKey({providerId:e.config.providerId,forceRefresh:t?.forceRefresh})}catch(r){if(r instanceof Do)throw Error(`${r.providerId} requires re-authentication.`);throw r}if(!n?.apiKey||e.config.apiKey===n.apiKey)return;e.config.apiKey=n.apiKey,e.agent.updateConnection({apiKey:n.apiKey}),e.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:n.apiKey}),e.runtime.teamRuntime?.updateTeammateConnections({apiKey:n.apiKey})}getSessionOrThrow(e){let t=this.sessions.get(e);if(!t){let n=new vo(e);throw Dt(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:n,severity:"warn",handled:!0,context:{sessionId:e,activeSessionCount:this.sessions.size}}),n}return t}resolveAbsoluteFilePaths(e,t){if(!t||t.length===0)return[];let n=t.map((r)=>r.trim()).filter((r)=>r.length>0).map((r)=>Q4(r)?r:Db(e,r));return Array.from(new Set(n))}getSessionAgentTelemetryIdentity(e){return Wn({agentId:e.agent.getAgentId(),conversationId:e.agent.getConversationId(),teamId:e.runtime.teamRuntime?.getTeamId(),teamName:e.runtime.teamRuntime?.getTeamName(),teamRole:e.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts(e){let t=await this.summarizePersistedTeammateUsage(e.sessionDir,e.rootMessagesPath,e.manifest.session_id),n=Ye(e.initialUsage,t);return this.withPersistedAggregateUsageFloor(n,e.manifest)}async summarizePersistedTeammateUsage(e,t,n){let r=Db(t),o=`${n}.messages.json`,s;try{s=X4(e)}catch{return rt()}let i=rt();for(let a of s){if(!a.endsWith(".messages.json"))continue;if(a===o)continue;let d=Db(e,a);if(d===r)continue;let c=await Ir(d);if(c.length===0)continue;i=Ye(i,gp(c))}return i}withPersistedAggregateUsageFloor(e,t){let n=o3(t.metadata?.aggregateUsage);if(n)return s3(e,n);let r=t.metadata?.aggregatedAgentsCost;if(typeof r!=="number"||!Number.isFinite(r)||r<=e.totalCost)return e;return{...e,totalCost:r}}emitStatus(e,t){this.emitSessionSnapshot(e),this.emit({type:"status",payload:{sessionId:e,status:t}})}async emitSessionSnapshot(e){let t=await this.getSession(e);if(!t)return;this.emit({type:"session_snapshot",payload:{sessionId:e,snapshot:Rr({session:t,usage:this.usageBySession.get(e),aggregateUsage:this.aggregateUsageBySession.get(e)})}})}emit(e){this.events.emit(e)}async listRows(e,t={}){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor(e)),FM),t)}async getRow(e){let t=e.trim();if(!t)return;return(await this.listRows(FM)).find((r)=>r.sessionId===t)}async readManifest(e){let t=e.trim();if(!t)return;return await this.invokeOptionalValue("readSessionManifest",t)}invoke(e,...t){return NM(this.sessionService,e,...t)}invokeOptional(e,...t){return DM(this.sessionService,e,...t)}invokeOptionalValue(e,...t){return UM(this.sessionService,e,...t)}}function a3(e){if(e.backendMode)return e.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let t=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(t==="local"||t==="hub"||t==="remote")return t;return"auto"}var Qd,Zd;function d3(e,t){if(e!=="auto"&&e!=="hub")return;if(t.hub?.endpoint?.trim())return;jA(t.hub?.workspaceRoot?.trim()||t.hub?.cwd?.trim()||process.cwd())}async function c3(e){await e.reconcileDeadSessions?.().catch(()=>{})}function jM(e){try{let t=new _r;return t.init(),new Lr(t,{messagesArtifactUploader:e.messagesArtifactUploader,logger:e.logger})}catch(t){return e.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),WM(e.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:t,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new pS(void 0,{messagesArtifactUploader:e.messagesArtifactUploader,logger:e.logger})}}function $M(e,t,n){return new Ur({sessionService:n??e.sessionService??jM(e),capabilities:e.capabilities,logger:e.logger,telemetry:e.telemetry,toolPolicies:e.toolPolicies,distinctId:t,fetch:e.fetch})}async function u3(e){if(Qd)return Qd;if(Zd)return await Zd;return Zd=(async()=>(Qd=jM(e),await c3(Qd),Qd))().finally(()=>{Zd=void 0}),await Zd}async function om(e){let t=_t(e.distinctId);e.telemetry?.setDistinctId(t);let n=a3(e);if(n==="remote"){let r=e.remote?.endpoint?.trim();if(!r)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return e.logger?.log("Using remote runtime host",{endpoint:r}),new zl({endpoint:r,authToken:e.remote?.authToken,clientType:e.remote?.clientType,displayName:e.remote?.displayName,workspaceRoot:e.remote?.workspaceRoot,cwd:e.remote?.cwd,capabilities:e.capabilities})}if(n==="hub"){let r=e.hub?.endpoint?.trim(),o,s=r||await yd({strategy:e.hub?.strategy??"require-hub",workspaceRoot:e.hub?.workspaceRoot,cwd:e.hub?.cwd,onStartupError:(i)=>{o=i}});if(!s){let i=o instanceof Error?o.message:o===void 0?void 0:String(o);throw Error(i?`No compatible hub runtime is available: ${i}`:"No compatible hub runtime is available.",o===void 0?void 0:{cause:o})}return e.logger?.log("Using hub runtime host",{url:s,explicitEndpoint:r||void 0}),new _o({url:s,authToken:e.hub?.authToken,clientType:e.hub?.clientType,displayName:e.hub?.displayName,capabilities:e.capabilities,telemetry:e.telemetry},{workspaceRoot:e.hub?.workspaceRoot,cwd:e.hub?.cwd})}if(n==="auto"){let r=await Hy({endpoint:e.hub?.endpoint,strategy:e.hub?.strategy??"prefer-hub",workspaceRoot:e.hub?.workspaceRoot,cwd:e.hub?.cwd});if(r){e.logger?.log("Using discovered local hub runtime host",{url:r});let o=new _o({url:r,authToken:e.hub?.authToken,clientType:e.hub?.clientType,displayName:e.hub?.displayName,capabilities:e.capabilities,telemetry:e.telemetry},{workspaceRoot:e.hub?.workspaceRoot,cwd:e.hub?.cwd});try{return await o.connect(),o}catch(s){e.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:s}),WM(e.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:s,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return d3(n,e),e.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),$M(e,t)}return $M(e,t)}class ec{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}Mo();import{execFile as l3}from"node:child_process";import*as qM from"node:fs/promises";import*as wi from"node:path";import{promisify as p3}from"node:util";var m3=p3(l3),g3=52428800;async function Ti(e,t){let{stdout:n}=await m3("git",["-C",e,...t],{windowsHide:!0,maxBuffer:g3,encoding:"utf8"});return n}function Hb(e){return e.split("\x00").filter(Boolean)}function zM(e,t){let n=wi.resolve(e,t),r=wi.relative(e,n);if(r.startsWith("..")||wi.isAbsolute(r))throw Error(`Checkpoint diff path escapes workspace: ${t}`);return n}async function f3(e,t,n){try{return await Ti(e,["show",`${t}:${n}`])}catch{try{return await Ti(e,["show",`${t}^3:${n}`])}catch{return""}}}async function h3(e,t){try{return await qM.readFile(zM(e,t),"utf8")}catch{return""}}async function y3(e,t){try{return Hb(await Ti(e,["ls-tree","-r","-z","--name-only",`${t}^3`]))}catch{return[]}}async function S3(e,t){await Ti(e,["cat-file","-e",`${t.ref}^{tree}`]);let[n,r,o]=await Promise.all([Ti(e,["diff","--name-only","-z",t.ref,"--"]),Ti(e,["ls-files","--others","--exclude-standard","-z"]),y3(e,t.ref)]);return[...new Set([...Hb(n),...Hb(r),...o])].sort((i,a)=>i.localeCompare(a))}function KM(e){let t=e.checkpointRunCount;if(!Number.isInteger(t)||t<1)throw Error("checkpointRunCount must be a positive integer");let n=Yp(Gd(e.session),t);if(!n)throw Error(`No checkpoint found at or before run ${t} in session ${e.session.sessionId}`);let r=(e.cwd?.trim()||e.session.cwd||e.session.workspaceRoot).trim();if(!r)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:n,cwd:r}}async function GM(e,t){let n=await S3(e,t);return(await Promise.all(n.map(async(o)=>{let[s,i]=await Promise.all([f3(e,t.ref,o),h3(e,o)]);return{filePath:zM(e,o),leftContent:s,rightContent:i}}))).filter((o)=>o.leftContent!==o.rightContent)}async function Fb(e){let t=KM(e),n=await GM(t.cwd,t.checkpoint);return{...t,diffs:n}}var Bb="modelToolActivities";function b3(e){if(e.role!=="assistant")return[];let t=e.metadata?.[Bb];if(!Array.isArray(t))return[];let n=[];for(let r of t){if(!r||typeof r!=="object"||Array.isArray(r))continue;let o=r,s=typeof o.toolCallId==="string"?o.toolCallId.trim():"",i=typeof o.toolName==="string"?o.toolName.trim():"",a=o.execution;if(!s||!i||a!=="client"&&a!=="provider")continue;n.push({toolCallId:s,toolName:i,execution:a,input:o.input,output:o.output,isError:o.isError===!0,hasResult:Object.hasOwn(o,"output")||Object.hasOwn(o,"isError")})}return n}function v3(e){if(!e||!Object.hasOwn(e,Bb))return e;let t={...e};return delete t[Bb],Object.keys(t).length>0?t:void 0}function sm(e,t,n,r){return{kind:"session_display_message",origin:n,execution:r,message:e,sourceIndex:t}}function $b(e){let t=[];for(let[n,r]of e.entries()){if(!r||typeof r!=="object"||Array.isArray(r)||r.role!=="user"&&r.role!=="assistant")continue;let o=r,s=b3(o);if(s.length===0){t.push(sm(o,n,"history"));continue}for(let[i,a]of s.entries()){let c=(typeof o.id==="string"?o.id.trim():"")||`model_tool_${a.toolCallId||`history_message_${n}`}`,u={agent:o.agent,sessionId:o.sessionId,ts:o.ts},l={type:"tool_use",id:a.toolCallId,name:a.toolName,input:a.input??{}};if(t.push(sm({...u,id:`${c}_model_tool_${i}_use`,role:"assistant",content:[l],metadata:{userRunSpan:0},modelInfo:o.modelInfo},n,"model_tool_activity",a.execution)),a.hasResult)t.push(sm({...u,id:`${c}_model_tool_${i}_result`,role:"user",content:[{type:"tool_result",tool_use_id:a.toolCallId,name:a.toolName,content:Os(a.output),is_error:a.isError||void 0}],metadata:{userRunSpan:0}},n,"model_tool_activity",a.execution))}t.push(sm({...o,metadata:v3(o.metadata)},n,"history"))}return t}class Wb{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor(e,t,n,r,o,s,i,a,d,c){this.clientName=t,this.runtimeAddress=n,this.host=e,this.prepare=r,this.capabilities=o,this.logger=s,this.telemetry=i,this.distinctId=a,this.featureFlags=d,this.settings=ER(e),this.pendingPrompts=xR(e),this.automation=new Hg(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=c?new od({workspaceRoot:c.workspaceRoot??process.cwd(),specs:{cronSpecsDir:c.cronSpecsDir??c.cronDir,scope:Ww(c.cronScope),workspaceRoot:c.workspaceRoot},runtimeHandlers:jw({host:e,getExtensionContext:()=>Wc({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:c.dbPath,logger:c.logger,telemetry:this.telemetry,pollIntervalMs:c.pollIntervalMs,claimLeaseSeconds:c.claimLeaseSeconds,globalMaxConcurrency:c.globalMaxConcurrency,watcherDebounceMs:c.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((u)=>{if(u.type!=="ended")return;this.disposeSessionBootstrap(u.payload.sessionId)})}static async create(e={}){let t=_t(e.distinctId),n=at(e.capabilities),r={...e,capabilities:n,distinctId:t},o=await om(r),s=$w(e.automation),i=e.featureFlags||new Uo({provider:new ec,telemetry:e.telemetry,logger:e.logger,context:{distinctId:t,clientName:e.clientName}}),a=new Wb(o,e.clientName,o.runtimeAddress,e.prepare,n,e.logger,e.telemetry,t,i,s?{...s,logger:e.logger}:void 0);if(s&&s.autoStart!==!1)await a.automation.start();return a}async disposeSessionBootstrap(e){let t=this.activeSessionBootstraps.get(e);if(!t)return;this.activeSessionBootstraps.delete(e),await Promise.resolve(t.dispose?.())}async start(e){let t=$h(e),n=await this.prepare?.(t);try{let r=n?await n.applyToStartSessionInput(t):t,o=await this.host.startSession(Wh(r,{defaultCapabilities:this.capabilities,withExtensionContext:(s)=>Wc({automationService:this.automationService,automation:this.automation,context:s,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(n)if(await this.host.getSession(o.sessionId))this.activeSessionBootstraps.set(o.sessionId,n);else await Promise.resolve(n.dispose?.());return _R({input:r,sessionId:o.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),o}catch(r){throw await Promise.resolve(n?.dispose?.()),r}}send=(...e)=>this.host.runTurn(...e);getAccumulatedUsage=(...e)=>this.host.getAccumulatedUsage?.(...e)??Promise.resolve(void 0);abort=(...e)=>this.host.abort(...e);stop=async(e)=>{await this.host.stopSession(e),await this.disposeSessionBootstrap(e)};dispose=async(...e)=>{try{await this.automationService?.dispose(),await this.host.dispose(...e)}finally{this.unsubscribeBootstrapCleanup();let t=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(t.map((n)=>this.disposeSessionBootstrap(n)))}};get=(...e)=>this.host.getSession(...e);listHistory=async(e={})=>await vy(this.host,e);list=async(e=200,t={})=>await this.listHistory({...t,limit:e});delete=async(e)=>{let t=await this.host.deleteSession(e);if(t)await this.disposeSessionBootstrap(e);return t};update=(...e)=>this.host.updateSession(...e);updateSessionCompactionState=(...e)=>this.host.updateSessionCompactionState(...e);readSessionCompactionState=(...e)=>this.host.readSessionCompactionState(...e);readMessages=(...e)=>this.host.readSessionMessages(...e);async readDisplayMessages(e){return $b(await this.host.readSessionMessages(e))}readLiveMessages=(e)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages(e):this.host.readSessionMessages(e);async restore(e){let t=e.start?Wh(e.start,{defaultCapabilities:this.capabilities,withExtensionContext:(n)=>Wc({automationService:this.automationService,automation:this.automation,context:n,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:e.sessionId,checkpointRunCount:e.checkpointRunCount,cwd:e.cwd,restore:e.restore,start:t})}async compareCheckpoint(e){let t=e.sessionId.trim();if(!t)throw Error("sessionId is required");let n=await this.host.getSession(t);if(!n)throw Error(`Session ${t} not found`);return Fb({session:n,checkpointRunCount:e.checkpointRunCount,cwd:e.cwd})}ingestHookEvent=(...e)=>this.host.dispatchHookEvent(...e);subscribe(e,t){return this.host.subscribe(e,t)}hasSessionSubscription(e){return this.host.hasSessionSubscription?.(e)??!1}updateSessionModel=(...e)=>this.host.updateSessionModel?.(...e)??Promise.resolve();updateSessionConnection=(...e)=>this.host.updateSessionConnection?.(...e)??Promise.resolve()}import{resolve as T3}from"node:path";import{normalizePluginManifest as w3}from"@cline/shared";function VM(e,t){if(!e)return!0;if(e.providerIds?.length){if(!t?.providerId||!e.providerIds.includes(t.providerId))return!1}if(e.modelIds?.length){if(!t?.modelId||!e.modelIds.includes(t.modelId))return!1}return!0}function JM(e){return typeof e==="object"&&e!==null}function jb(e){return Array.isArray(e)&&e.every((t)=>typeof t==="string")}function C3(e,t){if(!JM(e.manifest))throw Error(`Invalid plugin module at ${t}: missing required "manifest"`);if(!jb(e.manifest.capabilities))throw Error(`Invalid plugin module at ${t}: manifest.capabilities must be a string array`);if(e.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${t}: manifest.capabilities cannot be empty`);if(Object.hasOwn(e.manifest,"providerIds")&&!jb(e.manifest.providerIds))throw Error(`Invalid plugin module at ${t}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn(e.manifest,"modelIds")&&!jb(e.manifest.modelIds))throw Error(`Invalid plugin module at ${t}: manifest.modelIds must be a string array when provided`)}function k3(e,t){if(!JM(e))throw Error(`Invalid plugin module at ${t}: expected object export`);if(typeof e.name!=="string"||e.name.length===0)throw Error(`Invalid plugin module at ${t}: expected non-empty "name"`);if(!Object.hasOwn(e,"manifest"))throw Error(`Invalid plugin module at ${t}: missing required "manifest"`);C3(e,t)}async function qb(e,t={}){let n=T3(t.cwd??process.cwd(),e),r=await fC(n,{useCache:t.useCache,freshModule:t.freshModule}),o=t.exportName??"plugin",s=r.default??r[o];k3(s,n);let i=s,a=i.setup,d=a?(c,u)=>{let l={...t.session,...u.session},p={...u,session:Object.keys(l).length>0?l:void 0,client:t.client??u.client,user:t.user??u.user,workspaceInfo:t.workspaceInfo??u.workspaceInfo,automation:t.automation??u.automation,logger:t.logger??u.logger,telemetry:t.telemetry??u.telemetry};return a.call(i,c,p)}:void 0;return{...i,manifest:w3(i.manifest),setup:d}}async function XM(e,t={}){return(await zb(e,t)).plugins}async function zb(e,t={}){let n=[],r=[],o=new Map,s=0;for(let a of e)try{let d=await qb(a,t);if(!VM(d.manifest,t))continue;let c=o.get(d.name);if(c)r.push({type:"duplicate_plugin_override",pluginName:d.name,pluginPath:a,overriddenPluginPath:c.pluginPath,message:`Plugin "${d.name}" from ${a} overrides ${c.pluginPath}`});o.set(d.name,{plugin:d,pluginPath:a,order:s++})}catch(d){let c=d instanceof Error?d.message:String(d);n.push({pluginPath:a,phase:"load",message:c,stack:d instanceof Error?d.stack:void 0})}let i=[...o.values()].sort((a,d)=>a.order-d.order);return{plugins:i.map((a)=>a.plugin),pluginPaths:i.map((a)=>a.pluginPath),failures:n,warnings:r}}import{isAbsolute as P3,relative as I3,resolve as Ci,sep as R3}from"node:path";import{createSessionId as A3,readHubScheduleMode as YM}from"@cline/shared";function Wo(e,t){return t.crossWorkspace&&e.payload?.allWorkspaces===!0}function QM(e,t){if(typeof t!=="string"||!t.trim())return;let n=Ci(e,t);if(!tO(e,n))throw Error("schedule cwd is outside the client workspace scope");return n}function ZM(e){return typeof e.workspaceRoot==="string"&&e.workspaceRoot.trim()?Ci(e.workspaceRoot.trim()):void 0}function tO(e,t){let n=I3(e,t);return n!==".."&&!n.startsWith(`..${R3}`)&&!P3(n)}function ut(e,t){return{version:e.version,requestId:e.requestId,ok:!0,payload:t}}function eO(e,t,n){return{version:e.version,requestId:e.requestId??A3("hubreq_"),ok:!1,error:{code:t,message:n}}}class im{schedules;constructor(e){this.schedules=e}async handleCommand(e,t){try{let n=this.resolveScope(t);switch(e.command){case"schedule.create":return ut(e,{schedule:this.schedules.createSchedule(this.toCreateInput(e.payload??{},n,Wo(e,n)))});case"schedule.list":return ut(e,{schedules:this.schedules.listSchedules({enabled:typeof e.payload?.enabled==="boolean"?e.payload.enabled:void 0,limit:typeof e.payload?.limit==="number"?e.payload.limit:void 0,tags:Array.isArray(e.payload?.tags)?e.payload?.tags:void 0,workspaceRoot:Wo(e,n)?void 0:n.workspaceRoot})});case"schedule.get":return ut(e,{schedule:this.requireScopedSchedule(e,n)});case"schedule.update":{let r=this.requireScopedSchedule(e,n);return ut(e,{schedule:this.schedules.updateSchedule(r.scheduleId,this.toUpdateInput(e.payload??{},n,r,Wo(e,n)))})}case"schedule.delete":return ut(e,{deleted:this.schedules.deleteSchedule(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.enable":return ut(e,{schedule:this.schedules.resumeSchedule(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.disable":return ut(e,{schedule:this.schedules.pauseSchedule(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.trigger":return ut(e,{execution:e.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(this.requireScopedSchedule(e,n).scheduleId):await this.schedules.triggerScheduleNow(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.list_executions":return ut(e,{executions:this.listScopedExecutions(e,n)});case"schedule.stats":return ut(e,{stats:this.schedules.getScheduleStats(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.active":{let r=this.schedules.getActiveExecutions();if(Wo(e,n))return ut(e,{executions:r});let o=this.scopedScheduleIds(n);return ut(e,{executions:r.filter((s)=>o.has(s.scheduleId))})}case"schedule.upcoming":{let r=this.schedules.getUpcomingRuns(typeof e.payload?.limit==="number"?e.payload.limit:void 0);if(Wo(e,n))return ut(e,{runs:r});let o=this.scopedScheduleIds(n);return ut(e,{runs:r.filter((s)=>o.has(s.scheduleId))})}default:return eO(e,"unsupported_command",`Unsupported hub schedule command: ${e.command}`)}}catch(n){return eO(e,"schedule_command_failed",n instanceof Error?n.message:String(n))}}resolveScope(e){let t=e?.workspaceContext;if(!e?.clientId||!t?.workspaceRoot?.trim())throw Error("schedule commands require a registered workspace client");let n=Ci(t.workspaceRoot),r=Ci(t.cwd?.trim()||n);if(!tO(n,r))throw Error("client cwd is outside its workspace scope");return{workspaceRoot:n,cwd:r,crossWorkspace:e.crossWorkspace===!0}}requireScopedSchedule(e,t){let n=String(e.payload?.scheduleId??"").trim(),r=n?this.schedules.getSchedule(n):void 0;if(!r||!Wo(e,t)&&Ci(r.workspaceRoot)!==t.workspaceRoot)throw Error("schedule does not exist in this workspace");return r}scopedScheduleIds(e){return new Set(this.schedules.listSchedules({workspaceRoot:e.workspaceRoot}).map((t)=>t.scheduleId))}listScopedExecutions(e,t){let n=typeof e.payload?.scheduleId==="string"?e.payload.scheduleId.trim():void 0;if(n)this.requireScopedSchedule(e,t);let r=this.schedules.listScheduleExecutions({scheduleId:n,status:typeof e.payload?.status==="string"?e.payload.status:void 0,limit:typeof e.payload?.limit==="number"?e.payload.limit:void 0});if(Wo(e,t))return r;let o=this.scopedScheduleIds(t);return r.filter((s)=>o.has(s.scheduleId))}toCreateInput(e,t,n){let r=YM(e,"yolo"),o=e.modelSelection&&typeof e.modelSelection==="object"&&!Array.isArray(e.modelSelection)?e.modelSelection:e.provider&&e.model?{providerId:String(e.provider),modelId:String(e.model)}:void 0,s=(n?ZM(e):void 0)??t.workspaceRoot,{allWorkspaces:i,...a}=e;return{...a,modelSelection:o,mode:r,workspaceRoot:s,cwd:QM(s,e.cwd)??(s===t.workspaceRoot?t.cwd:s)}}toUpdateInput(e,t,n,r){let o=YM(e),s=e.modelSelection&&typeof e.modelSelection==="object"&&!Array.isArray(e.modelSelection)?e.modelSelection:e.provider||e.model?{providerId:typeof e.provider==="string"?e.provider:"",modelId:typeof e.model==="string"?e.model:""}:void 0,i=r?ZM(e)??Ci(n.workspaceRoot):t.workspaceRoot,{allWorkspaces:a,...d}=e;return{...d,modelSelection:s,...o===void 0?{}:{mode:o},workspaceRoot:i,...Object.hasOwn(e,"cwd")?{cwd:e.cwd===null?i:QM(i,e.cwd)??(i===t.workspaceRoot?t.cwd:i)}:{}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as nc,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as E3}from"@cline/shared";function am(e){return e?new Date(e).getTime():void 0}function x3(e){let t=e.metadata?{...e.metadata}:void 0;if(t)delete t.__hubScheduleCreatedBy,delete t.__hubScheduleCwd,delete t.__hubRuntimeOptions;return t}function tc(e){let t=e.metadata;return{scheduleId:e.externalId,name:e.title,cronPattern:e.triggerKind==="one_off"?nc:e.scheduleExpr??"",timezone:e.triggerKind==="schedule"?e.timezone:void 0,prompt:e.prompt??"",workspaceRoot:e.workspaceRoot??"",cwd:typeof t?.__hubScheduleCwd==="string"?t.__hubScheduleCwd:void 0,modelSelection:e.providerId||e.modelId?{providerId:e.providerId??"",modelId:e.modelId??""}:void 0,enabled:e.enabled&&!e.removed&&e.parseStatus==="valid",mode:e.mode==="plan"?"plan":e.mode==="act"?"act":"yolo",systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,maxParallel:e.maxParallel??1,createdAt:new Date(e.createdAt).getTime(),updatedAt:new Date(e.updatedAt).getTime(),nextRunAt:am(e.nextRunAt),lastRunAt:am(e.lastRunAt),createdBy:typeof t?.__hubScheduleCreatedBy==="string"?t.__hubScheduleCreatedBy:void 0,tags:e.tags,runtimeOptions:t?.__hubRuntimeOptions&&typeof t.__hubRuntimeOptions==="object"&&!Array.isArray(t.__hubRuntimeOptions)?t.__hubRuntimeOptions:void 0,metadata:x3(e)}}function _3(e){switch(e){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function Kb(e,t){return{executionId:e.runId,scheduleId:t,sessionId:e.sessionId,triggeredAt:new Date(e.scheduledFor??e.createdAt).getTime(),startedAt:am(e.startedAt),endedAt:am(e.completedAt),status:_3(e.status),errorMessage:e.error}}class dm{store;materializer;runner;started=!1;disposed=!1;constructor(e){this.store=new rd({dbPath:e.dbPath}),this.materializer=new Xa({store:this.store}),this.runner=new Qa({store:this.store,materializer:this.materializer,runtimeHandlers:e.runtimeHandlers,eventPublisher:e.eventPublisher,workspaceRoot:"",specs:e.specs,logger:e.logger,telemetry:e.telemetry,pollIntervalMs:e.pollIntervalMs,claimLeaseSeconds:e.claimLeaseSeconds,globalMaxConcurrency:e.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(e){let t=e.cronPattern===nc?e.timezone:e.timezone?.trim()||Intl.DateTimeFormat().resolvedOptions().timeZone;if(this.validateScheduleTiming(e.cronPattern,t,e.metadata,!0),!e.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return tc(this.store.createHubSchedule({...e,timezone:t}))}getSchedule(e){let t=this.store.getHubSchedule(e);return t?tc(t):void 0}listSchedules(e={}){return this.store.listHubSchedules(e).map((t)=>tc(t))}updateSchedule(e,t){let n=this.store.getHubSchedule(e);if(!n)return;let r=t.workspaceRoot!==void 0?t.workspaceRoot.trim():n.workspaceRoot,o=t.enabled??n.enabled,s=tc(n),i=t.cronPattern??s.cronPattern;if(i.trim()===nc&&typeof t.timezone==="string"&&t.timezone.trim())throw Error("timezone is only supported for recurring schedules");if(this.validateScheduleTiming(i,i.trim()===nc?void 0:t.timezone===null?void 0:t.timezone??s.timezone,t.metadata??s.metadata,o),o&&!r)throw Error("workspaceRoot is required for enabled schedules");let a=this.store.updateHubSchedule(e,{...t,scheduleId:e});return a?tc(a):void 0}validateScheduleTiming(e,t,n,r){if(e.trim()!==nc){XR(e),Zh(t);return}if(t?.trim())throw Error("timezone is only supported for recurring schedules");let o=n?.[E3];if(typeof o!=="number"||!Number.isFinite(o)||r&&o<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule(e){return this.store.deleteHubSchedule(e)}pauseSchedule(e){return this.updateSchedule(e,{scheduleId:e,enabled:!1})}resumeSchedule(e){return this.updateSchedule(e,{scheduleId:e,enabled:!0})}async triggerScheduleNow(e){let t=this.store.enqueueHubScheduleRun(e,"manual");if(!t)return;await this.runner.tick();let n=this.store.getRun(t.runId)??t;return Kb(n,e)}triggerScheduleNowDetached(e){let t=this.store.enqueueHubScheduleRun(e,"manual");if(!t)return;return this.runner.tick().catch(()=>{return}),Kb(t,e)}listScheduleExecutions(e){let t=e.scheduleId?this.store.getHubSchedule(e.scheduleId):void 0,n={specId:t?.specId,limit:e.limit};return this.store.listRuns(n).map((o)=>{let s=t??this.store.getSpec(o.specId);if(!s||s.source!=="hub-schedule")return;return Kb(o,s.externalId)}).filter((o)=>{if(!o)return!1;return!e.status||o.status===e.status})}getScheduleStats(e){let t=this.listScheduleExecutions({scheduleId:e,limit:1e4});if(t.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let n=0,r=0,o=0,s;for(let i of t){if(i.status==="success"||i.status==="completed")n+=1;if(!s&&i.status!=="success"&&i.status!=="completed")s=i;if(i.startedAt&&i.endedAt)o+=i.endedAt-i.startedAt,r+=1}return{totalRuns:t.length,successRate:n/t.length,avgDurationSeconds:r>0?o/r/1000:0,lastFailure:s}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap((e)=>{let t=this.store.getSpec(e.specId);if(!t||t.source!=="hub-schedule"||!e.sessionId)return[];return[{executionId:e.runId,scheduleId:t.externalId,sessionId:e.sessionId,startedAt:e.startedAt??new Date().toISOString(),timeoutAt:t.timeoutSeconds&&e.startedAt?new Date(new Date(e.startedAt).getTime()+t.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns(e=20){let t={triggerKind:"schedule",enabled:!0,limit:e};return this.store.listSpecs(t).flatMap((n)=>n.source==="hub-schedule"&&n.nextRunAt?[{spec:n,nextRunAt:n.nextRunAt}]:[]).sort((n,r)=>String(n.nextRunAt).localeCompare(String(r.nextRunAt))).slice(0,e).map(({spec:n,nextRunAt:r})=>({scheduleId:n.externalId,name:n.title,nextRunAt:r}))}}ve();import{realpathSync as Vb,statSync as M3}from"node:fs";import{isAbsolute as rO,relative as O3,sep as oO}from"node:path";import{ONE_TIME_SCHEDULE_CRON_PATTERN as sO,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as iO}from"@cline/shared";import{z as Pe}from"zod";var L3=Pe.enum(["create","update","list","get","pause","resume","delete","run_now"]),N3=Pe.object({provider_id:Pe.string().min(1),model_id:Pe.string().min(1).optional()}),Ri=Pe.object({operation:L3,schedule_id:Pe.string().min(1).optional(),schedule_type:Pe.enum(["once","recurring"]).optional(),name:Pe.string().min(1).optional(),prompt:Pe.string().min(1).optional(),run_at:Pe.string().datetime({offset:!0}).optional(),cron_pattern:Pe.string().min(1).optional(),timezone:Pe.string().min(1).nullable().optional().describe("IANA timezone for recurring schedules. Omit unless the user explicitly requests a timezone; new schedules default to the local timezone. Updates preserve the existing timezone when omitted."),enabled:Pe.boolean().optional(),mode:Pe.enum(["act","plan","yolo"]).optional(),system_prompt:Pe.string().nullable().optional(),max_iterations:Pe.number().int().positive().nullable().optional(),timeout_seconds:Pe.number().int().positive().nullable().optional(),max_parallel:Pe.number().int().positive().max(32).optional(),tags:Pe.array(Pe.string().min(1)).optional(),model_selection:N3.optional(),limit:Pe.number().int().positive().max(200).optional()});function ki(e,t,n,r){if(!aO.has(t.operation))return;wn(e.telemetry,{ulid:n.sessionId??n.conversationId??n.agentId,tool:`tasks.scheduled.${t.operation}`,success:r,agentId:n.agentId})}var aO=new Set(["create","update","pause","resume","delete","run_now"]);function Ii(e,t){let n=e?.trim();if(!n)throw Error(`${t} is required for this operation`);return n}function Jb(e,t){try{let n=Vb.native(e);if(!M3(n).isDirectory())throw Error("not a directory");return n}catch{throw Error(`${t} does not resolve to an existing safe path`)}}function D3(e,t){try{return Vb.native(e)===Vb.native(t)}catch{return!1}}function dO(e,t,n){let r=O3(e,t);if(r===".."||r.startsWith(`..${oO}`)||rO(r))throw Error(`${n} is outside the workspace scope`)}function cO(e,t,n){return Jb(rO(t)?t:`${e}${oO}${t}`,n)}function U3(e){let t=Jb(e.workspaceRoot,"workspaceRoot"),n=e.cwd?cO(t,e.cwd,"cwd"):t;return dO(t,n,"cwd"),{...e,workspaceRoot:t,cwd:n}}function Pi(e,t){if(!e)throw Error("schedule does not exist");if(!D3(e.workspaceRoot,t.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let n=Jb(e.workspaceRoot,"schedule workspaceRoot");if(e.cwd){let r=cO(n,e.cwd,"schedule cwd");dO(n,r,"schedule cwd")}}function nO(e){if(!e)return;return{providerId:e.provider_id.trim(),modelId:e.model_id?.trim()||void 0}}function Gb(e){if(!e)return;return[...new Set(e.map((t)=>t.trim()).filter(Boolean))]}function uO(e){let t=Date.parse(Ii(e,"run_at"));if(!Number.isFinite(t))throw Error("run_at must be an ISO timestamp");if(t<=Date.now())throw Error("run_at must be in the future");return t}function H3(e){if(e.schedule_type==="once"){if(e.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if(e.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:sO,metadata:{[iO]:uO(e.run_at)}}}if(e.schedule_type==="recurring"){if(e.run_at)throw Error("run_at cannot be used with a recurring schedule");return{cronPattern:Ii(e.cron_pattern,"cron_pattern"),timezone:e.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function F3(e){if(e.run_at&&e.cron_pattern)throw Error("run_at and cron_pattern cannot be updated together");if(e.schedule_type==="once"||e.run_at){if(e.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if(e.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:sO,timezone:null,metadata:{[iO]:uO(e.run_at)}}}if(e.schedule_type==="recurring"||e.cron_pattern)return{cronPattern:Ii(e.cron_pattern,"cron_pattern"),timezone:e.timezone===null?null:e.timezone?.trim()||void 0};return{timezone:e.timezone===null?null:e.timezone?.trim()||void 0}}function rc(e){return Ii(e.schedule_id,"schedule_id")}async function Xb(e,t,n){let r=Ri.safeParse(t);if(!r.success)return{ok:!1,error:{code:"invalid_schedule_input",message:r.error.issues[0]?.message??"Invalid schedule input"}};let o=r.data;try{if(!n.sessionId)throw Error("tasks requires a Hub session");let s=await e.resolveSessionDefaults(n.sessionId);if(!s?.workspaceRoot.trim())throw Error("tasks could not resolve the current workspace");let i=U3(s);if(aO.has(o.operation)&&!i.interactive)throw Error("schedule mutations require an interactive user session");switch(o.operation){case"create":{let a=e.schedules.createSchedule({name:Ii(o.name,"name"),...H3(o),prompt:Ii(o.prompt,"prompt"),workspaceRoot:i.workspaceRoot,cwd:i.cwd,modelSelection:nO(o.model_selection)??i.modelSelection,enabled:o.enabled,mode:o.mode??"yolo",systemPrompt:o.system_prompt??void 0,maxIterations:o.max_iterations??void 0,timeoutSeconds:o.timeout_seconds??void 0,maxParallel:o.max_parallel??1,createdBy:`agent:${n.agentId}`,tags:Gb(o.tags)});return e.publish?.("schedule.created",{schedule:a},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,schedule:a}}case"update":{let a=rc(o);Pi(e.schedules.getSchedule(a),i);let d=e.schedules.updateSchedule(a,{scheduleId:a,...F3(o),name:o.name?.trim()||void 0,prompt:o.prompt?.trim()||void 0,modelSelection:nO(o.model_selection),enabled:o.enabled,mode:o.mode,systemPrompt:o.system_prompt,maxIterations:o.max_iterations,timeoutSeconds:o.timeout_seconds,maxParallel:o.max_parallel,tags:Gb(o.tags)});if(!d)throw Error("schedule does not exist");return e.publish?.("schedule.updated",{schedule:d},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,schedule:d}}case"list":{let a=e.schedules.listSchedules({enabled:o.enabled,tags:Gb(o.tags),workspaceRoot:i.workspaceRoot,limit:o.limit??50}).filter((d)=>{try{return Pi(d,i),!0}catch{return!1}}).slice(0,o.limit??50);return{ok:!0,operation:o.operation,schedules:a}}case"get":{let a=e.schedules.getSchedule(rc(o));return Pi(a,i),{ok:!0,operation:o.operation,schedule:a}}case"pause":case"resume":{let a=rc(o);Pi(e.schedules.getSchedule(a),i);let d=o.operation==="pause"?e.schedules.pauseSchedule(a):e.schedules.resumeSchedule(a);if(!d)throw Error("schedule does not exist");return e.publish?.("schedule.updated",{schedule:d},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,schedule:d}}case"delete":{let a=rc(o);Pi(e.schedules.getSchedule(a),i);let d=e.schedules.deleteSchedule(a);if(!d)throw Error("schedule does not exist");return e.publish?.("schedule.deleted",{deleted:d,scheduleId:a},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,deleted:d}}case"run_now":{let a=rc(o);Pi(e.schedules.getSchedule(a),i);let d=e.schedules.triggerScheduleNowDetached(a);if(!d)throw Error("schedule does not exist");return e.publish?.("schedule.triggered",{execution:d},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,execution:d}}}}catch(s){return ki(e,o,n,!1),{ok:!1,operation:o.operation,error:{code:"schedule_operation_failed",message:s instanceof Error?s.message:String(s)}}}}pm();import{createTool as f7,zodToJsonSchema as h7}from"@cline/shared";import{z as Sn}from"zod";ve();import{resolve as mO}from"node:path";import{z as re}from"zod";var gO=re.enum(["suggestion","follow-up","todo","handoff","idea","reminder"]),l7=re.enum(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),fO=re.union([re.literal(0),re.literal(1),re.literal(2),re.literal(3),re.literal(4),re.literal(5)]),p7=re.object({provider_id:re.string().min(1),model_id:re.string().min(1).optional()}),mm=re.object({operation:re.enum(["create","update","list","get"]),task_id:re.string().min(1).optional(),expected_revision:re.number().int().positive().optional(),type:gO.optional(),title:re.string().min(1).optional(),description:re.string().nullable().optional(),instructions:re.string().min(1).optional(),scope:re.enum(["workspace","global"]).optional(),workspace_root:re.string().min(1).nullable().optional(),cwd:re.string().min(1).nullable().optional(),resource_paths:re.array(re.string().min(1)).optional(),priority:fO.optional(),assignee:re.string().min(1).nullable().optional(),model_selection:p7.nullable().optional(),mode:re.enum(["act","plan","yolo"]).nullable().optional(),system_prompt:re.string().nullable().optional(),max_iterations:re.number().int().positive().nullable().optional(),timeout_seconds:re.number().int().positive().nullable().optional(),available_at:re.string().datetime().optional(),expires_at:re.string().datetime().optional(),automation_eligible:re.boolean().optional(),statuses:re.array(l7).optional(),types:re.array(gO).optional(),priorities:re.array(fO).optional(),limit:re.number().int().positive().max(500).optional()}),m7=new Set(["create","update"]);function tv(e,t,n,r){if(!m7.has(t.operation))return;wn(e.telemetry,{ulid:n.sessionId??n.conversationId??n.agentId,tool:`tasks.todo.${t.operation}`,success:r,agentId:n.agentId})}function Ei(e,t){let n=e?.trim();if(!n)throw Error(`${t} is required for this operation`);return n}function hO(e){if(e===void 0||e===null)return e;return{providerId:e.provider_id,modelId:e.model_id}}function SO(e,t){return mO(e)===mO(t)}function yO(e,t){if(!e)throw Error("task does not exist");if(t.workspaceRoot){if(e.scope!=="workspace"||!e.workspaceRoot||!SO(e.workspaceRoot,t.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if(e.scope!=="global")throw Error("task is outside this session's global scope")}function g7(e,t){let n=t.workspaceRoot?"workspace":"global";if(e.scope&&e.scope!==n)throw Error(`this session can only manage ${n} tasks`);if(e.workspace_root!==void 0){if(!t.workspaceRoot||e.workspace_root===null||!SO(e.workspace_root,t.workspaceRoot))throw Error(`this session can only manage ${n} tasks`)}return n}async function bO(e,t,n){let r=mm.safeParse(t);if(!r.success)return{ok:!1,error:{code:"invalid_task_input",message:r.error.issues[0]?.message??"Invalid task input"}};let o=r.data,s={kind:"agent",id:n.agentId,agentId:n.agentId,sessionId:n.sessionId};try{if(!n.sessionId)throw Error("tasks requires a Hub session");let i=await e.resolveSessionDefaults(n.sessionId);if(!i)throw Error("tasks could not resolve the current session");let a=g7(o,i);switch(o.operation){case"create":{let d={type:Ei(o.type,"type"),title:Ei(o.title,"title"),description:o.description??void 0,instructions:Ei(o.instructions,"instructions"),scope:a,workspaceRoot:i.workspaceRoot,cwd:a==="workspace"?(o.cwd??i.cwd)?.trim()||void 0:void 0,resourcePaths:o.resource_paths,priority:o.priority,assignee:o.assignee??void 0,modelSelection:hO(o.model_selection)??i.modelSelection,mode:o.mode??void 0,systemPrompt:o.system_prompt??void 0,maxIterations:o.max_iterations??void 0,timeoutSeconds:o.timeout_seconds??void 0,availableAt:o.available_at,expiresAt:Ei(o.expires_at,"expires_at"),automationEligible:o.automation_eligible,createdBy:s,originSessionId:n.sessionId,originTaskId:i.originTaskId},c={ok:!0,operation:o.operation,task:await e.manager.createTask(d)};return tv(e,o,n,!0),c}case"update":{let d=Ei(o.task_id,"task_id");if(yO(await e.manager.getTask(d),i),!o.expected_revision)throw Error("expected_revision is required for update");let c={ok:!0,operation:o.operation,task:await e.manager.updateTask({taskId:d,expectedRevision:o.expected_revision,type:o.type,title:o.title,description:o.description,instructions:o.instructions,scope:a,workspaceRoot:i.workspaceRoot??null,cwd:o.cwd,resourcePaths:o.resource_paths,priority:o.priority,assignee:o.assignee,modelSelection:hO(o.model_selection),mode:o.mode,systemPrompt:o.system_prompt,maxIterations:o.max_iterations,timeoutSeconds:o.timeout_seconds,availableAt:o.available_at,expiresAt:o.expires_at,automationEligible:o.automation_eligible,updatedBy:s})};return tv(e,o,n,!0),c}case"list":{let d={statuses:o.statuses,types:o.types,scope:a,workspaceRoot:i.workspaceRoot,priorities:o.priorities,automationEligible:o.automation_eligible,limit:o.limit};return{ok:!0,operation:o.operation,tasks:await e.manager.listTasks(d)}}case"get":{let d=await e.manager.getTask(Ei(o.task_id,"task_id"));return yO(d,i),{ok:!0,operation:o.operation,task:d}}}}catch(i){return tv(e,o,n,!1),{ok:!1,operation:o.operation,error:{code:"task_operation_failed",message:i instanceof Error?i.message:String(i)}}}}var ac="tasks",vO='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Scheduled sessions run in the user\'s schedules home workspace, not this conversation\'s folder. Include absolute paths in the scheduled `prompt` for any project files or repositories the work must touch.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',y7="# Tasks\n\nUse the `tasks` tool only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. Always pass `kind: \"scheduled\"`.\n\n- One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- Never create a schedule proactively. Check existing schedules before creating a likely duplicate.\n- Make the scheduled `prompt` self-contained because it runs in a new unattended session in the user's schedules home workspace, not this conversation's folder. Include the goal, constraints, expected output, and absolute paths for any project files or repositories the work must touch.\n- Only update, pause, resume, delete, or run a schedule immediately when the user asks for that action.",S7=mm.extend({kind:Sn.literal("todo")}).strict(),TO=Ri.extend({kind:Sn.literal("scheduled")}).strict(),wO=Sn.discriminatedUnion("kind",[S7,TO]),b7=Sn.discriminatedUnion("kind",[TO]),CO=["create","update","list","get","pause","resume","delete","run_now"],v7=Sn.object({...Ri.shape,...mm.shape,kind:Sn.enum(["todo","scheduled"]),operation:Sn.enum(CO)}).strict(),T7=Sn.object({...Ri.shape,kind:Sn.enum(["scheduled"]),operation:Sn.enum(CO)}).strict();function nv(e){let t=e.todo;return f7({name:ac,description:t?'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.':'Create and manage explicitly requested scheduled agent work with kind "scheduled". One-time schedules use a future ISO 8601 run_at; recurring schedules use a five-field cron_pattern.',inputSchema:h7(t?v7:T7),retryable:!1,maxRetries:0,execute:async(n,r)=>{let o=(t?wO:b7).safeParse(n);if(!o.success)return{ok:!1,kind:typeof n==="object"&&n!==null&&"kind"in n&&(n.kind==="todo"||n.kind==="scheduled")?n.kind:void 0,error:{code:"invalid_tasks_input",message:o.error.issues[0]?.message??"Invalid tasks input"}};if(o.data.kind==="todo"){if(!t)return{ok:!1,kind:"todo",error:{code:"invalid_tasks_input",message:'kind "todo" is not available in this session'}};return{kind:"todo",...await bO(t,o.data,r)}}return{kind:"scheduled",...await Xb(e.scheduled,o.data,r)}}})}function rv(e){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:(t)=>{t.registerRule({id:"hub:task-guidance",content:e?.todoEnabled===!1?y7:vO,whenToolAvailable:ac})}}}import{resolveClineBuildEnv as w7}from"@cline/shared";function C7(e,t){if(e instanceof Error)return e;if(e&&typeof e==="object"&&"message"in e&&typeof e.message==="string"&&e.message.trim())return Error(e.message.trim());let n=e&&typeof e==="object"&&"type"in e&&typeof e.type==="string"?e.type.trim():"";return Error(n?`Failed to connect to hub at ${t} (${n} event before socket open).`:`Failed to connect to hub at ${t}.`)}var k7="cline-hub-auth.";function P7(e){return e.host!==void 0||e.port!==void 0||e.pathname!==void 0}function I7(e,t){let n=new URL(e),r=new URL(t);return n.search="",n.hash="",r.search="",r.hash="",n.toString()===r.toString()}function kO(){return w7()==="production"?cn():Gt()}async function R7(e){let t=e.searchParams.get("authToken")?.trim();if(e.searchParams.delete("authToken"),t)return t;let n=kO(),r=await $e(n.discoveryPath);if(r?.url&&I7(e.toString(),r.url))return r.authToken;return}async function A7(e={}){let t=Ro(e);if(!P7(e)){let n=kO(),r=await $e(n.discoveryPath);if(r?.url)return r.url}return Un(t.host,t.port,t.pathname)}async function PO(e){return await new Promise((t,n)=>{(async()=>{let r=new URL(e),o=await R7(r);r.hash="";let s=new WebSocket(r.toString(),o?[`${k7}${o}`]:void 0),i=new Map,a=0;s.addEventListener("open",()=>{t({send(d){let c=d.requestId??`hub-client-${++a}`;return new Promise((u,l)=>{i.set(c,{resolve:u,reject:l});let p={kind:"command",envelope:{...d,requestId:c}};s.send(JSON.stringify(p))})},close(){s.close()}})}),s.addEventListener("message",(d)=>{let c=JSON.parse(String(d.data));if(c.kind==="reply"&&c.envelope.requestId){let u=i.get(c.envelope.requestId);if(u)i.delete(c.envelope.requestId),u.resolve(c.envelope)}}),s.addEventListener("close",()=>{for(let d of i.values())d.reject(Error("Hub connection closed"));i.clear()}),s.addEventListener("error",(d)=>{n(C7(d,e))})})().catch(n)})}async function nPe(e){try{return(await PO(e)).close(),!0}catch{return!1}}async function rPe(e,t){let n=await A7(e),r=await PO(n);try{return await r.send({version:t.version??"v1",clientId:t.clientId??"hub-client",...t})}finally{r.close()}}import{existsSync as E7}from"node:fs";import{isHubDaemonProcess as x7,resolveClineBuildEnv as _7}from"@cline/shared";var M7=1e4,O7="CLINE_HUB_BUILD_WATCH_INTERVAL_MS";function L7(){let e=Number(process.env[O7]);return Number.isFinite(e)&&e>0?e:M7}async function N7(e,t){try{let n=await Qs(e.url,t);return{...e,activeSessionCount:n.activeSessionCount,participantClientCount:n.participantClientCount}}catch{return e}}function D7(){return _7()==="production"?cn():Gt()}function U7(e){try{return E7(`${e}.lock`)}catch{return!1}}async function H7(){let e=D7();if(U7(e.discoveryPath))return;let t=await $e(e.discoveryPath).catch(()=>{return});if(!t?.url)return;let n=await Dn(t.url).catch(()=>{return});if(!n?.url)return;let r=dn(),o=Po(n,r);if(o.compatible)return;let s=(a)=>({url:n.url,reason:a,hubBuildId:n.buildId,hubCoreVersion:n.coreVersion,expectedBuildId:r});if(o.reason==="unsupported_protocol")return s("unsupported_protocol");let i=md();if(i.coreVersion&&n.coreVersion&&i.coreVersion===n.coreVersion)return;if(pd(i,n)>0)return await N7(s("outdated_hub"),t.authToken);return s("build_mismatch")}function uPe(e){if(x7()||process.env.CLINE_HUB_PORT?.trim())return()=>{};let t=e.intervalMs??L7(),n,r,o=!1,s=setInterval(()=>{if(o)return;o=!0,H7().then((i)=>{if(!i){n=void 0,r=void 0;return}let a=`${i.reason}:${i.hubBuildId??""}`;if(a===n)return;if(i.reason==="outdated_hub"&&r!==a){r=a;return}r=void 0,n=a,e.onMismatch(i)}).catch(()=>{return}).finally(()=>{o=!1})},t);return s.unref?.(),()=>{clearInterval(s)}}function ov(e){return e?JSON.parse(JSON.stringify(e)):{}}function gm(e){let t=e?.session&&typeof e.session==="object"?e.session:void 0;if(!t)return;let n=t.metadata&&typeof t.metadata==="object"?ov(t.metadata):void 0;return{sessionId:typeof t.sessionId==="string"?t.sessionId:"",parentSessionId:typeof n?.parentSessionId==="string"?n.parentSessionId:void 0,status:typeof t.status==="string"?t.status:void 0,messagesPath:typeof n?.messagesPath==="string"?n.messagesPath:void 0,metadata:n}}function IO(e,t){return e.error?.message??`hub command failed: ${t}`}function F7(e){let t=ov(e);if(typeof t.error==="string"&&t.error.trim())return{...t,error:t.error.trim()};let n=t.result&&typeof t.result==="object"?t.result:void 0;if(typeof n?.text==="string"&&n.text.trim())return{...t,error:n.text.trim()};let r=n?.error&&typeof n.error==="object"?n.error:void 0;if(typeof r?.message==="string"&&r.message.trim())return{...t,error:r.message.trim()};return t}function RO(e){let t=e?.sessionId;return typeof t==="string"&&t.trim()?t.trim():void 0}function B7(e){let t=e?.checkpoint;if(!t||typeof t!=="object"||Array.isArray(t))throw Error("hub checkpoint restore returned no checkpoint");let n=t;if(typeof n.ref!=="string"||typeof n.createdAt!=="number"||typeof n.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return n}function $7(e){let t=ov(e.payload);if(e.event==="schedule.execution_completed")return{sessionId:e.sessionId?.trim()||RO(t)||"",eventType:"schedule.execution.completed",payload:t};if(e.event==="schedule.execution_failed")return{sessionId:e.sessionId?.trim()||RO(t)||"",eventType:"schedule.execution.failed",payload:t};let n=e.sessionId?.trim();if(!n)return;switch(e.event){case"iteration.started":return{sessionId:n,eventType:"runtime.chat.iteration_start",payload:t};case"iteration.finished":return{sessionId:n,eventType:"runtime.chat.iteration_end",payload:t};case"assistant.delta":return{sessionId:n,eventType:"runtime.chat.text_delta",payload:t};case"assistant.media":return{sessionId:n,eventType:"runtime.chat.media",payload:t};case"usage.updated":return{sessionId:n,eventType:"runtime.chat.usage",payload:t};case"session.notice":return{sessionId:n,eventType:"runtime.chat.notice",payload:t};case"tool.started":return{sessionId:n,eventType:"runtime.chat.tool_call_start",payload:t};case"tool.updated":return{sessionId:n,eventType:"runtime.chat.tool_call_update",payload:t};case"tool.finished":return{sessionId:n,eventType:"runtime.chat.tool_call_end",payload:t};case"approval.requested":return{sessionId:n,eventType:"approval.requested",payload:t};case"run.aborted":return{sessionId:n,eventType:"runtime.chat.aborted",payload:t};case"run.failed":return{sessionId:n,eventType:"runtime.chat.failed",payload:F7(e.payload)};case"run.completed":return{sessionId:n,eventType:"runtime.chat.completed",payload:t};default:return}}class W7{client;constructor(e){this.client=new Hn({url:e.address,authToken:e.authToken,clientId:e.clientId,clientType:e.clientType??"hub-session-client",displayName:e.displayName??"hub session client",workspaceRoot:e.workspaceRoot,cwd:e.cwd,metadata:e.metadata})}async connect(){await this.client.connect()}async taskCommand(e,t){return await this.client.connect(),(await this.client.command(e,t)).payload??{}}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession(e){await this.client.connect();let t=await this.client.command("session.create",{workspaceRoot:e.workspaceRoot,cwd:e.cwd,sessionConfig:{providerId:e.provider,modelId:e.model,apiKey:e.apiKey,cwd:e.cwd??e.workspaceRoot,workspaceRoot:e.workspaceRoot,systemPrompt:e.systemPrompt??"",mode:e.mode??"act",rules:e.rules,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,enableTools:e.enableTools,enableSpawnAgent:e.enableSpawn!==!1,enableAgentTeams:e.enableTeams!==!1,disableMcpSettingsTools:e.disableMcpSettingsTools,agentPluginPaths:e.agentPluginPaths,missionLogIntervalSteps:e.missionStepInterval,missionLogIntervalMs:e.missionTimeIntervalMs},metadata:{source:e.source??"cli",provider:e.provider,model:e.model,enableTools:e.enableTools,enableSpawn:e.enableSpawn,enableTeams:e.enableTeams,prompt:void 0,interactive:e.interactive!==!1},runtimeOptions:{mode:e.mode,systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,enableTools:e.enableTools,enableSpawn:e.enableSpawn,enableTeams:e.enableTeams,autoApproveTools:e.autoApproveTools,toolExecutors:e.toolExecutors,configExtensions:e.configExtensions},modelSelection:{provider:e.provider,model:e.model,apiKey:e.apiKey},toolPolicies:e.toolPolicies,...e.plugins?{plugins:e.plugins}:{}}),n=gm(t.payload);if(!n?.sessionId)throw Error("hub session create returned no session id");let r=Array.isArray(t.payload?.pluginIssues)?t.payload.pluginIssues:void 0;return{sessionId:n.sessionId,startResult:{sessionId:n.sessionId,manifestPath:"",messagesPath:n.messagesPath??""},...r?.length?{pluginIssues:r}:{}}}async sendRuntimeSession(e,t,n){return await this.client.connect(),{result:(await this.client.command("session.send_input",{prompt:t.prompt,mode:t.config.mode,attachments:t.attachments,delivery:t.delivery,timeoutSeconds:t.config.timeoutSeconds},e,n)).payload?.result}}async stopRuntimeSession(e){return await this.client.connect(),await this.client.command("session.detach",{sessionId:e},e),{applied:!0}}async abortRuntimeSession(e){return await this.client.connect(),await this.client.command("run.abort",{sessionId:e},e),{applied:!0}}async updateSession(e){return await this.client.connect(),await this.client.command("session.update",{sessionId:e.sessionId,metadata:e.metadata},e.sessionId),{updated:!0}}async getSession(e){await this.client.connect();let t;try{t=await this.client.command("session.get",void 0,e)}catch(n){if(wr(n))return;throw n}return gm(t.payload)}async readMessages(e){let t=e.trim();if(!t)return[];await this.client.connect();let n=await this.client.command("session.messages",{sessionId:t},t);if(!n.ok)throw Error(IO(n,"session.messages"));let r=n.payload?.messages;return Array.isArray(r)?r:[]}async restore(e){let t=e.sessionId.trim();if(!t)throw Error("sessionId is required");let n=e.restore?.messages!==!1;if(n&&!e.config)throw Error("config is required when restore.messages is true");await this.client.connect();let r=e.config,o=await this.client.command("session.restore",{sessionId:t,checkpointRunCount:e.checkpointRunCount,restore:e.restore,...r?{workspaceRoot:r.workspaceRoot,cwd:r.cwd,sessionConfig:{providerId:r.provider,modelId:r.model,apiKey:r.apiKey,cwd:r.cwd??r.workspaceRoot,workspaceRoot:r.workspaceRoot,systemPrompt:r.systemPrompt??"",mode:r.mode??"act",rules:r.rules,maxIterations:r.maxIterations,enableTools:r.enableTools,enableSpawnAgent:r.enableSpawn!==!1,enableAgentTeams:r.enableTeams!==!1,disableMcpSettingsTools:r.disableMcpSettingsTools,agentPluginPaths:r.agentPluginPaths,missionLogIntervalSteps:r.missionStepInterval,missionLogIntervalMs:r.missionTimeIntervalMs},metadata:{source:r.source??"cli",provider:r.provider,model:r.model,enableTools:r.enableTools,enableSpawn:r.enableSpawn,enableTeams:r.enableTeams,prompt:void 0,interactive:r.interactive!==!1},runtimeOptions:{mode:r.mode,systemPrompt:r.systemPrompt,maxIterations:r.maxIterations,enableTools:r.enableTools,enableSpawn:r.enableSpawn,enableTeams:r.enableTeams,autoApproveTools:r.autoApproveTools,configExtensions:r.configExtensions},modelSelection:{provider:r.provider,model:r.model,apiKey:r.apiKey},toolPolicies:r.toolPolicies,...r.plugins?{plugins:r.plugins}:{}}:{}},t);if(!o.ok)throw Error(IO(o,"session.restore"));let s=gm(o.payload);if(n&&!s?.sessionId)throw Error("hub checkpoint restore returned no session id");let i=Array.isArray(o.payload?.messages)?o.payload.messages:void 0,a=B7(o.payload);return{sessionId:s?.sessionId,startResult:s?.sessionId?{sessionId:s.sessionId,manifestPath:"",messagesPath:s.messagesPath??""}:void 0,...i?{messages:i}:{},checkpoint:a}}async listSessions(e){await this.client.connect();let t=await this.client.command("session.list",{limit:e?.limit??200});return(Array.isArray(t.payload?.sessions)?t.payload?.sessions:[]).map((r)=>gm({session:r})).filter((r)=>Boolean(r?.sessionId))}async searchSessions(e){await this.client.connect();let t=await this.client.command("session.search",e);return Array.isArray(t.payload?.hits)?t.payload.hits:[]}async deleteSession(e,t=!0){return await this.client.connect(),(await this.client.command("session.delete",{sessionId:e,deleteCheckpointRefs:t})).payload?.deleted===!0}async respondToolApproval(e){await this.client.connect(),await this.client.command("approval.respond",{approvalId:e.approvalId,approved:e.approved,payload:e.reason?{reason:e.reason}:void 0,responderClientId:e.responderClientId})}streamEvents(e,t){let n=new Set((e.sessionIds??[]).map((o)=>o.trim()).filter(Boolean)),r=this.client.subscribe((o)=>{let s=$7(o);if(!s)return;if(n.size>0&&!n.has(s.sessionId))return;t.onEvent?.(s)});return this.client.connect().catch((o)=>{t.onError?.(o instanceof Error?o:Error(String(o)))}),r}streamTeamProgress(e,t){let n=this.client.subscribe((r)=>{if(r.event!=="team.progress"||!r.payload)return;t.onProjection?.(r.payload)});return this.client.connect().catch((r)=>{t.onError?.(r instanceof Error?r:Error(String(r)))}),n}async createSchedule(e){return await this.client.connect(),(await this.client.command("schedule.create",e)).payload?.schedule}async listSchedules(e){await this.client.connect();let t=await this.client.command("schedule.list");return Array.isArray(t.payload?.schedules)?t.payload?.schedules:[]}async getSchedule(e){return await this.client.connect(),(await this.client.command("schedule.get",{scheduleId:e})).payload?.schedule}async updateSchedule(e,t){return await this.client.connect(),(await this.client.command("schedule.update",{scheduleId:e,...t})).payload?.schedule}async pauseSchedule(e){return await this.client.connect(),(await this.client.command("schedule.disable",{scheduleId:e})).payload?.schedule}async resumeSchedule(e){return await this.client.connect(),(await this.client.command("schedule.enable",{scheduleId:e})).payload?.schedule}async deleteSchedule(e){return await this.client.connect(),(await this.client.command("schedule.delete",{scheduleId:e})).payload?.deleted===!0}async triggerScheduleNow(e){return await this.client.connect(),(await this.client.command("schedule.trigger",{scheduleId:e})).payload?.execution}async listScheduleExecutions(e,t){await this.client.connect();let n=await this.client.command("schedule.list_executions",{scheduleId:e,limit:t});return Array.isArray(n.payload?.executions)?n.payload?.executions:[]}async getScheduleStats(){return await this.client.connect(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.client.connect();let e=await this.client.command("schedule.active");return Array.isArray(e.payload?.executions)?e.payload?.executions:[]}async getUpcomingScheduledRuns(e){await this.client.connect();let t=await this.client.command("schedule.upcoming",{limit:e});return Array.isArray(t.payload?.upcoming)?t.payload?.upcoming:[]}async createTask(e){return(await this.taskCommand("task.create",e)).task}async listTasks(e={}){let t=await this.taskCommand("task.list",e);return Array.isArray(t.tasks)?t.tasks:[]}async getTask(e){return(await this.taskCommand("task.get",{taskId:e})).task}async updateTask(e){return(await this.taskCommand("task.update",e)).task}async approveTask(e,t){return(await this.taskCommand("task.approve",{taskId:e,expectedRevision:t})).task}async cancelTask(e,t,n){return(await this.taskCommand("task.cancel",{taskId:e,reason:n,expectedRevision:t})).task}async runTask(e,t){return await this.taskCommand("task.run",{taskId:e,expectedRevision:t})}async getTaskAutomation(){return(await this.taskCommand("task.automation.get",{})).policy}async setTaskAutomation(e){return(await this.taskCommand("task.automation.set",{policy:e})).policy}}class j7{client;constructor(e){this.client=new Hn({url:e.address,authToken:e.authToken,clientId:e.clientId,clientType:e.clientType??"hub-ui-client",displayName:e.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(e){await this.client.command("ui.notify",e)}async sendShowWindow(e){await this.client.command("ui.show_window",e??{})}async listClients(){let e=await this.client.command("client.list");return Array.isArray(e.payload?.clients)?e.payload.clients:[]}async listSessions(e=200){let t=await this.client.command("session.list",{limit:e});return Array.isArray(t.payload?.sessions)?t.payload.sessions:[]}async searchSessions(e){let t=await this.client.command("session.search",e);return Array.isArray(t.payload?.hits)?t.payload.hits:[]}async toggleSetting(e){let t=await this.client.command("settings.toggle",e);if(!t.ok)throw Error(t.error?.message??"settings.toggle failed");return t.payload}subscribeUI(e){return this.client.subscribe((t)=>{switch(t.event){case"ui.notify":e.onNotify?.(t.payload);break;case"ui.show_window":e.onShowWindow?.(t.payload);break;case"hub.client.registered":e.onClientRegistered?.(t.payload??{});break;case"hub.client.disconnected":e.onClientDisconnected?.(t.payload??{});break;case"session.created":e.onSessionCreated?.(t.payload??{});break;case"session.updated":e.onSessionUpdated?.(t.payload??{});break;case"session.detached":e.onSessionDetached?.(t.payload??{});break}})}}import{normalizeProviderId as q7}from"@cline/llms";Ct();Ke();function z7(e){return{text:e.text,usage:e.usage,inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,iterations:e.iterations,finishReason:e.finishReason,toolCalls:e.toolCalls.map((t)=>({name:t.name,input:t.input,output:t.output,error:t.error,durationMs:t.durationMs}))}}function K7(e){return e.mode==="plan"?"plan":e.mode==="yolo"?"yolo":"act"}function CPe(e={}){let t=async(r)=>r,n=new Ur({sessionService:new Lr(new _r),capabilities:{toolExecutors:{submit:t}},fetch:e.fetch,connectorsRequest:e.connectorsRequest,telemetry:e.telemetry});return{async startSession(r,o){let s=(r.cwd?.trim()||r.workspaceRoot).trim(),i=await n.startSession({source:ie.CORE,mode:"automation",sessionMetadata:Re(o?.sessionMetadata,{mode:"automation",trigger:r.source}),interactive:!1,config:{providerId:q7(r.provider),modelId:r.model,apiKey:r.apiKey?.trim()||void 0,cwd:s,workspaceRoot:r.workspaceRoot,systemPrompt:r.systemPrompt??"",mode:K7(r),maxIterations:r.maxIterations,enableTools:r.enableTools!==!1,enableSpawnAgent:r.enableSpawn!==!1,enableAgentTeams:r.enableTeams!==!1,disableMcpSettingsTools:r.disableMcpSettingsTools,agentPluginPaths:r.agentPluginPaths,missionLogIntervalSteps:r.missionStepInterval,missionLogIntervalMs:r.missionTimeIntervalMs},toolPolicies:r.toolPolicies??{"*":{autoApprove:r.autoApproveTools!==!1}},localRuntime:{configExtensions:r.configExtensions}});return{sessionId:i.sessionId,startResult:{sessionId:i.sessionId,manifestPath:i.manifestPath,messagesPath:i.messagesPath}}},async sendSession(r,o){let s=await n.runTurn({sessionId:r,prompt:o.prompt,userImages:o.attachments?.userImages,userFiles:o.attachments?.userFiles?.map((i)=>i.content)});if(!s)throw Error("local hub schedule runtime returned no turn result");return{result:z7(s)}},async abortSession(r){return await n.abort(r,Error("hub schedule abort")),{applied:!0}},async stopSession(r){return await n.stopSession(r),{applied:!0}}}}import{resolveClineBuildEnv as UN}from"@cline/shared";function G7(e){if(typeof e==="string")return e.trim()||void 0;if(!Array.isArray(e))return;return e.map((n)=>{if(n&&typeof n==="object"&&"type"in n&&n.type==="text"&&"text"in n&&typeof n.text==="string")return n.text.trim();return""}).filter(Boolean).join(`
886
- `).trim()||void 0}var AO=120,sv="...";function iv(e){let t=e.trim();if(!t)return"";if(Buffer.byteLength(t,"utf8")<=AO)return t;let n=AO-Buffer.byteLength(sv,"utf8");if(n<=0)return sv;let r="";for(let o of t){if(Buffer.byteLength(r+o,"utf8")>n)break;r+=o}return`${r}${sv}`}async function EO(e){let t=e?.sessionId?.trim()||"unknown",n=typeof e?.metadata?.messagesPath==="string"?e.metadata.messagesPath:void 0,o=[...await Ir(n)].reverse().find((d)=>d.role==="assistant"),s=o?G7(o.content):void 0,i=e?.workspaceRoot?.trim()||"workspace",a=typeof e?.metadata?.prompt==="string"?e.metadata.prompt.trim():i;return{title:`Task completed (${t})`,body:iv(s&&s.length>0?s:a.length>0?a:i),severity:"info"}}import{resolve as Eee}from"node:path";import{CLINE_DEFAULT_MODEL_ID as xee,captureSdkError as Im,createSessionId as Wv,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as _ee}from"@cline/shared";import{isChatWorkspacePath as Mee}from"@cline/shared/storage";Ct();import{stat as V7}from"node:fs/promises";import{join as J7}from"node:path";import{formatSessionSearchPreview as X7,formatSessionSearchTitle as MO}from"@cline/shared";import{loadSqliteDb as Y7,nowIso as Q7}from"@cline/shared/db";import{resolveDbDataDir as Z7}from"@cline/shared/storage";var xO=2,e9=300000,_O=131072,t9=1e5,n9=2000,r9="bm25(0, 0, 0, 0, 0, 0.5, 8.0, 1.0)";function dv(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)?e:void 0}function av(e,t){if(t.length>=_O)return;if(typeof e==="string"){let r=t.parts.length>0?1:0,o=_O-t.length-r;if(o<=0)return;let s=e.slice(0,o);if(!s)return;t.parts.push(s),t.length+=r+s.length;return}if(Array.isArray(e)){for(let r of e)av(r,t);return}let n=dv(e);if(!n)return;for(let[r,o]of Object.entries(n)){if(r==="data"||r==="image"||r==="images"||r==="reasoning"||r==="thinking"||r==="metadata")continue;av(o,t)}}function o9(e){let t=dv(e),n={length:0,parts:[]};return av(t?.content??e,n),n.parts.join(`
887
- `).trim()}function s9(e){let t=dv(e)?.role;return typeof t==="string"?t:"unknown"}function i9(e){let t=e.metadata?.title,n=typeof t==="string"&&t.trim()?t:e.prompt||e.sessionId;return MO(n)||e.sessionId}function a9(e){return e.trim().split(/\s+/u).filter(Boolean).map((t)=>`"${t.replaceAll('"','""')}"*`).join(" AND ")}function d9(e){if(e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;"),e.exec(`CREATE TABLE IF NOT EXISTS indexed_sessions (
885
+ `).length:0;Ac(t.telemetry,{event:"ended",ulid:n,durationMs:i,outputLines:a,errorMessage:r.error?String(r.error):void 0,agentId:r.subAgentId,parentId:r.parentAgentId,...Wn({agentId:r.subAgentId,conversationId:r.conversationId,parentAgentId:r.parentAgentId,teamId:o?.getTeamId(),teamName:o?.getTeamName(),createdByAgentId:r.parentAgentId})}),e.subAgentStarts.delete(r.subAgentId),e.invokeBackendOptional("handleSubAgentEnd",n,r)}}}function Lb(e,t,n,r){let o=Ob(e,t,n);return Us({configProvider:{getRuntimeConfig:()=>e.getSession(n)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:t.providerId,modelId:t.modelId,cwd:t.cwd,apiKey:t.apiKey,baseUrl:t.baseUrl,headers:t.headers,providerConfig:t.providerConfig,knownModels:t.knownModels,thinking:t.thinking,maxIterations:t.maxIterations,hooks:t.hooks,extensions:t.extensions,logger:t.logger,telemetry:t.telemetry},getConnectionConfig:()=>e.getSession(n)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:t.providerId,modelId:t.modelId,apiKey:t.apiKey,baseUrl:t.baseUrl,headers:t.headers,providerConfig:t.providerConfig,knownModels:t.knownModels,thinking:t.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let i=t.enableTools?Na({cwd:t.cwd,telemetry:t.telemetry,...sn[fr({mode:t.mode})],executors:r}):[];if(t.enableSpawnAgent)i.push(Lb(e,t,n,r));return ir(i)},...o})}import{readFile as G4,stat as V4}from"node:fs/promises";var J4=20480000;async function HM(e){let t=await V4(e);if(!t.isFile())throw Error("Path is not a file");if(t.size>J4)throw Error("File is too large to read into context.");let n=await G4(e,"utf8");if(n.includes("\x00"))throw Error("Cannot read binary file into context.");return n}var FM=5000,Ub;function r3(e,t){if(Ub)return;Ub=Lk().then(()=>{return}).catch((n)=>{Ub=void 0,e?.error?.("Detached command log recovery failed",{error:n}),Dt(t,{component:"core",operation:"command.detached_log_recovery",error:n,severity:"warn",handled:!0})})}function Yd(e){return typeof e==="number"&&Number.isFinite(e)?e:void 0}function o3(e){if(!e||typeof e!=="object"||Array.isArray(e))return;let t=e,n=Yd(t.inputTokens),r=Yd(t.outputTokens),o=Yd(t.cacheReadTokens),s=Yd(t.cacheWriteTokens),i=Yd(t.totalCost);if(n===void 0||r===void 0||o===void 0||s===void 0||i===void 0)return;return{inputTokens:n,outputTokens:r,cacheReadTokens:o,cacheWriteTokens:s,totalCost:i}}function s3(e,t){return{inputTokens:Math.max(e.inputTokens,t.inputTokens),outputTokens:Math.max(e.outputTokens,t.outputTokens),cacheReadTokens:Math.max(e.cacheReadTokens,t.cacheReadTokens),cacheWriteTokens:Math.max(e.cacheWriteTokens,t.cacheWriteTokens),totalCost:Math.max(e.totalCost,t.totalCost)}}function BM(e,t){if(!t)return!1;if(e.source_message_count!==t.source_message_count)return e.source_message_count<t.source_message_count;return Date.parse(e.updated_at)<Date.parse(t.updated_at)}function i3(e){return e==="steer_message"||e==="queue_message"||e==="pending_prompt"}class Ur{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;connectorsRequest;events=new cd;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new yi;runCommandExecutionController=new wa;constructor(e){let t=Y4();if(t)n3(t);let n=_t(e.distinctId);if(this.distinctId=n,this.sessionService=e.sessionService,this.runtimeBuilder=e.runtimeBuilder??new tm,this.createAgentInstance=e.createAgent??((r)=>new br(r)),this.defaultCapabilities=at(e.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=e.toolPolicies,this.providerSettingsManager=e.providerSettingsManager??new yt,this.oauthTokenManager=e.oauthTokenManager??new di({providerSettingsManager:this.providerSettingsManager,telemetry:e.telemetry}),this.defaultTelemetry=e.telemetry,this.defaultLogger=e.logger,e.distinctId!==void 0)this.defaultTelemetry?.setDistinctId(n);this.defaultFetch=e.fetch,this.connectorsRequest=e.connectorsRequest,r3(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new Eb({getSession:(r)=>this.sessions.get(r),emit:(r)=>this.emit(r),send:(r)=>this.runTurn(r)}),this.pendingPrompts={steerFirst:async(r)=>this.pendingPromptsController.steerFirst(r.sessionId),list:async(r)=>this.pendingPromptsController.list(r.sessionId),update:async(r)=>this.pendingPromptsController.update(r),delete:async(r)=>this.pendingPromptsController.delete(r)},this.eventBridge=new rm({getSession:(r)=>this.sessions.get(r),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(r)=>this.emit(r),persistMessages:(r,o,s)=>{this.invoke("persistSessionMessages",r,o,s).catch((i)=>{let a=this.sessions.get(r);(a?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:r,error:i}),Dt(a?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:i,severity:"warn",handled:!0,context:{sessionId:r,providerId:a?.config.providerId,modelId:a?.config.modelId}})})},enqueuePendingPrompt:(r,o)=>this.pendingPromptsController.enqueue(r,o),invokeBackendOptional:(r,...o)=>this.invokeOptional(r,...o)})}async applyInitialOAuthCredentials(e){if(e.config.apiKey?.trim())return e;let t=await this.oauthTokenManager.resolveProviderApiKey({providerId:e.config.providerId});if(!t?.apiKey)return e;return{...e,config:{...e.config,apiKey:t.apiKey}}}async startSession(e){let t=e.config.sessionId?.trim()??"",n=t||Z4(),r=t.length>0&&(e.initialMessages?.length??0)>0&&!e.prompt?.trim(),o=Boolean(e.config.cwd?.trim()||e.config.workspaceRoot?.trim()),s=r&&!o?await this.invokeOptionalValue("readSessionManifest",n):void 0,i=s?{...e.config,cwd:s.cwd,workspaceRoot:s.workspace_root}:await tP(e.config);return await this.startResolvedSession({...e,config:i},n,t.length>0,s)}async startResolvedSession(e,t,n,r){let o=e.source??ie.CLI,s=be(),i=await this.applyInitialOAuthCredentials(e),a=i.initialMessages??[],d=a.length>0?gp(a):rt(),c=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!c)throw Error("session service method not available: ensureSessionsDir");let u=Nb(c,t),l=Nb(u,`${t}.messages.json`),p=Nb(u,`${t}.json`),m=jn(e.config),g=e.interactive===!0&&!i.prompt?.trim(),f=ht.parse({version:1,session_id:t,source:o,pid:process.pid,started_at:s,status:g?"idle":"running",interactive:e.interactive===!0,provider:i.config.providerId,model:i.config.modelId,cwd:i.config.cwd,workspace_root:m,team_name:i.config.teamName,enable_tools:i.config.enableTools,enable_spawn:i.config.enableSpawnAgent,enable_teams:i.config.enableAgentTeams,prompt:i.prompt?.trim()||void 0,messages_path:l}),h,y,S=n&&a.length>0&&!i.prompt?.trim();if(S){let O=r??await this.invokeOptionalValue("readSessionManifest",t);if(O)f=O,h={manifestPath:p,messagesPath:O.messages_path||l,compactionPath:O.compaction_path,manifest:O},y=await this.invokeOptionalValue("readSessionCompactionState",t)}let b=await this.seedAggregateUsageFromArtifacts({initialUsage:d,sessionDir:u,rootMessagesPath:h?.messagesPath??l,manifest:f});this.usageBySession.set(t,d),this.aggregateUsageBySession.set(t,b);let w=at(this.defaultCapabilities,e.capabilities),v=w?.toolExecutors??this.toolExecutors,T=e.localRuntime,k=T?.extensionContext?.logger??T?.logger,P=T?.extensionContext?.automation,I=T?.extensionContext?.telemetry??T?.telemetry??this.defaultTelemetry,C,E=[],x={getSession:(O)=>this.sessions.get(O),subAgentStarts:this.subAgentStarts,onAgentEvent:(O,ke,N)=>this.eventBridge.dispatchAgentEvent(O,ke,N),invokeBackendOptional:(O,...ke)=>this.invokeOptional(O,...ke)},Y=kn(h?.manifest.metadata),M=kn(Re(i.sessionMetadata,{mode:i.mode??Y?.mode,trigger:i.mode?void 0:Y?.trigger}));C=await J_({input:i,localRuntime:e.localRuntime,sessionId:t,sessionOrigin:M,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:w,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,connectorsRequest:this.connectorsRequest,onPluginEvent:(O)=>{if(O.name==="plugin_log"){this.eventBridge.handlePluginLog(t,O.payload,k);return}if(E&&i3(O.name)){E.push(O);return}this.eventBridge.handlePluginEvent(t,O,P,I)},onPluginIssue:(O)=>{if(!C)return;this.eventBridge.dispatchAgentEvent(t,C.config,{type:"notice",noticeType:"status",displayRole:"status",message:su(O),metadata:{pluginIssue:O}})},onTeamEvent:(O)=>{this.eventBridge.handleTeamEvent(t,O),C.config.onTeamEvent?.(O)},createSpawnTool:()=>Lb(x,C.config,t,v),createSubAgentLifecycleCallbacks:(O)=>Ob(x,O,t),readSessionMetadata:async()=>(await this.getSession(t))?.metadata,writeSessionMetadata:async(O)=>{await this.persistSessionMetadata(t,()=>O)}});let le=Re(Kh({...h?.manifest.metadata??{},...i.sessionMetadata??{}},C.gitState),{mode:M?.mode,trigger:M?.trigger,version:C.config.extensionContext?.client?.version});if(!h)f.metadata=le;let B;try{B=await this.runtimeBuilder.build({...C.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController})}catch(O){throw await C.pluginSandboxShutdown?.().catch(()=>{return}),O}let D=C.config,j=C.providerConfig;if(B.teamRuntime&&!D.teamName?.trim())D.teamName=B.teamRuntime.getTeamName();let W=async()=>{let O=this.sessions.get(t);if(!O||!or(O.config.providerId))return!1;try{return await this.syncOAuthCredentials(O,{forceRefresh:!0}),!0}catch{return!1}};B.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:W});let J=[...B.tools,...D.extraTools??[]],X=B.extensions??C.extensions,G=i.initialCompactionState,Ce,he=G??y,Zt=pp(D),Ue=S?Xp(f.metadata):void 0,Ze=Ue?Nx({config:D,importedFrom:Ue.tool,next:Zt}):Zt,je=he?{...he,conversation_id:he.conversation_id?.trim()||t}:void 0,en=IS({compact:Ze,getState:()=>Ce?.compactionState,saveState:async(O,ke)=>{let N=Ce;if(!N)return;let te={...O,conversation_id:N.sessionId};try{if(!(await this.persistActiveSessionCompactionState(N,te,ke)).updated)D.logger?.debug?.("Skipped stale session compaction state",{sessionId:N.sessionId,sourceMessageCount:te.source_message_count})}catch(ze){D.logger?.error?.("Failed to persist session compaction state",{sessionId:N.sessionId,error:ze}),Dt(D.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:ze,context:{sessionId:N.sessionId,providerId:D.providerId,modelId:D.modelId}})}}}),vt={distinctId:this.distinctId,sessionId:t,providerId:j.providerId,modelId:j.modelId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,onAuthError:W,knownModels:j.knownModels,providerConfig:j,thinking:D.thinking,reasoningEffort:D.reasoningEffort??j.reasoningEffort,thinkingBudgetTokens:D.thinkingBudgetTokens,maxTokensPerTurn:D.maxTokensPerTurn,temperature:D.temperature,systemPrompt:D.systemPrompt,maxIterations:D.maxIterations,execution:D.execution,prepareTurn:en,tools:J,modelTools:B.modelTools,hooks:C.hooks,extensions:X,hookErrorMode:D.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:HM,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(O)=>{let ke=C.requestToolApproval,N=this.sessions.get(t);if(N)await this.markTurnPending(N);try{if(!ke)return{approved:!1,reason:"Tool approval callback is not configured."};return await ke(O)}finally{let te=this.sessions.get(t);if(te?.status==="pending")await this.markTurnRunning(te)}}:void 0,telemetry:D.telemetry,onConsecutiveMistakeLimitReached:D.onConsecutiveMistakeLimitReached,completionPolicy:B.completionPolicy,consumePendingUserMessage:()=>{let O=this.pendingPromptsController.consumeSteer(t);return O?Ed(O.prompt,O.mode??D.mode):void 0},logger:B.logger??D.logger,extensionContext:D.extensionContext,onEvent:(O)=>this.eventBridge.dispatchAgentEvent(t,D,O)};vt.hooks={...vt.hooks,onEvent:async(O)=>{if(await C.hooks?.onEvent?.(O),O.type!=="assistant-message")return;let ke=this.sessions.get(t);if(!ke)return;let N=ke.agent.getMessages();try{await this.invoke("persistSessionMessages",t,N,D.systemPrompt)}catch(te){D.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:t,error:te}),Dt(D.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:te,severity:"warn",handled:!0,context:{sessionId:t,providerId:D.providerId,modelId:D.modelId}})}}};let $t=this.createAgentInstance(vt);if(vt.onEvent)$t.subscribeEvents(vt.onEvent);B.registerLeadAgent?.($t);let pt=Wn({agentId:$t.getAgentId(),conversationId:$t.getConversationId(),teamId:B.teamRuntime?.getTeamId(),teamName:B.teamRuntime?.getTeamName(),teamRole:B.teamRuntime?"lead":void 0});if(pM(D,t,n,m,pt),pt)qr(D.telemetry,{ulid:t,modelId:D.modelId,provider:D.providerId,...pt});if(B.teamRuntime)sg(D.telemetry,{ulid:t,teamId:B.teamRuntime.getTeamId(),teamName:B.teamRuntime.getTeamName(),leadAgentId:$t.getAgentId(),restoredFromPersistence:B.teamRestoredFromPersistence===!0});let Z={sessionId:t,config:D,sessionMetadata:le,...h?{artifacts:h}:{},source:o,startedAt:h?.manifest.started_at??s,updatedAt:h?.manifest.ended_at??h?.manifest.started_at??s,pendingPrompt:f.prompt,runtime:B,agent:$t,started:!1,status:h?.manifest.status??(g?"idle":"running"),aborting:!1,interactive:e.interactive===!0,persistedMessages:a,compactionState:je,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,taskCompletedEmitted:!1,lastInteractiveTurnFinishReason:void 0};if(Ce=Z,Z.compactionState&&!this.isCompactionStateForSession(Z.sessionId,Z.compactionState,Z))Z.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:Z.sessionId,conversationId:Z.compactionState.conversation_id}),Z.compactionState=void 0;this.sessions.set(t,Z);let et=E??[];E=null;for(let O of et)this.eventBridge.handlePluginEvent(t,O,P,I);if(h)await this.refreshActiveSessionGitMetadata(Z,C.gitState);if(a.length>0&&!h)try{await this.ensureSessionPersisted(Z),await this.invoke("persistSessionMessages",t,a,Z.config.systemPrompt)}catch(O){Z.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:t,error:O}),Dt(Z.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:O,severity:"warn",handled:!0,context:{sessionId:t,providerId:Z.config.providerId,modelId:Z.config.modelId}})}this.emitStatus(t,Z.status);let tn;try{if(i.prompt?.trim())if(tn=await this.executeTurn(Z,{prompt:i.prompt,userImages:i.userImages,userFiles:i.userFiles}),!Z.interactive)await this.finalizeSingleRun(Z,tn.finishReason);else await this.completeInteractiveTurn(Z,tn.finishReason)}catch(O){if(Z.interactive&&Z.aborting)tn=await this.completeAbortedInteractiveTurn(Z);else{Dt(Z.config.telemetry,{component:"core",operation:"session.start",error:O,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}});try{await this.failSession(Z)}catch(ke){Z.config.logger?.error?.("Session failure cleanup threw",{sessionId:Z.sessionId,error:ke})}throw O}}return{sessionId:t,manifest:f,manifestPath:p,messagesPath:l,result:tn,...C.pluginIssues.length>0?{pluginIssues:C.pluginIssues}:{}}}async restoreSession(e){return this.sessionVersioning.restoreCheckpoint({...e,telemetry:this.defaultTelemetry,getSession:(t)=>this.getSession(t),readMessages:(t)=>this.readSessionMessages(t),buildStartInput:(t,n)=>{let r=t.restoredCheckpointMetadata?{...n.sessionMetadata??{},checkpoint:t.restoredCheckpointMetadata}:n.sessionMetadata;return{...n,...r?{sessionMetadata:r}:{},initialMessages:t.initialMessages}},startSession:(t)=>this.startSession(t),getStartedSessionId:(t)=>t.sessionId,cleanupStartedSession:async(t)=>{if(!await this.deleteSession(t.sessionId))throw Error(`Failed to clean up restored session ${t.sessionId}`)},readRestoredSession:(t)=>this.getSession(t)})}async runTurn(e){let t=this.getSessionOrThrow(e.sessionId),n=t.agent.canStartRun(),r=e.delivery??(t.interactive&&!n?"queue":void 0);if(t.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:e.sessionId,promptLength:e.prompt.length,userImageCount:e.userImages?.length??0,userFileCount:e.userFiles?.length??0,delivery:r??"immediate"}}),r==="queue"||r==="steer"){this.pendingPromptsController.enqueue(e.sessionId,{prompt:e.prompt,mode:e.mode,delivery:r,userImages:e.userImages,userFiles:e.userFiles});return}try{let o=await this.executeTurn(t,{prompt:e.prompt,mode:e.mode,userImages:e.userImages,userFiles:e.userFiles});if(!t.interactive)await this.finalizeSingleRun(t,o.finishReason);else await this.completeInteractiveTurn(t,o.finishReason);if(o.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain(e.sessionId)});return o}catch(o){if(t.interactive&&t.aborting)return await this.completeAbortedInteractiveTurn(t);throw Dt(t.config.telemetry,{component:"core",operation:"session.submit",error:o,severity:"error",handled:!1,context:{sessionId:t.sessionId,providerId:t.config.providerId,modelId:t.config.modelId}}),await this.failSession(t),o}}async getAccumulatedUsage(e){let t=fy(this.usageBySession.get(e)),n=fy(this.aggregateUsageBySession.get(e));return t||n?{usage:t,aggregateUsage:n}:void 0}async abort(e,t){let n=this.sessions.get(e);if(!n)return;if(n.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:e}}),n.aborting=!0,n.drainingPendingPrompts)this.pendingPromptsController.discardQueue(n);let r=n.runtime.teamRuntime;try{r?.cancelOutstandingWork(t)}finally{if(r)n.activeTeamRunIds.clear(),n.pendingTeamRunUpdates.length=0,Ad(n);n.agent.abort(t)}}async proceedWhileRunning(e,t){return this.runCommandExecutionController.proceedWhileRunning(e,t)}async stopSession(e){let t=this.sessions.get(e);if(!t)return;if(t.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:e}}),t.interactive&&!xe(t.status)){await this.releaseSessionRuntime(t,"session_stop");return}if(t.interactive&&t.agent.canStartRun()){await this.shutdownSession(t,{status:this.resolveInteractiveStopStatus(t),exitCode:this.resolveInteractiveStopExitCode(t),shutdownReason:"session_stop",endReason:"stopped"});return}t.aborting=!0,t.agent.abort(Error("session_stop")),await this.shutdownSession(t,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose(e="session_manager_dispose"){let t=[...this.sessions.values()];if(t.length===0)return;await Promise.allSettled(t.map((n)=>n.interactive&&!xe(n.status)?this.releaseSessionRuntime(n,e):n.interactive&&n.agent.canStartRun()?this.shutdownSession(n,{status:this.resolveInteractiveStopStatus(n),exitCode:this.resolveInteractiveStopExitCode(n),shutdownReason:e,endReason:"disposed"}):this.shutdownSession(n,{status:"cancelled",exitCode:0,shutdownReason:e,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession(e){let t=this.sessions.get(e);if(t)return _b(t);let n=e.trim();if(!n)return;let r=await this.getRow(n);if(r)return ad(r);let o=await this.readManifest(n);return o?by(o):void 0}async listSessions(e=200,t={}){let r=(await this.listRows(e,t)).map(ad),o=new Set(r.map((s)=>s.sessionId));for(let s of this.sessions.values()){if(o.has(s.sessionId))continue;r.unshift(_b(s))}return r.slice(0,e)}async deleteSession(e){if(this.sessions.has(e))await this.stopSession(e);let t=await this.invoke("deleteSession",e);if(t.deleted)this.usageBySession.delete(e),this.aggregateUsageBySession.delete(e);return t.deleted}async updateSession(e,t){let n=await this.invokeOptionalValue("updateSession",{sessionId:e,prompt:t.prompt,metadata:t.metadata,title:t.title}),r=n?.updated===!0;if(r&&n.metadata!==void 0){let o=this.sessions.get(e.trim());if(o){if(o.sessionMetadata=n.metadata??void 0,o.artifacts)o.artifacts.manifest.metadata=o.sessionMetadata}}return{updated:r}}async updateSessionCompactionState(e,t){let n=e.trim();if(!n)return{updated:!1};let r=this.sessions.get(n),o=r?void 0:await this.getSession(n);if(!(r??o))return{updated:!1};if(r){let a=await this.readSessionMessages(n),d=t.source_message_count>0&&a.length>=t.source_message_count,c=d?a:void 0;if(d){if(!await this.canPersistCompactionState(n,t,r,void 0,a))return{updated:!1};r.agent.restore(a)}return await this.persistActiveSessionCompactionState(r,t,c)}if(!await this.canPersistCompactionState(n,t,void 0,o))return{updated:!1};let i=await this.invokeOptionalValue("readSessionCompactionState",n);if(BM(t,i))return{updated:!1};return await this.invoke("persistSessionCompactionState",n,t),{updated:!0}}async readSessionCompactionState(e){let t=e.trim();if(!t)return;let n=this.sessions.get(t);if(n)for(;;){let r=n.compactionStateWriteQueue;if(!r)return n.compactionState;await r.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",t)}isCompactionStateForSession(e,t,n,r){let o=t.conversation_id?.trim();if(!o)return!0;if(o===e)return!0;let s=n?.agent.getConversationId()?.trim()||r?.conversationId?.trim();return s?o===s:!1}async canPersistCompactionState(e,t,n,r,o){if(!t.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession(e,t,n,r))return!1;let s=o??n?.agent.getMessages()??await this.readSessionMessages(e);return ei(t,s)!==void 0}async persistActiveSessionCompactionState(e,t,n){if(!await this.canPersistCompactionState(e.sessionId,t,e,void 0,n))return{updated:!1};return await this.enqueueCompactionStateWrite(e,async()=>{let r=e.compactionState,o=r!==void 0&&ei(r,n??e.agent.getMessages())!==void 0;if(r&&(o?BM(t,r):Date.parse(t.updated_at)<Date.parse(r.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",e.sessionId,t),e.compactionState=t,{updated:!0}})}async enqueueCompactionStateWrite(e,t){let r=(e.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(t),o=r.then(()=>{return},()=>{return});e.compactionStateWriteQueue=o;try{return await r}finally{if(e.compactionStateWriteQueue===o)e.compactionStateWriteQueue=void 0}}async readLiveSessionMessages(e){let t=e.trim();if(!t)return[];let n=this.sessions.get(t);if(n){let r=n.agent.getMessages();if(r.length>0)return r}return this.readSessionMessages(t)}async readSessionMessages(e){let t=e.trim();if(!t)return[];let n=await this.getRow(t);if(n?.messagesPath)return Ir(n.messagesPath);let r=await this.readManifest(t);return Ir(r?.messages_path)}async dispatchHookEvent(e){await fA(e,{queueSpawnRequest:(t)=>this.invokeOptional("queueSpawnRequest",t),upsertSubagentSessionFromHook:(t)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",t),appendSubagentHookAudit:(t,n)=>this.invokeOptional("appendSubagentHookAudit",t,n),applySubagentStatus:(t,n)=>this.invokeOptional("applySubagentStatus",t,n)})}subscribe(e,t){return this.events.subscribe(e,t)}async updateSessionModel(e,t){await this.updateSessionConnection(e,{modelId:t})}async updateSessionConnection(e,t){let n=Ls(t),r=this.getSessionOrThrow(e);if(n.providerId!==void 0)r.config.providerId=n.providerId;if(n.modelId!==void 0)r.config.modelId=n.modelId;if(n.apiKey!==void 0)r.config.apiKey=n.apiKey;if(n.baseUrl!==void 0)r.config.baseUrl=n.baseUrl;if(n.headers!==void 0)r.config.headers=n.headers;if(n.providerConfig!==void 0)r.config.providerConfig=n.providerConfig;if(Object.hasOwn(n,"reasoningEffort"))r.config.reasoningEffort=n.reasoningEffort??void 0;if(Object.hasOwn(n,"thinkingBudgetTokens"))r.config.thinkingBudgetTokens=n.thinkingBudgetTokens??void 0;if(Object.hasOwn(n,"thinking")){if(r.config.thinking=n.thinking??void 0,n.thinking===!1||n.thinking===null)r.config.reasoningEffort=void 0,r.config.thinkingBudgetTokens=void 0}let o={...n.providerId!==void 0?{providerId:n.providerId}:{},...n.modelId!==void 0?{modelId:n.modelId}:{},...n.apiKey!==void 0?{apiKey:n.apiKey}:{},...n.baseUrl!==void 0?{baseUrl:n.baseUrl}:{},...n.headers!==void 0?{headers:n.headers}:{},...n.providerConfig!==void 0?{providerConfig:n.providerConfig}:{},...Object.hasOwn(n,"reasoningEffort")?{reasoningEffort:n.reasoningEffort??void 0}:{},...Object.hasOwn(n,"thinking")?{thinking:n.thinking??void 0}:{},...Object.hasOwn(n,"thinkingBudgetTokens")?{thinkingBudgetTokens:n.thinkingBudgetTokens??void 0}:{}};if(n.thinking===!1||n.thinking===null)o.reasoningEffort=void 0,o.thinkingBudgetTokens=void 0;let s={...n.apiKey!==void 0?{apiKey:n.apiKey}:{},...n.baseUrl!==void 0?{baseUrl:n.baseUrl}:{},...n.headers!==void 0?{headers:n.headers}:{}};if(r.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(o),r.agent.updateConnection(n),r.runtime.teamRuntime?.updateTeammateConnections(s),n.providerId||n.modelId)await this.mutateSessionManifest(r,(i)=>{if(n.providerId)i.provider=n.providerId;if(n.modelId)i.model=n.modelId})}async mutateSessionManifest(e,t){let n=e.artifacts;if(!n)return;let r=e.sessionId,s=(this.manifestMutationQueues.get(r)??Promise.resolve()).then(async()=>{let a=await this.invokeOptionalValue("readSessionManifest",r)??n.manifest;return t(a),n.manifest=a,await this.invoke("writeSessionManifest",n.manifestPath,a),a}),i=s.then(()=>{return},()=>{return});this.manifestMutationQueues.set(r,i);try{return await s}finally{if(this.manifestMutationQueues.get(r)===i)this.manifestMutationQueues.delete(r)}}handlePluginEvent(e,t,n){return this.eventBridge.handlePluginEvent(e,t,n)}async executeTurn(e,t){e.aborting=!1;let n=await this.prepareTurnInput(e,t),r=n.prompt.trim(),o=n?.userImages?.length,s=n?.userFiles?.length;if(!r&&!o&&!s)throw Error("prompt cannot be empty");if(!e.artifacts&&!e.pendingPrompt)e.pendingPrompt=r;if(await this.ensureSessionPersisted(e),!e.pendingPrompt){e.pendingPrompt=r;try{await this.invokeOptionalValue("updateSession",{sessionId:e.sessionId,prompt:r})}catch(i){e.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:e.sessionId,error:i})}}await this.refreshActiveSessionGitMetadata(e),await this.syncOAuthCredentials(e),await this.markTurnRunning(e);try{let i=await this.executeAgentTurn(e,r,n.userImages,n.userFiles);while(iS(e,i.finishReason)){let a=await aS(e);if(a.length===0)break;let d=dS(e,a);i=await this.executeAgentTurn(e,d)}return i}finally{await this.refreshActiveSessionGitMetadata(e)}}async completeInteractiveTurn(e,t){if(Rd(e))return;e.lastInteractiveTurnFinishReason=t,await this.markTurnIdle(e),e.aborting=!1}resolveInteractiveStopStatus(e){let t=e.lastInteractiveTurnFinishReason;if(!t)return"cancelled";switch(t){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return t}resolveInteractiveStopExitCode(e){return e.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn(e){let t=new Date,n=e.agent.getMessages(),r=rt();if(e.persistedMessages=n,e.started=e.started||n.length>0,n.length>0)try{await this.ensureSessionPersisted(e),await this.invoke("persistSessionMessages",e.sessionId,n,e.config.systemPrompt)}catch(o){e.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:e.sessionId,error:o}),Dt(e.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:o,severity:"warn",handled:!0,context:{sessionId:e.sessionId,providerId:e.config.providerId,modelId:e.config.modelId}})}return this.eventBridge.dispatchAgentEvent(e.sessionId,e.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:r}),await this.completeInteractiveTurn(e,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain(e.sessionId)}),{text:"",usage:r,messages:n,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:e.config.modelId,provider:e.config.providerId},startedAt:t,endedAt:t,durationMs:0}}async executeAgentTurn(e,t,n,r){let o=e.started||e.agent.getMessages().length>0,s=e.persistedMessages??e.agent.getMessages(),i=this.usageBySession.get(e.sessionId)??rt(),a=this.aggregateUsageBySession.get(e.sessionId)??i;e.turnUsageBaseline=i,e.turnAggregateUsageBaseline=a,e.turnPrimaryUsage=rt(),e.turnUsageByAgent=new Map,Qm(e.config.telemetry,e.sessionId,e.config.mode),Ui(e.config.telemetry,{ulid:e.sessionId,provider:e.config.providerId,model:e.config.modelId,source:"user",mode:e.config.mode,...this.getSessionAgentTelemetryIdentity(e)});try{let d=()=>{let f=o?e.agent.continue(t,n,r):e.agent.run(t,n,r);if(e.aborting)e.agent.abort(Error("Run aborted before it started"));return f},c=await this.runWithAuthRetry(e,d,s);e.started=!0;let u=Ol(c.messages,c,s);e.persistedMessages=u;let l=mp(e.turnUsageByAgent?.values()??[]),p=Ye(i,c.usage),m=Ye(Ye(rt(),c.usage),l),g=Ye(a,m);return this.usageBySession.set(e.sessionId,p),this.aggregateUsageBySession.set(e.sessionId,g),await this.persistSessionMetadata(e.sessionId,(f)=>({...f??{},totalCost:p.totalCost,aggregatedAgentsCost:g.totalCost,usage:p,aggregateUsage:g})),await this.invoke("persistSessionMessages",e.sessionId,u,e.config.systemPrompt),this.observeTaskCompletionTool(e,c),c}catch(d){Dt(e.config.telemetry,{component:"core",operation:"session.turn",error:d,severity:"error",handled:!1,context:{sessionId:e.sessionId,providerId:e.config.providerId,modelId:e.config.modelId}});try{await this.invoke("persistSessionMessages",e.sessionId,e.agent.getMessages(),e.config.systemPrompt)}catch(c){e.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:e.sessionId,error:c})}throw d}finally{e.turnUsageBaseline=void 0,e.turnAggregateUsageBaseline=void 0,e.turnPrimaryUsage=void 0,e.turnUsageByAgent=void 0}}observeTaskCompletionTool(e,t){if(e.submitAndExitObserved)return;if(!t.toolCalls.some((r)=>r.name===Me.SUBMIT_AND_EXIT&&r.error===void 0))return;e.submitAndExitObserved=!0,e.taskCompletedEmitted=!0,Rc(e.config.telemetry,{ulid:e.sessionId,provider:e.config.providerId,model:e.config.modelId,mode:e.config.mode,durationMs:Date.now()-Date.parse(e.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity(e)})}emitTaskCompletedOnTeardown(e,t){if(e.taskCompletedEmitted||e.submitAndExitObserved)return;if(!(e.interactive?e.lastInteractiveTurnFinishReason==="completed"&&!e.aborting&&e.agent.canStartRun():t==="completed"))return;e.taskCompletedEmitted=!0,Rc(e.config.telemetry,{ulid:e.sessionId,provider:e.config.providerId,model:e.config.modelId,mode:e.config.mode,durationMs:Date.now()-Date.parse(e.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity(e)})}async prepareTurnInput(e,t){let n=jn(e.config),r=t3(t.prompt).trim();if(!r)return{prompt:"",userImages:t.userImages,userFiles:this.resolveAbsoluteFilePaths(e.config.cwd,t.userFiles)};let o=await Bu(r,n);mM(e.config.telemetry,o);let s=Ed(o.prompt,t.mode??e.config.mode),i=this.resolveAbsoluteFilePaths(e.config.cwd,t.userFiles),a=this.resolveAbsoluteFilePaths(n,o.matchedFiles),d=Array.from(new Set([...i,...a]));return{prompt:s,userImages:t.userImages,userFiles:d.length>0?d:void 0}}async ensureSessionPersisted(e){if(e.artifacts)return;let t=jn(e.config);if(e.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:e.sessionId,source:e.source,pid:process.pid,status:e.status,interactive:e.interactive,provider:e.config.providerId,model:e.config.modelId,cwd:e.config.cwd,workspaceRoot:t,teamName:e.config.teamName,enableTools:e.config.enableTools,enableSpawn:e.config.enableSpawnAgent,enableTeams:e.config.enableAgentTeams,prompt:e.pendingPrompt,metadata:e.sessionMetadata,startedAt:e.startedAt}),e.compactionState){if(!(await this.persistActiveSessionCompactionState(e,e.compactionState)).updated)e.compactionState=void 0}}async markTurnRunning(e){if(e.status==="running")return;await this.updateStatus(e,"running",null)}async refreshActiveSessionGitMetadata(e,t){try{let n=t??await BR(jn(e.config));if(!n||!e.artifacts)return;if(HR(e.artifacts.manifest.metadata,n))return;await this.persistSessionMetadata(e.sessionId,(r)=>Kh({...r??{},...e.sessionMetadata??{}},n))}catch(n){e.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:e.sessionId,error:n})}}async markTurnPending(e){if(e.status==="pending")return;await this.updateStatus(e,"pending",null)}async markTurnIdle(e){if(e.status==="idle")return;await this.updateStatus(e,"idle",null)}async persistSessionMetadata(e,t){let n=this.sessions.get(e),r=await this.invokeOptionalValue("readSessionManifest",e)??n?.artifacts?.manifest,o=t(r?.metadata);if(!n?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:e,metadata:o}))?.updated===!1)return;n.sessionMetadata=o,n.artifacts.manifest.metadata=o}async finalizeSingleRun(e,t){if(Rd(e))return;let n=t==="aborted"||e.aborting,r=t==="error";await this.shutdownSession(e,{status:n?"cancelled":r?"failed":"completed",exitCode:r?1:0,shutdownReason:r?"session_error":"session_complete",endReason:t})}async failSession(e){e.lastInteractiveTurnFinishReason="error",await this.shutdownSession(e,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession(e,t){if(this.emitTaskCompletedOnTeardown(e,t.status),Ad(e),!e.aborting&&!e.agent.canStartRun())e.aborting=!0,e.agent.abort(Error(t.shutdownReason));let n=[],r=(o,s)=>{n.push(s),e.config.logger?.log("Session shutdown cleanup failed",{sessionId:e.sessionId,stage:o,error:s,severity:"warn"}),Dt(e.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:s,severity:"warn",handled:!0,context:{sessionId:e.sessionId,stage:o,status:t.status,shutdownReason:t.shutdownReason,providerId:e.config.providerId,modelId:e.config.modelId}})};if(e.artifacts){await this.refreshActiveSessionGitMetadata(e);try{await this.updateStatus(e,t.status,t.exitCode)}catch(o){r("update_status",o)}}try{await e.agent.shutdown(t.shutdownReason)}catch(o){r("agent_shutdown",o)}try{await Promise.resolve(e.runtime.shutdown(t.shutdownReason))}catch(o){r("runtime_shutdown",o)}try{await e.pluginSandboxShutdown?.()}catch(o){r("plugin_sandbox_shutdown",o)}if(this.sessions.delete(e.sessionId),this.emit({type:"ended",payload:{sessionId:e.sessionId,reason:t.endReason,ts:Date.now()}}),n.length>0&&t.status==="failed")throw n[0]}async releaseSessionRuntime(e,t){this.emitTaskCompletedOnTeardown(e);let n=[],r=(o,s)=>{n.push(s),e.config.logger?.log("Session runtime cleanup failed",{sessionId:e.sessionId,stage:o,error:s,severity:"warn"}),Dt(e.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:s,severity:"warn",handled:!0,context:{sessionId:e.sessionId,stage:o,reason:t,providerId:e.config.providerId,modelId:e.config.modelId}})};if(!e.aborting&&!e.agent.canStartRun())e.aborting=!0,e.agent.abort(Error(t));try{await e.agent.shutdown(t)}catch(o){r("agent_shutdown",o)}try{await Promise.resolve(e.runtime.shutdown(t))}catch(o){r("runtime_shutdown",o)}try{await e.pluginSandboxShutdown?.()}catch(o){r("plugin_sandbox_shutdown",o)}if(this.sessions.delete(e.sessionId),n.length>0)throw n[0]}async updateStatus(e,t,n){if(!e.artifacts)return;let r=await this.invoke("updateSessionStatus",e.sessionId,t,n);if(!r.updated)return;let o=await this.mutateSessionManifest(e,(s)=>{if(s.status=t,xe(t))delete s.ended_at,s.exit_code=null;else s.ended_at=r.endedAt??be(),s.exit_code=typeof n==="number"?n:null});if(!o)return;e.status=t,e.updatedAt=r.endedAt??be(),e.endedAt=xe(t)?null:o.ended_at,e.exitCode=o.exit_code,this.emitStatus(e.sessionId,t)}async runWithAuthRetry(e,t,n){try{return await t()}catch(r){if(!or(e.config.providerId)||!e3(r))throw r;return await this.syncOAuthCredentials(e,{forceRefresh:!0}),e.agent.restore(n),t()}}async syncOAuthCredentials(e,t){let n=null;try{n=await this.oauthTokenManager.resolveProviderApiKey({providerId:e.config.providerId,forceRefresh:t?.forceRefresh})}catch(r){if(r instanceof Do)throw Error(`${r.providerId} requires re-authentication.`);throw r}if(!n?.apiKey||e.config.apiKey===n.apiKey)return;e.config.apiKey=n.apiKey,e.agent.updateConnection({apiKey:n.apiKey}),e.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:n.apiKey}),e.runtime.teamRuntime?.updateTeammateConnections({apiKey:n.apiKey})}getSessionOrThrow(e){let t=this.sessions.get(e);if(!t){let n=new vo(e);throw Dt(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:n,severity:"warn",handled:!0,context:{sessionId:e,activeSessionCount:this.sessions.size}}),n}return t}resolveAbsoluteFilePaths(e,t){if(!t||t.length===0)return[];let n=t.map((r)=>r.trim()).filter((r)=>r.length>0).map((r)=>Q4(r)?r:Db(e,r));return Array.from(new Set(n))}getSessionAgentTelemetryIdentity(e){return Wn({agentId:e.agent.getAgentId(),conversationId:e.agent.getConversationId(),teamId:e.runtime.teamRuntime?.getTeamId(),teamName:e.runtime.teamRuntime?.getTeamName(),teamRole:e.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts(e){let t=await this.summarizePersistedTeammateUsage(e.sessionDir,e.rootMessagesPath,e.manifest.session_id),n=Ye(e.initialUsage,t);return this.withPersistedAggregateUsageFloor(n,e.manifest)}async summarizePersistedTeammateUsage(e,t,n){let r=Db(t),o=`${n}.messages.json`,s;try{s=X4(e)}catch{return rt()}let i=rt();for(let a of s){if(!a.endsWith(".messages.json"))continue;if(a===o)continue;let d=Db(e,a);if(d===r)continue;let c=await Ir(d);if(c.length===0)continue;i=Ye(i,gp(c))}return i}withPersistedAggregateUsageFloor(e,t){let n=o3(t.metadata?.aggregateUsage);if(n)return s3(e,n);let r=t.metadata?.aggregatedAgentsCost;if(typeof r!=="number"||!Number.isFinite(r)||r<=e.totalCost)return e;return{...e,totalCost:r}}emitStatus(e,t){this.emitSessionSnapshot(e),this.emit({type:"status",payload:{sessionId:e,status:t}})}async emitSessionSnapshot(e){let t=await this.getSession(e);if(!t)return;this.emit({type:"session_snapshot",payload:{sessionId:e,snapshot:Rr({session:t,usage:this.usageBySession.get(e),aggregateUsage:this.aggregateUsageBySession.get(e)})}})}emit(e){this.events.emit(e)}async listRows(e,t={}){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor(e)),FM),t)}async getRow(e){let t=e.trim();if(!t)return;return(await this.listRows(FM)).find((r)=>r.sessionId===t)}async readManifest(e){let t=e.trim();if(!t)return;return await this.invokeOptionalValue("readSessionManifest",t)}invoke(e,...t){return NM(this.sessionService,e,...t)}invokeOptional(e,...t){return DM(this.sessionService,e,...t)}invokeOptionalValue(e,...t){return UM(this.sessionService,e,...t)}}function a3(e){if(e.backendMode)return e.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let t=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(t==="local"||t==="hub"||t==="remote")return t;return"auto"}var Qd,Zd;function d3(e,t){if(e!=="auto"&&e!=="hub")return;if(t.hub?.endpoint?.trim())return;jA(t.hub?.workspaceRoot?.trim()||t.hub?.cwd?.trim()||process.cwd())}async function c3(e){await e.reconcileDeadSessions?.().catch(()=>{})}function jM(e){try{let t=new _r;return t.init(),new Lr(t,{messagesArtifactUploader:e.messagesArtifactUploader,logger:e.logger})}catch(t){return e.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),WM(e.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:t,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new pS(void 0,{messagesArtifactUploader:e.messagesArtifactUploader,logger:e.logger})}}function $M(e,t,n){return new Ur({sessionService:n??e.sessionService??jM(e),capabilities:e.capabilities,logger:e.logger,telemetry:e.telemetry,toolPolicies:e.toolPolicies,distinctId:t,fetch:e.fetch})}async function u3(e){if(Qd)return Qd;if(Zd)return await Zd;return Zd=(async()=>(Qd=jM(e),await c3(Qd),Qd))().finally(()=>{Zd=void 0}),await Zd}async function om(e){let t=_t(e.distinctId);e.telemetry?.setDistinctId(t);let n=a3(e);if(n==="remote"){let r=e.remote?.endpoint?.trim();if(!r)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return e.logger?.log("Using remote runtime host",{endpoint:r}),new zl({endpoint:r,authToken:e.remote?.authToken,clientType:e.remote?.clientType,displayName:e.remote?.displayName,workspaceRoot:e.remote?.workspaceRoot,cwd:e.remote?.cwd,capabilities:e.capabilities})}if(n==="hub"){let r=e.hub?.endpoint?.trim(),o,s=r||await yd({strategy:e.hub?.strategy??"require-hub",workspaceRoot:e.hub?.workspaceRoot,cwd:e.hub?.cwd,onStartupError:(i)=>{o=i}});if(!s){let i=o instanceof Error?o.message:o===void 0?void 0:String(o);throw Error(i?`No compatible hub runtime is available: ${i}`:"No compatible hub runtime is available.",o===void 0?void 0:{cause:o})}return e.logger?.log("Using hub runtime host",{url:s,explicitEndpoint:r||void 0}),new _o({url:s,authToken:e.hub?.authToken,clientType:e.hub?.clientType,displayName:e.hub?.displayName,capabilities:e.capabilities,telemetry:e.telemetry},{workspaceRoot:e.hub?.workspaceRoot,cwd:e.hub?.cwd})}if(n==="auto"){let r=await Hy({endpoint:e.hub?.endpoint,strategy:e.hub?.strategy??"prefer-hub",workspaceRoot:e.hub?.workspaceRoot,cwd:e.hub?.cwd});if(r){e.logger?.log("Using discovered local hub runtime host",{url:r});let o=new _o({url:r,authToken:e.hub?.authToken,clientType:e.hub?.clientType,displayName:e.hub?.displayName,capabilities:e.capabilities,telemetry:e.telemetry},{workspaceRoot:e.hub?.workspaceRoot,cwd:e.hub?.cwd});try{return await o.connect(),o}catch(s){e.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:s}),WM(e.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:s,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return d3(n,e),e.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),$M(e,t)}return $M(e,t)}class ec{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}Mo();import{execFile as l3}from"node:child_process";import*as qM from"node:fs/promises";import*as wi from"node:path";import{promisify as p3}from"node:util";var m3=p3(l3),g3=52428800;async function Ti(e,t){let{stdout:n}=await m3("git",["-C",e,...t],{windowsHide:!0,maxBuffer:g3,encoding:"utf8"});return n}function Hb(e){return e.split("\x00").filter(Boolean)}function zM(e,t){let n=wi.resolve(e,t),r=wi.relative(e,n);if(r.startsWith("..")||wi.isAbsolute(r))throw Error(`Checkpoint diff path escapes workspace: ${t}`);return n}async function f3(e,t,n){try{return await Ti(e,["show",`${t}:${n}`])}catch{try{return await Ti(e,["show",`${t}^3:${n}`])}catch{return""}}}async function h3(e,t){try{return await qM.readFile(zM(e,t),"utf8")}catch{return""}}async function y3(e,t){try{return Hb(await Ti(e,["ls-tree","-r","-z","--name-only",`${t}^3`]))}catch{return[]}}async function S3(e,t){await Ti(e,["cat-file","-e",`${t.ref}^{tree}`]);let[n,r,o]=await Promise.all([Ti(e,["diff","--name-only","-z",t.ref,"--"]),Ti(e,["ls-files","--others","--exclude-standard","-z"]),y3(e,t.ref)]);return[...new Set([...Hb(n),...Hb(r),...o])].sort((i,a)=>i.localeCompare(a))}function KM(e){let t=e.checkpointRunCount;if(!Number.isInteger(t)||t<1)throw Error("checkpointRunCount must be a positive integer");let n=Yp(Gd(e.session),t);if(!n)throw Error(`No checkpoint found at or before run ${t} in session ${e.session.sessionId}`);let r=(e.cwd?.trim()||e.session.cwd||e.session.workspaceRoot).trim();if(!r)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:n,cwd:r}}async function GM(e,t){let n=await S3(e,t);return(await Promise.all(n.map(async(o)=>{let[s,i]=await Promise.all([f3(e,t.ref,o),h3(e,o)]);return{filePath:zM(e,o),leftContent:s,rightContent:i}}))).filter((o)=>o.leftContent!==o.rightContent)}async function Fb(e){let t=KM(e),n=await GM(t.cwd,t.checkpoint);return{...t,diffs:n}}var Bb="modelToolActivities";function b3(e){if(e.role!=="assistant")return[];let t=e.metadata?.[Bb];if(!Array.isArray(t))return[];let n=[];for(let r of t){if(!r||typeof r!=="object"||Array.isArray(r))continue;let o=r,s=typeof o.toolCallId==="string"?o.toolCallId.trim():"",i=typeof o.toolName==="string"?o.toolName.trim():"",a=o.execution;if(!s||!i||a!=="client"&&a!=="provider")continue;n.push({toolCallId:s,toolName:i,execution:a,input:o.input,output:o.output,isError:o.isError===!0,hasResult:Object.hasOwn(o,"output")||Object.hasOwn(o,"isError")})}return n}function v3(e){if(!e||!Object.hasOwn(e,Bb))return e;let t={...e};return delete t[Bb],Object.keys(t).length>0?t:void 0}function sm(e,t,n,r){return{kind:"session_display_message",origin:n,execution:r,message:e,sourceIndex:t}}function $b(e){let t=[];for(let[n,r]of e.entries()){if(!r||typeof r!=="object"||Array.isArray(r)||r.role!=="user"&&r.role!=="assistant")continue;let o=r,s=b3(o);if(s.length===0){t.push(sm(o,n,"history"));continue}for(let[i,a]of s.entries()){let c=(typeof o.id==="string"?o.id.trim():"")||`model_tool_${a.toolCallId||`history_message_${n}`}`,u={agent:o.agent,sessionId:o.sessionId,ts:o.ts},l={type:"tool_use",id:a.toolCallId,name:a.toolName,input:a.input??{}};if(t.push(sm({...u,id:`${c}_model_tool_${i}_use`,role:"assistant",content:[l],metadata:{userRunSpan:0},modelInfo:o.modelInfo},n,"model_tool_activity",a.execution)),a.hasResult)t.push(sm({...u,id:`${c}_model_tool_${i}_result`,role:"user",content:[{type:"tool_result",tool_use_id:a.toolCallId,name:a.toolName,content:Os(a.output),is_error:a.isError||void 0}],metadata:{userRunSpan:0}},n,"model_tool_activity",a.execution))}t.push(sm({...o,metadata:v3(o.metadata)},n,"history"))}return t}class Wb{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor(e,t,n,r,o,s,i,a,d,c){this.clientName=t,this.runtimeAddress=n,this.host=e,this.prepare=r,this.capabilities=o,this.logger=s,this.telemetry=i,this.distinctId=a,this.featureFlags=d,this.settings=ER(e),this.pendingPrompts=xR(e),this.automation=new Hg(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=c?new od({workspaceRoot:c.workspaceRoot??process.cwd(),specs:{cronSpecsDir:c.cronSpecsDir??c.cronDir,scope:Ww(c.cronScope),workspaceRoot:c.workspaceRoot},runtimeHandlers:jw({host:e,getExtensionContext:()=>Wc({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:c.dbPath,logger:c.logger,telemetry:this.telemetry,pollIntervalMs:c.pollIntervalMs,claimLeaseSeconds:c.claimLeaseSeconds,globalMaxConcurrency:c.globalMaxConcurrency,watcherDebounceMs:c.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((u)=>{if(u.type!=="ended")return;this.disposeSessionBootstrap(u.payload.sessionId)})}static async create(e={}){let t=_t(e.distinctId),n=at(e.capabilities),r={...e,capabilities:n,distinctId:t},o=await om(r),s=$w(e.automation),i=e.featureFlags||new Uo({provider:new ec,telemetry:e.telemetry,logger:e.logger,context:{distinctId:t,clientName:e.clientName}}),a=new Wb(o,e.clientName,o.runtimeAddress,e.prepare,n,e.logger,e.telemetry,t,i,s?{...s,logger:e.logger}:void 0);if(s&&s.autoStart!==!1)await a.automation.start();return a}async disposeSessionBootstrap(e){let t=this.activeSessionBootstraps.get(e);if(!t)return;this.activeSessionBootstraps.delete(e),await Promise.resolve(t.dispose?.())}async start(e){let t=$h(e),n=await this.prepare?.(t);try{let r=n?await n.applyToStartSessionInput(t):t,o=await this.host.startSession(Wh(r,{defaultCapabilities:this.capabilities,withExtensionContext:(s)=>Wc({automationService:this.automationService,automation:this.automation,context:s,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(n)if(await this.host.getSession(o.sessionId))this.activeSessionBootstraps.set(o.sessionId,n);else await Promise.resolve(n.dispose?.());return _R({input:r,sessionId:o.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),o}catch(r){throw await Promise.resolve(n?.dispose?.()),r}}send=(...e)=>this.host.runTurn(...e);getAccumulatedUsage=(...e)=>this.host.getAccumulatedUsage?.(...e)??Promise.resolve(void 0);abort=(...e)=>this.host.abort(...e);stop=async(e)=>{await this.host.stopSession(e),await this.disposeSessionBootstrap(e)};dispose=async(...e)=>{try{await this.automationService?.dispose(),await this.host.dispose(...e)}finally{this.unsubscribeBootstrapCleanup();let t=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(t.map((n)=>this.disposeSessionBootstrap(n)))}};get=(...e)=>this.host.getSession(...e);listHistory=async(e={})=>await vy(this.host,e);list=async(e=200,t={})=>await this.listHistory({...t,limit:e});delete=async(e)=>{let t=await this.host.deleteSession(e);if(t)await this.disposeSessionBootstrap(e);return t};update=(...e)=>this.host.updateSession(...e);updateSessionCompactionState=(...e)=>this.host.updateSessionCompactionState(...e);readSessionCompactionState=(...e)=>this.host.readSessionCompactionState(...e);readMessages=(...e)=>this.host.readSessionMessages(...e);async readDisplayMessages(e){return $b(await this.host.readSessionMessages(e))}readLiveMessages=(e)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages(e):this.host.readSessionMessages(e);async restore(e){let t=e.start?Wh(e.start,{defaultCapabilities:this.capabilities,withExtensionContext:(n)=>Wc({automationService:this.automationService,automation:this.automation,context:n,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:e.sessionId,checkpointRunCount:e.checkpointRunCount,cwd:e.cwd,restore:e.restore,start:t})}async compareCheckpoint(e){let t=e.sessionId.trim();if(!t)throw Error("sessionId is required");let n=await this.host.getSession(t);if(!n)throw Error(`Session ${t} not found`);return Fb({session:n,checkpointRunCount:e.checkpointRunCount,cwd:e.cwd})}ingestHookEvent=(...e)=>this.host.dispatchHookEvent(...e);subscribe(e,t){return this.host.subscribe(e,t)}hasSessionSubscription(e){return this.host.hasSessionSubscription?.(e)??!1}updateSessionModel=(...e)=>this.host.updateSessionModel?.(...e)??Promise.resolve();updateSessionConnection=(...e)=>this.host.updateSessionConnection?.(...e)??Promise.resolve()}import{resolve as T3}from"node:path";import{normalizePluginManifest as w3}from"@cline/shared";function VM(e,t){if(!e)return!0;if(e.providerIds?.length){if(!t?.providerId||!e.providerIds.includes(t.providerId))return!1}if(e.modelIds?.length){if(!t?.modelId||!e.modelIds.includes(t.modelId))return!1}return!0}function JM(e){return typeof e==="object"&&e!==null}function jb(e){return Array.isArray(e)&&e.every((t)=>typeof t==="string")}function C3(e,t){if(!JM(e.manifest))throw Error(`Invalid plugin module at ${t}: missing required "manifest"`);if(!jb(e.manifest.capabilities))throw Error(`Invalid plugin module at ${t}: manifest.capabilities must be a string array`);if(e.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${t}: manifest.capabilities cannot be empty`);if(Object.hasOwn(e.manifest,"providerIds")&&!jb(e.manifest.providerIds))throw Error(`Invalid plugin module at ${t}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn(e.manifest,"modelIds")&&!jb(e.manifest.modelIds))throw Error(`Invalid plugin module at ${t}: manifest.modelIds must be a string array when provided`)}function k3(e,t){if(!JM(e))throw Error(`Invalid plugin module at ${t}: expected object export`);if(typeof e.name!=="string"||e.name.length===0)throw Error(`Invalid plugin module at ${t}: expected non-empty "name"`);if(!Object.hasOwn(e,"manifest"))throw Error(`Invalid plugin module at ${t}: missing required "manifest"`);C3(e,t)}async function qb(e,t={}){let n=T3(t.cwd??process.cwd(),e),r=await fC(n,{useCache:t.useCache,freshModule:t.freshModule}),o=t.exportName??"plugin",s=r.default??r[o];k3(s,n);let i=s,a=i.setup,d=a?(c,u)=>{let l={...t.session,...u.session},p={...u,session:Object.keys(l).length>0?l:void 0,client:t.client??u.client,user:t.user??u.user,workspaceInfo:t.workspaceInfo??u.workspaceInfo,automation:t.automation??u.automation,logger:t.logger??u.logger,telemetry:t.telemetry??u.telemetry};return a.call(i,c,p)}:void 0;return{...i,manifest:w3(i.manifest),setup:d}}async function XM(e,t={}){return(await zb(e,t)).plugins}async function zb(e,t={}){let n=[],r=[],o=new Map,s=0;for(let a of e)try{let d=await qb(a,t);if(!VM(d.manifest,t))continue;let c=o.get(d.name);if(c)r.push({type:"duplicate_plugin_override",pluginName:d.name,pluginPath:a,overriddenPluginPath:c.pluginPath,message:`Plugin "${d.name}" from ${a} overrides ${c.pluginPath}`});o.set(d.name,{plugin:d,pluginPath:a,order:s++})}catch(d){let c=d instanceof Error?d.message:String(d);n.push({pluginPath:a,phase:"load",message:c,stack:d instanceof Error?d.stack:void 0})}let i=[...o.values()].sort((a,d)=>a.order-d.order);return{plugins:i.map((a)=>a.plugin),pluginPaths:i.map((a)=>a.pluginPath),failures:n,warnings:r}}import{isAbsolute as P3,relative as I3,resolve as Ci,sep as R3}from"node:path";import{createSessionId as A3,readHubScheduleMode as YM}from"@cline/shared";function Wo(e,t){return t.crossWorkspace&&e.payload?.allWorkspaces===!0}function QM(e,t){if(typeof t!=="string"||!t.trim())return;let n=Ci(e,t);if(!tO(e,n))throw Error("schedule cwd is outside the client workspace scope");return n}function ZM(e){return typeof e.workspaceRoot==="string"&&e.workspaceRoot.trim()?Ci(e.workspaceRoot.trim()):void 0}function tO(e,t){let n=I3(e,t);return n!==".."&&!n.startsWith(`..${R3}`)&&!P3(n)}function ut(e,t){return{version:e.version,requestId:e.requestId,ok:!0,payload:t}}function eO(e,t,n){return{version:e.version,requestId:e.requestId??A3("hubreq_"),ok:!1,error:{code:t,message:n}}}class im{schedules;constructor(e){this.schedules=e}async handleCommand(e,t){try{let n=this.resolveScope(t);switch(e.command){case"schedule.create":return ut(e,{schedule:this.schedules.createSchedule(this.toCreateInput(e.payload??{},n,Wo(e,n)))});case"schedule.list":return ut(e,{schedules:this.schedules.listSchedules({enabled:typeof e.payload?.enabled==="boolean"?e.payload.enabled:void 0,limit:typeof e.payload?.limit==="number"?e.payload.limit:void 0,tags:Array.isArray(e.payload?.tags)?e.payload?.tags:void 0,workspaceRoot:Wo(e,n)?void 0:n.workspaceRoot})});case"schedule.get":return ut(e,{schedule:this.requireScopedSchedule(e,n)});case"schedule.update":{let r=this.requireScopedSchedule(e,n);return ut(e,{schedule:this.schedules.updateSchedule(r.scheduleId,this.toUpdateInput(e.payload??{},n,r,Wo(e,n)))})}case"schedule.delete":return ut(e,{deleted:this.schedules.deleteSchedule(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.enable":return ut(e,{schedule:this.schedules.resumeSchedule(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.disable":return ut(e,{schedule:this.schedules.pauseSchedule(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.trigger":return ut(e,{execution:e.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(this.requireScopedSchedule(e,n).scheduleId):await this.schedules.triggerScheduleNow(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.list_executions":return ut(e,{executions:this.listScopedExecutions(e,n)});case"schedule.stats":return ut(e,{stats:this.schedules.getScheduleStats(this.requireScopedSchedule(e,n).scheduleId)});case"schedule.active":{let r=this.schedules.getActiveExecutions();if(Wo(e,n))return ut(e,{executions:r});let o=this.scopedScheduleIds(n);return ut(e,{executions:r.filter((s)=>o.has(s.scheduleId))})}case"schedule.upcoming":{let r=this.schedules.getUpcomingRuns(typeof e.payload?.limit==="number"?e.payload.limit:void 0);if(Wo(e,n))return ut(e,{runs:r});let o=this.scopedScheduleIds(n);return ut(e,{runs:r.filter((s)=>o.has(s.scheduleId))})}default:return eO(e,"unsupported_command",`Unsupported hub schedule command: ${e.command}`)}}catch(n){return eO(e,"schedule_command_failed",n instanceof Error?n.message:String(n))}}resolveScope(e){let t=e?.workspaceContext;if(!e?.clientId||!t?.workspaceRoot?.trim())throw Error("schedule commands require a registered workspace client");let n=Ci(t.workspaceRoot),r=Ci(t.cwd?.trim()||n);if(!tO(n,r))throw Error("client cwd is outside its workspace scope");return{workspaceRoot:n,cwd:r,crossWorkspace:e.crossWorkspace===!0}}requireScopedSchedule(e,t){let n=String(e.payload?.scheduleId??"").trim(),r=n?this.schedules.getSchedule(n):void 0;if(!r||!Wo(e,t)&&Ci(r.workspaceRoot)!==t.workspaceRoot)throw Error("schedule does not exist in this workspace");return r}scopedScheduleIds(e){return new Set(this.schedules.listSchedules({workspaceRoot:e.workspaceRoot}).map((t)=>t.scheduleId))}listScopedExecutions(e,t){let n=typeof e.payload?.scheduleId==="string"?e.payload.scheduleId.trim():void 0;if(n)this.requireScopedSchedule(e,t);let r=this.schedules.listScheduleExecutions({scheduleId:n,status:typeof e.payload?.status==="string"?e.payload.status:void 0,limit:typeof e.payload?.limit==="number"?e.payload.limit:void 0});if(Wo(e,t))return r;let o=this.scopedScheduleIds(t);return r.filter((s)=>o.has(s.scheduleId))}toCreateInput(e,t,n){let r=YM(e,"yolo"),o=e.modelSelection&&typeof e.modelSelection==="object"&&!Array.isArray(e.modelSelection)?e.modelSelection:e.provider&&e.model?{providerId:String(e.provider),modelId:String(e.model)}:void 0,s=(n?ZM(e):void 0)??t.workspaceRoot,{allWorkspaces:i,...a}=e;return{...a,modelSelection:o,mode:r,workspaceRoot:s,cwd:QM(s,e.cwd)??(s===t.workspaceRoot?t.cwd:s)}}toUpdateInput(e,t,n,r){let o=YM(e),s=e.modelSelection&&typeof e.modelSelection==="object"&&!Array.isArray(e.modelSelection)?e.modelSelection:e.provider||e.model?{providerId:typeof e.provider==="string"?e.provider:"",modelId:typeof e.model==="string"?e.model:""}:void 0,i=r?ZM(e)??Ci(n.workspaceRoot):t.workspaceRoot,{allWorkspaces:a,...d}=e;return{...d,modelSelection:s,...o===void 0?{}:{mode:o},workspaceRoot:i,...Object.hasOwn(e,"cwd")?{cwd:e.cwd===null?i:QM(i,e.cwd)??(i===t.workspaceRoot?t.cwd:i)}:{}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as nc,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as E3}from"@cline/shared";function am(e){return e?new Date(e).getTime():void 0}function x3(e){let t=e.metadata?{...e.metadata}:void 0;if(t)delete t.__hubScheduleCreatedBy,delete t.__hubScheduleCwd,delete t.__hubRuntimeOptions;return t}function tc(e){let t=e.metadata;return{scheduleId:e.externalId,name:e.title,cronPattern:e.triggerKind==="one_off"?nc:e.scheduleExpr??"",timezone:e.triggerKind==="schedule"?e.timezone:void 0,prompt:e.prompt??"",workspaceRoot:e.workspaceRoot??"",cwd:typeof t?.__hubScheduleCwd==="string"?t.__hubScheduleCwd:void 0,modelSelection:e.providerId||e.modelId?{providerId:e.providerId??"",modelId:e.modelId??""}:void 0,enabled:e.enabled&&!e.removed&&e.parseStatus==="valid",mode:e.mode==="plan"?"plan":e.mode==="act"?"act":"yolo",systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,maxParallel:e.maxParallel??1,createdAt:new Date(e.createdAt).getTime(),updatedAt:new Date(e.updatedAt).getTime(),nextRunAt:am(e.nextRunAt),lastRunAt:am(e.lastRunAt),createdBy:typeof t?.__hubScheduleCreatedBy==="string"?t.__hubScheduleCreatedBy:void 0,tags:e.tags,runtimeOptions:t?.__hubRuntimeOptions&&typeof t.__hubRuntimeOptions==="object"&&!Array.isArray(t.__hubRuntimeOptions)?t.__hubRuntimeOptions:void 0,metadata:x3(e)}}function _3(e){switch(e){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function Kb(e,t){return{executionId:e.runId,scheduleId:t,sessionId:e.sessionId,triggeredAt:new Date(e.scheduledFor??e.createdAt).getTime(),startedAt:am(e.startedAt),endedAt:am(e.completedAt),status:_3(e.status),errorMessage:e.error}}class dm{store;materializer;runner;started=!1;disposed=!1;constructor(e){this.store=new rd({dbPath:e.dbPath}),this.materializer=new Xa({store:this.store}),this.runner=new Qa({store:this.store,materializer:this.materializer,runtimeHandlers:e.runtimeHandlers,eventPublisher:e.eventPublisher,workspaceRoot:"",specs:e.specs,logger:e.logger,telemetry:e.telemetry,pollIntervalMs:e.pollIntervalMs,claimLeaseSeconds:e.claimLeaseSeconds,globalMaxConcurrency:e.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(e){let t=e.cronPattern===nc?e.timezone:e.timezone?.trim()||Intl.DateTimeFormat().resolvedOptions().timeZone;if(this.validateScheduleTiming(e.cronPattern,t,e.metadata,!0),!e.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return tc(this.store.createHubSchedule({...e,timezone:t}))}getSchedule(e){let t=this.store.getHubSchedule(e);return t?tc(t):void 0}listSchedules(e={}){return this.store.listHubSchedules(e).map((t)=>tc(t))}updateSchedule(e,t){let n=this.store.getHubSchedule(e);if(!n)return;let r=t.workspaceRoot!==void 0?t.workspaceRoot.trim():n.workspaceRoot,o=t.enabled??n.enabled,s=tc(n),i=t.cronPattern??s.cronPattern;if(i.trim()===nc&&typeof t.timezone==="string"&&t.timezone.trim())throw Error("timezone is only supported for recurring schedules");if(this.validateScheduleTiming(i,i.trim()===nc?void 0:t.timezone===null?void 0:t.timezone??s.timezone,t.metadata??s.metadata,o),o&&!r)throw Error("workspaceRoot is required for enabled schedules");let a=this.store.updateHubSchedule(e,{...t,scheduleId:e});return a?tc(a):void 0}validateScheduleTiming(e,t,n,r){if(e.trim()!==nc){XR(e),Zh(t);return}if(t?.trim())throw Error("timezone is only supported for recurring schedules");let o=n?.[E3];if(typeof o!=="number"||!Number.isFinite(o)||r&&o<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule(e){return this.store.deleteHubSchedule(e)}pauseSchedule(e){return this.updateSchedule(e,{scheduleId:e,enabled:!1})}resumeSchedule(e){return this.updateSchedule(e,{scheduleId:e,enabled:!0})}async triggerScheduleNow(e){let t=this.store.enqueueHubScheduleRun(e,"manual");if(!t)return;await this.runner.tick();let n=this.store.getRun(t.runId)??t;return Kb(n,e)}triggerScheduleNowDetached(e){let t=this.store.enqueueHubScheduleRun(e,"manual");if(!t)return;return this.runner.tick().catch(()=>{return}),Kb(t,e)}listScheduleExecutions(e){let t=e.scheduleId?this.store.getHubSchedule(e.scheduleId):void 0,n={specId:t?.specId,limit:e.limit};return this.store.listRuns(n).map((o)=>{let s=t??this.store.getSpec(o.specId);if(!s||s.source!=="hub-schedule")return;return Kb(o,s.externalId)}).filter((o)=>{if(!o)return!1;return!e.status||o.status===e.status})}getScheduleStats(e){let t=this.listScheduleExecutions({scheduleId:e,limit:1e4});if(t.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let n=0,r=0,o=0,s;for(let i of t){if(i.status==="success"||i.status==="completed")n+=1;if(!s&&i.status!=="success"&&i.status!=="completed")s=i;if(i.startedAt&&i.endedAt)o+=i.endedAt-i.startedAt,r+=1}return{totalRuns:t.length,successRate:n/t.length,avgDurationSeconds:r>0?o/r/1000:0,lastFailure:s}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap((e)=>{let t=this.store.getSpec(e.specId);if(!t||t.source!=="hub-schedule"||!e.sessionId)return[];return[{executionId:e.runId,scheduleId:t.externalId,sessionId:e.sessionId,startedAt:e.startedAt??new Date().toISOString(),timeoutAt:t.timeoutSeconds&&e.startedAt?new Date(new Date(e.startedAt).getTime()+t.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns(e=20){let t={triggerKind:"schedule",enabled:!0,limit:e};return this.store.listSpecs(t).flatMap((n)=>n.source==="hub-schedule"&&n.nextRunAt?[{spec:n,nextRunAt:n.nextRunAt}]:[]).sort((n,r)=>String(n.nextRunAt).localeCompare(String(r.nextRunAt))).slice(0,e).map(({spec:n,nextRunAt:r})=>({scheduleId:n.externalId,name:n.title,nextRunAt:r}))}}ve();import{realpathSync as Vb,statSync as M3}from"node:fs";import{isAbsolute as rO,relative as O3,sep as oO}from"node:path";import{ONE_TIME_SCHEDULE_CRON_PATTERN as sO,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as iO}from"@cline/shared";import{z as Pe}from"zod";var L3=Pe.enum(["create","update","list","get","pause","resume","delete","run_now"]),N3=Pe.object({provider_id:Pe.string().min(1),model_id:Pe.string().min(1).optional()}),Ri=Pe.object({operation:L3,schedule_id:Pe.string().min(1).optional(),schedule_type:Pe.enum(["once","recurring"]).optional(),name:Pe.string().min(1).optional(),prompt:Pe.string().min(1).optional(),run_at:Pe.string().datetime({offset:!0}).optional(),cron_pattern:Pe.string().min(1).optional(),timezone:Pe.string().min(1).nullable().optional().describe("IANA timezone for recurring schedules. Omit unless the user explicitly requests a timezone; new schedules default to the local timezone. Updates preserve the existing timezone when omitted."),enabled:Pe.boolean().optional(),mode:Pe.enum(["act","plan","yolo"]).optional(),system_prompt:Pe.string().nullable().optional(),max_iterations:Pe.number().int().positive().nullable().optional(),timeout_seconds:Pe.number().int().positive().nullable().optional(),max_parallel:Pe.number().int().positive().max(32).optional(),tags:Pe.array(Pe.string().min(1)).optional(),model_selection:N3.optional(),limit:Pe.number().int().positive().max(200).optional()});function ki(e,t,n,r){if(!aO.has(t.operation))return;wn(e.telemetry,{ulid:n.sessionId??n.conversationId??n.agentId,tool:`tasks.scheduled.${t.operation}`,success:r,agentId:n.agentId})}var aO=new Set(["create","update","pause","resume","delete","run_now"]);function Ii(e,t){let n=e?.trim();if(!n)throw Error(`${t} is required for this operation`);return n}function Jb(e,t){try{let n=Vb.native(e);if(!M3(n).isDirectory())throw Error("not a directory");return n}catch{throw Error(`${t} does not resolve to an existing safe path`)}}function D3(e,t){try{return Vb.native(e)===Vb.native(t)}catch{return!1}}function dO(e,t,n){let r=O3(e,t);if(r===".."||r.startsWith(`..${oO}`)||rO(r))throw Error(`${n} is outside the workspace scope`)}function cO(e,t,n){return Jb(rO(t)?t:`${e}${oO}${t}`,n)}function U3(e){let t=Jb(e.workspaceRoot,"workspaceRoot"),n=e.cwd?cO(t,e.cwd,"cwd"):t;return dO(t,n,"cwd"),{...e,workspaceRoot:t,cwd:n}}function Pi(e,t){if(!e)throw Error("schedule does not exist");if(!D3(e.workspaceRoot,t.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let n=Jb(e.workspaceRoot,"schedule workspaceRoot");if(e.cwd){let r=cO(n,e.cwd,"schedule cwd");dO(n,r,"schedule cwd")}}function nO(e){if(!e)return;return{providerId:e.provider_id.trim(),modelId:e.model_id?.trim()||void 0}}function Gb(e){if(!e)return;return[...new Set(e.map((t)=>t.trim()).filter(Boolean))]}function uO(e){let t=Date.parse(Ii(e,"run_at"));if(!Number.isFinite(t))throw Error("run_at must be an ISO timestamp");if(t<=Date.now())throw Error("run_at must be in the future");return t}function H3(e){if(e.schedule_type==="once"){if(e.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if(e.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:sO,metadata:{[iO]:uO(e.run_at)}}}if(e.schedule_type==="recurring"){if(e.run_at)throw Error("run_at cannot be used with a recurring schedule");return{cronPattern:Ii(e.cron_pattern,"cron_pattern"),timezone:e.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function F3(e){if(e.run_at&&e.cron_pattern)throw Error("run_at and cron_pattern cannot be updated together");if(e.schedule_type==="once"||e.run_at){if(e.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if(e.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:sO,timezone:null,metadata:{[iO]:uO(e.run_at)}}}if(e.schedule_type==="recurring"||e.cron_pattern)return{cronPattern:Ii(e.cron_pattern,"cron_pattern"),timezone:e.timezone===null?null:e.timezone?.trim()||void 0};return{timezone:e.timezone===null?null:e.timezone?.trim()||void 0}}function rc(e){return Ii(e.schedule_id,"schedule_id")}async function Xb(e,t,n){let r=Ri.safeParse(t);if(!r.success)return{ok:!1,error:{code:"invalid_schedule_input",message:r.error.issues[0]?.message??"Invalid schedule input"}};let o=r.data;try{if(!n.sessionId)throw Error("tasks requires a Hub session");let s=await e.resolveSessionDefaults(n.sessionId);if(!s?.workspaceRoot.trim())throw Error("tasks could not resolve the current workspace");let i=U3(s);if(aO.has(o.operation)&&!i.interactive)throw Error("schedule mutations require an interactive user session");switch(o.operation){case"create":{let a=e.schedules.createSchedule({name:Ii(o.name,"name"),...H3(o),prompt:Ii(o.prompt,"prompt"),workspaceRoot:i.workspaceRoot,cwd:i.cwd,modelSelection:nO(o.model_selection)??i.modelSelection,enabled:o.enabled,mode:o.mode??"yolo",systemPrompt:o.system_prompt??void 0,maxIterations:o.max_iterations??void 0,timeoutSeconds:o.timeout_seconds??void 0,maxParallel:o.max_parallel??1,createdBy:`agent:${n.agentId}`,tags:Gb(o.tags)});return e.publish?.("schedule.created",{schedule:a},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,schedule:a}}case"update":{let a=rc(o);Pi(e.schedules.getSchedule(a),i);let d=e.schedules.updateSchedule(a,{scheduleId:a,...F3(o),name:o.name?.trim()||void 0,prompt:o.prompt?.trim()||void 0,modelSelection:nO(o.model_selection),enabled:o.enabled,mode:o.mode,systemPrompt:o.system_prompt,maxIterations:o.max_iterations,timeoutSeconds:o.timeout_seconds,maxParallel:o.max_parallel,tags:Gb(o.tags)});if(!d)throw Error("schedule does not exist");return e.publish?.("schedule.updated",{schedule:d},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,schedule:d}}case"list":{let a=e.schedules.listSchedules({enabled:o.enabled,tags:Gb(o.tags),workspaceRoot:i.workspaceRoot,limit:o.limit??50}).filter((d)=>{try{return Pi(d,i),!0}catch{return!1}}).slice(0,o.limit??50);return{ok:!0,operation:o.operation,schedules:a}}case"get":{let a=e.schedules.getSchedule(rc(o));return Pi(a,i),{ok:!0,operation:o.operation,schedule:a}}case"pause":case"resume":{let a=rc(o);Pi(e.schedules.getSchedule(a),i);let d=o.operation==="pause"?e.schedules.pauseSchedule(a):e.schedules.resumeSchedule(a);if(!d)throw Error("schedule does not exist");return e.publish?.("schedule.updated",{schedule:d},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,schedule:d}}case"delete":{let a=rc(o);Pi(e.schedules.getSchedule(a),i);let d=e.schedules.deleteSchedule(a);if(!d)throw Error("schedule does not exist");return e.publish?.("schedule.deleted",{deleted:d,scheduleId:a},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,deleted:d}}case"run_now":{let a=rc(o);Pi(e.schedules.getSchedule(a),i);let d=e.schedules.triggerScheduleNowDetached(a);if(!d)throw Error("schedule does not exist");return e.publish?.("schedule.triggered",{execution:d},n.sessionId),ki(e,o,n,!0),{ok:!0,operation:o.operation,execution:d}}}}catch(s){return ki(e,o,n,!1),{ok:!1,operation:o.operation,error:{code:"schedule_operation_failed",message:s instanceof Error?s.message:String(s)}}}}pm();import{createTool as f9,zodToJsonSchema as h9}from"@cline/shared";import{z as Sn}from"zod";ve();import{resolve as mO}from"node:path";import{z as re}from"zod";var gO=re.enum(["suggestion","follow-up","todo","handoff","idea","reminder"]),l9=re.enum(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),fO=re.union([re.literal(0),re.literal(1),re.literal(2),re.literal(3),re.literal(4),re.literal(5)]),p9=re.object({provider_id:re.string().min(1),model_id:re.string().min(1).optional()}),mm=re.object({operation:re.enum(["create","update","list","get"]),task_id:re.string().min(1).optional(),expected_revision:re.number().int().positive().optional(),type:gO.optional(),title:re.string().min(1).optional(),description:re.string().nullable().optional(),instructions:re.string().min(1).optional(),scope:re.enum(["workspace","global"]).optional(),workspace_root:re.string().min(1).nullable().optional(),cwd:re.string().min(1).nullable().optional(),resource_paths:re.array(re.string().min(1)).optional(),priority:fO.optional(),assignee:re.string().min(1).nullable().optional(),model_selection:p9.nullable().optional(),mode:re.enum(["act","plan","yolo"]).nullable().optional(),system_prompt:re.string().nullable().optional(),max_iterations:re.number().int().positive().nullable().optional(),timeout_seconds:re.number().int().positive().nullable().optional(),available_at:re.string().datetime().optional(),expires_at:re.string().datetime().optional(),automation_eligible:re.boolean().optional(),statuses:re.array(l9).optional(),types:re.array(gO).optional(),priorities:re.array(fO).optional(),limit:re.number().int().positive().max(500).optional()}),m9=new Set(["create","update"]);function tv(e,t,n,r){if(!m9.has(t.operation))return;wn(e.telemetry,{ulid:n.sessionId??n.conversationId??n.agentId,tool:`tasks.todo.${t.operation}`,success:r,agentId:n.agentId})}function Ei(e,t){let n=e?.trim();if(!n)throw Error(`${t} is required for this operation`);return n}function hO(e){if(e===void 0||e===null)return e;return{providerId:e.provider_id,modelId:e.model_id}}function SO(e,t){return mO(e)===mO(t)}function yO(e,t){if(!e)throw Error("task does not exist");if(t.workspaceRoot){if(e.scope!=="workspace"||!e.workspaceRoot||!SO(e.workspaceRoot,t.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if(e.scope!=="global")throw Error("task is outside this session's global scope")}function g9(e,t){let n=t.workspaceRoot?"workspace":"global";if(e.scope&&e.scope!==n)throw Error(`this session can only manage ${n} tasks`);if(e.workspace_root!==void 0){if(!t.workspaceRoot||e.workspace_root===null||!SO(e.workspace_root,t.workspaceRoot))throw Error(`this session can only manage ${n} tasks`)}return n}async function bO(e,t,n){let r=mm.safeParse(t);if(!r.success)return{ok:!1,error:{code:"invalid_task_input",message:r.error.issues[0]?.message??"Invalid task input"}};let o=r.data,s={kind:"agent",id:n.agentId,agentId:n.agentId,sessionId:n.sessionId};try{if(!n.sessionId)throw Error("tasks requires a Hub session");let i=await e.resolveSessionDefaults(n.sessionId);if(!i)throw Error("tasks could not resolve the current session");let a=g9(o,i);switch(o.operation){case"create":{let d={type:Ei(o.type,"type"),title:Ei(o.title,"title"),description:o.description??void 0,instructions:Ei(o.instructions,"instructions"),scope:a,workspaceRoot:i.workspaceRoot,cwd:a==="workspace"?(o.cwd??i.cwd)?.trim()||void 0:void 0,resourcePaths:o.resource_paths,priority:o.priority,assignee:o.assignee??void 0,modelSelection:hO(o.model_selection)??i.modelSelection,mode:o.mode??void 0,systemPrompt:o.system_prompt??void 0,maxIterations:o.max_iterations??void 0,timeoutSeconds:o.timeout_seconds??void 0,availableAt:o.available_at,expiresAt:Ei(o.expires_at,"expires_at"),automationEligible:o.automation_eligible,createdBy:s,originSessionId:n.sessionId,originTaskId:i.originTaskId},c={ok:!0,operation:o.operation,task:await e.manager.createTask(d)};return tv(e,o,n,!0),c}case"update":{let d=Ei(o.task_id,"task_id");if(yO(await e.manager.getTask(d),i),!o.expected_revision)throw Error("expected_revision is required for update");let c={ok:!0,operation:o.operation,task:await e.manager.updateTask({taskId:d,expectedRevision:o.expected_revision,type:o.type,title:o.title,description:o.description,instructions:o.instructions,scope:a,workspaceRoot:i.workspaceRoot??null,cwd:o.cwd,resourcePaths:o.resource_paths,priority:o.priority,assignee:o.assignee,modelSelection:hO(o.model_selection),mode:o.mode,systemPrompt:o.system_prompt,maxIterations:o.max_iterations,timeoutSeconds:o.timeout_seconds,availableAt:o.available_at,expiresAt:o.expires_at,automationEligible:o.automation_eligible,updatedBy:s})};return tv(e,o,n,!0),c}case"list":{let d={statuses:o.statuses,types:o.types,scope:a,workspaceRoot:i.workspaceRoot,priorities:o.priorities,automationEligible:o.automation_eligible,limit:o.limit};return{ok:!0,operation:o.operation,tasks:await e.manager.listTasks(d)}}case"get":{let d=await e.manager.getTask(Ei(o.task_id,"task_id"));return yO(d,i),{ok:!0,operation:o.operation,task:d}}}}catch(i){return tv(e,o,n,!1),{ok:!1,operation:o.operation,error:{code:"task_operation_failed",message:i instanceof Error?i.message:String(i)}}}}var ac="tasks",vO='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Scheduled sessions run in the user\'s schedules home workspace, not this conversation\'s folder. Include absolute paths in the scheduled `prompt` for any project files or repositories the work must touch.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',y9="# Tasks\n\nUse the `tasks` tool only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. Always pass `kind: \"scheduled\"`.\n\n- One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- Never create a schedule proactively. Check existing schedules before creating a likely duplicate.\n- Make the scheduled `prompt` self-contained because it runs in a new unattended session in the user's schedules home workspace, not this conversation's folder. Include the goal, constraints, expected output, and absolute paths for any project files or repositories the work must touch.\n- Only update, pause, resume, delete, or run a schedule immediately when the user asks for that action.",S9=mm.extend({kind:Sn.literal("todo")}).strict(),TO=Ri.extend({kind:Sn.literal("scheduled")}).strict(),wO=Sn.discriminatedUnion("kind",[S9,TO]),b9=Sn.discriminatedUnion("kind",[TO]),CO=["create","update","list","get","pause","resume","delete","run_now"],v9=Sn.object({...Ri.shape,...mm.shape,kind:Sn.enum(["todo","scheduled"]),operation:Sn.enum(CO)}).strict(),T9=Sn.object({...Ri.shape,kind:Sn.enum(["scheduled"]),operation:Sn.enum(CO)}).strict();function nv(e){let t=e.todo;return f9({name:ac,description:t?'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.':'Create and manage explicitly requested scheduled agent work with kind "scheduled". One-time schedules use a future ISO 8601 run_at; recurring schedules use a five-field cron_pattern.',inputSchema:h9(t?v9:T9),retryable:!1,maxRetries:0,execute:async(n,r)=>{let o=(t?wO:b9).safeParse(n);if(!o.success)return{ok:!1,kind:typeof n==="object"&&n!==null&&"kind"in n&&(n.kind==="todo"||n.kind==="scheduled")?n.kind:void 0,error:{code:"invalid_tasks_input",message:o.error.issues[0]?.message??"Invalid tasks input"}};if(o.data.kind==="todo"){if(!t)return{ok:!1,kind:"todo",error:{code:"invalid_tasks_input",message:'kind "todo" is not available in this session'}};return{kind:"todo",...await bO(t,o.data,r)}}return{kind:"scheduled",...await Xb(e.scheduled,o.data,r)}}})}function rv(e){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:(t)=>{t.registerRule({id:"hub:task-guidance",content:e?.todoEnabled===!1?y9:vO,whenToolAvailable:ac})}}}import{resolveClineBuildEnv as w9}from"@cline/shared";function C9(e,t){if(e instanceof Error)return e;if(e&&typeof e==="object"&&"message"in e&&typeof e.message==="string"&&e.message.trim())return Error(e.message.trim());let n=e&&typeof e==="object"&&"type"in e&&typeof e.type==="string"?e.type.trim():"";return Error(n?`Failed to connect to hub at ${t} (${n} event before socket open).`:`Failed to connect to hub at ${t}.`)}var k9="cline-hub-auth.";function P9(e){return e.host!==void 0||e.port!==void 0||e.pathname!==void 0}function I9(e,t){let n=new URL(e),r=new URL(t);return n.search="",n.hash="",r.search="",r.hash="",n.toString()===r.toString()}function kO(){return w9()==="production"?cn():Gt()}async function R9(e){let t=e.searchParams.get("authToken")?.trim();if(e.searchParams.delete("authToken"),t)return t;let n=kO(),r=await $e(n.discoveryPath);if(r?.url&&I9(e.toString(),r.url))return r.authToken;return}async function A9(e={}){let t=Ro(e);if(!P9(e)){let n=kO(),r=await $e(n.discoveryPath);if(r?.url)return r.url}return Un(t.host,t.port,t.pathname)}async function PO(e){return await new Promise((t,n)=>{(async()=>{let r=new URL(e),o=await R9(r);r.hash="";let s=new WebSocket(r.toString(),o?[`${k9}${o}`]:void 0),i=new Map,a=0;s.addEventListener("open",()=>{t({send(d){let c=d.requestId??`hub-client-${++a}`;return new Promise((u,l)=>{i.set(c,{resolve:u,reject:l});let p={kind:"command",envelope:{...d,requestId:c}};s.send(JSON.stringify(p))})},close(){s.close()}})}),s.addEventListener("message",(d)=>{let c=JSON.parse(String(d.data));if(c.kind==="reply"&&c.envelope.requestId){let u=i.get(c.envelope.requestId);if(u)i.delete(c.envelope.requestId),u.resolve(c.envelope)}}),s.addEventListener("close",()=>{for(let d of i.values())d.reject(Error("Hub connection closed"));i.clear()}),s.addEventListener("error",(d)=>{n(C9(d,e))})})().catch(n)})}async function nPe(e){try{return(await PO(e)).close(),!0}catch{return!1}}async function rPe(e,t){let n=await A9(e),r=await PO(n);try{return await r.send({version:t.version??"v1",clientId:t.clientId??"hub-client",...t})}finally{r.close()}}import{existsSync as E9}from"node:fs";import{isHubDaemonProcess as x9,resolveClineBuildEnv as _9}from"@cline/shared";var M9=1e4,O9="CLINE_HUB_BUILD_WATCH_INTERVAL_MS";function L9(){let e=Number(process.env[O9]);return Number.isFinite(e)&&e>0?e:M9}async function N9(e,t){try{let n=await Qs(e.url,t);return{...e,activeSessionCount:n.activeSessionCount,participantClientCount:n.participantClientCount}}catch{return e}}function D9(){return _9()==="production"?cn():Gt()}function U9(e){try{return E9(`${e}.lock`)}catch{return!1}}async function H9(){let e=D9();if(U9(e.discoveryPath))return;let t=await $e(e.discoveryPath).catch(()=>{return});if(!t?.url)return;let n=await Dn(t.url).catch(()=>{return});if(!n?.url)return;let r=dn(),o=Po(n,r);if(o.compatible)return;let s=(a)=>({url:n.url,reason:a,hubBuildId:n.buildId,hubCoreVersion:n.coreVersion,expectedBuildId:r});if(o.reason==="unsupported_protocol")return s("unsupported_protocol");let i=md();if(i.coreVersion&&n.coreVersion&&i.coreVersion===n.coreVersion)return;if(pd(i,n)>0)return await N9(s("outdated_hub"),t.authToken);return s("build_mismatch")}function uPe(e){if(x9()||process.env.CLINE_HUB_PORT?.trim())return()=>{};let t=e.intervalMs??L9(),n,r,o=!1,s=setInterval(()=>{if(o)return;o=!0,H9().then((i)=>{if(!i){n=void 0,r=void 0;return}let a=`${i.reason}:${i.hubBuildId??""}`;if(a===n)return;if(i.reason==="outdated_hub"&&r!==a){r=a;return}r=void 0,n=a,e.onMismatch(i)}).catch(()=>{return}).finally(()=>{o=!1})},t);return s.unref?.(),()=>{clearInterval(s)}}function ov(e){return e?JSON.parse(JSON.stringify(e)):{}}function gm(e){let t=e?.session&&typeof e.session==="object"?e.session:void 0;if(!t)return;let n=t.metadata&&typeof t.metadata==="object"?ov(t.metadata):void 0;return{sessionId:typeof t.sessionId==="string"?t.sessionId:"",parentSessionId:typeof n?.parentSessionId==="string"?n.parentSessionId:void 0,status:typeof t.status==="string"?t.status:void 0,messagesPath:typeof n?.messagesPath==="string"?n.messagesPath:void 0,metadata:n}}function IO(e,t){return e.error?.message??`hub command failed: ${t}`}function F9(e){let t=ov(e);if(typeof t.error==="string"&&t.error.trim())return{...t,error:t.error.trim()};let n=t.result&&typeof t.result==="object"?t.result:void 0;if(typeof n?.text==="string"&&n.text.trim())return{...t,error:n.text.trim()};let r=n?.error&&typeof n.error==="object"?n.error:void 0;if(typeof r?.message==="string"&&r.message.trim())return{...t,error:r.message.trim()};return t}function RO(e){let t=e?.sessionId;return typeof t==="string"&&t.trim()?t.trim():void 0}function B9(e){let t=e?.checkpoint;if(!t||typeof t!=="object"||Array.isArray(t))throw Error("hub checkpoint restore returned no checkpoint");let n=t;if(typeof n.ref!=="string"||typeof n.createdAt!=="number"||typeof n.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return n}function $9(e){let t=ov(e.payload);if(e.event==="schedule.execution_completed")return{sessionId:e.sessionId?.trim()||RO(t)||"",eventType:"schedule.execution.completed",payload:t};if(e.event==="schedule.execution_failed")return{sessionId:e.sessionId?.trim()||RO(t)||"",eventType:"schedule.execution.failed",payload:t};let n=e.sessionId?.trim();if(!n)return;switch(e.event){case"iteration.started":return{sessionId:n,eventType:"runtime.chat.iteration_start",payload:t};case"iteration.finished":return{sessionId:n,eventType:"runtime.chat.iteration_end",payload:t};case"assistant.delta":return{sessionId:n,eventType:"runtime.chat.text_delta",payload:t};case"assistant.media":return{sessionId:n,eventType:"runtime.chat.media",payload:t};case"usage.updated":return{sessionId:n,eventType:"runtime.chat.usage",payload:t};case"session.notice":return{sessionId:n,eventType:"runtime.chat.notice",payload:t};case"tool.started":return{sessionId:n,eventType:"runtime.chat.tool_call_start",payload:t};case"tool.updated":return{sessionId:n,eventType:"runtime.chat.tool_call_update",payload:t};case"tool.finished":return{sessionId:n,eventType:"runtime.chat.tool_call_end",payload:t};case"approval.requested":return{sessionId:n,eventType:"approval.requested",payload:t};case"run.aborted":return{sessionId:n,eventType:"runtime.chat.aborted",payload:t};case"run.failed":return{sessionId:n,eventType:"runtime.chat.failed",payload:F9(e.payload)};case"run.completed":return{sessionId:n,eventType:"runtime.chat.completed",payload:t};default:return}}class W9{client;constructor(e){this.client=new Hn({url:e.address,authToken:e.authToken,clientId:e.clientId,clientType:e.clientType??"hub-session-client",displayName:e.displayName??"hub session client",workspaceRoot:e.workspaceRoot,cwd:e.cwd,metadata:e.metadata})}async connect(){await this.client.connect()}async taskCommand(e,t){return await this.client.connect(),(await this.client.command(e,t)).payload??{}}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession(e){await this.client.connect();let t=await this.client.command("session.create",{workspaceRoot:e.workspaceRoot,cwd:e.cwd,sessionConfig:{providerId:e.provider,modelId:e.model,apiKey:e.apiKey,cwd:e.cwd??e.workspaceRoot,workspaceRoot:e.workspaceRoot,systemPrompt:e.systemPrompt??"",mode:e.mode??"act",rules:e.rules,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,enableTools:e.enableTools,enableSpawnAgent:e.enableSpawn!==!1,enableAgentTeams:e.enableTeams!==!1,disableMcpSettingsTools:e.disableMcpSettingsTools,agentPluginPaths:e.agentPluginPaths,missionLogIntervalSteps:e.missionStepInterval,missionLogIntervalMs:e.missionTimeIntervalMs},metadata:{source:e.source??"cli",provider:e.provider,model:e.model,enableTools:e.enableTools,enableSpawn:e.enableSpawn,enableTeams:e.enableTeams,prompt:void 0,interactive:e.interactive!==!1},runtimeOptions:{mode:e.mode,systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,enableTools:e.enableTools,enableSpawn:e.enableSpawn,enableTeams:e.enableTeams,autoApproveTools:e.autoApproveTools,toolExecutors:e.toolExecutors,configExtensions:e.configExtensions},modelSelection:{provider:e.provider,model:e.model,apiKey:e.apiKey},toolPolicies:e.toolPolicies,...e.plugins?{plugins:e.plugins}:{}}),n=gm(t.payload);if(!n?.sessionId)throw Error("hub session create returned no session id");let r=Array.isArray(t.payload?.pluginIssues)?t.payload.pluginIssues:void 0;return{sessionId:n.sessionId,startResult:{sessionId:n.sessionId,manifestPath:"",messagesPath:n.messagesPath??""},...r?.length?{pluginIssues:r}:{}}}async sendRuntimeSession(e,t,n){return await this.client.connect(),{result:(await this.client.command("session.send_input",{prompt:t.prompt,mode:t.config.mode,attachments:t.attachments,delivery:t.delivery,timeoutSeconds:t.config.timeoutSeconds},e,n)).payload?.result}}async stopRuntimeSession(e){return await this.client.connect(),await this.client.command("session.detach",{sessionId:e},e),{applied:!0}}async abortRuntimeSession(e){return await this.client.connect(),await this.client.command("run.abort",{sessionId:e},e),{applied:!0}}async updateSession(e){return await this.client.connect(),await this.client.command("session.update",{sessionId:e.sessionId,metadata:e.metadata},e.sessionId),{updated:!0}}async getSession(e){await this.client.connect();let t;try{t=await this.client.command("session.get",void 0,e)}catch(n){if(wr(n))return;throw n}return gm(t.payload)}async readMessages(e){let t=e.trim();if(!t)return[];await this.client.connect();let n=await this.client.command("session.messages",{sessionId:t},t);if(!n.ok)throw Error(IO(n,"session.messages"));let r=n.payload?.messages;return Array.isArray(r)?r:[]}async restore(e){let t=e.sessionId.trim();if(!t)throw Error("sessionId is required");let n=e.restore?.messages!==!1;if(n&&!e.config)throw Error("config is required when restore.messages is true");await this.client.connect();let r=e.config,o=await this.client.command("session.restore",{sessionId:t,checkpointRunCount:e.checkpointRunCount,restore:e.restore,...r?{workspaceRoot:r.workspaceRoot,cwd:r.cwd,sessionConfig:{providerId:r.provider,modelId:r.model,apiKey:r.apiKey,cwd:r.cwd??r.workspaceRoot,workspaceRoot:r.workspaceRoot,systemPrompt:r.systemPrompt??"",mode:r.mode??"act",rules:r.rules,maxIterations:r.maxIterations,enableTools:r.enableTools,enableSpawnAgent:r.enableSpawn!==!1,enableAgentTeams:r.enableTeams!==!1,disableMcpSettingsTools:r.disableMcpSettingsTools,agentPluginPaths:r.agentPluginPaths,missionLogIntervalSteps:r.missionStepInterval,missionLogIntervalMs:r.missionTimeIntervalMs},metadata:{source:r.source??"cli",provider:r.provider,model:r.model,enableTools:r.enableTools,enableSpawn:r.enableSpawn,enableTeams:r.enableTeams,prompt:void 0,interactive:r.interactive!==!1},runtimeOptions:{mode:r.mode,systemPrompt:r.systemPrompt,maxIterations:r.maxIterations,enableTools:r.enableTools,enableSpawn:r.enableSpawn,enableTeams:r.enableTeams,autoApproveTools:r.autoApproveTools,configExtensions:r.configExtensions},modelSelection:{provider:r.provider,model:r.model,apiKey:r.apiKey},toolPolicies:r.toolPolicies,...r.plugins?{plugins:r.plugins}:{}}:{}},t);if(!o.ok)throw Error(IO(o,"session.restore"));let s=gm(o.payload);if(n&&!s?.sessionId)throw Error("hub checkpoint restore returned no session id");let i=Array.isArray(o.payload?.messages)?o.payload.messages:void 0,a=B9(o.payload);return{sessionId:s?.sessionId,startResult:s?.sessionId?{sessionId:s.sessionId,manifestPath:"",messagesPath:s.messagesPath??""}:void 0,...i?{messages:i}:{},checkpoint:a}}async listSessions(e){await this.client.connect();let t=await this.client.command("session.list",{limit:e?.limit??200});return(Array.isArray(t.payload?.sessions)?t.payload?.sessions:[]).map((r)=>gm({session:r})).filter((r)=>Boolean(r?.sessionId))}async searchSessions(e){await this.client.connect();let t=await this.client.command("session.search",e);return Array.isArray(t.payload?.hits)?t.payload.hits:[]}async deleteSession(e,t=!0){return await this.client.connect(),(await this.client.command("session.delete",{sessionId:e,deleteCheckpointRefs:t})).payload?.deleted===!0}async respondToolApproval(e){await this.client.connect(),await this.client.command("approval.respond",{approvalId:e.approvalId,approved:e.approved,payload:e.reason?{reason:e.reason}:void 0,responderClientId:e.responderClientId})}streamEvents(e,t){let n=new Set((e.sessionIds??[]).map((o)=>o.trim()).filter(Boolean)),r=this.client.subscribe((o)=>{let s=$9(o);if(!s)return;if(n.size>0&&!n.has(s.sessionId))return;t.onEvent?.(s)});return this.client.connect().catch((o)=>{t.onError?.(o instanceof Error?o:Error(String(o)))}),r}streamTeamProgress(e,t){let n=this.client.subscribe((r)=>{if(r.event!=="team.progress"||!r.payload)return;t.onProjection?.(r.payload)});return this.client.connect().catch((r)=>{t.onError?.(r instanceof Error?r:Error(String(r)))}),n}async createSchedule(e){return await this.client.connect(),(await this.client.command("schedule.create",e)).payload?.schedule}async listSchedules(e){await this.client.connect();let t=await this.client.command("schedule.list");return Array.isArray(t.payload?.schedules)?t.payload?.schedules:[]}async getSchedule(e){return await this.client.connect(),(await this.client.command("schedule.get",{scheduleId:e})).payload?.schedule}async updateSchedule(e,t){return await this.client.connect(),(await this.client.command("schedule.update",{scheduleId:e,...t})).payload?.schedule}async pauseSchedule(e){return await this.client.connect(),(await this.client.command("schedule.disable",{scheduleId:e})).payload?.schedule}async resumeSchedule(e){return await this.client.connect(),(await this.client.command("schedule.enable",{scheduleId:e})).payload?.schedule}async deleteSchedule(e){return await this.client.connect(),(await this.client.command("schedule.delete",{scheduleId:e})).payload?.deleted===!0}async triggerScheduleNow(e){return await this.client.connect(),(await this.client.command("schedule.trigger",{scheduleId:e})).payload?.execution}async listScheduleExecutions(e,t){await this.client.connect();let n=await this.client.command("schedule.list_executions",{scheduleId:e,limit:t});return Array.isArray(n.payload?.executions)?n.payload?.executions:[]}async getScheduleStats(){return await this.client.connect(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.client.connect();let e=await this.client.command("schedule.active");return Array.isArray(e.payload?.executions)?e.payload?.executions:[]}async getUpcomingScheduledRuns(e){await this.client.connect();let t=await this.client.command("schedule.upcoming",{limit:e});return Array.isArray(t.payload?.upcoming)?t.payload?.upcoming:[]}async createTask(e){return(await this.taskCommand("task.create",e)).task}async listTasks(e={}){let t=await this.taskCommand("task.list",e);return Array.isArray(t.tasks)?t.tasks:[]}async getTask(e){return(await this.taskCommand("task.get",{taskId:e})).task}async updateTask(e){return(await this.taskCommand("task.update",e)).task}async approveTask(e,t){return(await this.taskCommand("task.approve",{taskId:e,expectedRevision:t})).task}async cancelTask(e,t,n){return(await this.taskCommand("task.cancel",{taskId:e,reason:n,expectedRevision:t})).task}async runTask(e,t){return await this.taskCommand("task.run",{taskId:e,expectedRevision:t})}async getTaskAutomation(){return(await this.taskCommand("task.automation.get",{})).policy}async setTaskAutomation(e){return(await this.taskCommand("task.automation.set",{policy:e})).policy}}class j9{client;constructor(e){this.client=new Hn({url:e.address,authToken:e.authToken,clientId:e.clientId,clientType:e.clientType??"hub-ui-client",displayName:e.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(e){await this.client.command("ui.notify",e)}async sendShowWindow(e){await this.client.command("ui.show_window",e??{})}async listClients(){let e=await this.client.command("client.list");return Array.isArray(e.payload?.clients)?e.payload.clients:[]}async listSessions(e=200){let t=await this.client.command("session.list",{limit:e});return Array.isArray(t.payload?.sessions)?t.payload.sessions:[]}async searchSessions(e){let t=await this.client.command("session.search",e);return Array.isArray(t.payload?.hits)?t.payload.hits:[]}async toggleSetting(e){let t=await this.client.command("settings.toggle",e);if(!t.ok)throw Error(t.error?.message??"settings.toggle failed");return t.payload}subscribeUI(e){return this.client.subscribe((t)=>{switch(t.event){case"ui.notify":e.onNotify?.(t.payload);break;case"ui.show_window":e.onShowWindow?.(t.payload);break;case"hub.client.registered":e.onClientRegistered?.(t.payload??{});break;case"hub.client.disconnected":e.onClientDisconnected?.(t.payload??{});break;case"session.created":e.onSessionCreated?.(t.payload??{});break;case"session.updated":e.onSessionUpdated?.(t.payload??{});break;case"session.detached":e.onSessionDetached?.(t.payload??{});break}})}}import{normalizeProviderId as q9}from"@cline/llms";Ct();Ke();function z9(e){return{text:e.text,usage:e.usage,inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,iterations:e.iterations,finishReason:e.finishReason,toolCalls:e.toolCalls.map((t)=>({name:t.name,input:t.input,output:t.output,error:t.error,durationMs:t.durationMs}))}}function K9(e){return e.mode==="plan"?"plan":e.mode==="yolo"?"yolo":"act"}function CPe(e={}){let t=async(r)=>r,n=new Ur({sessionService:new Lr(new _r),capabilities:{toolExecutors:{submit:t}},fetch:e.fetch,connectorsRequest:e.connectorsRequest,telemetry:e.telemetry});return{async startSession(r,o){let s=(r.cwd?.trim()||r.workspaceRoot).trim(),i=await n.startSession({source:ie.CORE,mode:"automation",sessionMetadata:Re(o?.sessionMetadata,{mode:"automation",trigger:r.source}),interactive:!1,config:{providerId:q9(r.provider),modelId:r.model,apiKey:r.apiKey?.trim()||void 0,cwd:s,workspaceRoot:r.workspaceRoot,systemPrompt:r.systemPrompt??"",mode:K9(r),maxIterations:r.maxIterations,enableTools:r.enableTools!==!1,enableSpawnAgent:r.enableSpawn!==!1,enableAgentTeams:r.enableTeams!==!1,disableMcpSettingsTools:r.disableMcpSettingsTools,agentPluginPaths:r.agentPluginPaths,missionLogIntervalSteps:r.missionStepInterval,missionLogIntervalMs:r.missionTimeIntervalMs},toolPolicies:r.toolPolicies??{"*":{autoApprove:r.autoApproveTools!==!1}},localRuntime:{configExtensions:r.configExtensions}});return{sessionId:i.sessionId,startResult:{sessionId:i.sessionId,manifestPath:i.manifestPath,messagesPath:i.messagesPath}}},async sendSession(r,o){let s=await n.runTurn({sessionId:r,prompt:o.prompt,userImages:o.attachments?.userImages,userFiles:o.attachments?.userFiles?.map((i)=>i.content)});if(!s)throw Error("local hub schedule runtime returned no turn result");return{result:z9(s)}},async abortSession(r){return await n.abort(r,Error("hub schedule abort")),{applied:!0}},async stopSession(r){return await n.stopSession(r),{applied:!0}}}}import{resolveClineBuildEnv as UN}from"@cline/shared";function G9(e){if(typeof e==="string")return e.trim()||void 0;if(!Array.isArray(e))return;return e.map((n)=>{if(n&&typeof n==="object"&&"type"in n&&n.type==="text"&&"text"in n&&typeof n.text==="string")return n.text.trim();return""}).filter(Boolean).join(`
886
+ `).trim()||void 0}var AO=120,sv="...";function iv(e){let t=e.trim();if(!t)return"";if(Buffer.byteLength(t,"utf8")<=AO)return t;let n=AO-Buffer.byteLength(sv,"utf8");if(n<=0)return sv;let r="";for(let o of t){if(Buffer.byteLength(r+o,"utf8")>n)break;r+=o}return`${r}${sv}`}async function EO(e){let t=e?.sessionId?.trim()||"unknown",n=typeof e?.metadata?.messagesPath==="string"?e.metadata.messagesPath:void 0,o=[...await Ir(n)].reverse().find((d)=>d.role==="assistant"),s=o?G9(o.content):void 0,i=e?.workspaceRoot?.trim()||"workspace",a=typeof e?.metadata?.prompt==="string"?e.metadata.prompt.trim():i;return{title:`Task completed (${t})`,body:iv(s&&s.length>0?s:a.length>0?a:i),severity:"info"}}import{resolve as Eee}from"node:path";import{CLINE_DEFAULT_MODEL_ID as xee,captureSdkError as Im,createSessionId as Wv,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as _ee}from"@cline/shared";import{isChatWorkspacePath as Mee}from"@cline/shared/storage";Ct();import{stat as V9}from"node:fs/promises";import{join as J9}from"node:path";import{formatSessionSearchPreview as X9,formatSessionSearchTitle as MO}from"@cline/shared";import{loadSqliteDb as Y9,nowIso as Q9}from"@cline/shared/db";import{resolveDbDataDir as Z9}from"@cline/shared/storage";var xO=2,e7=300000,_O=131072,t7=1e5,n7=2000,r7="bm25(0, 0, 0, 0, 0, 0.5, 8.0, 1.0)";function dv(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)?e:void 0}function av(e,t){if(t.length>=_O)return;if(typeof e==="string"){let r=t.parts.length>0?1:0,o=_O-t.length-r;if(o<=0)return;let s=e.slice(0,o);if(!s)return;t.parts.push(s),t.length+=r+s.length;return}if(Array.isArray(e)){for(let r of e)av(r,t);return}let n=dv(e);if(!n)return;for(let[r,o]of Object.entries(n)){if(r==="data"||r==="image"||r==="images"||r==="reasoning"||r==="thinking"||r==="metadata")continue;av(o,t)}}function o7(e){let t=dv(e),n={length:0,parts:[]};return av(t?.content??e,n),n.parts.join(`
887
+ `).trim()}function s7(e){let t=dv(e)?.role;return typeof t==="string"?t:"unknown"}function i7(e){let t=e.metadata?.title,n=typeof t==="string"&&t.trim()?t:e.prompt||e.sessionId;return MO(n)||e.sessionId}function a7(e){return e.trim().split(/\s+/u).filter(Boolean).map((t)=>`"${t.replaceAll('"','""')}"*`).join(" AND ")}function d7(e){if(e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;"),e.exec(`CREATE TABLE IF NOT EXISTS indexed_sessions (
888
888
  session_id TEXT PRIMARY KEY,
889
889
  source_revision TEXT NOT NULL,
890
890
  indexed_at TEXT NOT NULL,
@@ -901,7 +901,7 @@ ${b}`}]});continue}if(h.type!=="response_item")continue;switch(y.type){case"mess
901
901
  title,
902
902
  content,
903
903
  tokenize='unicode61 remove_diacritics 2 tokenchars ''_-@'''
904
- );`)}function c9(e){let t;try{return t=Y7(e),d9(t),{db:t}}catch(n){try{t?.close?.()}catch{}return{error:n??Error("Session search database initialization failed")}}}class cv{host;db;initializationError;intervalMs;removedDuringRefresh=new Set;failedEvictionSessionIds=new Set;timer;refreshPromise;readyPromise=Promise.resolve();constructor(e,t={}){this.host=e;let n=c9(t.dbPath??J7(Z7(),"session-search.db"));this.db=n.db,this.initializationError=n.error,this.intervalMs=t.reconcileIntervalMs??e9}start(){if(!this.db)return;this.readyPromise=this.refreshNow(),this.readyPromise.catch((e)=>console.warn("[hub] session search indexing failed",e)),this.timer=setInterval(()=>{this.refreshNow().catch((e)=>console.warn("[hub] session search reconciliation failed",e))},this.intervalMs),this.timer.unref?.()}async dispose(){if(this.timer)clearInterval(this.timer);this.timer=void 0,await this.refreshPromise?.catch(()=>{return}),this.db?.close?.()}refreshNow(){let e=this.db;if(!e)return Promise.resolve();if(!this.refreshPromise)this.refreshPromise=this.reconcile(e).finally(()=>{this.removedDuringRefresh.clear(),this.refreshPromise=void 0});return this.refreshPromise}removeSession(e){let t=this.db;if(!t)return;let n=e.trim();if(!n)return;if(this.refreshPromise)this.removedDuringRefresh.add(n);try{this.deleteIndexedSession(t,n),this.failedEvictionSessionIds.delete(n)}catch(r){throw this.failedEvictionSessionIds.add(n),r}}async waitUntilReady(){await this.readyPromise}isAvailable(){return this.db!==void 0}getInitializationError(){return this.initializationError}search(e){let t=this.db;if(!t)return[];let n=a9(e.query);if(!n)return[];let r=Math.min(Math.max(Math.trunc(e.limit??50),1),200),o=Math.min(Math.max(r*20,200),n9),s=e.workspaceRoot?.trim(),i=t.prepare(`WITH matches AS MATERIALIZED (
904
+ );`)}function c7(e){let t;try{return t=Y9(e),d7(t),{db:t}}catch(n){try{t?.close?.()}catch{}return{error:n??Error("Session search database initialization failed")}}}class cv{host;db;initializationError;intervalMs;removedDuringRefresh=new Set;failedEvictionSessionIds=new Set;timer;refreshPromise;readyPromise=Promise.resolve();constructor(e,t={}){this.host=e;let n=c7(t.dbPath??J9(Z9(),"session-search.db"));this.db=n.db,this.initializationError=n.error,this.intervalMs=t.reconcileIntervalMs??e7}start(){if(!this.db)return;this.readyPromise=this.refreshNow(),this.readyPromise.catch((e)=>console.warn("[hub] session search indexing failed",e)),this.timer=setInterval(()=>{this.refreshNow().catch((e)=>console.warn("[hub] session search reconciliation failed",e))},this.intervalMs),this.timer.unref?.()}async dispose(){if(this.timer)clearInterval(this.timer);this.timer=void 0,await this.refreshPromise?.catch(()=>{return}),this.db?.close?.()}refreshNow(){let e=this.db;if(!e)return Promise.resolve();if(!this.refreshPromise)this.refreshPromise=this.reconcile(e).finally(()=>{this.removedDuringRefresh.clear(),this.refreshPromise=void 0});return this.refreshPromise}removeSession(e){let t=this.db;if(!t)return;let n=e.trim();if(!n)return;if(this.refreshPromise)this.removedDuringRefresh.add(n);try{this.deleteIndexedSession(t,n),this.failedEvictionSessionIds.delete(n)}catch(r){throw this.failedEvictionSessionIds.add(n),r}}async waitUntilReady(){await this.readyPromise}isAvailable(){return this.db!==void 0}getInitializationError(){return this.initializationError}search(e){let t=this.db;if(!t)return[];let n=a7(e.query);if(!n)return[];let r=Math.min(Math.max(Math.trunc(e.limit??50),1),200),o=Math.min(Math.max(r*20,200),n7),s=e.workspaceRoot?.trim(),i=t.prepare(`WITH matches AS MATERIALIZED (
905
905
  SELECT session_search.session_id, document_id, ordinal, role, started_at,
906
906
  workspace_root, indexed_sessions.title,
907
907
  snippet(session_search, 7, '[', ']', '…', 24) AS snippet,
@@ -925,10 +925,10 @@ ${b}`}]});continue}if(h.type!=="response_item")continue;switch(y.type){case"mess
925
925
  FROM ranked
926
926
  WHERE session_rank = 1
927
927
  ORDER BY score, started_at DESC
928
- LIMIT ?`).all(n,r9,s??null,s??null,o,r);return(this.removedDuringRefresh.size===0&&this.failedEvictionSessionIds.size===0?i:i.filter((d)=>!this.isSessionSuppressed(String(d.session_id)))).map((d)=>{let c=String(d.role);return{sessionId:String(d.session_id),documentId:String(d.document_id),ordinal:Number(d.ordinal),role:c,startedAt:String(d.started_at),workspaceRoot:String(d.workspace_root),title:MO(String(d.title)),snippet:X7(c,String(d.snippet??"")),score:Number(d.score)}})}isSessionSuppressed(e){return this.removedDuringRefresh.has(e)||this.failedEvictionSessionIds.has(e)}async reconcile(e){let t=await this.host.listSessions(t9),n=new Set(t.map((i)=>i.sessionId)),r=e.prepare("SELECT session_id, source_revision, index_version FROM indexed_sessions").all(),o=new Map(r.map((i)=>[String(i.session_id),i]));for(let i of t){if(this.isSessionSuppressed(i.sessionId))continue;let a=await this.sourceRevision(i);if(this.isSessionSuppressed(i.sessionId))continue;let d=o.get(i.sessionId);if(d?.source_revision===a&&Number(d.index_version)===xO)continue;await this.indexSession(e,i,a)}for(let i of r){let a=String(i.session_id);if(!n.has(a)||this.isSessionSuppressed(a))this.deleteIndexedSession(e,a),this.failedEvictionSessionIds.delete(a)}let s=e.prepare("SELECT 1 FROM indexed_sessions WHERE session_id = ? LIMIT 1");for(let i of this.failedEvictionSessionIds)if(!s.get(i))this.failedEvictionSessionIds.delete(i)}async sourceRevision(e){if(!e.messagesPath)return`${e.updatedAt}:missing`;let t=await V7(e.messagesPath).catch(()=>{return});return`${e.updatedAt}:${t?.size??0}:${t?.mtimeMs??0}`}async indexSession(e,t,n){let r=await this.host.readSessionMessages(t.sessionId).catch(()=>[]);if(this.removedDuringRefresh.has(t.sessionId))return;let o=i9(t),s=e.prepare(`INSERT INTO session_search (
928
+ LIMIT ?`).all(n,r7,s??null,s??null,o,r);return(this.removedDuringRefresh.size===0&&this.failedEvictionSessionIds.size===0?i:i.filter((d)=>!this.isSessionSuppressed(String(d.session_id)))).map((d)=>{let c=String(d.role);return{sessionId:String(d.session_id),documentId:String(d.document_id),ordinal:Number(d.ordinal),role:c,startedAt:String(d.started_at),workspaceRoot:String(d.workspace_root),title:MO(String(d.title)),snippet:X9(c,String(d.snippet??"")),score:Number(d.score)}})}isSessionSuppressed(e){return this.removedDuringRefresh.has(e)||this.failedEvictionSessionIds.has(e)}async reconcile(e){let t=await this.host.listSessions(t7),n=new Set(t.map((i)=>i.sessionId)),r=e.prepare("SELECT session_id, source_revision, index_version FROM indexed_sessions").all(),o=new Map(r.map((i)=>[String(i.session_id),i]));for(let i of t){if(this.isSessionSuppressed(i.sessionId))continue;let a=await this.sourceRevision(i);if(this.isSessionSuppressed(i.sessionId))continue;let d=o.get(i.sessionId);if(d?.source_revision===a&&Number(d.index_version)===xO)continue;await this.indexSession(e,i,a)}for(let i of r){let a=String(i.session_id);if(!n.has(a)||this.isSessionSuppressed(a))this.deleteIndexedSession(e,a),this.failedEvictionSessionIds.delete(a)}let s=e.prepare("SELECT 1 FROM indexed_sessions WHERE session_id = ? LIMIT 1");for(let i of this.failedEvictionSessionIds)if(!s.get(i))this.failedEvictionSessionIds.delete(i)}async sourceRevision(e){if(!e.messagesPath)return`${e.updatedAt}:missing`;let t=await V9(e.messagesPath).catch(()=>{return});return`${e.updatedAt}:${t?.size??0}:${t?.mtimeMs??0}`}async indexSession(e,t,n){let r=await this.host.readSessionMessages(t.sessionId).catch(()=>[]);if(this.removedDuringRefresh.has(t.sessionId))return;let o=i7(t),s=e.prepare(`INSERT INTO session_search (
929
929
  session_id, document_id, ordinal, role, started_at,
930
930
  workspace_root, title, content
931
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`);e.exec("BEGIN IMMEDIATE;");try{e.prepare("DELETE FROM session_search WHERE session_id = ?").run(t.sessionId),s.run(t.sessionId,`${t.sessionId}:metadata`,-1,"session",t.startedAt,t.workspaceRoot,o,t.prompt?.trim()??"");let i=1;for(let[a,d]of r.entries()){let c=o9(d);if(!c)continue;s.run(t.sessionId,`${t.sessionId}:${a}`,a,s9(d),t.startedAt,t.workspaceRoot,"",c),i+=1}e.prepare(`INSERT INTO indexed_sessions (
931
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`);e.exec("BEGIN IMMEDIATE;");try{e.prepare("DELETE FROM session_search WHERE session_id = ?").run(t.sessionId),s.run(t.sessionId,`${t.sessionId}:metadata`,-1,"session",t.startedAt,t.workspaceRoot,o,t.prompt?.trim()??"");let i=1;for(let[a,d]of r.entries()){let c=o7(d);if(!c)continue;s.run(t.sessionId,`${t.sessionId}:${a}`,a,s7(d),t.startedAt,t.workspaceRoot,"",c),i+=1}e.prepare(`INSERT INTO indexed_sessions (
932
932
  session_id, source_revision, indexed_at, document_count, index_version, title
933
933
  ) VALUES (?, ?, ?, ?, ?, ?)
934
934
  ON CONFLICT(session_id) DO UPDATE SET
@@ -936,17 +936,17 @@ ${b}`}]});continue}if(h.type!=="response_item")continue;switch(y.type){case"mess
936
936
  indexed_at = excluded.indexed_at,
937
937
  document_count = excluded.document_count,
938
938
  index_version = excluded.index_version,
939
- title = excluded.title`).run(t.sessionId,n,Q7(),i,xO,o),e.exec("COMMIT;")}catch(i){throw e.exec("ROLLBACK;"),i}}deleteIndexedSession(e,t){e.exec("BEGIN IMMEDIATE;");try{e.prepare("DELETE FROM session_search WHERE session_id = ?").run(t),e.prepare("DELETE FROM indexed_sessions WHERE session_id = ?").run(t),e.exec("COMMIT;")}catch(n){throw e.exec("ROLLBACK;"),n}}}import{existsSync as wv,realpathSync as D9,statSync as U9,watch as H9}from"node:fs";import{relative as F9}from"node:path";import{createSessionId as eL,noopBasicLogger as B9}from"@cline/shared";import{existsSync as Xt,linkSync as T9,lstatSync as gv,mkdirSync as w9,readdirSync as C9,readFileSync as k9,realpathSync as WO,renameSync as P9,rmSync as jO,writeFileSync as I9}from"node:fs";import{basename as R9,dirname as A9,isAbsolute as hv,join as fv,relative as zO,resolve as qO,sep as E9}from"node:path";import{resolveTaskSpecsDir as x9}from"@cline/shared/storage";import{createHash as m9}from"node:crypto";import{stripUtf8Bom as g9}from"@cline/shared";import FO from"yaml";import{existsSync as uv,realpathSync as OO}from"node:fs";import{dirname as u9,isAbsolute as lv,relative as pv,resolve as NO,sep as l9}from"node:path";function fm(e){return e?.trim()||void 0}function DO(e,t){let n=pv(e,t);return n===""||!n.startsWith(`..${l9}`)&&n!==".."&&!lv(n)}function p9(e,t,n){if(!uv(e))return;let r=OO(e),o=t;while(!uv(o)){let i=u9(o);if(i===o)break;o=i}if(!uv(o))return;let s=OO(o);if(!DO(r,s))throw Error(`${n} escapes the workspace through a symbolic link`)}function LO(e,t,n,r){let o=NO(e,lv(t)?pv(e,t):t);if(!DO(e,o)||!r&&o===e)throw Error(`${n} must stay within the task workspace`);return p9(e,o,n),o}function Hr(e){let t=e.resourcePaths??[];if(e.scope==="global"){if(fm(e.workspaceRoot))throw Error("global tasks cannot set workspaceRoot");if(fm(e.cwd))throw Error("global tasks cannot set cwd");if(t.some((d)=>d.trim()))throw Error("global tasks cannot reference workspace files");return{resourcePaths:[]}}let n=fm(e.workspaceRoot);if(!n)throw Error("workspaceRoot is required for workspace tasks");let r=NO(n),o=fm(e.cwd),s=o?LO(r,o,"cwd",!0):void 0,i=[],a=new Set;for(let d of t){let c=d.trim();if(!c)throw Error("resourcePaths must contain only non-empty paths");if(lv(c)||c.split(/[\\/]+/u).includes(".."))throw Error("resourcePaths must be workspace-relative without '..'");let u=LO(r,c,"resourcePaths",!1),l=pv(r,u);if(!a.has(l))a.add(l),i.push(l)}return{workspaceRoot:r,cwd:s,resourcePaths:i}}var f9=new Set(["suggestion","follow-up","todo","handoff","idea","reminder"]),h9=new Set(["status","instructions","revision","approvedRevision","createdBy","updatedBy","currentRunId","lastRunId","lastSessionId","error","createdAt","updatedAt","completedAt","archivedAt"]),y9=new Set(["taskId","type","priority","title","description","availableAt","expiresAt","cwd","resourcePaths","assignee","modelSelection","mode","systemPrompt","maxIterations","timeoutSeconds","automationEligible"]);function S9(e){let t=g9(e).replace(/\r\n/g,`
939
+ title = excluded.title`).run(t.sessionId,n,Q9(),i,xO,o),e.exec("COMMIT;")}catch(i){throw e.exec("ROLLBACK;"),i}}deleteIndexedSession(e,t){e.exec("BEGIN IMMEDIATE;");try{e.prepare("DELETE FROM session_search WHERE session_id = ?").run(t),e.prepare("DELETE FROM indexed_sessions WHERE session_id = ?").run(t),e.exec("COMMIT;")}catch(n){throw e.exec("ROLLBACK;"),n}}}import{existsSync as wv,realpathSync as D7,statSync as U7,watch as H7}from"node:fs";import{relative as F7}from"node:path";import{createSessionId as eL,noopBasicLogger as B7}from"@cline/shared";import{existsSync as Xt,linkSync as T7,lstatSync as gv,mkdirSync as w7,readdirSync as C7,readFileSync as k7,realpathSync as WO,renameSync as P7,rmSync as jO,writeFileSync as I7}from"node:fs";import{basename as R7,dirname as A7,isAbsolute as hv,join as fv,relative as zO,resolve as qO,sep as E7}from"node:path";import{resolveTaskSpecsDir as x7}from"@cline/shared/storage";import{createHash as m7}from"node:crypto";import{stripUtf8Bom as g7}from"@cline/shared";import FO from"yaml";import{existsSync as uv,realpathSync as OO}from"node:fs";import{dirname as u7,isAbsolute as lv,relative as pv,resolve as NO,sep as l7}from"node:path";function fm(e){return e?.trim()||void 0}function DO(e,t){let n=pv(e,t);return n===""||!n.startsWith(`..${l7}`)&&n!==".."&&!lv(n)}function p7(e,t,n){if(!uv(e))return;let r=OO(e),o=t;while(!uv(o)){let i=u7(o);if(i===o)break;o=i}if(!uv(o))return;let s=OO(o);if(!DO(r,s))throw Error(`${n} escapes the workspace through a symbolic link`)}function LO(e,t,n,r){let o=NO(e,lv(t)?pv(e,t):t);if(!DO(e,o)||!r&&o===e)throw Error(`${n} must stay within the task workspace`);return p7(e,o,n),o}function Hr(e){let t=e.resourcePaths??[];if(e.scope==="global"){if(fm(e.workspaceRoot))throw Error("global tasks cannot set workspaceRoot");if(fm(e.cwd))throw Error("global tasks cannot set cwd");if(t.some((d)=>d.trim()))throw Error("global tasks cannot reference workspace files");return{resourcePaths:[]}}let n=fm(e.workspaceRoot);if(!n)throw Error("workspaceRoot is required for workspace tasks");let r=NO(n),o=fm(e.cwd),s=o?LO(r,o,"cwd",!0):void 0,i=[],a=new Set;for(let d of t){let c=d.trim();if(!c)throw Error("resourcePaths must contain only non-empty paths");if(lv(c)||c.split(/[\\/]+/u).includes(".."))throw Error("resourcePaths must be workspace-relative without '..'");let u=LO(r,c,"resourcePaths",!1),l=pv(r,u);if(!a.has(l))a.add(l),i.push(l)}return{workspaceRoot:r,cwd:s,resourcePaths:i}}var f7=new Set(["suggestion","follow-up","todo","handoff","idea","reminder"]),h7=new Set(["status","instructions","revision","approvedRevision","createdBy","updatedBy","currentRunId","lastRunId","lastSessionId","error","createdAt","updatedAt","completedAt","archivedAt"]),y7=new Set(["taskId","type","priority","title","description","availableAt","expiresAt","cwd","resourcePaths","assignee","modelSelection","mode","systemPrompt","maxIterations","timeoutSeconds","automationEligible"]);function S7(e){let t=g7(e).replace(/\r\n/g,`
940
940
  `);if(!t.startsWith(`---
941
941
  `))return{body:t};let n=t.slice(4),r=n.indexOf(`
942
942
  ---`);if(r===-1)return{body:t};let o=n.slice(r+4);if(o.startsWith(`
943
- `))o=o.slice(1);return{frontmatter:n.slice(0,r),body:o}}function hm(e,t){return m9("sha256").update(JSON.stringify(e)).update(`
944
- `).update(t.trim()).digest("hex")}function Ut(e){if(typeof e!=="string")return;let t=e.trim();return t.length>0?t:void 0}function UO(e,t){let n=Ut(e);if(!n||!Number.isFinite(Date.parse(n)))return Error(`${t} must be a valid ISO-8601 timestamp`);return new Date(n).toISOString()}function HO(e,t){if(e===void 0)return;if(!Number.isInteger(e)||e<=0)return Error(`${t} must be a positive integer`);return e}function b9(e,t){if(e===void 0)return[];if(!Array.isArray(e))return Error(`${t} must be an array of strings`);let n=[],r=new Set;for(let o of e){let s=Ut(o);if(!s)return Error(`${t} must contain only non-empty strings`);if(!r.has(s))r.add(s),n.push(s)}return n}function v9(e){if(e===void 0)return;if(!e||typeof e!=="object"||Array.isArray(e))return Error("modelSelection must be a mapping");let t=e,n=Object.keys(t).filter((s)=>s!=="providerId"&&s!=="modelId");if(n.length>0)return Error(`modelSelection contains unknown field(s): ${n.join(", ")}`);let r=Ut(t.providerId);if(!r)return Error("modelSelection.providerId is required");let o=Ut(t.modelId);return{providerId:r,...o?{modelId:o}:{}}}function Ae(e,t,n){return{ok:!1,specPath:e.specPath,contentHash:t,error:n}}function mv(e){let{frontmatter:t,body:n}=S9(e.raw);if(t===void 0)return Ae(e,hm({},n),"task spec must begin with YAML frontmatter");let r;try{let b=FO.parse(t);if(!b||typeof b!=="object"||Array.isArray(b))return Ae(e,hm({},n),"frontmatter must be a YAML mapping");r=b}catch(b){return Ae(e,hm({},n),b instanceof Error?`failed to parse frontmatter: ${b.message}`:"failed to parse frontmatter")}let o=hm(r,n),s=Object.keys(r).filter((b)=>h9.has(b));if(s.length>0)return Ae(e,o,`operational field(s) cannot be set in a task spec: ${s.join(", ")}`);let i=Object.keys(r).filter((b)=>!y9.has(b));if(i.length>0)return Ae(e,o,`unknown task spec field(s): ${i.join(", ")}`);if(e.scope==="workspace"&&!Ut(e.workspaceRoot))return Ae(e,o,"workspaceRoot is required for workspace-scoped task specs");let a=Ut(r.type);if(!a||!f9.has(a))return Ae(e,o,"type must be one of: suggestion, follow-up, todo, handoff, idea, reminder");let d=Ut(r.title);if(!d)return Ae(e,o,"title is required");let c=n.trim();if(!c)return Ae(e,o,"markdown body instructions are required");let u=r.priority??3;if(!Number.isInteger(u)||u<0||u>5)return Ae(e,o,"priority must be an integer from 0 to 5");let l=UO(r.expiresAt,"expiresAt");if(l instanceof Error)return Ae(e,o,l.message);let p;if(r.availableAt!==void 0){let b=UO(r.availableAt,"availableAt");if(b instanceof Error)return Ae(e,o,b.message);if(p=b,Date.parse(p)>=Date.parse(l))return Ae(e,o,"availableAt must be before expiresAt")}let m=b9(r.resourcePaths,"resourcePaths");if(m instanceof Error)return Ae(e,o,m.message);let g;try{g=Hr({scope:e.scope,workspaceRoot:e.workspaceRoot,cwd:Ut(r.cwd),resourcePaths:m})}catch(b){return Ae(e,o,b instanceof Error?b.message:String(b))}let f=v9(r.modelSelection);if(f instanceof Error)return Ae(e,o,f.message);let h=HO(r.maxIterations,"maxIterations");if(h instanceof Error)return Ae(e,o,h.message);let y=HO(r.timeoutSeconds,"timeoutSeconds");if(y instanceof Error)return Ae(e,o,y.message);let S=r.mode;if(S!==void 0&&S!=="act"&&S!=="plan"&&S!=="yolo")return Ae(e,o,"mode must be one of: act, plan, yolo");if(r.automationEligible!==void 0&&typeof r.automationEligible!=="boolean")return Ae(e,o,"automationEligible must be a boolean");return{ok:!0,specPath:e.specPath,contentHash:o,spec:{taskId:Ut(r.taskId),type:a,title:d,description:Ut(r.description),instructions:c,scope:e.scope,workspaceRoot:g.workspaceRoot,cwd:g.cwd,resourcePaths:g.resourcePaths,priority:u,assignee:Ut(r.assignee),modelSelection:f,mode:S,systemPrompt:Ut(r.systemPrompt),maxIterations:h,timeoutSeconds:y,availableAt:p,expiresAt:l,automationEligible:r.automationEligible!==!1,specPath:e.specPath,contentHash:o}}}function BO(e){let t={taskId:e.taskId,type:e.type,priority:e.priority??3,title:e.title,...e.description?{description:e.description}:{},...e.availableAt?{availableAt:e.availableAt}:{},expiresAt:e.expiresAt,...e.cwd?{cwd:e.cwd}:{},resourcePaths:e.resourcePaths??[],...e.assignee?{assignee:e.assignee}:{},...e.modelSelection?{modelSelection:e.modelSelection}:{},...e.mode?{mode:e.mode}:{},...e.systemPrompt?{systemPrompt:e.systemPrompt}:{},...e.maxIterations!==void 0?{maxIterations:e.maxIterations}:{},...e.timeoutSeconds!==void 0?{timeoutSeconds:e.timeoutSeconds}:{},automationEligible:e.automationEligible!==!1};return`---
943
+ `))o=o.slice(1);return{frontmatter:n.slice(0,r),body:o}}function hm(e,t){return m7("sha256").update(JSON.stringify(e)).update(`
944
+ `).update(t.trim()).digest("hex")}function Ut(e){if(typeof e!=="string")return;let t=e.trim();return t.length>0?t:void 0}function UO(e,t){let n=Ut(e);if(!n||!Number.isFinite(Date.parse(n)))return Error(`${t} must be a valid ISO-8601 timestamp`);return new Date(n).toISOString()}function HO(e,t){if(e===void 0)return;if(!Number.isInteger(e)||e<=0)return Error(`${t} must be a positive integer`);return e}function b7(e,t){if(e===void 0)return[];if(!Array.isArray(e))return Error(`${t} must be an array of strings`);let n=[],r=new Set;for(let o of e){let s=Ut(o);if(!s)return Error(`${t} must contain only non-empty strings`);if(!r.has(s))r.add(s),n.push(s)}return n}function v7(e){if(e===void 0)return;if(!e||typeof e!=="object"||Array.isArray(e))return Error("modelSelection must be a mapping");let t=e,n=Object.keys(t).filter((s)=>s!=="providerId"&&s!=="modelId");if(n.length>0)return Error(`modelSelection contains unknown field(s): ${n.join(", ")}`);let r=Ut(t.providerId);if(!r)return Error("modelSelection.providerId is required");let o=Ut(t.modelId);return{providerId:r,...o?{modelId:o}:{}}}function Ae(e,t,n){return{ok:!1,specPath:e.specPath,contentHash:t,error:n}}function mv(e){let{frontmatter:t,body:n}=S7(e.raw);if(t===void 0)return Ae(e,hm({},n),"task spec must begin with YAML frontmatter");let r;try{let b=FO.parse(t);if(!b||typeof b!=="object"||Array.isArray(b))return Ae(e,hm({},n),"frontmatter must be a YAML mapping");r=b}catch(b){return Ae(e,hm({},n),b instanceof Error?`failed to parse frontmatter: ${b.message}`:"failed to parse frontmatter")}let o=hm(r,n),s=Object.keys(r).filter((b)=>h7.has(b));if(s.length>0)return Ae(e,o,`operational field(s) cannot be set in a task spec: ${s.join(", ")}`);let i=Object.keys(r).filter((b)=>!y7.has(b));if(i.length>0)return Ae(e,o,`unknown task spec field(s): ${i.join(", ")}`);if(e.scope==="workspace"&&!Ut(e.workspaceRoot))return Ae(e,o,"workspaceRoot is required for workspace-scoped task specs");let a=Ut(r.type);if(!a||!f7.has(a))return Ae(e,o,"type must be one of: suggestion, follow-up, todo, handoff, idea, reminder");let d=Ut(r.title);if(!d)return Ae(e,o,"title is required");let c=n.trim();if(!c)return Ae(e,o,"markdown body instructions are required");let u=r.priority??3;if(!Number.isInteger(u)||u<0||u>5)return Ae(e,o,"priority must be an integer from 0 to 5");let l=UO(r.expiresAt,"expiresAt");if(l instanceof Error)return Ae(e,o,l.message);let p;if(r.availableAt!==void 0){let b=UO(r.availableAt,"availableAt");if(b instanceof Error)return Ae(e,o,b.message);if(p=b,Date.parse(p)>=Date.parse(l))return Ae(e,o,"availableAt must be before expiresAt")}let m=b7(r.resourcePaths,"resourcePaths");if(m instanceof Error)return Ae(e,o,m.message);let g;try{g=Hr({scope:e.scope,workspaceRoot:e.workspaceRoot,cwd:Ut(r.cwd),resourcePaths:m})}catch(b){return Ae(e,o,b instanceof Error?b.message:String(b))}let f=v7(r.modelSelection);if(f instanceof Error)return Ae(e,o,f.message);let h=HO(r.maxIterations,"maxIterations");if(h instanceof Error)return Ae(e,o,h.message);let y=HO(r.timeoutSeconds,"timeoutSeconds");if(y instanceof Error)return Ae(e,o,y.message);let S=r.mode;if(S!==void 0&&S!=="act"&&S!=="plan"&&S!=="yolo")return Ae(e,o,"mode must be one of: act, plan, yolo");if(r.automationEligible!==void 0&&typeof r.automationEligible!=="boolean")return Ae(e,o,"automationEligible must be a boolean");return{ok:!0,specPath:e.specPath,contentHash:o,spec:{taskId:Ut(r.taskId),type:a,title:d,description:Ut(r.description),instructions:c,scope:e.scope,workspaceRoot:g.workspaceRoot,cwd:g.cwd,resourcePaths:g.resourcePaths,priority:u,assignee:Ut(r.assignee),modelSelection:f,mode:S,systemPrompt:Ut(r.systemPrompt),maxIterations:h,timeoutSeconds:y,availableAt:p,expiresAt:l,automationEligible:r.automationEligible!==!1,specPath:e.specPath,contentHash:o}}}function BO(e){let t={taskId:e.taskId,type:e.type,priority:e.priority??3,title:e.title,...e.description?{description:e.description}:{},...e.availableAt?{availableAt:e.availableAt}:{},expiresAt:e.expiresAt,...e.cwd?{cwd:e.cwd}:{},resourcePaths:e.resourcePaths??[],...e.assignee?{assignee:e.assignee}:{},...e.modelSelection?{modelSelection:e.modelSelection}:{},...e.mode?{mode:e.mode}:{},...e.systemPrompt?{systemPrompt:e.systemPrompt}:{},...e.maxIterations!==void 0?{maxIterations:e.maxIterations}:{},...e.timeoutSeconds!==void 0?{timeoutSeconds:e.timeoutSeconds}:{},automationEligible:e.automationEligible!==!1};return`---
945
945
  ${FO.stringify(t,{lineWidth:0}).trimEnd()}
946
946
  ---
947
947
 
948
948
  ${e.instructions.trim()}
949
- `}function $O(e,t){let n=Date.parse(e.expiresAt),r=new Date(Math.min(Date.now(),n-1)).toISOString();return{taskId:e.taskId,type:e.type,title:e.title,description:e.description,instructions:e.instructions,scope:e.scope,workspaceRoot:e.workspaceRoot,cwd:e.cwd,resourcePaths:e.resourcePaths,priority:e.priority,assignee:e.assignee,modelSelection:e.modelSelection,mode:e.mode,systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,availableAt:e.availableAt??r,expiresAt:e.expiresAt,automationEligible:e.automationEligible,createdBy:t,specPath:e.specPath}}function _9(e){let t=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-");if(!t)throw Error("taskId must contain at least one filename-safe character");return`${t}.task.md`}function M9(e,t){let n=zO(e,t);return n===""||!n.startsWith(`..${E9}`)&&n!==".."&&!hv(n)}class yv{specsDir;scope;workspaceRoot;constructor(e){this.scope=e.scope,this.workspaceRoot=e.workspaceRoot?.trim()||void 0,this.specsDir=qO(x9({scope:e.scope,workspaceRoot:this.workspaceRoot,taskSpecsDir:e.taskSpecsDir}))}listSpecPaths(){if(!Xt(this.specsDir))return[];return this.assertSpecsDirSafe(),C9(this.specsDir,{withFileTypes:!0}).filter((e)=>e.isFile()&&e.name.endsWith(".task.md")).map((e)=>fv(this.specsDir,e.name)).sort((e,t)=>e.localeCompare(t))}listSpecs(){return this.listSpecPaths().map((e)=>{try{return this.readSpec(e)}catch(t){return{ok:!1,specPath:e,contentHash:"",error:t instanceof Error?t.message:String(t)}}})}readSpec(e){this.assertSpecsDirSafe();let t=this.resolveSpecPath(e);if(gv(t).isSymbolicLink())throw Error("task spec files cannot be symbolic links");return mv({specPath:t,raw:k9(t,"utf8"),scope:this.scope,workspaceRoot:this.workspaceRoot})}writeSpec(e,t={}){if(!e.taskId.trim())throw Error("taskId is required");this.ensureSpecsDir();let n=this.resolveWritePath(e.taskId,t.specPath);if(t.createOnly&&Xt(n))throw Error(`task spec already exists: ${n}`);if(Xt(n)&&gv(n).isSymbolicLink())throw Error("task spec files cannot be symbolic links");let r=BO(e),o=mv({specPath:n,raw:r,scope:this.scope,workspaceRoot:this.workspaceRoot});if(!o.ok)throw Error(`invalid task spec: ${o.error}`);let s=fv(this.specsDir,`.${R9(n)}.${process.pid}.${Date.now()}.tmp`);try{if(I9(s,r,{encoding:"utf8",mode:384}),this.assertExpectedContent(n,t),t.createOnly)T9(s,n);else P9(s,n)}finally{if(Xt(s))jO(s,{force:!0})}return o.spec}resolveWritePath(e,t){return this.resolveSpecPath(t??_9(e))}ensureSpecsDir(){this.assertSpecsDirSafe(),w9(this.specsDir,{recursive:!0}),this.assertSpecsDirSafe()}deleteSpec(e,t={}){this.assertSpecsDirSafe();let n=this.resolveSpecPath(e);if(!Xt(n))return!1;if(t.expectedContentHash){if(this.readSpec(n).contentHash!==t.expectedContentHash)throw Error(`task spec changed before delete: ${n}`)}return jO(n),!0}assertExpectedContent(e,t){if(t.createOnly){if(Xt(e))throw Error(`task spec already exists: ${e}`);return}if(!t.expectedContentHash)return;if(!Xt(e))throw Error(`task spec disappeared before update: ${e}`);if(this.readSpec(e).contentHash!==t.expectedContentHash)throw Error(`task spec changed before update: ${e}`)}assertSpecsDirSafe(){if(Xt(this.specsDir)&&gv(this.specsDir).isSymbolicLink())throw Error("task specs directory cannot be a symbolic link");if(!this.workspaceRoot||!Xt(this.workspaceRoot))return;let e=WO(this.workspaceRoot),t=this.specsDir;while(!Xt(t)){let n=A9(t);if(n===t)break;t=n}if(Xt(t)&&!M9(e,WO(t)))throw Error("task specs directory escapes the workspace")}resolveSpecPath(e){let t=qO(hv(e)?e:fv(this.specsDir,e)),n=zO(this.specsDir,t);if(n===""||n.startsWith("..")||hv(n)||!t.endsWith(".task.md"))throw Error("task spec path must be a *.task.md file within the specs directory");return t}}import{randomUUID as GO}from"node:crypto";import{resolve as VO}from"node:path";import{asOptionalString as fe,asString as De,loadSqliteDb as L9,nowIso as Fr}from"@cline/shared/db";import{resolveTasksDbPath as N9}from"@cline/shared/storage";var O9=[`CREATE TABLE IF NOT EXISTS agenda_tasks (
949
+ `}function $O(e,t){let n=Date.parse(e.expiresAt),r=new Date(Math.min(Date.now(),n-1)).toISOString();return{taskId:e.taskId,type:e.type,title:e.title,description:e.description,instructions:e.instructions,scope:e.scope,workspaceRoot:e.workspaceRoot,cwd:e.cwd,resourcePaths:e.resourcePaths,priority:e.priority,assignee:e.assignee,modelSelection:e.modelSelection,mode:e.mode,systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,availableAt:e.availableAt??r,expiresAt:e.expiresAt,automationEligible:e.automationEligible,createdBy:t,specPath:e.specPath}}function _7(e){let t=e.trim().replace(/[^a-zA-Z0-9._-]+/g,"-");if(!t)throw Error("taskId must contain at least one filename-safe character");return`${t}.task.md`}function M7(e,t){let n=zO(e,t);return n===""||!n.startsWith(`..${E7}`)&&n!==".."&&!hv(n)}class yv{specsDir;scope;workspaceRoot;constructor(e){this.scope=e.scope,this.workspaceRoot=e.workspaceRoot?.trim()||void 0,this.specsDir=qO(x7({scope:e.scope,workspaceRoot:this.workspaceRoot,taskSpecsDir:e.taskSpecsDir}))}listSpecPaths(){if(!Xt(this.specsDir))return[];return this.assertSpecsDirSafe(),C7(this.specsDir,{withFileTypes:!0}).filter((e)=>e.isFile()&&e.name.endsWith(".task.md")).map((e)=>fv(this.specsDir,e.name)).sort((e,t)=>e.localeCompare(t))}listSpecs(){return this.listSpecPaths().map((e)=>{try{return this.readSpec(e)}catch(t){return{ok:!1,specPath:e,contentHash:"",error:t instanceof Error?t.message:String(t)}}})}readSpec(e){this.assertSpecsDirSafe();let t=this.resolveSpecPath(e);if(gv(t).isSymbolicLink())throw Error("task spec files cannot be symbolic links");return mv({specPath:t,raw:k7(t,"utf8"),scope:this.scope,workspaceRoot:this.workspaceRoot})}writeSpec(e,t={}){if(!e.taskId.trim())throw Error("taskId is required");this.ensureSpecsDir();let n=this.resolveWritePath(e.taskId,t.specPath);if(t.createOnly&&Xt(n))throw Error(`task spec already exists: ${n}`);if(Xt(n)&&gv(n).isSymbolicLink())throw Error("task spec files cannot be symbolic links");let r=BO(e),o=mv({specPath:n,raw:r,scope:this.scope,workspaceRoot:this.workspaceRoot});if(!o.ok)throw Error(`invalid task spec: ${o.error}`);let s=fv(this.specsDir,`.${R7(n)}.${process.pid}.${Date.now()}.tmp`);try{if(I7(s,r,{encoding:"utf8",mode:384}),this.assertExpectedContent(n,t),t.createOnly)T7(s,n);else P7(s,n)}finally{if(Xt(s))jO(s,{force:!0})}return o.spec}resolveWritePath(e,t){return this.resolveSpecPath(t??_7(e))}ensureSpecsDir(){this.assertSpecsDirSafe(),w7(this.specsDir,{recursive:!0}),this.assertSpecsDirSafe()}deleteSpec(e,t={}){this.assertSpecsDirSafe();let n=this.resolveSpecPath(e);if(!Xt(n))return!1;if(t.expectedContentHash){if(this.readSpec(n).contentHash!==t.expectedContentHash)throw Error(`task spec changed before delete: ${n}`)}return jO(n),!0}assertExpectedContent(e,t){if(t.createOnly){if(Xt(e))throw Error(`task spec already exists: ${e}`);return}if(!t.expectedContentHash)return;if(!Xt(e))throw Error(`task spec disappeared before update: ${e}`);if(this.readSpec(e).contentHash!==t.expectedContentHash)throw Error(`task spec changed before update: ${e}`)}assertSpecsDirSafe(){if(Xt(this.specsDir)&&gv(this.specsDir).isSymbolicLink())throw Error("task specs directory cannot be a symbolic link");if(!this.workspaceRoot||!Xt(this.workspaceRoot))return;let e=WO(this.workspaceRoot),t=this.specsDir;while(!Xt(t)){let n=A7(t);if(n===t)break;t=n}if(Xt(t)&&!M7(e,WO(t)))throw Error("task specs directory escapes the workspace")}resolveSpecPath(e){let t=qO(hv(e)?e:fv(this.specsDir,e)),n=zO(this.specsDir,t);if(n===""||n.startsWith("..")||hv(n)||!t.endsWith(".task.md"))throw Error("task spec path must be a *.task.md file within the specs directory");return t}}import{randomUUID as GO}from"node:crypto";import{resolve as VO}from"node:path";import{asOptionalString as fe,asString as De,loadSqliteDb as L7,nowIso as Fr}from"@cline/shared/db";import{resolveTasksDbPath as N7}from"@cline/shared/storage";var O7=[`CREATE TABLE IF NOT EXISTS agenda_tasks (
950
950
  task_id TEXT PRIMARY KEY,
951
951
  type TEXT NOT NULL CHECK (type IN ('suggestion', 'follow-up', 'todo', 'handoff', 'idea', 'reminder')),
952
952
  status TEXT NOT NULL CHECK (status IN ('pending_approval', 'approved', 'in_progress', 'completed', 'failed', 'cancelled', 'expired')),
@@ -1021,7 +1021,7 @@ ${e.instructions.trim()}
1021
1021
  ON agenda_task_runs(task_id, attempt DESC);`,`CREATE INDEX IF NOT EXISTS agenda_task_runs_session_idx
1022
1022
  ON agenda_task_runs(session_id);`,`CREATE UNIQUE INDEX IF NOT EXISTS agenda_task_runs_one_active_idx
1023
1023
  ON agenda_task_runs(task_id)
1024
- WHERE status IN ('starting', 'running');`];function KO(e){e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;"),e.exec("PRAGMA foreign_keys = ON;");for(let t of O9)e.exec(t)}var JO={kind:"system",id:"task_store"};class Sm extends Error{current;constructor(e){super(`task ${e.taskId} is at revision ${e.revision}; the requested revision is stale`);this.current=e;this.name="AgendaTaskRevisionConflictError"}}function cc(e){if(typeof e!=="string"||!e)return;try{return JSON.parse(e)}catch{return}}function Yt(e){if(typeof e==="number"&&Number.isFinite(e))return Math.floor(e);if(typeof e==="bigint")return Number(e);return}function Sv(e){return{taskId:De(e.task_id),type:De(e.type),status:De(e.status),title:De(e.title),description:fe(e.description),instructions:De(e.instructions),scope:De(e.scope),workspaceRoot:fe(e.workspace_root),cwd:fe(e.cwd),resourcePaths:cc(e.resource_paths_json)?.filter((t)=>typeof t==="string")??[],priority:Yt(e.priority)??3,assignee:fe(e.assignee),modelSelection:cc(e.model_selection_json),mode:fe(e.mode),systemPrompt:fe(e.system_prompt),maxIterations:Yt(e.max_iterations),timeoutSeconds:Yt(e.timeout_seconds),availableAt:De(e.available_at),expiresAt:De(e.expires_at),automationEligible:Number(e.automation_eligible??0)===1,revision:Yt(e.revision)??1,approvedRevision:Yt(e.approved_revision),createdBy:cc(e.created_by_json)??JO,updatedBy:cc(e.updated_by_json)??JO,originSessionId:fe(e.origin_session_id),originTaskId:fe(e.origin_task_id),currentRunId:fe(e.current_run_id),lastRunId:fe(e.last_run_id),lastSessionId:fe(e.last_session_id),specPath:fe(e.spec_path),error:fe(e.error),createdAt:De(e.created_at),updatedAt:De(e.updated_at),completedAt:fe(e.completed_at),archivedAt:fe(e.archived_at)}}function XO(e){return{runId:De(e.run_id),taskId:De(e.task_id),taskRevision:Yt(e.task_revision)??1,attempt:Yt(e.attempt)??1,status:De(e.status),claimToken:fe(e.claim_token),claimUntilAt:fe(e.claim_until_at),requestedByClientId:fe(e.requested_by_client_id),sessionId:fe(e.session_id),claimedAt:De(e.claimed_at),startedAt:fe(e.started_at),completedAt:fe(e.completed_at),resultSummary:fe(e.result_summary),error:fe(e.error),createdAt:De(e.created_at),updatedAt:De(e.updated_at)}}function YO(e){return{scopeKey:De(e.scope_key),mode:De(e.mode),applyToAgentCreated:Number(e.apply_to_agent_created??0)===1,maxConcurrentRuns:Yt(e.max_concurrent_runs)??2,maxChainDepth:Yt(e.max_chain_depth)??1,maxStartsPerHour:Yt(e.max_starts_per_hour)??20,enabledBy:cc(e.enabled_by_json),enabledAt:fe(e.enabled_at),updatedAt:De(e.updated_at)}}function dc(e,t){let n=e.trim();if(!n)throw Error(`${t} is required`);return n}function St(e){return typeof e==="string"&&e.trim()?e.trim():void 0}function zo(e,t){let n=Date.parse(e);if(!Number.isFinite(n))throw Error(`${t} must be a valid ISO-8601 timestamp`);return new Date(n).toISOString()}function QO(e,t){return e==null?void 0:zo(e,t)}function qo(e,t){if(e==null)return;if(!Number.isInteger(e)||e<=0)throw Error(`${t} must be a positive integer`);return e}function ZO(e,t){if(Date.parse(e)>=Date.parse(t))throw Error("availableAt must be before expiresAt")}function ym(e){return Array(e).fill("?").join(", ")}class bv{db;constructor(e={}){this.db=L9(e.dbPath??N9()),KO(this.db);let t=Fr();this.db.prepare(`INSERT OR IGNORE INTO agenda_task_automation (
1024
+ WHERE status IN ('starting', 'running');`];function KO(e){e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;"),e.exec("PRAGMA foreign_keys = ON;");for(let t of O7)e.exec(t)}var JO={kind:"system",id:"task_store"};class Sm extends Error{current;constructor(e){super(`task ${e.taskId} is at revision ${e.revision}; the requested revision is stale`);this.current=e;this.name="AgendaTaskRevisionConflictError"}}function cc(e){if(typeof e!=="string"||!e)return;try{return JSON.parse(e)}catch{return}}function Yt(e){if(typeof e==="number"&&Number.isFinite(e))return Math.floor(e);if(typeof e==="bigint")return Number(e);return}function Sv(e){return{taskId:De(e.task_id),type:De(e.type),status:De(e.status),title:De(e.title),description:fe(e.description),instructions:De(e.instructions),scope:De(e.scope),workspaceRoot:fe(e.workspace_root),cwd:fe(e.cwd),resourcePaths:cc(e.resource_paths_json)?.filter((t)=>typeof t==="string")??[],priority:Yt(e.priority)??3,assignee:fe(e.assignee),modelSelection:cc(e.model_selection_json),mode:fe(e.mode),systemPrompt:fe(e.system_prompt),maxIterations:Yt(e.max_iterations),timeoutSeconds:Yt(e.timeout_seconds),availableAt:De(e.available_at),expiresAt:De(e.expires_at),automationEligible:Number(e.automation_eligible??0)===1,revision:Yt(e.revision)??1,approvedRevision:Yt(e.approved_revision),createdBy:cc(e.created_by_json)??JO,updatedBy:cc(e.updated_by_json)??JO,originSessionId:fe(e.origin_session_id),originTaskId:fe(e.origin_task_id),currentRunId:fe(e.current_run_id),lastRunId:fe(e.last_run_id),lastSessionId:fe(e.last_session_id),specPath:fe(e.spec_path),error:fe(e.error),createdAt:De(e.created_at),updatedAt:De(e.updated_at),completedAt:fe(e.completed_at),archivedAt:fe(e.archived_at)}}function XO(e){return{runId:De(e.run_id),taskId:De(e.task_id),taskRevision:Yt(e.task_revision)??1,attempt:Yt(e.attempt)??1,status:De(e.status),claimToken:fe(e.claim_token),claimUntilAt:fe(e.claim_until_at),requestedByClientId:fe(e.requested_by_client_id),sessionId:fe(e.session_id),claimedAt:De(e.claimed_at),startedAt:fe(e.started_at),completedAt:fe(e.completed_at),resultSummary:fe(e.result_summary),error:fe(e.error),createdAt:De(e.created_at),updatedAt:De(e.updated_at)}}function YO(e){return{scopeKey:De(e.scope_key),mode:De(e.mode),applyToAgentCreated:Number(e.apply_to_agent_created??0)===1,maxConcurrentRuns:Yt(e.max_concurrent_runs)??2,maxChainDepth:Yt(e.max_chain_depth)??1,maxStartsPerHour:Yt(e.max_starts_per_hour)??20,enabledBy:cc(e.enabled_by_json),enabledAt:fe(e.enabled_at),updatedAt:De(e.updated_at)}}function dc(e,t){let n=e.trim();if(!n)throw Error(`${t} is required`);return n}function St(e){return typeof e==="string"&&e.trim()?e.trim():void 0}function zo(e,t){let n=Date.parse(e);if(!Number.isFinite(n))throw Error(`${t} must be a valid ISO-8601 timestamp`);return new Date(n).toISOString()}function QO(e,t){return e==null?void 0:zo(e,t)}function qo(e,t){if(e==null)return;if(!Number.isInteger(e)||e<=0)throw Error(`${t} must be a positive integer`);return e}function ZO(e,t){if(Date.parse(e)>=Date.parse(t))throw Error("availableAt must be before expiresAt")}function ym(e){return Array(e).fill("?").join(", ")}class bv{db;constructor(e={}){this.db=L7(e.dbPath??N7()),KO(this.db);let t=Fr();this.db.prepare(`INSERT OR IGNORE INTO agenda_task_automation (
1025
1025
  scope_key, mode, apply_to_agent_created, max_concurrent_runs,
1026
1026
  max_chain_depth, max_starts_per_hour, updated_at
1027
1027
  ) VALUES ('global', 'manual', 1, 2, 1, 20, ?)`).run(t)}close(){this.db.close?.()}createTask(e){let t=Fr(),n=St(e.taskId)??`task_${GO()}`,r=Hr(e),o=zo(e.availableAt??t,"availableAt"),s=zo(e.expiresAt,"expiresAt");ZO(o,s);let i=e.priority??3;if(!Number.isInteger(i)||i<0||i>5)throw Error("priority must be an integer from 0 to 5");let a=qo(e.maxIterations,"maxIterations"),d=qo(e.timeoutSeconds,"timeoutSeconds"),c=e.requiresApproval!==!1,u=c?"pending_approval":"approved",l=c?null:1;this.db.prepare(`INSERT INTO agenda_tasks (
@@ -1076,7 +1076,7 @@ ${e.instructions.trim()}
1076
1076
  max_starts_per_hour = excluded.max_starts_per_hour,
1077
1077
  enabled_by_json = excluded.enabled_by_json,
1078
1078
  enabled_at = excluded.enabled_at,
1079
- updated_at = excluded.updated_at`).run(t,e.mode,e.applyToAgentCreated?1:0,n,r,o,e.enabledBy?JSON.stringify(e.enabledBy):null,QO(e.enabledAt,"enabledAt")??null,s),this.getAutomationPolicy(t)}}var Go={kind:"system",id:"file_reconciler"},Ko={kind:"system",id:"task_manager"},tL={kind:"automation_policy",id:"global"},uc=new Set(["completed","failed","cancelled","interrupted"]),$9=30000,W9=250;function bn(){return new Date().toISOString()}function nL(e){return typeof e==="string"&&e.trim()?e.trim():void 0}function rL(e){let t=Date.parse(e);if(!Number.isFinite(t))throw Error("expiresAt must be a valid ISO-8601 timestamp");if(t<=Date.now())throw Error("expiresAt must be in the future")}function oL(e,t){let n=F9(e,t);return n!==""&&!n.startsWith("..")&&!n.startsWith("/")}function lc(e){if(!e||!wv(e))return!1;try{return U9(e).isDirectory()}catch{return!1}}function vv(e,t){return JSON.stringify({type:e.type,title:e.title,description:e.description,instructions:e.instructions,scope:e.scope,workspaceRoot:e.workspaceRoot,cwd:e.cwd,resourcePaths:e.resourcePaths,priority:e.priority,assignee:e.assignee,modelSelection:e.modelSelection,mode:e.mode,systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,availableAt:e.availableAt??t.availableAt,expiresAt:e.expiresAt,automationEligible:e.automationEligible})}function Tv(e){return JSON.stringify({type:e.type,title:e.title,description:e.description,instructions:e.instructions,scope:e.scope,workspaceRoot:e.workspaceRoot,cwd:e.cwd,resourcePaths:e.resourcePaths,priority:e.priority,assignee:e.assignee,modelSelection:e.modelSelection,mode:e.mode,systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,availableAt:e.availableAt,expiresAt:e.expiresAt,automationEligible:e.automationEligible})}function j9(e,t){return{taskId:t.taskId,expectedRevision:t.revision,type:e.type,title:e.title,description:e.description??null,instructions:e.instructions,scope:e.scope,workspaceRoot:e.workspaceRoot??null,cwd:e.cwd??null,resourcePaths:e.resourcePaths,priority:e.priority,assignee:e.assignee??null,modelSelection:e.modelSelection??null,mode:e.mode??null,systemPrompt:e.systemPrompt??null,maxIterations:e.maxIterations??null,timeoutSeconds:e.timeoutSeconds??null,availableAt:e.availableAt??t.availableAt,expiresAt:e.expiresAt,automationEligible:e.automationEligible,updatedBy:Go}}function q9(e,t){return{...e,type:t.type??e.type,title:t.title??e.title,description:t.description===null?void 0:t.description??e.description,instructions:t.instructions??e.instructions,scope:t.scope??e.scope,workspaceRoot:t.workspaceRoot===null?void 0:t.workspaceRoot??e.workspaceRoot,cwd:t.cwd===null?void 0:t.cwd??e.cwd,resourcePaths:t.resourcePaths??e.resourcePaths,priority:t.priority??e.priority,assignee:t.assignee===null?void 0:t.assignee??e.assignee,modelSelection:t.modelSelection===null?void 0:t.modelSelection??e.modelSelection,mode:t.mode===null?void 0:t.mode??e.mode,systemPrompt:t.systemPrompt===null?void 0:t.systemPrompt??e.systemPrompt,maxIterations:t.maxIterations===null?void 0:t.maxIterations??e.maxIterations,timeoutSeconds:t.timeoutSeconds===null?void 0:t.timeoutSeconds??e.timeoutSeconds,availableAt:t.availableAt??e.availableAt,expiresAt:t.expiresAt??e.expiresAt,automationEligible:t.automationEligible??e.automationEligible}}class Cv{runtime;store;ownsStore;globalSpecsDir;watcherDebounceMs;watchFiles;logger;publishEvent;scopes=new Map;activeRuns=new Map;backgroundRuns=new Set;maintenanceTimer;queuedAutomationScopes=new Set;automationEnabled;automationPumping=!1;automationPolicyGeneration=0;started=!1;disposed=!1;constructor(e){this.runtime=e.runtime,this.ownsStore=!e.store,this.store=e.store??new bv({dbPath:e.dbPath}),this.globalSpecsDir=e.globalSpecsDir,this.watcherDebounceMs=Math.max(0,e.watcherDebounceMs??W9),this.watchFiles=e.watchFiles!==!1,this.automationEnabled=e.automationEnabled!==!1,this.logger=e.logger??B9,this.publishEvent=e.publish??(()=>{})}async start(){if(this.disposed)throw Error("AgendaTaskManager disposed");if(this.started)return;this.started=!0,this.recoverInterruptedRuns(),await this.reconcileSourceForProjection("global",void 0,"startup");for(let e of this.store.listWorkspaceRoots())if(lc(e))await this.reconcileSourceForProjection("workspace",e,"startup");this.expireTasks(),this.maintenanceTimer=setInterval(()=>{this.expireTasks(),this.queueAutomation()},$9),this.maintenanceTimer.unref?.(),this.queueAutomation()}async dispose(){if(this.disposed)return;if(this.disposed=!0,this.maintenanceTimer)clearInterval(this.maintenanceTimer);for(let e of this.scopes.values()){if(e.timer)clearTimeout(e.timer);e.watcher?.close()}this.scopes.clear();for(let e of this.activeRuns.values())if(e.sessionId)await this.runtime.abortSession(e.sessionId,"Hub task manager stopped").catch(()=>{});await Promise.allSettled(this.backgroundRuns);for(let[e,t]of this.activeRuns)this.store.updateRun(t.runId,{status:"interrupted",completedAt:bn(),error:"Hub task manager stopped before the run completed."}),this.store.updateTaskState(e,{status:"failed",currentRunId:null,error:"Hub task manager stopped before the run completed.",updatedBy:Ko});if(this.activeRuns.clear(),this.ownsStore)this.store.close()}async createTask(e){this.assertUsable(),rL(e.expiresAt);let t=Hr(e),n={...e,...t},r=nL(n.taskId)??eL("task_");if(await this.reconcileScope(n.scope,n.workspaceRoot),this.store.getTask(r))throw Error(`task ${r} already exists`);let o=this.ensureScope(n.scope,n.workspaceRoot),s=o.resolveWritePath(r,n.specPath);if(wv(s)||this.store.getTaskBySpecPath(s))throw Error(`task spec already exists: ${s}`);let i=this.store.createTask({...n,taskId:r,specPath:s});try{o.writeSpec({...n,taskId:r},{specPath:s,createOnly:!0})}catch(a){throw this.store.deleteTask(r),a}return this.publish("task.created",i),this.expireTask(i),this.queueAutomation(),this.requireTask(r)}async listTasks(e={}){if(this.assertUsable(),!e.scope||e.scope==="global")await this.reconcileSourceForProjection("global",void 0,"list");if(e.workspaceRoot){if(lc(e.workspaceRoot))await this.reconcileSourceForProjection("workspace",e.workspaceRoot,"list")}else if(e.scope!=="global"){for(let t of this.store.listWorkspaceRoots())if(lc(t))await this.reconcileSourceForProjection("workspace",t,"list")}return this.expireTasks(),this.store.listTasks(e)}async getTask(e){this.assertUsable();let t=this.store.getTask(e.trim());if(t?.scope==="workspace"&&lc(t.workspaceRoot))await this.reconcileSourceForProjection("workspace",t.workspaceRoot,"read");else if(t?.scope==="global")await this.reconcileSourceForProjection("global",void 0,"read");let n=this.store.getTask(e.trim());if(n)this.expireTask(n);return this.store.getTask(e.trim())}async updateTask(e){this.assertUsable();let t=this.requireTask(e.taskId);if(e.updatedBy.id!==Go.id)await this.reconcileSourceForProjection(t.scope,t.workspaceRoot,"update");let n=this.requireTask(e.taskId);if(n.revision!==e.expectedRevision)this.store.updateTask(e);if(n.status==="in_progress")throw Error("an in-progress task cannot be edited");if(n.status==="completed"||n.status==="cancelled"||n.status==="expired")throw Error(`task ${n.taskId} cannot be edited from ${n.status}; create a new task instead`);let r=q9(n,e);rL(r.expiresAt);let o=Hr(r),s={...r,...o},i={...e,scope:s.scope,workspaceRoot:s.workspaceRoot??null,cwd:s.cwd??null,resourcePaths:s.resourcePaths},a=this.ensureScope(s.scope,s.workspaceRoot),d=n.specPath!==void 0&&oL(a.specsDir,n.specPath);if(!d)await this.reconcileFileStore(a);let c=a.resolveWritePath(n.taskId,d?n.specPath:void 0);if(c!==n.specPath&&(wv(c)||this.store.getTaskBySpecPath(c)))throw Error(`task spec already exists: ${c}`);let u;if(d&&n.specPath){let f=a.readSpec(n.specPath);if(!f.ok)throw Error(`task spec is invalid: ${f.error}`);if(e.updatedBy.id!==Go.id&&vv(f.spec,n)!==Tv(n))throw Error(`task spec changed outside the manager; reconcile task ${n.taskId} and retry`);u=f.contentHash}let l,p;try{l=a.writeSpec(s,{specPath:c,expectedContentHash:u,createOnly:!d}),p=this.store.updateTask(i)}catch(f){try{if(l&&d&&n.specPath)a.writeSpec(n,{specPath:n.specPath,expectedContentHash:l.contentHash});else if(l)a.deleteSpec(c,{expectedContentHash:l.contentHash})}catch(h){this.logError("agenda task update rollback failed",h,{taskId:n.taskId,specPath:c})}throw f}if(!p||!l)throw Error(`unknown task: ${e.taskId}`);let m=this.store.updateTaskState(p.taskId,{status:"pending_approval",approvedRevision:null,currentRunId:null,specPath:l.specPath,error:null,completedAt:null,archivedAt:null,updatedBy:e.updatedBy},p.revision);if(n.specPath&&n.specPath!==l.specPath)this.fileStoreForTask(n).deleteSpec(n.specPath);let g=m??this.requireTask(e.taskId);return this.publish("task.updated",g),this.expireTask(g),this.queueAutomation(),this.requireTask(e.taskId)}async approveTask(e,t,n){this.assertUsable();let r=await this.refreshAndVerifyTaskIntent(e);if(this.assertRevision(r,n),this.isExpired(r))throw this.expireTask(r),Error(`task ${e} has expired`);if(r.status==="approved"&&r.approvedRevision===r.revision)return r;if(r.status!=="pending_approval"&&r.status!=="failed")throw Error(`task ${e} cannot be approved from ${r.status}`);let o=this.store.updateTaskState(e,{status:"approved",approvedRevision:r.revision,error:null,updatedBy:t},r.revision);if(!o)throw Error(`unknown task: ${e}`);return this.publish("task.updated",o),this.queueAutomation(),o}async cancelTask(e,t,n,r){this.assertUsable();let o=this.requireTask(e);if(this.assertRevision(o,n),o.status==="cancelled")return o;if(o.status==="completed"||o.status==="expired")throw Error(`task ${e} cannot be cancelled from ${o.status}`);let s=o.currentRunId?this.store.getRun(o.currentRunId):void 0,i=r?.trim()||"Agenda task cancelled";if(s&&!uc.has(s.status))this.store.updateRun(s.runId,{status:"cancelled",completedAt:bn(),error:r?.trim()||void 0});this.activeRuns.delete(e);let a=this.store.updateTaskState(e,{status:"cancelled",approvedRevision:null,currentRunId:null,error:r?.trim()||null,updatedBy:t},o.revision);if(!a)throw Error(`unknown task: ${e}`);if(this.publish("task.updated",a,s),s?.sessionId)try{await this.runtime.abortSession(s.sessionId,i)}catch(d){this.logError("agenda task session abort failed",d,{taskId:e,runId:s.runId,sessionId:s.sessionId})}return a}async runTask(e,t,n,r){this.assertUsable();let o=await this.refreshAndVerifyTaskIntent(e);if(this.assertRevision(o,n),this.isExpired(o))throw this.expireTask(o),Error(`task ${e} has expired`);if(Date.parse(o.availableAt)>Date.now())throw Error(`task ${e} is not available yet`);if(o.status!=="approved"&&o.status!=="failed")throw Error(`task ${e} must be approved before it can run`);if(o.approvedRevision!==o.revision)throw Error(`task ${e} approval is stale`);if(this.activeRuns.has(e)||o.currentRunId)throw Error(`task ${e} already has an active run`);let s=this.store.createRun({taskId:e,taskRevision:o.revision,requestedByClientId:r}),i=this.store.updateTaskState(e,{currentRunId:s.runId,lastRunId:s.runId,error:null,completedAt:null,updatedBy:t},o.revision);if(!i)throw Error(`unknown task: ${e}`);this.activeRuns.set(e,{runId:s.runId}),this.publish("task.updated",i,s);try{let a=await this.runtime.startSession(i,s,r,{unattended:t.kind==="automation_policy"&&this.store.getAutomationPolicy(i.scope==="workspace"&&i.workspaceRoot?i.workspaceRoot:"global").mode==="unattended"}),d=this.store.getRun(s.runId),c=this.store.getTask(e);if(!d||uc.has(d.status)||c?.status!==o.status||c.currentRunId!==s.runId){if(d&&!uc.has(d.status))this.store.updateRun(s.runId,{status:"cancelled",sessionId:a.sessionId,completedAt:bn(),error:"Task changed or was cancelled while its session was starting."});else if(d)this.store.updateRun(s.runId,{sessionId:a.sessionId});throw this.activeRuns.delete(e),await this.runtime.abortSession(a.sessionId,"Agenda task was cancelled while its session was starting").catch((l)=>this.logError("cancelled agenda task session abort failed",l,{taskId:e,runId:s.runId,sessionId:a.sessionId})),Error(`task ${e} changed or was cancelled while starting`)}s=this.store.updateRun(s.runId,{status:"running",sessionId:a.sessionId,startedAt:bn()})??s,i=this.store.updateTaskState(e,{status:"in_progress",lastSessionId:a.sessionId,updatedBy:t})??i,this.activeRuns.set(e,{runId:s.runId,sessionId:a.sessionId}),this.publish("task.run.started",i,s);let u=this.finishRun(i,s,a.sessionId);return this.backgroundRuns.add(u),u.finally(()=>this.backgroundRuns.delete(u)),{task:i,run:s}}catch(a){throw await this.finishRunFailure(i,s,a),a}}async getAutomationPolicy(e="global"){return this.assertUsable(),this.store.getAutomationPolicy(e)}async setAutomationPolicy(e,t){this.assertUsable();let n=bn(),r=this.store.setAutomationPolicy({...e,enabledBy:e.mode==="manual"?void 0:t,enabledAt:e.mode==="manual"?void 0:n});return this.automationPolicyGeneration+=1,this.publishEvent("task.automation.updated",{policy:r}),this.queueAutomation(r.scopeKey),r}notifyAutomationReadinessChanged(){if(!this.disposed)this.queueAutomation()}async finishRun(e,t,n){try{let r=await this.runtime.runSession(n,e,t),o=this.store.getRun(t.runId);if(!o||uc.has(o.status))return;if(r.status==="completed"){let s=bn(),i=this.store.updateRun(t.runId,{status:"completed",completedAt:s,resultSummary:r.summary,error:null})??o,a=this.store.updateTaskState(e.taskId,{status:"completed",currentRunId:null,error:null,completedAt:s,updatedBy:Ko})??this.requireTask(e.taskId);this.publish("task.run.completed",a,i)}else if(r.status==="cancelled")await this.cancelTask(e.taskId,Ko,e.revision,r.error||"Task session was cancelled");else await this.finishRunFailure(e,t,Error(r.error||r.summary||"Task session failed"))}catch(r){await this.finishRunFailure(e,t,r)}finally{this.activeRuns.delete(e.taskId);let r=this.store.getTask(e.taskId);(r?.scope==="workspace"&&r.workspaceRoot?this.reconcileScope("workspace",r.workspaceRoot):this.reconcileScope("global")).catch((s)=>this.logError("post-run agenda task reconciliation failed",s,{taskId:e.taskId})),this.queueAutomation()}}async finishRunFailure(e,t,n){let r=this.store.getRun(t.runId);if(!r||uc.has(r.status))return;let o=n instanceof Error?n.message:String(n),s=this.store.updateRun(t.runId,{status:"failed",completedAt:bn(),error:o})??r,i=this.store.getTask(e.taskId);if(!i||i.status==="cancelled")return;if(i.currentRunId!==t.runId){this.activeRuns.delete(e.taskId),this.publish("task.run.failed",i,s);return}let a=this.store.updateTaskState(e.taskId,{status:"failed",currentRunId:null,error:o,updatedBy:Ko})??i;this.activeRuns.delete(e.taskId),this.publish("task.run.failed",a,s)}ensureScope(e,t){let n=nL(t);if(e==="workspace"&&!n)throw Error("workspaceRoot is required for workspace task scope");if(e==="workspace"&&!lc(n))throw Error("workspaceRoot must be an existing directory");let r=e==="global"?"global":`workspace:${n}`,o=this.scopes.get(r);if(o)return o.store;let s=new yv({scope:e,workspaceRoot:n,taskSpecsDir:e==="global"?this.globalSpecsDir:void 0}),i={store:s},a=!0;try{s.ensureSpecsDir();let d=this.watchFiles?this.resolveWatchRoot(s.specsDir):void 0;if(d!==void 0)i.watcher=H9(d,(c,u)=>{if(!u||!String(u).endsWith(".task.md"))return;if(i.timer)clearTimeout(i.timer);i.timer=setTimeout(()=>{i.timer=void 0,this.reconcileFileStore(s).catch((l)=>this.logError("agenda task watcher reconciliation failed",l,{specsDir:s.specsDir}))},this.watcherDebounceMs)}),i.watcher.on("error",(c)=>this.logError("agenda task watcher failed",c,{specsDir:s.specsDir}))}catch(d){a=!1,this.logError("agenda task source could not be attached",d,{specsDir:s.specsDir})}if(a)this.scopes.set(r,i);return s}async reconcileScope(e,t){let n=this.ensureScope(e,t);await this.reconcileFileStore(n)}async reconcileSourceForProjection(e,t,n){try{await this.reconcileScope(e,t)}catch(r){this.logError(`agenda task source ${n} reconciliation failed`,r,{scope:e,...t?{workspaceRoot:t}:{}})}}async reconcileFileStore(e){if(this.disposed)return;let t=new Set;for(let r of e.listSpecs()){if(t.add(r.specPath),!r.ok){this.logger.log("agenda task spec is invalid",{severity:"warn",specPath:r.specPath,error:r.error});continue}try{let o=r.spec;if(!o.taskId)o=e.writeSpec({...o,taskId:eL("task_")},{specPath:o.specPath,expectedContentHash:o.contentHash});let s=this.store.getTaskBySpecPath(o.specPath);if(s&&o.taskId&&o.taskId!==s.taskId)this.logger.log("agenda task id is immutable for an existing spec",{severity:"warn",taskId:s.taskId,requestedTaskId:o.taskId,specPath:o.specPath}),o=e.writeSpec({...o,taskId:s.taskId},{specPath:o.specPath,expectedContentHash:o.contentHash});let i=o.taskId?this.store.getTask(o.taskId):void 0,a=s??i;if(i?.specPath&&i.specPath!==o.specPath){this.logger.log("agenda task id is already owned by another spec",{severity:"warn",taskId:o.taskId,specPath:o.specPath});continue}if(!a){let d=this.store.createTask($O(o,Go));this.publish("task.created",d),this.expireTask(d);continue}if(a.archivedAt){let d=a.status==="cancelled"&&a.error==="Task spec was deleted.",c=this.store.updateTaskState(a.taskId,{status:d?"pending_approval":a.status,approvedRevision:d?null:a.approvedRevision,archivedAt:null,error:d?null:a.error,updatedBy:Go});if(c)a=c,this.publish("task.updated",c)}if(vv(o,a)===Tv(a))continue;if(a.status==="in_progress"){this.logger.log("agenda task edit deferred until its run completes",{severity:"warn",taskId:a.taskId});continue}if(a.status==="completed"||a.status==="cancelled"||a.status==="expired"){this.logger.log("terminal agenda task edits are not applied",{severity:"warn",taskId:a.taskId,status:a.status}),e.writeSpec(a,{specPath:o.specPath,expectedContentHash:o.contentHash});continue}await this.updateTask(j9(o,a))}catch(o){this.logError("agenda task spec reconciliation failed",o,{specPath:r.spec.specPath})}}let n=this.store.listTasks({scope:e.scope,workspaceRoot:e.workspaceRoot,includeArchived:!0,limit:1000});for(let r of n){if(!r.specPath||!oL(e.specsDir,r.specPath)||t.has(r.specPath)||r.archivedAt)continue;if(r.status==="in_progress")await this.cancelTask(r.taskId,Go,r.revision,"Task spec was deleted.");let o=this.store.updateTaskState(r.taskId,{status:r.status==="completed"||r.status==="expired"?r.status:"cancelled",approvedRevision:null,currentRunId:null,error:r.status==="cancelled"?r.error??null:"Task spec was deleted.",archivedAt:bn(),updatedBy:Go});if(o)this.publish("task.deleted",o)}this.queueAutomation()}expireTasks(){for(let e of this.store.listTasks({limit:1000}))this.expireTask(e)}expireTask(e){if(!this.isExpired(e))return;if(e.currentRunId||e.status==="in_progress"||e.status==="completed"||e.status==="cancelled"||e.status==="expired")return;let t=this.store.updateTaskState(e.taskId,{status:"expired",approvedRevision:null,currentRunId:null,error:"Task expired before it was started.",updatedBy:Ko});if(t)this.publish("task.updated",t)}isExpired(e){return Date.parse(e.expiresAt)<=Date.now()}recoverInterruptedRuns(){let e=bn();for(let t of this.store.listRuns({status:["starting","running"],limit:1000})){this.store.updateRun(t.runId,{status:"interrupted",completedAt:e,error:"Hub restarted while this task was running."});let n=this.store.getTask(t.taskId);if(!n||n.currentRunId!==t.runId)continue;if(n.status==="completed"||n.status==="cancelled"||n.status==="expired"){this.store.updateTaskState(n.taskId,{currentRunId:null});continue}if(t.status==="starting"&&n.approvedRevision===t.taskRevision&&n.revision===t.taskRevision&&!this.isExpired(n)){this.store.updateTaskState(n.taskId,{status:"approved",currentRunId:null,error:"Hub restarted before this task session was linked.",updatedBy:Ko});continue}this.store.updateTaskState(n.taskId,{status:t.status==="starting"?"pending_approval":"failed",approvedRevision:t.status==="starting"?null:n.approvedRevision,currentRunId:null,error:"Hub restarted while this task was running.",updatedBy:Ko})}}queueAutomation(e){if(this.disposed||!this.automationEnabled)return;if(e)this.queuedAutomationScopes.add(e);else for(let t of this.store.listAutomationPolicies())this.queuedAutomationScopes.add(t.scopeKey);if(this.automationPumping)return;queueMicrotask(()=>{this.pumpAutomation().catch((t)=>this.logError("agenda task automation pump failed",t,{}))})}async pumpAutomation(){if(this.disposed||this.automationPumping)return;this.automationPumping=!0;let e=this.automationPolicyGeneration;try{while(this.queuedAutomationScopes.size>0){let t=this.queuedAutomationScopes.values().next().value;if(!t)break;this.queuedAutomationScopes.delete(t);let n=this.store.getAutomationPolicy(t);if(n.mode==="manual")continue;this.expireTasks();let r=this.store.listRuns({limit:1000}).filter((i)=>Date.parse(i.claimedAt)>=Date.now()-3600000).length,o=Math.min(Math.max(0,n.maxConcurrentRuns-this.activeRuns.size),Math.max(0,n.maxStartsPerHour-r));if(o<=0)continue;let s=this.store.listTasks({statuses:["pending_approval","approved"],...t==="global"?{}:{scope:"workspace",workspaceRoot:t},automationEligible:!0,availableBefore:bn(),limit:1000});for(let i of s){if(o<=0)break;if(e!==this.automationPolicyGeneration)return;try{let a=i;if(a.status==="pending_approval"){if(!this.canAutomaticallyApprove(a,n))continue;a=await this.approveTask(a.taskId,tL,a.revision)}if(e!==this.automationPolicyGeneration)return;if(n.mode==="auto_start"&&this.runtime.isInteractiveClientAvailable?.()!==!0)continue;await this.runTask(a.taskId,tL,a.revision),o-=1}catch(a){this.logError("agenda task automation start failed",a,{taskId:i.taskId})}}}}finally{if(this.automationPumping=!1,this.queuedAutomationScopes.size>0)this.queueAutomation()}}canAutomaticallyApprove(e,t){let n=[e.createdBy,e.updatedBy];if(n.some((r)=>r.kind==="system"&&r.id==="file_reconciler"))return!1;if(!t.applyToAgentCreated&&n.some((r)=>r.kind==="agent"))return!1;return this.taskChainDepth(e)<=t.maxChainDepth}taskChainDepth(e){let t=0,n=e,r=new Set([e.taskId]);while(n.originTaskId){if(r.has(n.originTaskId))return Number.POSITIVE_INFINITY;r.add(n.originTaskId);let o=this.store.getTask(n.originTaskId);if(!o)break;t+=1,n=o}return t}fileStoreForTask(e){return this.ensureScope(e.scope,e.workspaceRoot)}async refreshAndVerifyTaskIntent(e){let t=this.requireTask(e);await this.reconcileScope(t.scope,t.workspaceRoot);let n=this.requireTask(e);if(n.archivedAt)throw Error(`task ${e} no longer has an active task spec`);if(!n.specPath)throw Error(`task ${e} has no canonical task spec`);let r;try{r=this.fileStoreForTask(n).readSpec(n.specPath)}catch(o){throw Error(`task ${e} task spec is unavailable: ${o instanceof Error?o.message:String(o)}`)}if(!r.ok)throw Error(`task ${e} task spec is invalid: ${r.error}`);if(r.spec.taskId!==n.taskId||vv(r.spec,n)!==Tv(n))throw Error(`task ${e} task spec does not match revision ${n.revision}`);return n}requireTask(e){let t=e.trim();if(!t)throw Error("taskId is required");let n=this.store.getTask(t);if(!n)throw Error(`unknown task: ${t}`);return n}assertRevision(e,t){if(e.revision!==t)throw Error(`task ${e.taskId} is at revision ${e.revision}; the requested revision is stale`)}publish(e,t,n){this.publishEvent(e,{task:t,...n?{run:n}:{}},n?.sessionId??t.lastSessionId)}resolveWatchRoot(e){try{return D9.native(e)}catch(t){this.logError("agenda task watcher disabled: specs dir could not be resolved",t,{specsDir:e});return}}logError(e,t,n){if(this.logger.error)this.logger.error(e,{...n,error:t});else this.logger.log(e,{...n,error:t,severity:"error"})}assertUsable(){if(this.disposed)throw Error("AgendaTaskManager disposed")}}Ke();import{createSessionId as V9}from"@cline/shared";import{createSessionId as G9}from"@cline/shared";function z9(e){switch(e){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function K9(e){let t=e.metadata&&typeof e.metadata==="object"?JSON.parse(JSON.stringify(e.metadata)):{};if(e.parentSessionId?.trim())t.parentSessionId=e.parentSessionId;if(e.parentAgentId?.trim())t.parentAgentId=e.parentAgentId;if(e.agentId?.trim())t.agentId=e.agentId;if(e.conversationId?.trim())t.conversationId=e.conversationId;if(e.messagesPath?.trim())t.messagesPath=e.messagesPath;if(e.prompt?.trim())t.prompt=e.prompt;if(e.provider?.trim())t.provider=e.provider;if(e.model?.trim())t.model=e.model;if(e.source?.trim())t.source=e.source;if(typeof e.pid==="number")t.pid=e.pid;return Object.keys(t).length>0?t:void 0}function bm(e,t,n,r){return{sessionId:e.sessionId,workspaceRoot:e.workspaceRoot,cwd:e.cwd,createdAt:Date.parse(e.startedAt),updatedAt:Date.parse(e.updatedAt),createdByClientId:t?.createdByClientId??"hub",status:z9(e.status),participants:t?[...t.participants.values()]:[],metadata:K9(e),runtimeOptions:{enableTools:e.enableTools,enableSpawn:e.enableSpawn,enableTeams:e.enableTeams,mode:typeof e.metadata?.mode==="string"?e.metadata.mode:void 0,systemPrompt:typeof e.metadata?.systemPrompt==="string"?e.metadata.systemPrompt:void 0},runtimeSession:e.agentId?{agentId:e.agentId,team:e.teamName?{teamId:e.teamName}:void 0}:void 0,...n?{usage:{...n}}:{},...r?{aggregateUsage:{...r}}:{}}}function L(e,t){return{version:e.version,requestId:e.requestId,ok:!0,...t!==void 0?{payload:t}:{}}}function U(e,t,n){return{version:e.version,requestId:e.requestId,ok:!1,error:{code:t,message:n}}}function Ht(e){return e&&typeof e==="object"&&!Array.isArray(e)?e:void 0}function Ie(e){if(typeof e.payload?.sessionId==="string")return e.payload.sessionId.trim();return e.sessionId?.trim()??""}function Ft(e,t,n){return{version:"v1",event:e,eventId:G9("hevt_"),sessionId:n,timestamp:Date.now(),payload:t}}async function ot(e,t){let n=await e.sessionHost.getSession(t);if(!n)return;let r=await e.sessionHost.getAccumulatedUsage?.(t);return bm(n,e.sessionState.get(t),r?.usage,r?.aggregateUsage)}async function lt(e,t){let n=await e.sessionHost.getSession(t);if(!n)return;let r=await e.sessionHost.getAccumulatedUsage?.(t);return Rr({session:n,usage:r?.usage,aggregateUsage:r?.aggregateUsage})}function kv(e,t,n,r,o={}){let s=e.sessionState.get(t);if(s){if(o.interactive!==void 0)s.interactive=o.interactive;if(r==="creator"&&!s.createdByClientId)s.createdByClientId=n;if(!s.participants.has(n))s.participants.set(n,{clientId:n,attachedAt:Date.now(),role:r});return s}let i={createdByClientId:n,interactive:o.interactive??!0,participants:new Map([[n,{clientId:n,attachedAt:Date.now(),role:r}]])};return e.sessionState.set(t,i),i}function sL(e,t,n,r,o={}){let s=e.sessionState.get(t);if(s){if(o.interactive!==void 0)s.interactive=o.interactive;if(!s.participants.has(n))s.participants.set(n,{clientId:n,attachedAt:Date.now(),role:r});return s}let i={interactive:o.interactive??!0,participants:new Map([[n,{clientId:n,attachedAt:Date.now(),role:r}]])};return e.sessionState.set(t,i),i}async function vm(e,t){let n=V9("approval_"),r=t.sessionId;if(e.sessionState.get(r)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};let s;try{s=await e.sessionHost.getSession(r)}catch{s=void 0}let i=typeof s?.metadata?.agendaTaskId==="string"?s.metadata.agendaTaskId:void 0;return await new Promise((a)=>{let d=e.buildEvent("approval.requested",{approvalId:n,sessionId:t.sessionId,agentId:t.agentId,conversationId:t.conversationId,iteration:t.iteration,toolCallId:t.toolCallId,toolName:t.toolName,inputJson:JSON.stringify(t.input??null),policy:t.policy,agendaTaskId:i},r);e.pendingApprovals.set(n,{sessionId:r,resolve:a,requestedEvent:d}),e.publish(d)})}function iL(e,t){let n=[];for(let r of e.pendingApprovals.values()){if(!r.requestedEvent)continue;if(t&&r.sessionId!==t)continue;n.push(r.requestedEvent)}return n}function Pv(e,t,n){let r=e.pendingApprovals.get(t);if(!r)return;return e.pendingApprovals.delete(t),r.resolve(n),{sessionId:r.sessionId}}function Iv(e,t,n){let r=0;for(let[o,s]of[...e.pendingApprovals.entries()]){if(!t({approvalId:o,sessionId:s.sessionId}))continue;e.pendingApprovals.delete(o),s.resolve({approved:!1,reason:n}),e.publish(e.buildEvent("approval.resolved",{approvalId:o,approved:!1,cancelled:!0,reason:n},s.sessionId)),r+=1}return r}async function aL(e,t){let n=typeof t.payload?.approvalId==="string"?t.payload.approvalId.trim():"";if(!e.pendingApprovals.get(n))return U(t,"approval_not_found",`Unknown approval: ${n}`);let o=typeof t.payload?.reason==="string"?t.payload.reason:t.payload?.payload&&typeof t.payload.payload==="object"&&!Array.isArray(t.payload.payload)&&typeof t.payload.payload.reason==="string"?t.payload.payload.reason:void 0,s=t.payload?.approved===!0,i=Pv(e,n,{approved:s,reason:o});if(!i)return U(t,"approval_not_found",`Unknown approval: ${n}`);return e.publish(e.buildEvent("approval.resolved",{approvalId:n,approved:s,reason:o},i.sessionId)),L(t,{approvalId:n,approved:s})}import{createSessionId as Y9}from"@cline/shared";function J9(e){if(e instanceof Error)return{name:e.name,message:e.message,stack:e.stack};if(e===void 0)return;return e}var dL={debug:10,info:20,warn:30,error:40,silent:50};function X9(){let e=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if(e==="debug"||e==="info"||e==="warn"||e==="error"||e==="silent")return e;return process.env.VITEST?"error":"info"}function z(e,t,n={}){if(dL[e]<dL[X9()])return;let r=JSON.stringify({ts:new Date().toISOString(),level:e,component:"hub",message:t,...Object.fromEntries(Object.entries(n).map(([o,s])=>[o,J9(s)]).filter(([,o])=>o!==void 0))});if(e==="error"||e==="warn"){console.error(`[hub] ${r}`);return}console.log(`[hub] ${r}`)}function Vo(e,t){let n=t instanceof Error?t.stack||t.message:String(t);z("error",e,{error:n})}async function cL(e,t,n,r,o,s){let i=Y9("capreq_"),a=performance.now();return z("info","capability.request.start",{requestId:i,sessionId:t,capabilityName:n,targetClientId:o}),await new Promise((d,c)=>{e.pendingCapabilityRequests.set(i,{sessionId:t,targetClientId:o,capabilityName:n,onProgress:s,resolve:(u)=>{if(z(u.ok?"info":"warn","capability.request.end",{requestId:i,sessionId:t,capabilityName:n,targetClientId:o,ok:u.ok,error:u.error,durationMs:Math.round(performance.now()-a)}),!u.ok){c(Error(u.error||`Capability ${n} was rejected by ${o}.`));return}d(u.payload)}}),e.publish(e.buildEvent("capability.requested",{requestId:i,targetClientId:o,capabilityName:n,payload:r},t)),z("info","capability.request.published",{requestId:i,sessionId:t,capabilityName:n,targetClientId:o})})}function uL(e,t){let n=typeof t.payload?.requestId==="string"?t.payload.requestId.trim():"",r=e.pendingCapabilityRequests.get(n);if(!r)return L(t,{requestId:n,ignored:!0});if((t.clientId?.trim()||"")!==r.targetClientId)return U(t,"capability_wrong_client",`Capability request ${n} is owned by ${r.targetClientId}`);if(t.sessionId?.trim()&&t.sessionId.trim()!==r.sessionId)return U(t,"capability_wrong_session",`Capability request ${n} belongs to session ${r.sessionId}`);let s=t.payload?.payload&&typeof t.payload.payload==="object"&&!Array.isArray(t.payload.payload)?t.payload.payload:{};return r.onProgress?.(s),L(t,{requestId:n})}function Br(e,t,n){let r=0;for(let[o,s]of[...e.pendingCapabilityRequests.entries()]){if(!t({requestId:o,...s}))continue;e.pendingCapabilityRequests.delete(o),z("warn","capability.request.cancelled",{requestId:o,sessionId:s.sessionId,capabilityName:s.capabilityName,targetClientId:s.targetClientId,reason:n}),s.resolve({ok:!1,error:n}),e.publish(e.buildEvent("capability.resolved",{requestId:o,capabilityName:s.capabilityName,targetClientId:s.targetClientId,ok:!1,cancelled:!0,error:n},s.sessionId)),r+=1}return r}async function lL(e,t){let n=typeof t.payload?.sessionId==="string"?t.payload.sessionId.trim():t.sessionId?.trim()||"",r=typeof t.payload?.capabilityName==="string"?t.payload.capabilityName.trim():"",o=typeof t.payload?.targetClientId==="string"?t.payload.targetClientId.trim():"";if(!n||!r||!o)return U(t,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let s=t.payload?.payload&&typeof t.payload.payload==="object"&&!Array.isArray(t.payload.payload)?t.payload.payload:{},i=await e.requestCapability(n,r,s,o);return L(t,i)}catch(s){return U(t,"capability_request_failed",s instanceof Error?s.message:String(s))}}function pL(e,t){let n=typeof t.payload?.requestId==="string"?t.payload.requestId.trim():"",r=e.pendingCapabilityRequests.get(n);if(!r)return L(t,{requestId:n,ignored:!0});let o=t.clientId?.trim()||"";if(o!==r.targetClientId)return U(t,"capability_wrong_client",`Capability request ${n} is owned by ${r.targetClientId}`);if(t.sessionId?.trim()&&t.sessionId.trim()!==r.sessionId)return U(t,"capability_wrong_session",`Capability request ${n} belongs to session ${r.sessionId}`);e.pendingCapabilityRequests.delete(n);let s=t.payload?.payload&&typeof t.payload.payload==="object"&&!Array.isArray(t.payload.payload)?t.payload.payload:void 0,i=typeof t.payload?.error==="string"?t.payload.error:void 0,a=t.payload?.ok===!0;return z(a?"info":"warn","capability.respond",{requestId:n,sessionId:r.sessionId,capabilityName:r.capabilityName,targetClientId:r.targetClientId,respondedByClientId:o,ok:a,error:i}),r.resolve({ok:a,payload:s,error:i}),e.publish(e.buildEvent("capability.resolved",{requestId:n,capabilityName:r.capabilityName,targetClientId:r.targetClientId,respondedByClientId:o,ok:a,payload:s,error:i},r.sessionId)),L(t,{requestId:n,ok:a})}import{createSessionId as Q9}from"@cline/shared";function mL(e,t){let n=t.payload,r=n?.clientId?.trim()||t.clientId?.trim()||Q9("client_");return e.clients.set(r,{clientId:r,clientType:n?.clientType??"unknown",displayName:n?.displayName,actorKind:n?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:n?.transport??"native",capabilities:n?.capabilities??[],metadata:n?.metadata,workspaceContext:n?.workspaceContext}),e.publish(e.buildEvent("hub.client.registered",{clientId:r,clientType:n?.clientType??"unknown",displayName:n?.displayName,metadata:n?.metadata,connectedAt:Date.now()})),L(t,{clientId:r})}function gL(e,t){let n=t.clientId?.trim(),r=n?e.clients.get(n):void 0;if(!n||!r)return U(t,"client_not_found","Client is not registered with this hub.");let o=Ht(t.payload?.metadata);if(r.lastSeenAt=Date.now(),o)r.metadata=JSON.parse(JSON.stringify(o));if(Array.isArray(t.payload?.capabilities))r.capabilities=t.payload.capabilities.flatMap((s)=>{if(!s||typeof s!=="object"||Array.isArray(s))return[];let i=s;if(typeof i.name!=="string"||!i.name.trim())return[];return[{name:i.name.trim(),...typeof i.description==="string"?{description:i.description}:{},...Array.isArray(i.scopes)&&i.scopes.every((a)=>typeof a==="string")?{scopes:i.scopes}:{}}]});return L(t)}function fL(e,t,n){let r=t.clientId?.trim();if(r)e.clients.delete(r),n(r),e.publish(e.buildEvent("hub.client.disconnected",{clientId:r}));return L(t)}function hL(e,t){return L(t,{clients:[...e.clients.values()]})}import{buildConnectorConnectArgs as kZ,CONNECTOR_PLATFORMS as PZ,connectorChannelsFromPlatforms as IZ,listConnectorCatalog as RZ,mergeConnectorConnectArgs as AZ,shouldIncludeConnectorField as EZ}from"@cline/shared";import{withConnectorStore as xv}from"@cline/shared/db";import{existsSync as Z9,readdirSync as eZ,readFileSync as tZ}from"node:fs";import{join as yL}from"node:path";import{listConnectorCatalog as nZ}from"@cline/shared";import{resolveConnectorDataDir as rZ}from"@cline/shared/storage";var SL={startedAt:(e)=>typeof e.startedAt==="string"?e.startedAt:void 0,port:(e)=>typeof e.port==="number"?e.port:void 0,baseUrl:(e)=>typeof e.baseUrl==="string"?e.baseUrl:void 0,connectionMode:(e)=>typeof e.connectionMode==="string"?e.connectionMode:void 0,userName:(e)=>typeof e.userName==="string"?e.userName:void 0,botUsername:(e)=>typeof e.botUsername==="string"?e.botUsername:void 0,applicationId:(e)=>typeof e.applicationId==="string"?e.applicationId:void 0,phoneNumberId:(e)=>typeof e.phoneNumberId==="string"?e.phoneNumberId:void 0},oZ={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function sZ(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function iZ(e,t){let n;try{let d=JSON.parse(tZ(t,"utf8"));if(!d||typeof d!=="object"||Array.isArray(d))return;n=d}catch{return}let r=typeof n.pid==="number"?n.pid:void 0,o=typeof n.hubUrl==="string"?n.hubUrl:typeof n.rpcAddress==="string"?n.rpcAddress:void 0;if(!r||!o||!sZ(r))return;let s=oZ[e];if(!s)return;let i={};for(let d of s.required){let c=SL[d](n);if(!c||typeof c==="string"&&!c.trim())return;i[d]=c}for(let d of s.optional){let c=SL[d](n);if(c!==void 0)i[d]=c}let a=e==="telegram"?i.botUsername:e==="discord"?i.applicationId:e==="whatsapp"&&typeof n.instanceKey==="string"?n.instanceKey:i.userName;if(!a)return;return{id:`${e}:${a}`,type:e,instanceId:a,pid:r,hubUrl:o,...i}}function pc(){let e=[];for(let{name:t}of nZ()){let n=yL(rZ(),t);if(!Z9(n))continue;for(let r of eZ(n)){if(!r.endsWith(".json")||r.endsWith(".threads.json"))continue;let o=iZ(t,yL(n,r));if(o)e.push(o)}}return e.sort((t,n)=>{if(t.type!==n.type)return t.type.localeCompare(n.type);let r=t.botUsername??t.userName??"",o=n.botUsername??n.userName??"";return r.localeCompare(o)})}import{spawn as fZ}from"node:child_process";import{openSync as hZ}from"node:fs";import{CLINE_CONNECTOR_SUPERVISED_ENV as yZ,readConnectorCliLaunchSpec as SZ}from"@cline/shared";import{ensureParentDir as bZ,resolveConnectorLogPath as vZ}from"@cline/shared/storage";import{withConnectorStore as mc}from"@cline/shared/db";var aZ=new Set(["-i","--interactive"]);function dZ(e,t){let n=e.filter((o)=>!aZ.has(o));return n.some((o)=>o==="--cwd"||o.startsWith("--cwd="))?n:[...n,"--cwd",t]}function cZ(e,t,n,r=process.cwd()){try{let o=dZ(n,r);mc((s)=>s.recordConnected(e,t,o))}catch{}}function Rv(e,t){try{mc((n)=>{if(e)n.setEnabled(e,!1,t);else n.disableAll()})}catch{}}function Tm(e,t){try{return mc((n)=>n.getConnection(e,t))}catch{return}}function uZ(e,t){try{mc((n)=>n.deleteConnection(e,t))}catch{}}async function lZ(e){let t=e.log??(()=>{}),n;try{n=mc((o)=>o.listConnections()).filter((o)=>o.enabled).map((o)=>({channel:o.channel,instanceId:o.instanceId,args:o.connectArgs}))}catch(o){return t(`[connect] failed to read persisted connectors: ${o instanceof Error?o.message:String(o)}`),[]}let r=[];for(let o of n){let{channel:s,instanceId:i}=o;if(e.isHealthy?.(o)){t(`[connect] skipping ${s} connector ${i}: already live in this host`);continue}t(`[connect] reconnecting ${s} connector ${i}`);try{let a=await e.start(o);if(r.push({channel:s,instanceId:i,ok:a}),!a)t(`[connect] failed to reconnect ${s} connector ${i}`)}catch(a){let d=a instanceof Error?a.message:String(a);r.push({channel:s,instanceId:i,ok:!1,error:d}),t(`[connect] failed to reconnect ${s} connector ${i}: ${d}`)}}return r}import{CLINE_CONNECTOR_STARTING_INSTANCE_ENV as pZ,CLINE_RUN_AS_HUB_DAEMON_ENV as mZ}from"@cline/shared";var gZ=/^CLINE_(?:CONNECTOR_DETACHED_CHILD|[A-Z0-9]+_CONNECT_CHILD)$/;function gc(e=process.env){let t={...e};delete t[mZ],delete t[pZ];for(let n of Object.keys(t))if(gZ.test(n))delete t[n];return t}var vL=1000,TL=60000,wL=5,CL=60000,Av=5000,kL=5000,PL=2000,TZ=100;function Jo(e,t){return`${e}\x00${t}`}function wZ(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function bL(e){return e===void 0?void 0:new Date(e).toISOString()}class IL{entries=new Map;instanceLocks=new Map;pollTimer;disposed=!1;launchSpec;spawnProcess;isProcessRunning;killProcess;listActive;cleanupInstance;isAutostartEnabled;log;now;setTimer;clearTimer;constructor(e={}){this.launchSpec=e.launchSpec??SZ,this.spawnProcess=e.spawnProcess??fZ,this.isProcessRunning=e.isProcessRunning??wZ,this.killProcess=e.killProcess??((t,n)=>process.kill(t,n)),this.listActive=e.listActive??pc,this.cleanupInstance=e.cleanupInstance,this.isAutostartEnabled=e.isAutostartEnabled??((t,n)=>Tm(t,n)?.enabled===!0),this.log=e.log??((t)=>process.stderr.write(`[hub-daemon] ${t}
1079
+ updated_at = excluded.updated_at`).run(t,e.mode,e.applyToAgentCreated?1:0,n,r,o,e.enabledBy?JSON.stringify(e.enabledBy):null,QO(e.enabledAt,"enabledAt")??null,s),this.getAutomationPolicy(t)}}var Go={kind:"system",id:"file_reconciler"},Ko={kind:"system",id:"task_manager"},tL={kind:"automation_policy",id:"global"},uc=new Set(["completed","failed","cancelled","interrupted"]),$7=30000,W7=250;function bn(){return new Date().toISOString()}function nL(e){return typeof e==="string"&&e.trim()?e.trim():void 0}function rL(e){let t=Date.parse(e);if(!Number.isFinite(t))throw Error("expiresAt must be a valid ISO-8601 timestamp");if(t<=Date.now())throw Error("expiresAt must be in the future")}function oL(e,t){let n=F7(e,t);return n!==""&&!n.startsWith("..")&&!n.startsWith("/")}function lc(e){if(!e||!wv(e))return!1;try{return U7(e).isDirectory()}catch{return!1}}function vv(e,t){return JSON.stringify({type:e.type,title:e.title,description:e.description,instructions:e.instructions,scope:e.scope,workspaceRoot:e.workspaceRoot,cwd:e.cwd,resourcePaths:e.resourcePaths,priority:e.priority,assignee:e.assignee,modelSelection:e.modelSelection,mode:e.mode,systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,availableAt:e.availableAt??t.availableAt,expiresAt:e.expiresAt,automationEligible:e.automationEligible})}function Tv(e){return JSON.stringify({type:e.type,title:e.title,description:e.description,instructions:e.instructions,scope:e.scope,workspaceRoot:e.workspaceRoot,cwd:e.cwd,resourcePaths:e.resourcePaths,priority:e.priority,assignee:e.assignee,modelSelection:e.modelSelection,mode:e.mode,systemPrompt:e.systemPrompt,maxIterations:e.maxIterations,timeoutSeconds:e.timeoutSeconds,availableAt:e.availableAt,expiresAt:e.expiresAt,automationEligible:e.automationEligible})}function j7(e,t){return{taskId:t.taskId,expectedRevision:t.revision,type:e.type,title:e.title,description:e.description??null,instructions:e.instructions,scope:e.scope,workspaceRoot:e.workspaceRoot??null,cwd:e.cwd??null,resourcePaths:e.resourcePaths,priority:e.priority,assignee:e.assignee??null,modelSelection:e.modelSelection??null,mode:e.mode??null,systemPrompt:e.systemPrompt??null,maxIterations:e.maxIterations??null,timeoutSeconds:e.timeoutSeconds??null,availableAt:e.availableAt??t.availableAt,expiresAt:e.expiresAt,automationEligible:e.automationEligible,updatedBy:Go}}function q7(e,t){return{...e,type:t.type??e.type,title:t.title??e.title,description:t.description===null?void 0:t.description??e.description,instructions:t.instructions??e.instructions,scope:t.scope??e.scope,workspaceRoot:t.workspaceRoot===null?void 0:t.workspaceRoot??e.workspaceRoot,cwd:t.cwd===null?void 0:t.cwd??e.cwd,resourcePaths:t.resourcePaths??e.resourcePaths,priority:t.priority??e.priority,assignee:t.assignee===null?void 0:t.assignee??e.assignee,modelSelection:t.modelSelection===null?void 0:t.modelSelection??e.modelSelection,mode:t.mode===null?void 0:t.mode??e.mode,systemPrompt:t.systemPrompt===null?void 0:t.systemPrompt??e.systemPrompt,maxIterations:t.maxIterations===null?void 0:t.maxIterations??e.maxIterations,timeoutSeconds:t.timeoutSeconds===null?void 0:t.timeoutSeconds??e.timeoutSeconds,availableAt:t.availableAt??e.availableAt,expiresAt:t.expiresAt??e.expiresAt,automationEligible:t.automationEligible??e.automationEligible}}class Cv{runtime;store;ownsStore;globalSpecsDir;watcherDebounceMs;watchFiles;logger;publishEvent;scopes=new Map;activeRuns=new Map;backgroundRuns=new Set;maintenanceTimer;queuedAutomationScopes=new Set;automationEnabled;automationPumping=!1;automationPolicyGeneration=0;started=!1;disposed=!1;constructor(e){this.runtime=e.runtime,this.ownsStore=!e.store,this.store=e.store??new bv({dbPath:e.dbPath}),this.globalSpecsDir=e.globalSpecsDir,this.watcherDebounceMs=Math.max(0,e.watcherDebounceMs??W7),this.watchFiles=e.watchFiles!==!1,this.automationEnabled=e.automationEnabled!==!1,this.logger=e.logger??B7,this.publishEvent=e.publish??(()=>{})}async start(){if(this.disposed)throw Error("AgendaTaskManager disposed");if(this.started)return;this.started=!0,this.recoverInterruptedRuns(),await this.reconcileSourceForProjection("global",void 0,"startup");for(let e of this.store.listWorkspaceRoots())if(lc(e))await this.reconcileSourceForProjection("workspace",e,"startup");this.expireTasks(),this.maintenanceTimer=setInterval(()=>{this.expireTasks(),this.queueAutomation()},$7),this.maintenanceTimer.unref?.(),this.queueAutomation()}async dispose(){if(this.disposed)return;if(this.disposed=!0,this.maintenanceTimer)clearInterval(this.maintenanceTimer);for(let e of this.scopes.values()){if(e.timer)clearTimeout(e.timer);e.watcher?.close()}this.scopes.clear();for(let e of this.activeRuns.values())if(e.sessionId)await this.runtime.abortSession(e.sessionId,"Hub task manager stopped").catch(()=>{});await Promise.allSettled(this.backgroundRuns);for(let[e,t]of this.activeRuns)this.store.updateRun(t.runId,{status:"interrupted",completedAt:bn(),error:"Hub task manager stopped before the run completed."}),this.store.updateTaskState(e,{status:"failed",currentRunId:null,error:"Hub task manager stopped before the run completed.",updatedBy:Ko});if(this.activeRuns.clear(),this.ownsStore)this.store.close()}async createTask(e){this.assertUsable(),rL(e.expiresAt);let t=Hr(e),n={...e,...t},r=nL(n.taskId)??eL("task_");if(await this.reconcileScope(n.scope,n.workspaceRoot),this.store.getTask(r))throw Error(`task ${r} already exists`);let o=this.ensureScope(n.scope,n.workspaceRoot),s=o.resolveWritePath(r,n.specPath);if(wv(s)||this.store.getTaskBySpecPath(s))throw Error(`task spec already exists: ${s}`);let i=this.store.createTask({...n,taskId:r,specPath:s});try{o.writeSpec({...n,taskId:r},{specPath:s,createOnly:!0})}catch(a){throw this.store.deleteTask(r),a}return this.publish("task.created",i),this.expireTask(i),this.queueAutomation(),this.requireTask(r)}async listTasks(e={}){if(this.assertUsable(),!e.scope||e.scope==="global")await this.reconcileSourceForProjection("global",void 0,"list");if(e.workspaceRoot){if(lc(e.workspaceRoot))await this.reconcileSourceForProjection("workspace",e.workspaceRoot,"list")}else if(e.scope!=="global"){for(let t of this.store.listWorkspaceRoots())if(lc(t))await this.reconcileSourceForProjection("workspace",t,"list")}return this.expireTasks(),this.store.listTasks(e)}async getTask(e){this.assertUsable();let t=this.store.getTask(e.trim());if(t?.scope==="workspace"&&lc(t.workspaceRoot))await this.reconcileSourceForProjection("workspace",t.workspaceRoot,"read");else if(t?.scope==="global")await this.reconcileSourceForProjection("global",void 0,"read");let n=this.store.getTask(e.trim());if(n)this.expireTask(n);return this.store.getTask(e.trim())}async updateTask(e){this.assertUsable();let t=this.requireTask(e.taskId);if(e.updatedBy.id!==Go.id)await this.reconcileSourceForProjection(t.scope,t.workspaceRoot,"update");let n=this.requireTask(e.taskId);if(n.revision!==e.expectedRevision)this.store.updateTask(e);if(n.status==="in_progress")throw Error("an in-progress task cannot be edited");if(n.status==="completed"||n.status==="cancelled"||n.status==="expired")throw Error(`task ${n.taskId} cannot be edited from ${n.status}; create a new task instead`);let r=q7(n,e);rL(r.expiresAt);let o=Hr(r),s={...r,...o},i={...e,scope:s.scope,workspaceRoot:s.workspaceRoot??null,cwd:s.cwd??null,resourcePaths:s.resourcePaths},a=this.ensureScope(s.scope,s.workspaceRoot),d=n.specPath!==void 0&&oL(a.specsDir,n.specPath);if(!d)await this.reconcileFileStore(a);let c=a.resolveWritePath(n.taskId,d?n.specPath:void 0);if(c!==n.specPath&&(wv(c)||this.store.getTaskBySpecPath(c)))throw Error(`task spec already exists: ${c}`);let u;if(d&&n.specPath){let f=a.readSpec(n.specPath);if(!f.ok)throw Error(`task spec is invalid: ${f.error}`);if(e.updatedBy.id!==Go.id&&vv(f.spec,n)!==Tv(n))throw Error(`task spec changed outside the manager; reconcile task ${n.taskId} and retry`);u=f.contentHash}let l,p;try{l=a.writeSpec(s,{specPath:c,expectedContentHash:u,createOnly:!d}),p=this.store.updateTask(i)}catch(f){try{if(l&&d&&n.specPath)a.writeSpec(n,{specPath:n.specPath,expectedContentHash:l.contentHash});else if(l)a.deleteSpec(c,{expectedContentHash:l.contentHash})}catch(h){this.logError("agenda task update rollback failed",h,{taskId:n.taskId,specPath:c})}throw f}if(!p||!l)throw Error(`unknown task: ${e.taskId}`);let m=this.store.updateTaskState(p.taskId,{status:"pending_approval",approvedRevision:null,currentRunId:null,specPath:l.specPath,error:null,completedAt:null,archivedAt:null,updatedBy:e.updatedBy},p.revision);if(n.specPath&&n.specPath!==l.specPath)this.fileStoreForTask(n).deleteSpec(n.specPath);let g=m??this.requireTask(e.taskId);return this.publish("task.updated",g),this.expireTask(g),this.queueAutomation(),this.requireTask(e.taskId)}async approveTask(e,t,n){this.assertUsable();let r=await this.refreshAndVerifyTaskIntent(e);if(this.assertRevision(r,n),this.isExpired(r))throw this.expireTask(r),Error(`task ${e} has expired`);if(r.status==="approved"&&r.approvedRevision===r.revision)return r;if(r.status!=="pending_approval"&&r.status!=="failed")throw Error(`task ${e} cannot be approved from ${r.status}`);let o=this.store.updateTaskState(e,{status:"approved",approvedRevision:r.revision,error:null,updatedBy:t},r.revision);if(!o)throw Error(`unknown task: ${e}`);return this.publish("task.updated",o),this.queueAutomation(),o}async cancelTask(e,t,n,r){this.assertUsable();let o=this.requireTask(e);if(this.assertRevision(o,n),o.status==="cancelled")return o;if(o.status==="completed"||o.status==="expired")throw Error(`task ${e} cannot be cancelled from ${o.status}`);let s=o.currentRunId?this.store.getRun(o.currentRunId):void 0,i=r?.trim()||"Agenda task cancelled";if(s&&!uc.has(s.status))this.store.updateRun(s.runId,{status:"cancelled",completedAt:bn(),error:r?.trim()||void 0});this.activeRuns.delete(e);let a=this.store.updateTaskState(e,{status:"cancelled",approvedRevision:null,currentRunId:null,error:r?.trim()||null,updatedBy:t},o.revision);if(!a)throw Error(`unknown task: ${e}`);if(this.publish("task.updated",a,s),s?.sessionId)try{await this.runtime.abortSession(s.sessionId,i)}catch(d){this.logError("agenda task session abort failed",d,{taskId:e,runId:s.runId,sessionId:s.sessionId})}return a}async runTask(e,t,n,r){this.assertUsable();let o=await this.refreshAndVerifyTaskIntent(e);if(this.assertRevision(o,n),this.isExpired(o))throw this.expireTask(o),Error(`task ${e} has expired`);if(Date.parse(o.availableAt)>Date.now())throw Error(`task ${e} is not available yet`);if(o.status!=="approved"&&o.status!=="failed")throw Error(`task ${e} must be approved before it can run`);if(o.approvedRevision!==o.revision)throw Error(`task ${e} approval is stale`);if(this.activeRuns.has(e)||o.currentRunId)throw Error(`task ${e} already has an active run`);let s=this.store.createRun({taskId:e,taskRevision:o.revision,requestedByClientId:r}),i=this.store.updateTaskState(e,{currentRunId:s.runId,lastRunId:s.runId,error:null,completedAt:null,updatedBy:t},o.revision);if(!i)throw Error(`unknown task: ${e}`);this.activeRuns.set(e,{runId:s.runId}),this.publish("task.updated",i,s);try{let a=await this.runtime.startSession(i,s,r,{unattended:t.kind==="automation_policy"&&this.store.getAutomationPolicy(i.scope==="workspace"&&i.workspaceRoot?i.workspaceRoot:"global").mode==="unattended"}),d=this.store.getRun(s.runId),c=this.store.getTask(e);if(!d||uc.has(d.status)||c?.status!==o.status||c.currentRunId!==s.runId){if(d&&!uc.has(d.status))this.store.updateRun(s.runId,{status:"cancelled",sessionId:a.sessionId,completedAt:bn(),error:"Task changed or was cancelled while its session was starting."});else if(d)this.store.updateRun(s.runId,{sessionId:a.sessionId});throw this.activeRuns.delete(e),await this.runtime.abortSession(a.sessionId,"Agenda task was cancelled while its session was starting").catch((l)=>this.logError("cancelled agenda task session abort failed",l,{taskId:e,runId:s.runId,sessionId:a.sessionId})),Error(`task ${e} changed or was cancelled while starting`)}s=this.store.updateRun(s.runId,{status:"running",sessionId:a.sessionId,startedAt:bn()})??s,i=this.store.updateTaskState(e,{status:"in_progress",lastSessionId:a.sessionId,updatedBy:t})??i,this.activeRuns.set(e,{runId:s.runId,sessionId:a.sessionId}),this.publish("task.run.started",i,s);let u=this.finishRun(i,s,a.sessionId);return this.backgroundRuns.add(u),u.finally(()=>this.backgroundRuns.delete(u)),{task:i,run:s}}catch(a){throw await this.finishRunFailure(i,s,a),a}}async getAutomationPolicy(e="global"){return this.assertUsable(),this.store.getAutomationPolicy(e)}async setAutomationPolicy(e,t){this.assertUsable();let n=bn(),r=this.store.setAutomationPolicy({...e,enabledBy:e.mode==="manual"?void 0:t,enabledAt:e.mode==="manual"?void 0:n});return this.automationPolicyGeneration+=1,this.publishEvent("task.automation.updated",{policy:r}),this.queueAutomation(r.scopeKey),r}notifyAutomationReadinessChanged(){if(!this.disposed)this.queueAutomation()}async finishRun(e,t,n){try{let r=await this.runtime.runSession(n,e,t),o=this.store.getRun(t.runId);if(!o||uc.has(o.status))return;if(r.status==="completed"){let s=bn(),i=this.store.updateRun(t.runId,{status:"completed",completedAt:s,resultSummary:r.summary,error:null})??o,a=this.store.updateTaskState(e.taskId,{status:"completed",currentRunId:null,error:null,completedAt:s,updatedBy:Ko})??this.requireTask(e.taskId);this.publish("task.run.completed",a,i)}else if(r.status==="cancelled")await this.cancelTask(e.taskId,Ko,e.revision,r.error||"Task session was cancelled");else await this.finishRunFailure(e,t,Error(r.error||r.summary||"Task session failed"))}catch(r){await this.finishRunFailure(e,t,r)}finally{this.activeRuns.delete(e.taskId);let r=this.store.getTask(e.taskId);(r?.scope==="workspace"&&r.workspaceRoot?this.reconcileScope("workspace",r.workspaceRoot):this.reconcileScope("global")).catch((s)=>this.logError("post-run agenda task reconciliation failed",s,{taskId:e.taskId})),this.queueAutomation()}}async finishRunFailure(e,t,n){let r=this.store.getRun(t.runId);if(!r||uc.has(r.status))return;let o=n instanceof Error?n.message:String(n),s=this.store.updateRun(t.runId,{status:"failed",completedAt:bn(),error:o})??r,i=this.store.getTask(e.taskId);if(!i||i.status==="cancelled")return;if(i.currentRunId!==t.runId){this.activeRuns.delete(e.taskId),this.publish("task.run.failed",i,s);return}let a=this.store.updateTaskState(e.taskId,{status:"failed",currentRunId:null,error:o,updatedBy:Ko})??i;this.activeRuns.delete(e.taskId),this.publish("task.run.failed",a,s)}ensureScope(e,t){let n=nL(t);if(e==="workspace"&&!n)throw Error("workspaceRoot is required for workspace task scope");if(e==="workspace"&&!lc(n))throw Error("workspaceRoot must be an existing directory");let r=e==="global"?"global":`workspace:${n}`,o=this.scopes.get(r);if(o)return o.store;let s=new yv({scope:e,workspaceRoot:n,taskSpecsDir:e==="global"?this.globalSpecsDir:void 0}),i={store:s},a=!0;try{s.ensureSpecsDir();let d=this.watchFiles?this.resolveWatchRoot(s.specsDir):void 0;if(d!==void 0)i.watcher=H7(d,(c,u)=>{if(!u||!String(u).endsWith(".task.md"))return;if(i.timer)clearTimeout(i.timer);i.timer=setTimeout(()=>{i.timer=void 0,this.reconcileFileStore(s).catch((l)=>this.logError("agenda task watcher reconciliation failed",l,{specsDir:s.specsDir}))},this.watcherDebounceMs)}),i.watcher.on("error",(c)=>this.logError("agenda task watcher failed",c,{specsDir:s.specsDir}))}catch(d){a=!1,this.logError("agenda task source could not be attached",d,{specsDir:s.specsDir})}if(a)this.scopes.set(r,i);return s}async reconcileScope(e,t){let n=this.ensureScope(e,t);await this.reconcileFileStore(n)}async reconcileSourceForProjection(e,t,n){try{await this.reconcileScope(e,t)}catch(r){this.logError(`agenda task source ${n} reconciliation failed`,r,{scope:e,...t?{workspaceRoot:t}:{}})}}async reconcileFileStore(e){if(this.disposed)return;let t=new Set;for(let r of e.listSpecs()){if(t.add(r.specPath),!r.ok){this.logger.log("agenda task spec is invalid",{severity:"warn",specPath:r.specPath,error:r.error});continue}try{let o=r.spec;if(!o.taskId)o=e.writeSpec({...o,taskId:eL("task_")},{specPath:o.specPath,expectedContentHash:o.contentHash});let s=this.store.getTaskBySpecPath(o.specPath);if(s&&o.taskId&&o.taskId!==s.taskId)this.logger.log("agenda task id is immutable for an existing spec",{severity:"warn",taskId:s.taskId,requestedTaskId:o.taskId,specPath:o.specPath}),o=e.writeSpec({...o,taskId:s.taskId},{specPath:o.specPath,expectedContentHash:o.contentHash});let i=o.taskId?this.store.getTask(o.taskId):void 0,a=s??i;if(i?.specPath&&i.specPath!==o.specPath){this.logger.log("agenda task id is already owned by another spec",{severity:"warn",taskId:o.taskId,specPath:o.specPath});continue}if(!a){let d=this.store.createTask($O(o,Go));this.publish("task.created",d),this.expireTask(d);continue}if(a.archivedAt){let d=a.status==="cancelled"&&a.error==="Task spec was deleted.",c=this.store.updateTaskState(a.taskId,{status:d?"pending_approval":a.status,approvedRevision:d?null:a.approvedRevision,archivedAt:null,error:d?null:a.error,updatedBy:Go});if(c)a=c,this.publish("task.updated",c)}if(vv(o,a)===Tv(a))continue;if(a.status==="in_progress"){this.logger.log("agenda task edit deferred until its run completes",{severity:"warn",taskId:a.taskId});continue}if(a.status==="completed"||a.status==="cancelled"||a.status==="expired"){this.logger.log("terminal agenda task edits are not applied",{severity:"warn",taskId:a.taskId,status:a.status}),e.writeSpec(a,{specPath:o.specPath,expectedContentHash:o.contentHash});continue}await this.updateTask(j7(o,a))}catch(o){this.logError("agenda task spec reconciliation failed",o,{specPath:r.spec.specPath})}}let n=this.store.listTasks({scope:e.scope,workspaceRoot:e.workspaceRoot,includeArchived:!0,limit:1000});for(let r of n){if(!r.specPath||!oL(e.specsDir,r.specPath)||t.has(r.specPath)||r.archivedAt)continue;if(r.status==="in_progress")await this.cancelTask(r.taskId,Go,r.revision,"Task spec was deleted.");let o=this.store.updateTaskState(r.taskId,{status:r.status==="completed"||r.status==="expired"?r.status:"cancelled",approvedRevision:null,currentRunId:null,error:r.status==="cancelled"?r.error??null:"Task spec was deleted.",archivedAt:bn(),updatedBy:Go});if(o)this.publish("task.deleted",o)}this.queueAutomation()}expireTasks(){for(let e of this.store.listTasks({limit:1000}))this.expireTask(e)}expireTask(e){if(!this.isExpired(e))return;if(e.currentRunId||e.status==="in_progress"||e.status==="completed"||e.status==="cancelled"||e.status==="expired")return;let t=this.store.updateTaskState(e.taskId,{status:"expired",approvedRevision:null,currentRunId:null,error:"Task expired before it was started.",updatedBy:Ko});if(t)this.publish("task.updated",t)}isExpired(e){return Date.parse(e.expiresAt)<=Date.now()}recoverInterruptedRuns(){let e=bn();for(let t of this.store.listRuns({status:["starting","running"],limit:1000})){this.store.updateRun(t.runId,{status:"interrupted",completedAt:e,error:"Hub restarted while this task was running."});let n=this.store.getTask(t.taskId);if(!n||n.currentRunId!==t.runId)continue;if(n.status==="completed"||n.status==="cancelled"||n.status==="expired"){this.store.updateTaskState(n.taskId,{currentRunId:null});continue}if(t.status==="starting"&&n.approvedRevision===t.taskRevision&&n.revision===t.taskRevision&&!this.isExpired(n)){this.store.updateTaskState(n.taskId,{status:"approved",currentRunId:null,error:"Hub restarted before this task session was linked.",updatedBy:Ko});continue}this.store.updateTaskState(n.taskId,{status:t.status==="starting"?"pending_approval":"failed",approvedRevision:t.status==="starting"?null:n.approvedRevision,currentRunId:null,error:"Hub restarted while this task was running.",updatedBy:Ko})}}queueAutomation(e){if(this.disposed||!this.automationEnabled)return;if(e)this.queuedAutomationScopes.add(e);else for(let t of this.store.listAutomationPolicies())this.queuedAutomationScopes.add(t.scopeKey);if(this.automationPumping)return;queueMicrotask(()=>{this.pumpAutomation().catch((t)=>this.logError("agenda task automation pump failed",t,{}))})}async pumpAutomation(){if(this.disposed||this.automationPumping)return;this.automationPumping=!0;let e=this.automationPolicyGeneration;try{while(this.queuedAutomationScopes.size>0){let t=this.queuedAutomationScopes.values().next().value;if(!t)break;this.queuedAutomationScopes.delete(t);let n=this.store.getAutomationPolicy(t);if(n.mode==="manual")continue;this.expireTasks();let r=this.store.listRuns({limit:1000}).filter((i)=>Date.parse(i.claimedAt)>=Date.now()-3600000).length,o=Math.min(Math.max(0,n.maxConcurrentRuns-this.activeRuns.size),Math.max(0,n.maxStartsPerHour-r));if(o<=0)continue;let s=this.store.listTasks({statuses:["pending_approval","approved"],...t==="global"?{}:{scope:"workspace",workspaceRoot:t},automationEligible:!0,availableBefore:bn(),limit:1000});for(let i of s){if(o<=0)break;if(e!==this.automationPolicyGeneration)return;try{let a=i;if(a.status==="pending_approval"){if(!this.canAutomaticallyApprove(a,n))continue;a=await this.approveTask(a.taskId,tL,a.revision)}if(e!==this.automationPolicyGeneration)return;if(n.mode==="auto_start"&&this.runtime.isInteractiveClientAvailable?.()!==!0)continue;await this.runTask(a.taskId,tL,a.revision),o-=1}catch(a){this.logError("agenda task automation start failed",a,{taskId:i.taskId})}}}}finally{if(this.automationPumping=!1,this.queuedAutomationScopes.size>0)this.queueAutomation()}}canAutomaticallyApprove(e,t){let n=[e.createdBy,e.updatedBy];if(n.some((r)=>r.kind==="system"&&r.id==="file_reconciler"))return!1;if(!t.applyToAgentCreated&&n.some((r)=>r.kind==="agent"))return!1;return this.taskChainDepth(e)<=t.maxChainDepth}taskChainDepth(e){let t=0,n=e,r=new Set([e.taskId]);while(n.originTaskId){if(r.has(n.originTaskId))return Number.POSITIVE_INFINITY;r.add(n.originTaskId);let o=this.store.getTask(n.originTaskId);if(!o)break;t+=1,n=o}return t}fileStoreForTask(e){return this.ensureScope(e.scope,e.workspaceRoot)}async refreshAndVerifyTaskIntent(e){let t=this.requireTask(e);await this.reconcileScope(t.scope,t.workspaceRoot);let n=this.requireTask(e);if(n.archivedAt)throw Error(`task ${e} no longer has an active task spec`);if(!n.specPath)throw Error(`task ${e} has no canonical task spec`);let r;try{r=this.fileStoreForTask(n).readSpec(n.specPath)}catch(o){throw Error(`task ${e} task spec is unavailable: ${o instanceof Error?o.message:String(o)}`)}if(!r.ok)throw Error(`task ${e} task spec is invalid: ${r.error}`);if(r.spec.taskId!==n.taskId||vv(r.spec,n)!==Tv(n))throw Error(`task ${e} task spec does not match revision ${n.revision}`);return n}requireTask(e){let t=e.trim();if(!t)throw Error("taskId is required");let n=this.store.getTask(t);if(!n)throw Error(`unknown task: ${t}`);return n}assertRevision(e,t){if(e.revision!==t)throw Error(`task ${e.taskId} is at revision ${e.revision}; the requested revision is stale`)}publish(e,t,n){this.publishEvent(e,{task:t,...n?{run:n}:{}},n?.sessionId??t.lastSessionId)}resolveWatchRoot(e){try{return D7.native(e)}catch(t){this.logError("agenda task watcher disabled: specs dir could not be resolved",t,{specsDir:e});return}}logError(e,t,n){if(this.logger.error)this.logger.error(e,{...n,error:t});else this.logger.log(e,{...n,error:t,severity:"error"})}assertUsable(){if(this.disposed)throw Error("AgendaTaskManager disposed")}}Ke();import{createSessionId as V7}from"@cline/shared";import{createSessionId as G7}from"@cline/shared";function z7(e){switch(e){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function K7(e){let t=e.metadata&&typeof e.metadata==="object"?JSON.parse(JSON.stringify(e.metadata)):{};if(e.parentSessionId?.trim())t.parentSessionId=e.parentSessionId;if(e.parentAgentId?.trim())t.parentAgentId=e.parentAgentId;if(e.agentId?.trim())t.agentId=e.agentId;if(e.conversationId?.trim())t.conversationId=e.conversationId;if(e.messagesPath?.trim())t.messagesPath=e.messagesPath;if(e.prompt?.trim())t.prompt=e.prompt;if(e.provider?.trim())t.provider=e.provider;if(e.model?.trim())t.model=e.model;if(e.source?.trim())t.source=e.source;if(typeof e.pid==="number")t.pid=e.pid;return Object.keys(t).length>0?t:void 0}function bm(e,t,n,r){return{sessionId:e.sessionId,workspaceRoot:e.workspaceRoot,cwd:e.cwd,createdAt:Date.parse(e.startedAt),updatedAt:Date.parse(e.updatedAt),createdByClientId:t?.createdByClientId??"hub",status:z7(e.status),participants:t?[...t.participants.values()]:[],metadata:K7(e),runtimeOptions:{enableTools:e.enableTools,enableSpawn:e.enableSpawn,enableTeams:e.enableTeams,mode:typeof e.metadata?.mode==="string"?e.metadata.mode:void 0,systemPrompt:typeof e.metadata?.systemPrompt==="string"?e.metadata.systemPrompt:void 0},runtimeSession:e.agentId?{agentId:e.agentId,team:e.teamName?{teamId:e.teamName}:void 0}:void 0,...n?{usage:{...n}}:{},...r?{aggregateUsage:{...r}}:{}}}function L(e,t){return{version:e.version,requestId:e.requestId,ok:!0,...t!==void 0?{payload:t}:{}}}function U(e,t,n){return{version:e.version,requestId:e.requestId,ok:!1,error:{code:t,message:n}}}function Ht(e){return e&&typeof e==="object"&&!Array.isArray(e)?e:void 0}function Ie(e){if(typeof e.payload?.sessionId==="string")return e.payload.sessionId.trim();return e.sessionId?.trim()??""}function Ft(e,t,n){return{version:"v1",event:e,eventId:G7("hevt_"),sessionId:n,timestamp:Date.now(),payload:t}}async function ot(e,t){let n=await e.sessionHost.getSession(t);if(!n)return;let r=await e.sessionHost.getAccumulatedUsage?.(t);return bm(n,e.sessionState.get(t),r?.usage,r?.aggregateUsage)}async function lt(e,t){let n=await e.sessionHost.getSession(t);if(!n)return;let r=await e.sessionHost.getAccumulatedUsage?.(t);return Rr({session:n,usage:r?.usage,aggregateUsage:r?.aggregateUsage})}function kv(e,t,n,r,o={}){let s=e.sessionState.get(t);if(s){if(o.interactive!==void 0)s.interactive=o.interactive;if(r==="creator"&&!s.createdByClientId)s.createdByClientId=n;if(!s.participants.has(n))s.participants.set(n,{clientId:n,attachedAt:Date.now(),role:r});return s}let i={createdByClientId:n,interactive:o.interactive??!0,participants:new Map([[n,{clientId:n,attachedAt:Date.now(),role:r}]])};return e.sessionState.set(t,i),i}function sL(e,t,n,r,o={}){let s=e.sessionState.get(t);if(s){if(o.interactive!==void 0)s.interactive=o.interactive;if(!s.participants.has(n))s.participants.set(n,{clientId:n,attachedAt:Date.now(),role:r});return s}let i={interactive:o.interactive??!0,participants:new Map([[n,{clientId:n,attachedAt:Date.now(),role:r}]])};return e.sessionState.set(t,i),i}async function vm(e,t){let n=V7("approval_"),r=t.sessionId;if(e.sessionState.get(r)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};let s;try{s=await e.sessionHost.getSession(r)}catch{s=void 0}let i=typeof s?.metadata?.agendaTaskId==="string"?s.metadata.agendaTaskId:void 0;return await new Promise((a)=>{let d=e.buildEvent("approval.requested",{approvalId:n,sessionId:t.sessionId,agentId:t.agentId,conversationId:t.conversationId,iteration:t.iteration,toolCallId:t.toolCallId,toolName:t.toolName,inputJson:JSON.stringify(t.input??null),policy:t.policy,agendaTaskId:i},r);e.pendingApprovals.set(n,{sessionId:r,resolve:a,requestedEvent:d}),e.publish(d)})}function iL(e,t){let n=[];for(let r of e.pendingApprovals.values()){if(!r.requestedEvent)continue;if(t&&r.sessionId!==t)continue;n.push(r.requestedEvent)}return n}function Pv(e,t,n){let r=e.pendingApprovals.get(t);if(!r)return;return e.pendingApprovals.delete(t),r.resolve(n),{sessionId:r.sessionId}}function Iv(e,t,n){let r=0;for(let[o,s]of[...e.pendingApprovals.entries()]){if(!t({approvalId:o,sessionId:s.sessionId}))continue;e.pendingApprovals.delete(o),s.resolve({approved:!1,reason:n}),e.publish(e.buildEvent("approval.resolved",{approvalId:o,approved:!1,cancelled:!0,reason:n},s.sessionId)),r+=1}return r}async function aL(e,t){let n=typeof t.payload?.approvalId==="string"?t.payload.approvalId.trim():"";if(!e.pendingApprovals.get(n))return U(t,"approval_not_found",`Unknown approval: ${n}`);let o=typeof t.payload?.reason==="string"?t.payload.reason:t.payload?.payload&&typeof t.payload.payload==="object"&&!Array.isArray(t.payload.payload)&&typeof t.payload.payload.reason==="string"?t.payload.payload.reason:void 0,s=t.payload?.approved===!0,i=Pv(e,n,{approved:s,reason:o});if(!i)return U(t,"approval_not_found",`Unknown approval: ${n}`);return e.publish(e.buildEvent("approval.resolved",{approvalId:n,approved:s,reason:o},i.sessionId)),L(t,{approvalId:n,approved:s})}import{createSessionId as Y7}from"@cline/shared";function J7(e){if(e instanceof Error)return{name:e.name,message:e.message,stack:e.stack};if(e===void 0)return;return e}var dL={debug:10,info:20,warn:30,error:40,silent:50};function X7(){let e=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if(e==="debug"||e==="info"||e==="warn"||e==="error"||e==="silent")return e;return process.env.VITEST?"error":"info"}function z(e,t,n={}){if(dL[e]<dL[X7()])return;let r=JSON.stringify({ts:new Date().toISOString(),level:e,component:"hub",message:t,...Object.fromEntries(Object.entries(n).map(([o,s])=>[o,J7(s)]).filter(([,o])=>o!==void 0))});if(e==="error"||e==="warn"){console.error(`[hub] ${r}`);return}console.log(`[hub] ${r}`)}function Vo(e,t){let n=t instanceof Error?t.stack||t.message:String(t);z("error",e,{error:n})}async function cL(e,t,n,r,o,s){let i=Y7("capreq_"),a=performance.now();return z("info","capability.request.start",{requestId:i,sessionId:t,capabilityName:n,targetClientId:o}),await new Promise((d,c)=>{e.pendingCapabilityRequests.set(i,{sessionId:t,targetClientId:o,capabilityName:n,onProgress:s,resolve:(u)=>{if(z(u.ok?"info":"warn","capability.request.end",{requestId:i,sessionId:t,capabilityName:n,targetClientId:o,ok:u.ok,error:u.error,durationMs:Math.round(performance.now()-a)}),!u.ok){c(Error(u.error||`Capability ${n} was rejected by ${o}.`));return}d(u.payload)}}),e.publish(e.buildEvent("capability.requested",{requestId:i,targetClientId:o,capabilityName:n,payload:r},t)),z("info","capability.request.published",{requestId:i,sessionId:t,capabilityName:n,targetClientId:o})})}function uL(e,t){let n=typeof t.payload?.requestId==="string"?t.payload.requestId.trim():"",r=e.pendingCapabilityRequests.get(n);if(!r)return L(t,{requestId:n,ignored:!0});if((t.clientId?.trim()||"")!==r.targetClientId)return U(t,"capability_wrong_client",`Capability request ${n} is owned by ${r.targetClientId}`);if(t.sessionId?.trim()&&t.sessionId.trim()!==r.sessionId)return U(t,"capability_wrong_session",`Capability request ${n} belongs to session ${r.sessionId}`);let s=t.payload?.payload&&typeof t.payload.payload==="object"&&!Array.isArray(t.payload.payload)?t.payload.payload:{};return r.onProgress?.(s),L(t,{requestId:n})}function Br(e,t,n){let r=0;for(let[o,s]of[...e.pendingCapabilityRequests.entries()]){if(!t({requestId:o,...s}))continue;e.pendingCapabilityRequests.delete(o),z("warn","capability.request.cancelled",{requestId:o,sessionId:s.sessionId,capabilityName:s.capabilityName,targetClientId:s.targetClientId,reason:n}),s.resolve({ok:!1,error:n}),e.publish(e.buildEvent("capability.resolved",{requestId:o,capabilityName:s.capabilityName,targetClientId:s.targetClientId,ok:!1,cancelled:!0,error:n},s.sessionId)),r+=1}return r}async function lL(e,t){let n=typeof t.payload?.sessionId==="string"?t.payload.sessionId.trim():t.sessionId?.trim()||"",r=typeof t.payload?.capabilityName==="string"?t.payload.capabilityName.trim():"",o=typeof t.payload?.targetClientId==="string"?t.payload.targetClientId.trim():"";if(!n||!r||!o)return U(t,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let s=t.payload?.payload&&typeof t.payload.payload==="object"&&!Array.isArray(t.payload.payload)?t.payload.payload:{},i=await e.requestCapability(n,r,s,o);return L(t,i)}catch(s){return U(t,"capability_request_failed",s instanceof Error?s.message:String(s))}}function pL(e,t){let n=typeof t.payload?.requestId==="string"?t.payload.requestId.trim():"",r=e.pendingCapabilityRequests.get(n);if(!r)return L(t,{requestId:n,ignored:!0});let o=t.clientId?.trim()||"";if(o!==r.targetClientId)return U(t,"capability_wrong_client",`Capability request ${n} is owned by ${r.targetClientId}`);if(t.sessionId?.trim()&&t.sessionId.trim()!==r.sessionId)return U(t,"capability_wrong_session",`Capability request ${n} belongs to session ${r.sessionId}`);e.pendingCapabilityRequests.delete(n);let s=t.payload?.payload&&typeof t.payload.payload==="object"&&!Array.isArray(t.payload.payload)?t.payload.payload:void 0,i=typeof t.payload?.error==="string"?t.payload.error:void 0,a=t.payload?.ok===!0;return z(a?"info":"warn","capability.respond",{requestId:n,sessionId:r.sessionId,capabilityName:r.capabilityName,targetClientId:r.targetClientId,respondedByClientId:o,ok:a,error:i}),r.resolve({ok:a,payload:s,error:i}),e.publish(e.buildEvent("capability.resolved",{requestId:n,capabilityName:r.capabilityName,targetClientId:r.targetClientId,respondedByClientId:o,ok:a,payload:s,error:i},r.sessionId)),L(t,{requestId:n,ok:a})}import{createSessionId as Q7}from"@cline/shared";function mL(e,t){let n=t.payload,r=n?.clientId?.trim()||t.clientId?.trim()||Q7("client_");return e.clients.set(r,{clientId:r,clientType:n?.clientType??"unknown",displayName:n?.displayName,actorKind:n?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:n?.transport??"native",capabilities:n?.capabilities??[],metadata:n?.metadata,workspaceContext:n?.workspaceContext}),e.publish(e.buildEvent("hub.client.registered",{clientId:r,clientType:n?.clientType??"unknown",displayName:n?.displayName,metadata:n?.metadata,connectedAt:Date.now()})),L(t,{clientId:r})}function gL(e,t){let n=t.clientId?.trim(),r=n?e.clients.get(n):void 0;if(!n||!r)return U(t,"client_not_found","Client is not registered with this hub.");let o=Ht(t.payload?.metadata);if(r.lastSeenAt=Date.now(),o)r.metadata=JSON.parse(JSON.stringify(o));if(Array.isArray(t.payload?.capabilities))r.capabilities=t.payload.capabilities.flatMap((s)=>{if(!s||typeof s!=="object"||Array.isArray(s))return[];let i=s;if(typeof i.name!=="string"||!i.name.trim())return[];return[{name:i.name.trim(),...typeof i.description==="string"?{description:i.description}:{},...Array.isArray(i.scopes)&&i.scopes.every((a)=>typeof a==="string")?{scopes:i.scopes}:{}}]});return L(t)}function fL(e,t,n){let r=t.clientId?.trim();if(r)e.clients.delete(r),n(r),e.publish(e.buildEvent("hub.client.disconnected",{clientId:r}));return L(t)}function hL(e,t){return L(t,{clients:[...e.clients.values()]})}import{buildConnectorConnectArgs as kZ,CONNECTOR_PLATFORMS as PZ,connectorChannelsFromPlatforms as IZ,listConnectorCatalog as RZ,mergeConnectorConnectArgs as AZ,shouldIncludeConnectorField as EZ}from"@cline/shared";import{withConnectorStore as xv}from"@cline/shared/db";import{existsSync as Z7,readdirSync as eZ,readFileSync as tZ}from"node:fs";import{join as yL}from"node:path";import{listConnectorCatalog as nZ}from"@cline/shared";import{resolveConnectorDataDir as rZ}from"@cline/shared/storage";var SL={startedAt:(e)=>typeof e.startedAt==="string"?e.startedAt:void 0,port:(e)=>typeof e.port==="number"?e.port:void 0,baseUrl:(e)=>typeof e.baseUrl==="string"?e.baseUrl:void 0,connectionMode:(e)=>typeof e.connectionMode==="string"?e.connectionMode:void 0,userName:(e)=>typeof e.userName==="string"?e.userName:void 0,botUsername:(e)=>typeof e.botUsername==="string"?e.botUsername:void 0,applicationId:(e)=>typeof e.applicationId==="string"?e.applicationId:void 0,phoneNumberId:(e)=>typeof e.phoneNumberId==="string"?e.phoneNumberId:void 0},oZ={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function sZ(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function iZ(e,t){let n;try{let d=JSON.parse(tZ(t,"utf8"));if(!d||typeof d!=="object"||Array.isArray(d))return;n=d}catch{return}let r=typeof n.pid==="number"?n.pid:void 0,o=typeof n.hubUrl==="string"?n.hubUrl:typeof n.rpcAddress==="string"?n.rpcAddress:void 0;if(!r||!o||!sZ(r))return;let s=oZ[e];if(!s)return;let i={};for(let d of s.required){let c=SL[d](n);if(!c||typeof c==="string"&&!c.trim())return;i[d]=c}for(let d of s.optional){let c=SL[d](n);if(c!==void 0)i[d]=c}let a=e==="telegram"?i.botUsername:e==="discord"?i.applicationId:e==="whatsapp"&&typeof n.instanceKey==="string"?n.instanceKey:i.userName;if(!a)return;return{id:`${e}:${a}`,type:e,instanceId:a,pid:r,hubUrl:o,...i}}function pc(){let e=[];for(let{name:t}of nZ()){let n=yL(rZ(),t);if(!Z7(n))continue;for(let r of eZ(n)){if(!r.endsWith(".json")||r.endsWith(".threads.json"))continue;let o=iZ(t,yL(n,r));if(o)e.push(o)}}return e.sort((t,n)=>{if(t.type!==n.type)return t.type.localeCompare(n.type);let r=t.botUsername??t.userName??"",o=n.botUsername??n.userName??"";return r.localeCompare(o)})}import{spawn as fZ}from"node:child_process";import{openSync as hZ}from"node:fs";import{CLINE_CONNECTOR_SUPERVISED_ENV as yZ,readConnectorCliLaunchSpec as SZ}from"@cline/shared";import{ensureParentDir as bZ,resolveConnectorLogPath as vZ}from"@cline/shared/storage";import{withConnectorStore as mc}from"@cline/shared/db";var aZ=new Set(["-i","--interactive"]);function dZ(e,t){let n=e.filter((o)=>!aZ.has(o));return n.some((o)=>o==="--cwd"||o.startsWith("--cwd="))?n:[...n,"--cwd",t]}function cZ(e,t,n,r=process.cwd()){try{let o=dZ(n,r);mc((s)=>s.recordConnected(e,t,o))}catch{}}function Rv(e,t){try{mc((n)=>{if(e)n.setEnabled(e,!1,t);else n.disableAll()})}catch{}}function Tm(e,t){try{return mc((n)=>n.getConnection(e,t))}catch{return}}function uZ(e,t){try{mc((n)=>n.deleteConnection(e,t))}catch{}}async function lZ(e){let t=e.log??(()=>{}),n;try{n=mc((o)=>o.listConnections()).filter((o)=>o.enabled).map((o)=>({channel:o.channel,instanceId:o.instanceId,args:o.connectArgs}))}catch(o){return t(`[connect] failed to read persisted connectors: ${o instanceof Error?o.message:String(o)}`),[]}let r=[];for(let o of n){let{channel:s,instanceId:i}=o;if(e.isHealthy?.(o)){t(`[connect] skipping ${s} connector ${i}: already live in this host`);continue}t(`[connect] reconnecting ${s} connector ${i}`);try{let a=await e.start(o);if(r.push({channel:s,instanceId:i,ok:a}),!a)t(`[connect] failed to reconnect ${s} connector ${i}`)}catch(a){let d=a instanceof Error?a.message:String(a);r.push({channel:s,instanceId:i,ok:!1,error:d}),t(`[connect] failed to reconnect ${s} connector ${i}: ${d}`)}}return r}import{CLINE_CONNECTOR_STARTING_INSTANCE_ENV as pZ,CLINE_RUN_AS_HUB_DAEMON_ENV as mZ}from"@cline/shared";var gZ=/^CLINE_(?:CONNECTOR_DETACHED_CHILD|[A-Z0-9]+_CONNECT_CHILD)$/;function gc(e=process.env){let t={...e};delete t[mZ],delete t[pZ];for(let n of Object.keys(t))if(gZ.test(n))delete t[n];return t}var vL=1000,TL=60000,wL=5,CL=60000,Av=5000,kL=5000,PL=2000,TZ=100;function Jo(e,t){return`${e}\x00${t}`}function wZ(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function bL(e){return e===void 0?void 0:new Date(e).toISOString()}class IL{entries=new Map;instanceLocks=new Map;pollTimer;disposed=!1;launchSpec;spawnProcess;isProcessRunning;killProcess;listActive;cleanupInstance;isAutostartEnabled;log;now;setTimer;clearTimer;constructor(e={}){this.launchSpec=e.launchSpec??SZ,this.spawnProcess=e.spawnProcess??fZ,this.isProcessRunning=e.isProcessRunning??wZ,this.killProcess=e.killProcess??((t,n)=>process.kill(t,n)),this.listActive=e.listActive??pc,this.cleanupInstance=e.cleanupInstance,this.isAutostartEnabled=e.isAutostartEnabled??((t,n)=>Tm(t,n)?.enabled===!0),this.log=e.log??((t)=>process.stderr.write(`[hub-daemon] ${t}
1080
1080
  `)),this.now=e.now??(()=>Date.now()),this.setTimer=e.setTimer??((t,n)=>{let r=setTimeout(t,n);return r.unref?.(),r}),this.clearTimer=e.clearTimer??((t)=>clearTimeout(t))}adoptRunningConnectors(){let e=[];for(let t of this.listActive()){let n=Jo(t.type,t.instanceId);if(this.entries.has(n))continue;let r={channel:t.type,instanceId:t.instanceId,args:[],argsKnown:!1,origin:"adopted",state:"running",pid:t.pid,startedAt:t.startedAt?Date.parse(t.startedAt):this.now(),restarts:0};this.entries.set(n,r),e.push(this.toRecord(r)),this.log(`[connect] adopted running ${t.type} connector ${t.instanceId} pid=${t.pid}`)}if(e.length>0)this.ensurePolling();return e}withInstanceLock(e,t){let r=(this.instanceLocks.get(e)??Promise.resolve()).then(t,t),o=r.then(()=>{return},()=>{return});return this.instanceLocks.set(e,o),o.then(()=>{if(this.instanceLocks.get(e)===o)this.instanceLocks.delete(e)}),r}async start(e){return this.withInstanceLock(Jo(e.channel,e.instanceId),()=>this.startLocked(e))}async startLocked(e){let{channel:t,instanceId:n}=e,r=Jo(t,n),o=this.entries.get(r);if(o&&this.isEntryAlive(o)){if(!e.restart)return{started:!1,reason:"already_running",record:this.toRecord(o)};await this.stopLocked({channel:t,instanceId:n,disableAutostart:!1})}else if(o)this.cancelRestart(o),o.state="stopped",o.child?.removeAllListeners("exit");let s={channel:t,instanceId:n,args:[...e.args],argsKnown:!0,origin:"spawned",state:"running",restarts:o?.restarts??0};if(this.entries.set(r,s),this.spawnEntry(s),s.state!=="running")return{started:!1,record:this.toRecord(s)};return{started:!0,record:this.toRecord(s)}}async stop(e){return this.withInstanceLock(Jo(e.channel,e.instanceId),()=>this.stopLocked(e))}async stopLocked(e){let t=Jo(e.channel,e.instanceId),n=this.entries.get(t);if(e.disableAutostart!==!1)Rv(e.channel,e.instanceId);if(!n)return!1;this.cancelRestart(n),n.state="stopped";let r=n.child?.pid??n.pid;if(r&&this.isProcessRunning(r)){if(this.signal(r,"SIGTERM"),!await this.waitForProcessExit(r,kL))this.signal(r,"SIGKILL"),await this.waitForProcessExit(r,PL)}return await this.runCleanup(n),this.entries.delete(t),!0}signal(e,t){try{this.killProcess(e,t)}catch{}}async waitForProcessExit(e,t){let n=this.now()+t;while(this.isProcessRunning(e)){if(this.now()>=n)return!1;await new Promise((r)=>{this.setTimer(r,TZ)})}return!0}list(){return[...this.entries.values()].map((e)=>this.toRecord(e)).sort((e,t)=>e.channel.localeCompare(t.channel)||e.instanceId.localeCompare(t.instanceId))}dispose(){this.disposed=!0;for(let e of this.entries.values())this.cancelRestart(e),e.child?.removeAllListeners("exit");if(this.pollTimer!==void 0)this.clearTimer(this.pollTimer),this.pollTimer=void 0;this.entries.clear(),this.instanceLocks.clear()}spawnEntry(e){let t=this.launchSpec();if(!t){e.state="failed",e.lastError="connector CLI launch information is unavailable",this.log(`[connect] cannot start ${e.channel} connector ${e.instanceId}: ${e.lastError}`);return}let n=vZ(e.channel,e.instanceId),r=["ignore","ignore","ignore"];try{bZ(n);let o=hZ(n,"a");r=["ignore",o,o]}catch{}try{let o=this.spawnProcess(t.launcher,[...t.connectArgsPrefix,e.channel,...e.args],{cwd:t.cwd,env:{...gc(),[yZ]:"1"},detached:!0,stdio:r,windowsHide:!0});e.child=o,e.pid=o.pid??void 0,e.startedAt=this.now(),e.state="running",e.lastError=void 0,o.unref?.(),o.once("error",(s)=>{e.lastError=s instanceof Error?s.message:String(s),this.handleExit(e,void 0,void 0)}),o.once("exit",(s,i)=>{this.handleExit(e,s??void 0,i??void 0)}),this.log(`[connect] started ${e.channel} connector ${e.instanceId} pid=${e.pid}`)}catch(o){e.state="backoff",e.lastError=o instanceof Error?o.message:String(o),this.log(`[connect] failed to spawn ${e.channel} connector ${e.instanceId}: ${e.lastError}`),this.scheduleRestart(e)}}handleExit(e,t,n){if(this.disposed||e.state==="stopped")return;if(e.child=void 0,e.pid=void 0,e.lastExitCode=t,e.lastExitSignal=n,e.startedAt!==void 0&&this.now()-e.startedAt>=CL)e.restarts=0;this.log(`[connect] ${e.channel} connector ${e.instanceId} exited${t===void 0?"":` code=${t}`}${n?` signal=${n}`:""}`),this.runCleanup(e).then(()=>{let o=Jo(e.channel,e.instanceId);if(this.disposed||e.state==="stopped"||this.entries.get(o)!==e)return;if(!this.isAutostartEnabled(e.channel,e.instanceId)){this.log(`[connect] not restarting ${e.channel} connector ${e.instanceId}: autostart is disabled`),this.entries.delete(o);return}this.scheduleRestart(e)})}scheduleRestart(e){if(e.restarts>=wL){e.state="failed",e.nextRestartAt=void 0,this.log(`[connect] giving up on ${e.channel} connector ${e.instanceId} after ${e.restarts} failed restarts${e.lastError?`: ${e.lastError}`:""}`);return}let t=Math.min(vL*2**e.restarts,TL);e.restarts+=1,e.state="backoff",e.nextRestartAt=this.now()+t,this.log(`[connect] restarting ${e.channel} connector ${e.instanceId} in ${t}ms (attempt ${e.restarts})`);let n=Jo(e.channel,e.instanceId);e.restartTimer=this.setTimer(()=>{e.restartTimer=void 0,e.nextRestartAt=void 0,this.withInstanceLock(n,async()=>{if(this.disposed||e.state==="stopped"||this.entries.get(n)!==e)return;let r=this.resolveRestartArgs(e);if(!r){e.state="failed",this.log(`[connect] cannot restart ${e.channel} connector ${e.instanceId}: no stored launch arguments`);return}e.args=r,e.argsKnown=!0,e.origin="spawned",this.spawnEntry(e)})},t)}resolveRestartArgs(e){if(e.argsKnown)return e.args;let t=Tm(e.channel,e.instanceId);return t?.connectArgs?.length?t.connectArgs:void 0}cancelRestart(e){if(e.restartTimer!==void 0)this.clearTimer(e.restartTimer),e.restartTimer=void 0;e.nextRestartAt=void 0}async runCleanup(e){if(!this.cleanupInstance)return;try{await this.cleanupInstance(e.channel,e.instanceId)}catch(t){this.log(`[connect] cleanup failed for ${e.channel} connector ${e.instanceId}: ${t instanceof Error?t.message:String(t)}`)}}isEntryAlive(e){if(e.state==="backoff"||e.state==="failed")return!1;let t=e.child?.pid??e.pid;return t!==void 0&&this.isProcessRunning(t)}ensurePolling(){if(this.pollTimer!==void 0||this.disposed)return;let e=()=>{if(this.pollTimer=void 0,this.disposed)return;for(let t of[...this.entries.values()]){if(t.origin!=="adopted"||t.state!=="running"||t.child)continue;if(t.pid===void 0||!this.isProcessRunning(t.pid))this.handleExit(t,void 0,void 0)}if(this.hasAdoptedRunning())this.pollTimer=this.setTimer(e,Av)};this.pollTimer=this.setTimer(e,Av)}hasAdoptedRunning(){for(let e of this.entries.values())if(e.origin==="adopted"&&e.state==="running")return!0;return!1}toRecord(e){return{channel:e.channel,instanceId:e.instanceId,state:e.state,origin:e.origin,restarts:e.restarts,...e.pid===void 0?{}:{pid:e.pid},...e.startedAt===void 0?{}:{startedAt:bL(e.startedAt)},...e.nextRestartAt===void 0?{}:{nextRestartAt:bL(e.nextRestartAt)},...e.lastExitCode===void 0?{}:{lastExitCode:e.lastExitCode},...e.lastExitSignal===void 0?{}:{lastExitSignal:e.lastExitSignal},...e.lastError===void 0?{}:{lastError:e.lastError}}}}var RL;function CZ(e){RL=e}function Ev(){return RL}ve();function Xo(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function wm(e){return typeof e==="string"?e.trim():void 0}function AL(e){if(!Xo(e))return{};let t={};for(let[n,r]of Object.entries(e))if(typeof r==="string")t[n]=r.trim();return t}function xZ(){return xv((e)=>e.listConfigs()).map((e)=>({id:e.channel,type:e.type,configuredAt:e.configuredAt,updatedAt:e.updatedAt})).sort((e,t)=>e.type.localeCompare(t.type))}function _v(){return{available:IZ(),active:pc(),configured:xZ()}}function _Z(e,t){if(e.required&&!t[e.flag]?.trim())throw Error(`${e.label} is required`)}function MZ(e,t){let n={};for(let o of e.fields)n[o.flag]=t[o.flag]??o.initialValue??"";let r={};for(let o of e.fields){if(!EZ(o,n))continue;_Z(o,n),r[o.flag]=n[o.flag]}return r}function OZ(e){if(!Xo(e))throw Error("connector.configure payload must be an object.");let t=wm(e.channel);if(!t)throw Error("channel is required");let n=PZ.find((l)=>l.id===t);if(!n)throw Error(`unknown connector channel: ${t}`);if(!new Set(RZ().map((l)=>l.name)).has(n.id))throw Error(`connector channel is not available: ${t}`);let o=AL(e.values),s=MZ(n,o),i=Xo(e.security)?e.security:{},a=i.enabled===!0,d=AL(i.values);if(a&&n.security)for(let l of n.security.fields){let p=d[l.key];if(!p)throw Error(l.requiredMessage);let m=l.validate?.(p);if(m)throw Error(m)}let c=a?{enabled:!0,values:d}:{enabled:!1,values:{}},u=kZ(n,s,c);return xv((l)=>l.upsertConfig({channel:t,type:t,values:s,security:c,updateConnectArgs:(p)=>AZ(n,p.connection.connectArgs,u,{replaceSecurityArgs:p.config?.security?.enabled===!0||c.enabled})})),_v()}function LZ(e){if(!Xo(e))throw Error("connector.delete_config payload must be an object.");let t=wm(e.channel);if(!t)throw Error("channel is required");return xv((n)=>n.deleteConfig(t)),_v()}function NZ(e){return Array.isArray(e)?e.filter((t)=>typeof t==="string"):[]}function Mv(){let e=Ev();if(!e)throw Error("connector supervision is unavailable in this hub; start connectors with the CLI instead");return e}function EL(e){if(!Xo(e))throw Error("payload must be an object.");let t=wm(e.channel);if(!t)throw Error("channel is required");let n=wm(e.instanceId);if(!n)throw Error("instanceId is required");return{channel:t,instanceId:n}}async function DZ(e){let{channel:t,instanceId:n}=EL(e),r=Xo(e)?e:{};return await Mv().start({channel:t,instanceId:n,args:NZ(r.args),restart:r.restart===!0})}async function UZ(e){let{channel:t,instanceId:n}=EL(e),r=Xo(e)?e:{};return{stopped:await Mv().stop({channel:t,instanceId:n,disableAutostart:r.disableAutostart!==!1}),channel:t,instanceId:n}}function HZ(e){return e==="connector.configure"||e==="connector.delete_config"||e==="connector.start"||e==="connector.stop"}function fc(e,t,n){if(!HZ(t.command))return;wn(e.telemetry,{ulid:t.sessionId??t.requestId??"hub",tool:t.command,success:n})}async function xL(e,t){try{if(t.command==="connector.channels")return L(t,_v());if(t.command==="connector.configure"){let n=OZ(t.payload);return fc(e,t,!0),L(t,n)}if(t.command==="connector.delete_config"){let n=LZ(t.payload);return fc(e,t,!0),L(t,n)}if(t.command==="connector.start"){let n=await DZ(t.payload);return fc(e,t,!0),L(t,n)}if(t.command==="connector.stop"){let n=await UZ(t.payload);return fc(e,t,!0),L(t,n)}if(t.command==="connector.supervised")return L(t,{supervised:Mv().list()});return U(t,"unsupported_connector_command",`unsupported connector command: ${t.command}`)}catch(n){return fc(e,t,!1),U(t,"connector_command_failed",n instanceof Error?n.message:String(n))}}var FZ=30000;function BZ(e){if(e==="aborted")return"run.aborted";if(e==="error"||e==="failed")return"run.failed";return"run.completed"}function $Z(e){if(e.finishReason!=="error")return;return e.text.trim()||void 0}function WZ(e,t){let n=e.activeRpcTurnCountBySession;n.set(t,(n.get(t)??0)+1);let r=!1;return()=>{if(r)return;r=!0;let o=(n.get(t)??1)-1;if(o<=0)n.delete(t);else n.set(t,o)}}function _L(e,t,n){let r=n instanceof Error&&n.message.trim()?n.message:`Unknown session: ${t}`;return U(e,Va,r)}function jZ(e){return e?e:void 0}function qZ(e){let t=typeof e.timeoutMs==="number"?e.timeoutMs:typeof e.timeout_ms==="number"?e.timeout_ms:void 0;if(t&&Number.isFinite(t)&&t>0)return Math.floor(t);let n=typeof e.timeoutSeconds==="number"?e.timeoutSeconds:typeof e.timeout_seconds==="number"?e.timeout_seconds:void 0;if(n&&Number.isFinite(n)&&n>0)return Math.floor(n*1000);return}async function zZ(e,t,n,r){let o=performance.now(),s=!1,i={command:t.command,requestId:t.requestId,clientId:t.clientId,sessionId:n.sessionId,timeoutMs:r},a=setInterval(()=>{if(s)return;let u=Math.round(performance.now()-o);z("warn","run.heartbeat",{...i,elapsedMs:u}),e.publish(e.buildEvent("run.heartbeat",{requestId:t.requestId,elapsedMs:u,...r?{timeoutMs:r}:{}},n.sessionId))},FZ),d=e.sessionHost.runTurn(n);d.then((u)=>{if(!s)return;z("warn","run.late_end",{...i,elapsedMs:Math.round(performance.now()-o),finishReason:u?.finishReason})},(u)=>{if(!s)return;z("error","run.late_error",{...i,elapsedMs:Math.round(performance.now()-o),error:u})});let c;try{if(!r)return await d;return await Promise.race([d,new Promise((u,l)=>{c=setTimeout(()=>{let p=`Hub run ${t.command} timed out after ${r}ms.`;s=!0,clearInterval(a),l(Error(p)),z("error","run.timeout",{...i,elapsedMs:Math.round(performance.now()-o)}),Iv(e,(m)=>m.sessionId===n.sessionId,p),Br(e,(m)=>m.sessionId===n.sessionId,p),e.sessionHost.abort(n.sessionId,p).catch((m)=>{z("error","run.timeout_abort_failed",{...i,error:m})})},r)})])}finally{if(s=!0,clearInterval(a),c)clearTimeout(c)}}async function hc(e,t){let n=Ie(t),r=t.payload&&typeof t.payload==="object"?t.payload:{},o=typeof r.prompt==="string"?r.prompt:typeof r.input==="string"?r.input:"",s=r.attachments&&typeof r.attachments==="object"&&!Array.isArray(r.attachments)?r.attachments:void 0,i=Array.isArray(s?.userImages)?s.userImages.filter((m)=>typeof m==="string"&&m.trim().length>0):void 0,a=Array.isArray(s?.userFiles)?s.userFiles.filter((m)=>typeof m==="string"&&m.trim().length>0):void 0;if(!o.trim()&&!i?.length&&!a?.length)return U(t,"invalid_session_input","session input requires a prompt or attachment");if(!await e.sessionHost.getSession(n))return _L(t,n);e.publish(e.buildEvent("run.started",{...t.requestId?{requestId:t.requestId}:{},...t.clientId?{clientId:t.clientId}:{}},n));let c=qZ(r);e.suppressNextTerminalEventBySession.set(n,"run.start.reply");let u=WZ(e,n),l;try{try{l=await zZ(e,t,{sessionId:n,prompt:o,mode:jZ(r.mode),delivery:r.delivery==="queue"||r.delivery==="steer"?r.delivery:void 0,userImages:i,userFiles:a,timeoutMs:c},c)}catch(m){if(e.suppressNextTerminalEventBySession.get(n)==="run.start.reply")e.suppressNextTerminalEventBySession.delete(n);if(wr(m))return _L(t,n,m);throw e.publish(e.buildEvent("run.failed",{reason:"error",error:m instanceof Error?m.message:String(m)},n)),m}if(l){let m=await lt(e,n),g=$Z(l);if(e.publish(e.buildEvent(BZ(l.finishReason),{reason:l.finishReason,...g?{error:g}:{},result:l,...m?{snapshot:m}:{}},n)),e.suppressNextTerminalEventBySession.get(n)==="run.start.reply")e.suppressNextTerminalEventBySession.delete(n)}else e.suppressNextTerminalEventBySession.delete(n)}finally{u()}let p=await lt(e,n);return L(t,l||p?{...l?{result:l}:{},...p?{snapshot:p}:{}}:void 0)}async function ML(e,t){let n=Ie(t),r=typeof t.payload?.reason==="string"?t.payload.reason:"Run was aborted before pending approval or capability request was resolved.";Iv(e,(o)=>o.sessionId===n,r);try{await e.sessionHost.abort(n,t.payload?.reason)}catch(o){z("warn","run.abort_failed",{command:t.command,requestId:t.requestId,clientId:t.clientId,sessionId:n,error:o})}finally{Br(e,(o)=>o.sessionId===n,r)}return L(t,{applied:!0})}async function OL(e,t){let n=Ie(t);if(!n)return U(t,"invalid_session_id","run.proceed_while_running requires a sessionId");if(typeof e.sessionHost.proceedWhileRunning!=="function")return U(t,"unsupported_command","This runtime does not support proceeding while commands are running.");let r=typeof t.payload?.toolCallId==="string"&&t.payload.toolCallId.trim().length>0?t.payload.toolCallId.trim():void 0,o=await e.sessionHost.proceedWhileRunning(n,r);return L(t,{detachedCount:o})}async function LL(e,t){let n=Up(t.payload?.payload);if(!n)return U(t,"invalid_hook_payload","session.hook requires a valid hook event payload");return await e.sessionHost.dispatchHookEvent(n),L(t,{applied:!0})}import{join as KZ}from"node:path";import{createSessionId as GZ}from"@cline/shared";import{loadSqliteDb as VZ}from"@cline/shared/db";import{resolveDbDataDir as JZ}from"@cline/shared/storage";var XZ=32,YZ=604800000;class Cm extends Error{retryable=!0;constructor(e,t,n){super(`Session ${e} queue is full (${t} pending runs, limit ${n}); retry later.`);this.name="HubRunAdmissionRejectedError"}}function QZ(e){let t=e?.replace(/[^a-zA-Z0-9_-]/g,"-");return KZ(JZ(),t?`hub-runs-${t}.db`:"hub-runs.db")}class Ov{db;maxPendingPerSession;closed=!1;constructor(e={}){this.db=VZ(e.dbPath??QZ(e.ownerId)),this.maxPendingPerSession=e.maxPendingPerSession??XZ,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
1081
1081
  CREATE TABLE IF NOT EXISTS hub_runs (
1082
1082
  accepted_seq INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -1181,4 +1181,4 @@ ${d}`:""}`);let c=qne(e);if(iD(e))throw Error(`Skill uninstall completed, but ${
1181
1181
  ${n}`]:[],...r?[`stdout:
1182
1182
  ${r}`]:[]];return Error(`Failed to ${e} (exit ${t.exitCode})${o.length>0?`:
1183
1183
  ${o.join(`
1184
- `)}`:""}`)}function Poe(e){return e==="~"?UD():e.startsWith("~/")?ts(UD(),e.slice(2)):e}function Ioe(e){if(!e||typeof e!=="object")return!1;let t=e;return t.version===KD&&Array.isArray(t.profiles)&&t.profiles.every(Roe)}function Roe(e){if(!e||typeof e!=="object")return!1;let t=e;return typeof t.id==="string"&&typeof t.name==="string"&&typeof t.host==="string"&&(t.user===void 0||typeof t.user==="string")&&(t.port===void 0||typeof t.port==="number")&&(t.identityFile===void 0||typeof t.identityFile==="string")&&typeof t.createdAt==="string"&&typeof t.updatedAt==="string"}function jD(e){return e instanceof Error&&"code"in e}function Cc(e){return e instanceof Error?e.message:String(e)}function Aoe(e){return new Promise((t)=>setTimeout(t,e))}import{spawn as Eoe}from"node:child_process";import{userInfo as xoe}from"node:os";import{basename as _oe,delimiter as qm}from"node:path";var MT="__CLINE_SIDECAR_PATH_START__",VD="__CLINE_SIDECAR_PATH_END__",JD=5000,Moe=`/bin/sh -c 'printf "%s%s%s" "${MT}" "$PATH" "${VD}"'`,GD="CLINE_SIDECAR_SKIP_SHELL_PATH";function XD(e){return e==="darwin"?"/bin/zsh":"/bin/bash"}function Ooe(e,t){try{let n=xoe().shell?.trim();if(n)return n}catch{}return t.SHELL?.trim()||XD(e)}function Loe(e,t){let n=_oe(e);if(n==="csh"||n==="tcsh")return{args:["-c",t],argv0:`-${n}`};return{args:["-i","-l","-c",t]}}function Noe(e){let t=e.indexOf(MT);if(t===-1)return;let n=e.indexOf(VD,t);if(n===-1)return;let r=e.slice(t+MT.length,n).trim();return r.length>0?r:void 0}function Doe(e,t){let n=[...e.split(qm),...t.split(qm)].map((r)=>r.trim()).filter((r)=>r.length>0);return Array.from(new Set(n)).join(qm)}function Uoe(e,t=JD){return new Promise((n)=>{let r=Loe(e,Moe),o=Eoe(e,r.args,{argv0:r.argv0,stdio:["ignore","pipe","ignore"],detached:!0}),s="",i=0,a=()=>{try{if(o.pid)process.kill(-o.pid,"SIGKILL")}catch{o.kill("SIGKILL")}},d=!1,c=(l)=>{if(d)return;d=!0,clearTimeout(u),o.stdout?.destroy(),a(),n(l)},u=setTimeout(()=>{try{if(o.pid)process.kill(-o.pid,"SIGKILL")}catch{o.kill("SIGKILL")}c(void 0)},t);o.stdout?.on("data",(l)=>{if(d)return;if(i+=l.length,i>65536){c(void 0);return}s+=l.toString("utf8")}),o.on("error",()=>c(void 0)),o.on("close",()=>c(Noe(s)))})}async function Hoe(e){let t=e?.platform??process.platform,n=e?.env??process.env;if(t==="win32")return{status:"skipped",reason:"windows"};if(n[GD]?.trim())return{status:"skipped",reason:GD};let r=e?.userShell??Ooe(t,n),o=e?.fallbackShell??XD(t),s=e?.timeoutMs??JD,i=r===o?[[r,s]]:[[r,s],[o,s/2]];for(let[a,d]of i){let c=await Uoe(a,d);if(!c)continue;let u=Doe(c,n.PATH??"");return n.PATH=u,{status:"applied",pathEntries:u.split(qm).length,shell:a}}return{status:"failed",shell:r}}import{readFile as Foe}from"node:fs/promises";import Boe from"node:path";function $oe(e){return e}async function Woe(e){let t=Boe.resolve(e),n=await Foe(t,"utf8"),r;try{r=JSON.parse(n)}catch(o){let s=o instanceof Error?o.message:String(o);throw Error(`Failed to parse JSON config at "${t}": ${s}`)}return joe(r,t)}function joe(e,t){if(!e||typeof e!=="object")throw Error(`Invalid llms config in "${t}": expected an object.`);let r=e.providers;if(!Array.isArray(r))throw Error(`Invalid llms config in "${t}": "providers" must be an array.`);if(!r.length)throw Error(`Invalid llms config in "${t}": "providers" cannot be empty.`);return e}import{BUILT_IN_PROVIDER_IDS as ZD,createHandler as Koe,createHandlerAsync as Goe,getProviderCollection as Voe,hasProvider as e0,registerAsyncHandler as Joe,registerHandler as Xoe,registerModel as Yoe,registerProvider as t0}from"@cline/llms";function YD(e){return e?{...e}:{}}function qoe(e,t){if(e)return e;if(!t)return;let n=globalThis.process;if(!n?.env)return;return n.env[t]}function zoe(e,t){if(!t.length)throw Error(`Provider "${e}" must include at least one model.`)}function QD(e){let t=Object.keys(e.collection.models);return{id:e.collection.provider.id,name:e.collection.provider.name,description:e.collection.provider.description,protocol:e.collection.provider.protocol,baseUrl:e.collection.provider.baseUrl,capabilities:e.collection.provider.capabilities,env:e.collection.provider.env,models:t,defaultModel:e.collection.provider.defaultModelId,modelCount:t.length}}class OT{providers=new Map;register(e){zoe(e.id,e.models);let t=e.defaultModel??e.models[0];if(!t)throw Error(`Provider "${e.id}" must define a default model.`);if(!e.models.includes(t))throw Error(`Default model "${t}" is not included in configured models for "${e.id}".`);let n=this.providers.get(e.id);this.providers.set(e.id,{id:e.id,models:new Set([...n?.models??[],...e.models]),defaultModel:t,defaults:{...n?.defaults??{},...YD(e.defaults)}})}registerSelectionConfig(e){this.register({id:e.id,models:e.models,defaultModel:e.defaultModel,defaults:{apiKey:qoe(e.apiKey,e.apiKeyEnv),routingProviderId:e.builtinProviderId,baseUrl:e.baseUrl,headers:e.headers,timeoutMs:e.timeoutMs,capabilities:e.capabilities,...YD(e.settings)}})}registerModel(e,t){let n=this.providers.get(e);if(!n){this.providers.set(e,{id:e,models:new Set([t]),defaultModel:t,defaults:{}});return}n.models.add(t)}createHandlerConfig(e){let t=this.require(e.providerId),n=e.modelId??t.defaultModel;if(!t.models.has(n))throw Error(`Model "${n}" is not configured for provider "${e.providerId}".`);return{providerId:e.providerId,modelId:n,...t.defaults,...e.overrides}}list(){return Array.from(this.providers.values()).map((e)=>({id:e.id,models:Array.from(e.models),defaultModel:e.defaultModel}))}getModels(e){return Array.from(this.require(e).models)}hasProvider(e){return this.providers.has(e)}hasModel(e,t){return this.providers.get(e)?.models.has(t)??!1}require(e){let t=this.providers.get(e);if(!t)throw Error(`Provider "${e}" is not configured in this SDK instance.`);return t}}class LT{configuredProviders=new OT;constructor(e){this.applyConfig(e)}createHandler(e){return Koe(this.configuredProviders.createHandlerConfig(e))}async createHandlerAsync(e){return Goe(this.configuredProviders.createHandlerConfig(e))}registerProvider(e){if(t0(e.collection),e.handlerFactory&&e.asyncHandlerFactory)throw Error(`Provider "${e.collection.provider.id}" cannot register both sync and async handlers.`);if(e.handlerFactory)Xoe(e.collection.provider.id,e.handlerFactory);if(e.asyncHandlerFactory)Joe(e.collection.provider.id,e.asyncHandlerFactory);this.configuredProviders.register({id:e.collection.provider.id,models:e.exposeModels??Object.keys(e.collection.models),defaultModel:e.defaultModel??e.collection.provider.defaultModelId,defaults:e.defaults})}registerBuiltinProvider(e){let t=e.exposeModels??Object.keys(e.models),n=e.defaultModel??t[0];if(!n)throw Error(`Provider "${e.id}" must define a default model.`);t0({provider:{id:e.id,name:e.name??e.id,description:e.description,protocol:e.protocol,baseUrl:e.baseUrl,defaultModelId:n,client:e.client??"openai-compatible",capabilities:e.capabilities,env:e.env,source:"system"},models:e.models}),this.configuredProviders.register({id:e.id,models:t,defaultModel:n,defaults:{routingProviderId:e.builtinProviderId,...e.defaults??{}}})}registerModel(e){Yoe(e.providerId,e.modelId,e.info),this.configuredProviders.registerModel(e.providerId,e.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...ZD]}async getBuiltInProviders(){return(await Promise.all(ZD.map((t)=>Voe(t)))).filter((t)=>t!==void 0).map((t)=>QD({collection:t}))}getModels(e){return this.configuredProviders.getModels(e)}isProviderConfigured(e){return this.configuredProviders.hasProvider(e)}isModelConfigured(e,t){return this.configuredProviders.hasModel(e,t)}applyConfig(e){for(let t of e.providers)this.configuredProviders.registerSelectionConfig(t);for(let t of e.models??[])this.registerModel(t);for(let t of e.customProviders??[])this.registerProvider(t);for(let t of this.configuredProviders.list()){let n=e0(t.id),r=this.configuredProviders.createHandlerConfig({providerId:t.id,modelId:t.defaultModel}).routingProviderId,o=typeof r==="string"&&e0(r);if(!n&&!o)throw Error(`Provider "${t.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function Qoe(e){return new LT(e)}Qb();Ke();async function Z_e(){return Promise.resolve().then(() => (xm(),FN))}export{Av as ADOPTED_POLL_INTERVAL_MS,ms as AGENT_PLUGINS_V1_MANIFEST_SCHEMA,Gi as AGENT_PLUGINS_V1_MCP_SCHEMA,Cs as ALL_DEFAULT_TOOL_NAMES,Cv as AgendaTaskManager,Sm as AgendaTaskRevisionConflictError,yv as AgendaTaskSpecFileStore,yLe as Agent,nS as AgentTeam,Id as AgentTeamsRuntime,xw as AuthSettingsSchema,Mw as AwsSettingsSchema,Lw as AzureSettingsSchema,Ng as BUILT_IN_PROVIDER,ZU as BUILT_IN_PROVIDER_IDS,Kv as BrowserWebSocketHubAdapter,nu as CLINE_PLUGIN_BOOTSTRAP_PATH_ENV,zre as CORE_BUILD_VERSION,K as CORE_TELEMETRY_EVENTS,ED as ChatMessageImageSchema,AD as ChatMessageRoleSchema,xD as ChatMessageSchema,ID as ChatSessionConfigSchema,RD as ChatSessionStatusSchema,_D as ChatSummarySchema,qre as ChatViewStateSchema,Kp as ClaudeCodeImportAdapter,zm as ClineAccountService,Wb as ClineCore,oMe as ClineFreeModelLimitError,sMe as ClineNotSubscribedError,iMe as ClineOrgIndividualInferenceSubscriptionError,aMe as ClinePassLimitError,bt as CloudHandoffGitPreflightError,Nte as CloudHandoffTranscriptMismatchError,Kd as CodexImportAdapter,co as CommandExitError,ma as CommandSpawnError,uo as CommandTerminationError,IL as ConnectorSupervisor,PMe as ContributionRegistry,Lr as CoreSessionService,Ks as CoreSettingsService,UV as DEFAULT_HUB_HOST,FV as DEFAULT_HUB_PATHNAME,HV as DEFAULT_HUB_PORT,Mh as DEFAULT_MCP_CONNECT_TIMEOUT_MS,ww as DEFAULT_MODELS_CATALOG_URL,LT as DefaultLlmsSdk,tm as DefaultRuntimeBuilder,Me as DefaultToolNames,jS as FALLBACK_CLINE_RECOMMENDED_MODELS,MMe as FEATURE_FLAGS,OMe as FeatureFlag,LMe as FeatureFlagDefaultValue,Uo as FeatureFlagsService,PD as FileTeamPersistenceStore,Ow as GcpSettingsSchema,Kc as GlobalSettingsSchema,O_ as HOOKS_CONFIG_DIRECTORY_NAME,eb as HOOK_CONFIG_FILE_EVENT_MAP,GAe as HUB_LOCK_HELD_EXIT_CODE,Np as HookConfigFileName,U_ as HookEventNameSchema,H_ as HookEventPayloadSchema,$l as HubCommandError,Fv as HubEventLogStore,xi as HubInstanceLock,TN as HubLockHeldError,Cm as HubRunAdmissionRejectedError,Ov as HubRunQueue,_o as HubRuntimeHost,im as HubScheduleCommandService,dm as HubScheduleService,Am as HubServerTransport,W7 as HubSessionClient,Xe as HubTransportError,j7 as HubUIClient,e4 as IMPORT_MISSING_TOOL_RESULT_TEXT,Ka as InMemoryMcpManager,jp as InMemoryWorkspaceManager,tMe as Llms,Ur as LocalRuntimeHost,En as MAX_COMMAND_OUTPUT_CHARS,ho as McpOAuthClientChangedError,Ba as McpSettingsLockTimeoutError,Ha as McpSettingsMutatorPurityError,kh as McpSettingsUpdateSkippedError,Uw as ModelCatalogSettingsSchema,Gv as NativeHubTransportAdapter,ec as NoOpFeatureFlagsProvider,Hn as NodeHubClient,Do as OAuthReauthRequiredError,Og as OPENAI_COMPATIBLE_PROVIDERS,Dw as OcaSettingsSchema,ic as OpenTelemetryProvider,Vp as OpencodeImportAdapter,ne as PATCH_MARKERS,fa as PatchActionType,ea as PluginCallTimeoutError,ou as PluginRegistry,Ew as ProviderClientSchema,Dg as ProviderIdSchema,Aw as ProviderProtocolSchema,yt as ProviderSettingsManager,us as ProviderSettingsSchema,$N as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,vL as RESTART_BASE_DELAY_MS,CL as RESTART_COUNTER_RESET_MS,wL as RESTART_GIVE_UP_AFTER,TL as RESTART_MAX_DELAY_MS,$C as RULES_CONFIG_DIRECTORY_NAME,_w as ReasoningSettingsSchema,aoe as RemoteEnvironmentService,zl as RemoteRuntimeHost,Km as RpcClineAccountService,di as RuntimeOAuthTokenManager,y7 as SCHEDULED_TASKS_SYSTEM_PROMPT_RULE,$Me as SDK_ERROR_TELEMETRY_EVENT,UQ as SESSION_IMPORT_TOOLS,HQ as SESSION_IMPORT_TOOL_LABELS,Va as SESSION_NOT_FOUND_ERROR_CODE,Ug as SESSION_STATUSES,If as SKILLS_CONFIG_DIRECTORY_NAME,PL as STOP_SIGKILL_TIMEOUT_MS,kL as STOP_SIGTERM_TIMEOUT_MS,Nw as SapSettingsSchema,Ri as ScheduledTaskInputSchema,cv as SessionHistorySearchService,lM as SessionImportService,vo as SessionNotFoundError,ie as SessionSource,Lt as SessionVersioningError,yi as SessionVersioningService,bv as SqliteAgendaTaskStore,_r as SqliteSessionStore,Xd as SqliteTeamStore,Dx as StoredProviderModesSchema,Ux as StoredProviderSettingsEntrySchema,hp as StoredProviderSettingsSchema,ua as StructuredCommandInputSchema,Yc as SubprocessSandbox,vO as TASKS_SYSTEM_PROMPT_RULE,ac as TASKS_TOOL_NAME,Yu as TEAM_TOOL_NAMES,wO as TasksToolInputSchema,cm as TelemetryLoggerSink,sc as TelemetryService,mm as TodoTaskInputSchema,sn as ToolPresets,Vi as UnifiedConfigFileWatcher,Rf as WORKFLOWS_CONFIG_DIRECTORY_NAME,Qc as WorkerSandbox,Hge as __test__,Ye as accumulateUsageTotals,p6 as addLocalProvider,$O as agendaTaskSpecToCreateInput,Rp as applyClineFeaturedModels,So as augmentMcpTimeoutError,ZI as authorizeMcpServerOAuth,Qu as bootstrapAgentTeams,GM as buildCheckpointWorkspaceDiff,rMe as buildClineClientHeaders,yxe as buildCloudHandoffDashboardUrl,Qy as buildConfiguredAgentToolDescriptors,Yy as buildConfiguredAgentToolName,lq as buildConnectionUpdate,gc as buildConnectorChildEnv,_a as buildDelegatedAgentConfig,JN as buildMcpInstallTransport,BN as buildRemoteConfigSessionBlobUploadMetadata,kMe as buildSdkErrorProperties,np as buildTeamProgressSummary,Vh as buildWorkspaceMetadata,qr as captureAgentCreated,sg as captureAgentTeamCreated,u0 as captureAgentUnexpectedReasoningTokens,Tn as captureAuthFailed,jr as captureAuthLoggedOut,tr as captureAuthRefreshSoftFailure,Zn as captureAuthStarted,er as captureAuthSucceeded,ag as captureCompactionExecuted,dg as captureCompactionSkipped,Ui as captureConversationTurnEvent,eg as captureDiffEditFailure,w0 as captureExtensionActivated,b0 as captureGitSnapshot,ig as captureHookDiscovery,rg as captureMentionFailed,og as captureMentionSearchResults,ng as captureMentionUsed,tg as captureMistakeLimitReached,Qm as captureModeSwitch,I0 as captureProviderApiError,k0 as captureProviderConfigured,IMe as captureSdkError,Zm as captureSkillUsed,Ac as captureSubagentExecution,Rc as captureTaskCompleted,Jm as captureTaskCreated,Xm as captureTaskRestarted,Ym as captureTokenUsage,wn as captureToolUsage,Vm as captureWorkspaceInitError,Gm as captureWorkspaceInitialized,C0 as captureWorkspacePathResolved,H7 as checkManagedHubBuildMismatch,Fte as cleanupConnectorInstanceViaCli,P0 as clearAccountTelemetryIdentity,hxe as clearCloudHandoffMetadata,Nn as clearHubDiscovery,EA as clearHubDiscoveryIfOwned,JU as clearLiveModelsCatalogCache,XU as clearPrivateModelsCatalogCache,mxe as cloudHandoffFingerprintsEqual,bxe as cloudHandoffTranscriptsEqual,kD as collectPluginMcpOAuthCandidates,nl as combineUserInstructionConfigServices,Fb as compareCheckpointToWorkspace,pd as compareHubBuilds,j0 as completeClineDeviceAuth,Lu as computePatchChanges,PO as connectToHub,ni as countUserRunMessages,Lp as createAgentHooksExtension,SLe as createAgentRuntime,Oa as createAgentTeamsTools,Sa as createApplyPatchExecutor,Na as createBuiltinTools,KM as createCheckpointComparePlan,zd as createClientScopedTelemetryService,RMe as createClineTelemetryServiceConfig,AMe as createClineTelemetryServiceMetadata,Ote as createCloudHandoffFingerprint,IS as createCompactionStateAwarePrepareTurn,ep as createConfiguredAgentTools,T6 as createConfiguredStreamingTranscriptionSession,lm as createConfiguredTelemetryHandle,jo as createConfiguredTelemetryService,pp as createContextCompactionPrepareTurn,EMe as createContributionRegistry,Rr as createCoreSessionSnapshot,Ga as createCoreSettingsService,qu as createDefaultExecutors,Bs as createDefaultMcpServerClientFactory,Yf as createDefaultShellExecutor,xs as createDefaultTools,mP as createDefaultToolsWithPreset,Ds as createDelegatedAgent,Ns as createDelegatedAgentConfigProvider,fR as createDisabledMcpToolPolicies,Lh as createDisabledMcpToolPolicy,ba as createEditorExecutor,Dre as createForkSessionMetadata,Fp as createHookAuditHooks,Bp as createHookConfigFileExtension,ub as createHookConfigFileHooks,AA as createHubAuthToken,Un as createHubServerUrl,bge as createInMemoryHubOwnerContext,rt as createInitialAccumulatedUsage,Qoe as createLlmsSdk,CPe as createLocalHubScheduleRuntimeHandlers,yl as createMcpTools,Pc as createOAuthClientCallbacks,um as createOpenTelemetryTelemetryService,Xne as createPluginCommandService,nH as createProviderConfig,Tte as createRemoteConfigSessionMessagesArtifactUploader,wb as createRestoredCheckpointMetadata,Uf as createRulesConfigDefinition,om as createRuntimeHost,gi as createScopedTelemetryService,jl as createSessionCompactionState,om as createSessionHost,ga as createShellExecutor,Kf as createShellTool,Df as createSkillsConfigDefinition,Us as createSpawnAgentTool,F_ as createSubprocessHooks,rv as createTasksPromptExtension,nv as createTasksTool,OM as createTeamName,xMe as createTool,pP as createToolPoliciesWithPreset,fo as createUserInstructionConfigService,Hf as createWorkflowsConfigDefinition,$oe as defineLlmsConfig,f6 as deleteLocalProvider,cy as deriveSubsessionStatus,Rv as disableConnectorAutostart,nne as disablePluginMcpServersInSettings,ra as discoverPluginModulePaths,ii as emptyStoredProviderSettings,_Me as emptyWorkspaceManifest,Bu as enrichPromptWithMentions,KO as ensureAgendaTaskSchema,Ta as ensureChatWorkspace,yd as ensureCompatibleLocalHubUrl,Xx as ensureCustomProvidersLoaded,OS as ensureCustomProvidersLoadedSync,fd as ensureDetachedHubServer,AEe as ensureHubServer,DN as ensureHubWebSocketServer,Hoe as ensureLoginShellPath,UT as executeClineAccountAction,Xb as executeScheduleOperation,bO as executeTodoTaskOperation,dMe as extractClineFreeModelLimitResetTime,cMe as extractClinePassLimitMessage,u_ as fetchClineRecommendedModels,Vc as filterDisabledPluginPaths,ir as filterDisabledTools,nf as filterExtensionToolRegistrations,Yp as findCheckpointForRun,bT as findInstalledGlobalMarketplaceSkillName,NMe as formatDisplayUserInput,PU as formatProviderOAuthApiKey,Ff as formatRulesForSystemPrompt,su as formatSessionPluginIssue,Pl as generateWorkspaceInfo,Gh as generateWorkspaceInfoWithDiagnostics,Ev as getActiveConnectorSupervisor,qS as getCachedClineRecommendedModels,CMe as getClineDefaultSystemPrompt,uMe as getClineNotSubscribedMessage,lMe as getClineOrgIndividualInferenceSubscriptionMessage,pMe as getClinePassSubscriptionUrl,SI as getCoreAcpToolNames,Hs as getCoreBuiltinToolCatalog,hI as getCoreDefaultEnabledToolIds,fh as getCoreHeadlessToolNames,t5 as getCurrentContextSize,lo as getFileIndex,ST as getGlobalMarketplaceSkillPaths,sr as getLiveModelsCatalog,S6 as getLocalProviderModels,Op as getLocalTranscriptionModels,Po as getManagedHubCompatibility,yT as getMarketplaceSkillCandidates,al as getMcpServerOAuthState,Wa as getMcpServerOAuthStatus,Tm as getPersistedConnectorConnection,Kr as getPersistedProviderApiKey,LC as getPluginDisplayName,on as getProcessPluginRegistry,x$ as getProcessStartToken,_$ as getProcessStartTokenAsync,He as getProviderAuthHandler,CU as getProviderAuthStorageId,Rw as getProviderConfig,KS as getProviderConfigFields,Oc as getProviderOAuthCredentialsFromSettings,Mr as getUserRunSpan,hg as getValidClineCredentials,Pg as getValidOcaCredentials,bg as getValidOpenAICodexCredentials,Qge as hasActiveHubSessions,Fs as hasMcpSettingsFile,it as hashSecret,Ey as hubHasLiveSessions,nr as identifyAccount,zte as installMcpServer,Nre as installPlugin,wF as isAgentPluginDisabledGlobally,dF as isAutoUpdateEnabledGlobally,eH as isBuiltInProviderId,DT as isClineAccountActionRequest,kp as isClineAccountFeatureEnabled,mMe as isClineFreeModelLimitError,gMe as isClineFreeModelLimitMessage,fMe as isClineModelNotFoundMessage,hMe as isClineNotSubscribedError,yMe as isClineNotSubscribedMessage,SMe as isClineOrgIndividualInferenceSubscriptionError,bMe as isClineOrgIndividualInferenceSubscriptionMessage,vMe as isClinePassLimitError,TMe as isClinePassLimitMessage,La as isCoreBuiltinToolAvailable,Fd as isDedicatedTranscriptionModel,vge as isDiscoveryFilePresent,XA as isHubCommandTimeoutError,wN as isHubLockHeldError,BJ as isHubReconnectableTransportError,l_ as isLocalAuthProvider,NN as isLocalHubHostName,pte as isLocalHubOrigin,Vs as isManagedHubReusable,iD as isMarketplaceSkillInstalled,Ji as isModelToolEnabledGlobally,or as isOAuthProvider,bD as isOfficialPluginSlug,TF as isPluginDisabledGlobally,Bc as isPrivateModelCatalogProvider,VS as isProviderSettingsUsable,zC as isRuleEnabled,wr as isSessionNotFoundError,fI as isSkillsToolAvailable,Yg as isTelemetryOptedOutGlobally,vF as isToolDisabledGlobally,aK as isUnusableSessionError,HX as isUserRunMessage,pc as listActiveConnectors,li as listHookConfigFiles,y6 as listLocalProviders,VI as listMcpServerOAuthStatuses,X1 as listPluginTools,bl as listPluginToolsWithDiagnostics,pV as listSessionHistoryFromBackend,qb as loadAgentPluginFromPath,Yr as loadAgentPluginPackages,XM as loadAgentPluginsFromPaths,zb as loadAgentPluginsFromPathsWithDiagnostics,Ql as loadConfiguredAgentConfigs,Woe as loadLlmsConfigFromFile,sl as loadMcpSettingsFile,Z_e as loadOpenTelemetryAdapter,da as loadRulesForSystemPromptFromRecords,QA as localHubHasNoActiveSessions,E6 as loginAndSaveLocalProviderOAuthCredentials,Rg as loginAndSaveProviderOAuthCredentials,fg as loginClineOAuth,R6 as loginLocalProvider,kg as loginOcaOAuth,Sg as loginOpenAICodex,xl as makeSubSessionId,dy as makeTeamTaskSubSessionId,h6 as markLocalProviderEnabled,jne as marketplaceEntryKey,qd as mergeAgentHooks,fxe as mergeCloudHandoffMetadata,mu as mergeRulesForSystemPrompt,DS as migrateLegacyProviderSettings,DMe as noopBasicLogger,Hr as normalizeAgendaTaskLocation,zN as normalizeGitHubRemoteUrl,Zs as normalizeHubWebSocketUrl,I6 as normalizeOAuthProvider,Nm as normalizePluginCommandName,$c as normalizeProviderId,at as normalizeRuntimeCapabilities,UMe as normalizeSdkError,HMe as normalizeUserInput,Cr as normalizeWorkspacePath,mv as parseAgendaTaskSpec,Vr as parseAgentSkillMarkdown,Jy as parseConfiguredAgentConfig,Up as parseHookEventPayload,VN as parseMcpHeaders,eT as parseMcpInstallArgs,Ah as parseMcpServerRegistration,vD as parsePluginSource,_f as parseRuleConfigFromMarkdown,Fn as parseSessionCompactionState,Hw as parseSettings,xf as parseSkillConfigFromMarkdown,FMe as parseUserCommandEnvelope,Mf as parseWorkflowConfigFromMarkdown,zS as peekClineRecommendedModels,FT as persistClineAccountTelemetryIdentity,cZ as persistConnectorConnection,lxe as preflightCloudHandoffGit,wte as prepareRemoteConfigCoreIntegration,jA as prewarmDetachedHubServer,aP as prewarmFileIndex,nPe as probeHubConnection,Dn as probeHubServer,dR as probeMcpServerConnection,Sk as probeProcessStartToken,Rs as probeProcessStartTokenAsync,ei as projectSessionCompactionState,$b as projectSessionMessagesForDisplay,Qs as queryHubSessionActivity,Jv as readBearerToken,gxe as readCloudHandoffMetadata,pF as readCompactionModeGlobally,uF as readCompactionStrategyGlobally,ce as readGlobalSettings,$e as readHubDiscovery,Xp as readImportedFromMetadata,bp as readModelsFileSync,gF as readPlanActModeGlobally,bte as readRemoteConfigSessionBlobUploadMetadata,Gd as readSessionCheckpointHistory,mJ as readSupersededHubDiscovery,hF as readToolAutoApproveGlobally,yF as readTuiThemeGlobally,lZ as reconnectPersistedConnectors,ow as refreshClineToken,gw as refreshOcaToken,iw as refreshOpenAICodexToken,k6 as refreshProviderModelsFromSource,BMe as registerDisposable,cl as registerMcpServersFromSettingsFile,WN as registerRemoteConfigSessionBlobUpload,Ys as rememberRecoverableLocalHubUrl,coe as remoteHelperBinaryFilename,uZ as removePersistedConnectorConnection,sT as removePluginMcpServersFromSettings,Ete as requestDesktopToolApproval,Ao as requestHubDrain,hd as requestHubShutdown,O8 as resetClineRecommendedModelsCacheForTests,ro as resolveAgentPluginPaths,sa as resolveAgentPluginPathsWithDiagnostics,vs as resolveAndLoadAgentPlugins,$p as resolveClientTelemetryProperties,HT as resolveClineAccountTelemetryIdentity,ld as resolveClineDataDir,yge as resolveClineDir,Hy as resolveCompatibleLocalHubUrl,D6 as resolveComposioConnectionStatePath,Td as resolveCoreDeviceId,_t as resolveCoreDistinctId,yI as resolveCoreSelectedToolIds,BV as resolveDefaultHubHost,$V as resolveDefaultHubPathname,Hl as resolveDefaultHubPort,ye as resolveDefaultMcpSettingsPath,Qr as resolveDisabledAgentPluginNames,Gc as resolveDisabledPluginPaths,Pn as resolveDisabledToolNames,ZS as resolveHooksConfigSearchPaths,ky as resolveHubBuildEpochMs,dn as resolveHubBuildId,md as resolveHubBuildIdentity,Ro as resolveHubEndpointOptions,Iee as resolveHubEventLogPath,CN as resolveHubInstanceLockPath,Io as resolveHubOwnerContext,QZ as resolveHubRunQueuePath,A7 as resolveHubUrl,QS as resolveLocalClineAuthToken,hT as resolveMarketplaceMcpServerName,yo as resolveMcpServerRegistration,Mn as resolveMcpServerRegistrations,UX as resolveMessageDisplayRole,rC as resolveModelToolSettings,hn as resolveModelsRegistryPath,na as resolvePluginConfigSearchPaths,dr as resolvePluginSkillDirectoriesFromPaths,cn as resolveProductionHubOwnerContext,kU as resolveProviderApiKeyFromSettings,Lg as resolveProviderConfig,Lf as resolveRulesConfigSearchPaths,u3 as resolveSessionBackend,Gt as resolveSharedHubOwnerContext,Of as resolveSkillsConfigSearchPaths,Zu as resolveToolClientType,Nf as resolveWorkflowsConfigSearchPaths,Rge as resolveWorkspaceHubOwnerContext,ZA as restartLocalHubIfIdleAfterStartupTimeout,Xs as retireDiscoveredHub,uI as reviveTeamStateDates,pi as runHook,poe as runRemoteProcess,Ho as runSubprocessEvent,rH as safeCreateProviderConfig,Fw as safeParseSettings,vb as sanitizeImportedMessages,sd as sanitizeSessionToken,A6 as saveLocalProviderOAuthCredentials,w6 as saveLocalProviderSettings,Bi as saveProviderOAuthCredentials,b6 as saveVoiceInputSettings,me as sdkDebug,rPe as sendHubCommand,BO as serializeAgendaTaskSpec,CZ as setActiveConnectorSupervisor,cF as setAutoUpdateEnabledGlobally,mF as setCompactionModeGlobally,lF as setCompactionStrategyGlobally,tf as setDisabledAgentPlugin,ef as setDisabledPlugin,sC as setDisabledTools,Fge as setHubDaemonLauncher,il as setMcpServerDisabled,oC as setModelToolEnabledGlobally,fF as setPlanActModeGlobally,d0 as setSdkLogger,aF as setTelemetryOptOutGlobally,bF as setToolAutoApproveGlobally,SF as setTuiThemeGlobally,SJ as spawnDetachedHubServer,bJ as spawnDetachedHubServerWithRetry,Bh as splitCoreSessionConfig,W0 as startClineDeviceAuth,REe as startHubServer,Yv as startHubWebSocketServer,Cn as startLocalOAuthServer,zJ as stopLocalHubServerGracefully,WMe as stripUtf8Bom,YA as summarizeHubSessionActivity,gp as summarizeUsageFromMessages,oT as syncPluginMcpServersToSettings,L5 as syncStoredProviderRegistration,$h as toClineCoreStartInput,tb as toHookConfigFileName,_A as toHubHealthUrl,xV as toHubStatusUrl,jt as toProviderConfig,rp as toTeamProgressLifecycleEvent,Zg as toggleDisabledTool,v6 as transcribeConfiguredVoiceInput,C_ as transcribeLocalAudio,Cb as trimMessagesBeforeUserRun,la as truncateCommandOutput,iv as truncateNotificationBody,zne as uninstallMarketplaceEntry,sD as uninstallMarketplaceMcpServerFromSettings,dD as uninstallMarketplacePlugin,aD as uninstallMarketplaceSkill,Gte as uninstallMcpServer,mT as uninstallPlugin,g6 as updateLocalProvider,GI as updateMcpServerOAuthState,dl as updateMcpServerOAuthStateAsync,Ih as updateMcpSettingsFile,_n as updateMcpSettingsFileSync,Bge as upgradeManagedHub,xt as verifyHubConnection,uPe as watchManagedHubBuildMismatch,Ul as withHubStartupLock,Ve as writeGlobalSettings,Dl as writeHubDiscovery,MS as writeModelsFileSync};
1184
+ `)}`:""}`)}function Poe(e){return e==="~"?UD():e.startsWith("~/")?ts(UD(),e.slice(2)):e}function Ioe(e){if(!e||typeof e!=="object")return!1;let t=e;return t.version===KD&&Array.isArray(t.profiles)&&t.profiles.every(Roe)}function Roe(e){if(!e||typeof e!=="object")return!1;let t=e;return typeof t.id==="string"&&typeof t.name==="string"&&typeof t.host==="string"&&(t.user===void 0||typeof t.user==="string")&&(t.port===void 0||typeof t.port==="number")&&(t.identityFile===void 0||typeof t.identityFile==="string")&&typeof t.createdAt==="string"&&typeof t.updatedAt==="string"}function jD(e){return e instanceof Error&&"code"in e}function Cc(e){return e instanceof Error?e.message:String(e)}function Aoe(e){return new Promise((t)=>setTimeout(t,e))}import{spawn as Eoe}from"node:child_process";import{userInfo as xoe}from"node:os";import{basename as _oe,delimiter as qm}from"node:path";var MT="__CLINE_SIDECAR_PATH_START__",VD="__CLINE_SIDECAR_PATH_END__",JD=5000,Moe=`/bin/sh -c 'printf "%s%s%s" "${MT}" "$PATH" "${VD}"'`,GD="CLINE_SIDECAR_SKIP_SHELL_PATH";function XD(e){return e==="darwin"?"/bin/zsh":"/bin/bash"}function Ooe(e,t){try{let n=xoe().shell?.trim();if(n)return n}catch{}return t.SHELL?.trim()||XD(e)}function Loe(e,t){let n=_oe(e);if(n==="csh"||n==="tcsh")return{args:["-c",t],argv0:`-${n}`};return{args:["-i","-l","-c",t]}}function Noe(e){let t=e.indexOf(MT);if(t===-1)return;let n=e.indexOf(VD,t);if(n===-1)return;let r=e.slice(t+MT.length,n).trim();return r.length>0?r:void 0}function Doe(e,t){let n=[...e.split(qm),...t.split(qm)].map((r)=>r.trim()).filter((r)=>r.length>0);return Array.from(new Set(n)).join(qm)}function Uoe(e,t=JD){return new Promise((n)=>{let r=Loe(e,Moe),o=Eoe(e,r.args,{argv0:r.argv0,stdio:["ignore","pipe","ignore"],detached:!0}),s="",i=0,a=()=>{try{if(o.pid)process.kill(-o.pid,"SIGKILL")}catch{o.kill("SIGKILL")}},d=!1,c=(l)=>{if(d)return;d=!0,clearTimeout(u),o.stdout?.destroy(),a(),n(l)},u=setTimeout(()=>{try{if(o.pid)process.kill(-o.pid,"SIGKILL")}catch{o.kill("SIGKILL")}c(void 0)},t);o.stdout?.on("data",(l)=>{if(d)return;if(i+=l.length,i>65536){c(void 0);return}s+=l.toString("utf8")}),o.on("error",()=>c(void 0)),o.on("close",()=>c(Noe(s)))})}async function Hoe(e){let t=e?.platform??process.platform,n=e?.env??process.env;if(t==="win32")return{status:"skipped",reason:"windows"};if(n[GD]?.trim())return{status:"skipped",reason:GD};let r=e?.userShell??Ooe(t,n),o=e?.fallbackShell??XD(t),s=e?.timeoutMs??JD,i=r===o?[[r,s]]:[[r,s],[o,s/2]];for(let[a,d]of i){let c=await Uoe(a,d);if(!c)continue;let u=Doe(c,n.PATH??"");return n.PATH=u,{status:"applied",pathEntries:u.split(qm).length,shell:a}}return{status:"failed",shell:r}}import{readFile as Foe}from"node:fs/promises";import Boe from"node:path";function $oe(e){return e}async function Woe(e){let t=Boe.resolve(e),n=await Foe(t,"utf8"),r;try{r=JSON.parse(n)}catch(o){let s=o instanceof Error?o.message:String(o);throw Error(`Failed to parse JSON config at "${t}": ${s}`)}return joe(r,t)}function joe(e,t){if(!e||typeof e!=="object")throw Error(`Invalid llms config in "${t}": expected an object.`);let r=e.providers;if(!Array.isArray(r))throw Error(`Invalid llms config in "${t}": "providers" must be an array.`);if(!r.length)throw Error(`Invalid llms config in "${t}": "providers" cannot be empty.`);return e}import{BUILT_IN_PROVIDER_IDS as ZD,createHandler as Koe,createHandlerAsync as Goe,getProviderCollection as Voe,hasProvider as e0,registerAsyncHandler as Joe,registerHandler as Xoe,registerModel as Yoe,registerProvider as t0}from"@cline/llms";function YD(e){return e?{...e}:{}}function qoe(e,t){if(e)return e;if(!t)return;let n=globalThis.process;if(!n?.env)return;return n.env[t]}function zoe(e,t){if(!t.length)throw Error(`Provider "${e}" must include at least one model.`)}function QD(e){let t=Object.keys(e.collection.models);return{id:e.collection.provider.id,name:e.collection.provider.name,description:e.collection.provider.description,protocol:e.collection.provider.protocol,baseUrl:e.collection.provider.baseUrl,capabilities:e.collection.provider.capabilities,env:e.collection.provider.env,models:t,defaultModel:e.collection.provider.defaultModelId,modelCount:t.length}}class OT{providers=new Map;register(e){zoe(e.id,e.models);let t=e.defaultModel??e.models[0];if(!t)throw Error(`Provider "${e.id}" must define a default model.`);if(!e.models.includes(t))throw Error(`Default model "${t}" is not included in configured models for "${e.id}".`);let n=this.providers.get(e.id);this.providers.set(e.id,{id:e.id,models:new Set([...n?.models??[],...e.models]),defaultModel:t,defaults:{...n?.defaults??{},...YD(e.defaults)}})}registerSelectionConfig(e){this.register({id:e.id,models:e.models,defaultModel:e.defaultModel,defaults:{apiKey:qoe(e.apiKey,e.apiKeyEnv),routingProviderId:e.builtinProviderId,baseUrl:e.baseUrl,headers:e.headers,timeoutMs:e.timeoutMs,capabilities:e.capabilities,...YD(e.settings)}})}registerModel(e,t){let n=this.providers.get(e);if(!n){this.providers.set(e,{id:e,models:new Set([t]),defaultModel:t,defaults:{}});return}n.models.add(t)}createHandlerConfig(e){let t=this.require(e.providerId),n=e.modelId??t.defaultModel;if(!t.models.has(n))throw Error(`Model "${n}" is not configured for provider "${e.providerId}".`);return{providerId:e.providerId,modelId:n,...t.defaults,...e.overrides}}list(){return Array.from(this.providers.values()).map((e)=>({id:e.id,models:Array.from(e.models),defaultModel:e.defaultModel}))}getModels(e){return Array.from(this.require(e).models)}hasProvider(e){return this.providers.has(e)}hasModel(e,t){return this.providers.get(e)?.models.has(t)??!1}require(e){let t=this.providers.get(e);if(!t)throw Error(`Provider "${e}" is not configured in this SDK instance.`);return t}}class LT{configuredProviders=new OT;constructor(e){this.applyConfig(e)}createHandler(e){return Koe(this.configuredProviders.createHandlerConfig(e))}async createHandlerAsync(e){return Goe(this.configuredProviders.createHandlerConfig(e))}registerProvider(e){if(t0(e.collection),e.handlerFactory&&e.asyncHandlerFactory)throw Error(`Provider "${e.collection.provider.id}" cannot register both sync and async handlers.`);if(e.handlerFactory)Xoe(e.collection.provider.id,e.handlerFactory);if(e.asyncHandlerFactory)Joe(e.collection.provider.id,e.asyncHandlerFactory);this.configuredProviders.register({id:e.collection.provider.id,models:e.exposeModels??Object.keys(e.collection.models),defaultModel:e.defaultModel??e.collection.provider.defaultModelId,defaults:e.defaults})}registerBuiltinProvider(e){let t=e.exposeModels??Object.keys(e.models),n=e.defaultModel??t[0];if(!n)throw Error(`Provider "${e.id}" must define a default model.`);t0({provider:{id:e.id,name:e.name??e.id,description:e.description,protocol:e.protocol,baseUrl:e.baseUrl,defaultModelId:n,client:e.client??"openai-compatible",capabilities:e.capabilities,env:e.env,source:"system"},models:e.models}),this.configuredProviders.register({id:e.id,models:t,defaultModel:n,defaults:{routingProviderId:e.builtinProviderId,...e.defaults??{}}})}registerModel(e){Yoe(e.providerId,e.modelId,e.info),this.configuredProviders.registerModel(e.providerId,e.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...ZD]}async getBuiltInProviders(){return(await Promise.all(ZD.map((t)=>Voe(t)))).filter((t)=>t!==void 0).map((t)=>QD({collection:t}))}getModels(e){return this.configuredProviders.getModels(e)}isProviderConfigured(e){return this.configuredProviders.hasProvider(e)}isModelConfigured(e,t){return this.configuredProviders.hasModel(e,t)}applyConfig(e){for(let t of e.providers)this.configuredProviders.registerSelectionConfig(t);for(let t of e.models??[])this.registerModel(t);for(let t of e.customProviders??[])this.registerProvider(t);for(let t of this.configuredProviders.list()){let n=e0(t.id),r=this.configuredProviders.createHandlerConfig({providerId:t.id,modelId:t.defaultModel}).routingProviderId,o=typeof r==="string"&&e0(r);if(!n&&!o)throw Error(`Provider "${t.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function Qoe(e){return new LT(e)}Qb();Ke();async function Z_e(){return Promise.resolve().then(() => (xm(),FN))}export{Av as ADOPTED_POLL_INTERVAL_MS,ms as AGENT_PLUGINS_V1_MANIFEST_SCHEMA,Gi as AGENT_PLUGINS_V1_MCP_SCHEMA,Cs as ALL_DEFAULT_TOOL_NAMES,Cv as AgendaTaskManager,Sm as AgendaTaskRevisionConflictError,yv as AgendaTaskSpecFileStore,yLe as Agent,nS as AgentTeam,Id as AgentTeamsRuntime,xw as AuthSettingsSchema,Mw as AwsSettingsSchema,Lw as AzureSettingsSchema,Ng as BUILT_IN_PROVIDER,ZU as BUILT_IN_PROVIDER_IDS,Kv as BrowserWebSocketHubAdapter,nu as CLINE_PLUGIN_BOOTSTRAP_PATH_ENV,zre as CORE_BUILD_VERSION,K as CORE_TELEMETRY_EVENTS,ED as ChatMessageImageSchema,AD as ChatMessageRoleSchema,xD as ChatMessageSchema,ID as ChatSessionConfigSchema,RD as ChatSessionStatusSchema,_D as ChatSummarySchema,qre as ChatViewStateSchema,Kp as ClaudeCodeImportAdapter,zm as ClineAccountService,Wb as ClineCore,oMe as ClineFreeModelLimitError,sMe as ClineNotSubscribedError,iMe as ClineOrgIndividualInferenceSubscriptionError,aMe as ClinePassLimitError,bt as CloudHandoffGitPreflightError,Nte as CloudHandoffTranscriptMismatchError,Kd as CodexImportAdapter,co as CommandExitError,ma as CommandSpawnError,uo as CommandTerminationError,IL as ConnectorSupervisor,PMe as ContributionRegistry,Lr as CoreSessionService,Ks as CoreSettingsService,UV as DEFAULT_HUB_HOST,FV as DEFAULT_HUB_PATHNAME,HV as DEFAULT_HUB_PORT,Mh as DEFAULT_MCP_CONNECT_TIMEOUT_MS,ww as DEFAULT_MODELS_CATALOG_URL,LT as DefaultLlmsSdk,tm as DefaultRuntimeBuilder,Me as DefaultToolNames,jS as FALLBACK_CLINE_RECOMMENDED_MODELS,MMe as FEATURE_FLAGS,OMe as FeatureFlag,LMe as FeatureFlagDefaultValue,Uo as FeatureFlagsService,PD as FileTeamPersistenceStore,Ow as GcpSettingsSchema,Kc as GlobalSettingsSchema,O_ as HOOKS_CONFIG_DIRECTORY_NAME,eb as HOOK_CONFIG_FILE_EVENT_MAP,GAe as HUB_LOCK_HELD_EXIT_CODE,Np as HookConfigFileName,U_ as HookEventNameSchema,H_ as HookEventPayloadSchema,$l as HubCommandError,Fv as HubEventLogStore,xi as HubInstanceLock,TN as HubLockHeldError,Cm as HubRunAdmissionRejectedError,Ov as HubRunQueue,_o as HubRuntimeHost,im as HubScheduleCommandService,dm as HubScheduleService,Am as HubServerTransport,W9 as HubSessionClient,Xe as HubTransportError,j9 as HubUIClient,e4 as IMPORT_MISSING_TOOL_RESULT_TEXT,Ka as InMemoryMcpManager,jp as InMemoryWorkspaceManager,tMe as Llms,Ur as LocalRuntimeHost,En as MAX_COMMAND_OUTPUT_CHARS,ho as McpOAuthClientChangedError,Ba as McpSettingsLockTimeoutError,Ha as McpSettingsMutatorPurityError,kh as McpSettingsUpdateSkippedError,Uw as ModelCatalogSettingsSchema,Gv as NativeHubTransportAdapter,ec as NoOpFeatureFlagsProvider,Hn as NodeHubClient,Do as OAuthReauthRequiredError,Og as OPENAI_COMPATIBLE_PROVIDERS,Dw as OcaSettingsSchema,ic as OpenTelemetryProvider,Vp as OpencodeImportAdapter,ne as PATCH_MARKERS,fa as PatchActionType,ea as PluginCallTimeoutError,ou as PluginRegistry,Ew as ProviderClientSchema,Dg as ProviderIdSchema,Aw as ProviderProtocolSchema,yt as ProviderSettingsManager,us as ProviderSettingsSchema,$N as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,vL as RESTART_BASE_DELAY_MS,CL as RESTART_COUNTER_RESET_MS,wL as RESTART_GIVE_UP_AFTER,TL as RESTART_MAX_DELAY_MS,$C as RULES_CONFIG_DIRECTORY_NAME,_w as ReasoningSettingsSchema,aoe as RemoteEnvironmentService,zl as RemoteRuntimeHost,Km as RpcClineAccountService,di as RuntimeOAuthTokenManager,y9 as SCHEDULED_TASKS_SYSTEM_PROMPT_RULE,$Me as SDK_ERROR_TELEMETRY_EVENT,UQ as SESSION_IMPORT_TOOLS,HQ as SESSION_IMPORT_TOOL_LABELS,Va as SESSION_NOT_FOUND_ERROR_CODE,Ug as SESSION_STATUSES,If as SKILLS_CONFIG_DIRECTORY_NAME,PL as STOP_SIGKILL_TIMEOUT_MS,kL as STOP_SIGTERM_TIMEOUT_MS,Nw as SapSettingsSchema,Ri as ScheduledTaskInputSchema,cv as SessionHistorySearchService,lM as SessionImportService,vo as SessionNotFoundError,ie as SessionSource,Lt as SessionVersioningError,yi as SessionVersioningService,bv as SqliteAgendaTaskStore,_r as SqliteSessionStore,Xd as SqliteTeamStore,Dx as StoredProviderModesSchema,Ux as StoredProviderSettingsEntrySchema,hp as StoredProviderSettingsSchema,ua as StructuredCommandInputSchema,Yc as SubprocessSandbox,vO as TASKS_SYSTEM_PROMPT_RULE,ac as TASKS_TOOL_NAME,Yu as TEAM_TOOL_NAMES,wO as TasksToolInputSchema,cm as TelemetryLoggerSink,sc as TelemetryService,mm as TodoTaskInputSchema,sn as ToolPresets,Vi as UnifiedConfigFileWatcher,Rf as WORKFLOWS_CONFIG_DIRECTORY_NAME,Qc as WorkerSandbox,Hge as __test__,Ye as accumulateUsageTotals,p6 as addLocalProvider,$O as agendaTaskSpecToCreateInput,Rp as applyClineFeaturedModels,So as augmentMcpTimeoutError,ZI as authorizeMcpServerOAuth,Qu as bootstrapAgentTeams,GM as buildCheckpointWorkspaceDiff,rMe as buildClineClientHeaders,yxe as buildCloudHandoffDashboardUrl,Qy as buildConfiguredAgentToolDescriptors,Yy as buildConfiguredAgentToolName,lq as buildConnectionUpdate,gc as buildConnectorChildEnv,_a as buildDelegatedAgentConfig,JN as buildMcpInstallTransport,BN as buildRemoteConfigSessionBlobUploadMetadata,kMe as buildSdkErrorProperties,np as buildTeamProgressSummary,Vh as buildWorkspaceMetadata,qr as captureAgentCreated,sg as captureAgentTeamCreated,u0 as captureAgentUnexpectedReasoningTokens,Tn as captureAuthFailed,jr as captureAuthLoggedOut,tr as captureAuthRefreshSoftFailure,Zn as captureAuthStarted,er as captureAuthSucceeded,ag as captureCompactionExecuted,dg as captureCompactionSkipped,Ui as captureConversationTurnEvent,eg as captureDiffEditFailure,w0 as captureExtensionActivated,b0 as captureGitSnapshot,ig as captureHookDiscovery,rg as captureMentionFailed,og as captureMentionSearchResults,ng as captureMentionUsed,tg as captureMistakeLimitReached,Qm as captureModeSwitch,I0 as captureProviderApiError,k0 as captureProviderConfigured,IMe as captureSdkError,Zm as captureSkillUsed,Ac as captureSubagentExecution,Rc as captureTaskCompleted,Jm as captureTaskCreated,Xm as captureTaskRestarted,Ym as captureTokenUsage,wn as captureToolUsage,Vm as captureWorkspaceInitError,Gm as captureWorkspaceInitialized,C0 as captureWorkspacePathResolved,H9 as checkManagedHubBuildMismatch,Fte as cleanupConnectorInstanceViaCli,P0 as clearAccountTelemetryIdentity,hxe as clearCloudHandoffMetadata,Nn as clearHubDiscovery,EA as clearHubDiscoveryIfOwned,JU as clearLiveModelsCatalogCache,XU as clearPrivateModelsCatalogCache,mxe as cloudHandoffFingerprintsEqual,bxe as cloudHandoffTranscriptsEqual,kD as collectPluginMcpOAuthCandidates,nl as combineUserInstructionConfigServices,Fb as compareCheckpointToWorkspace,pd as compareHubBuilds,j0 as completeClineDeviceAuth,Lu as computePatchChanges,PO as connectToHub,ni as countUserRunMessages,Lp as createAgentHooksExtension,SLe as createAgentRuntime,Oa as createAgentTeamsTools,Sa as createApplyPatchExecutor,Na as createBuiltinTools,KM as createCheckpointComparePlan,zd as createClientScopedTelemetryService,RMe as createClineTelemetryServiceConfig,AMe as createClineTelemetryServiceMetadata,Ote as createCloudHandoffFingerprint,IS as createCompactionStateAwarePrepareTurn,ep as createConfiguredAgentTools,T6 as createConfiguredStreamingTranscriptionSession,lm as createConfiguredTelemetryHandle,jo as createConfiguredTelemetryService,pp as createContextCompactionPrepareTurn,EMe as createContributionRegistry,Rr as createCoreSessionSnapshot,Ga as createCoreSettingsService,qu as createDefaultExecutors,Bs as createDefaultMcpServerClientFactory,Yf as createDefaultShellExecutor,xs as createDefaultTools,mP as createDefaultToolsWithPreset,Ds as createDelegatedAgent,Ns as createDelegatedAgentConfigProvider,fR as createDisabledMcpToolPolicies,Lh as createDisabledMcpToolPolicy,ba as createEditorExecutor,Dre as createForkSessionMetadata,Fp as createHookAuditHooks,Bp as createHookConfigFileExtension,ub as createHookConfigFileHooks,AA as createHubAuthToken,Un as createHubServerUrl,bge as createInMemoryHubOwnerContext,rt as createInitialAccumulatedUsage,Qoe as createLlmsSdk,CPe as createLocalHubScheduleRuntimeHandlers,yl as createMcpTools,Pc as createOAuthClientCallbacks,um as createOpenTelemetryTelemetryService,Xne as createPluginCommandService,nH as createProviderConfig,Tte as createRemoteConfigSessionMessagesArtifactUploader,wb as createRestoredCheckpointMetadata,Uf as createRulesConfigDefinition,om as createRuntimeHost,gi as createScopedTelemetryService,jl as createSessionCompactionState,om as createSessionHost,ga as createShellExecutor,Kf as createShellTool,Df as createSkillsConfigDefinition,Us as createSpawnAgentTool,F_ as createSubprocessHooks,rv as createTasksPromptExtension,nv as createTasksTool,OM as createTeamName,xMe as createTool,pP as createToolPoliciesWithPreset,fo as createUserInstructionConfigService,Hf as createWorkflowsConfigDefinition,$oe as defineLlmsConfig,f6 as deleteLocalProvider,cy as deriveSubsessionStatus,Rv as disableConnectorAutostart,nne as disablePluginMcpServersInSettings,ra as discoverPluginModulePaths,ii as emptyStoredProviderSettings,_Me as emptyWorkspaceManifest,Bu as enrichPromptWithMentions,KO as ensureAgendaTaskSchema,Ta as ensureChatWorkspace,yd as ensureCompatibleLocalHubUrl,Xx as ensureCustomProvidersLoaded,OS as ensureCustomProvidersLoadedSync,fd as ensureDetachedHubServer,AEe as ensureHubServer,DN as ensureHubWebSocketServer,Hoe as ensureLoginShellPath,UT as executeClineAccountAction,Xb as executeScheduleOperation,bO as executeTodoTaskOperation,dMe as extractClineFreeModelLimitResetTime,cMe as extractClinePassLimitMessage,u_ as fetchClineRecommendedModels,Vc as filterDisabledPluginPaths,ir as filterDisabledTools,nf as filterExtensionToolRegistrations,Yp as findCheckpointForRun,bT as findInstalledGlobalMarketplaceSkillName,NMe as formatDisplayUserInput,PU as formatProviderOAuthApiKey,Ff as formatRulesForSystemPrompt,su as formatSessionPluginIssue,Pl as generateWorkspaceInfo,Gh as generateWorkspaceInfoWithDiagnostics,Ev as getActiveConnectorSupervisor,qS as getCachedClineRecommendedModels,CMe as getClineDefaultSystemPrompt,uMe as getClineNotSubscribedMessage,lMe as getClineOrgIndividualInferenceSubscriptionMessage,pMe as getClinePassSubscriptionUrl,SI as getCoreAcpToolNames,Hs as getCoreBuiltinToolCatalog,hI as getCoreDefaultEnabledToolIds,fh as getCoreHeadlessToolNames,t5 as getCurrentContextSize,lo as getFileIndex,ST as getGlobalMarketplaceSkillPaths,sr as getLiveModelsCatalog,S6 as getLocalProviderModels,Op as getLocalTranscriptionModels,Po as getManagedHubCompatibility,yT as getMarketplaceSkillCandidates,al as getMcpServerOAuthState,Wa as getMcpServerOAuthStatus,Tm as getPersistedConnectorConnection,Kr as getPersistedProviderApiKey,LC as getPluginDisplayName,on as getProcessPluginRegistry,x$ as getProcessStartToken,_$ as getProcessStartTokenAsync,He as getProviderAuthHandler,CU as getProviderAuthStorageId,Rw as getProviderConfig,KS as getProviderConfigFields,Oc as getProviderOAuthCredentialsFromSettings,Mr as getUserRunSpan,hg as getValidClineCredentials,Pg as getValidOcaCredentials,bg as getValidOpenAICodexCredentials,Qge as hasActiveHubSessions,Fs as hasMcpSettingsFile,it as hashSecret,Ey as hubHasLiveSessions,nr as identifyAccount,zte as installMcpServer,Nre as installPlugin,wF as isAgentPluginDisabledGlobally,dF as isAutoUpdateEnabledGlobally,eH as isBuiltInProviderId,DT as isClineAccountActionRequest,kp as isClineAccountFeatureEnabled,mMe as isClineFreeModelLimitError,gMe as isClineFreeModelLimitMessage,fMe as isClineModelNotFoundMessage,hMe as isClineNotSubscribedError,yMe as isClineNotSubscribedMessage,SMe as isClineOrgIndividualInferenceSubscriptionError,bMe as isClineOrgIndividualInferenceSubscriptionMessage,vMe as isClinePassLimitError,TMe as isClinePassLimitMessage,La as isCoreBuiltinToolAvailable,Fd as isDedicatedTranscriptionModel,vge as isDiscoveryFilePresent,XA as isHubCommandTimeoutError,wN as isHubLockHeldError,BJ as isHubReconnectableTransportError,l_ as isLocalAuthProvider,NN as isLocalHubHostName,pte as isLocalHubOrigin,Vs as isManagedHubReusable,iD as isMarketplaceSkillInstalled,Ji as isModelToolEnabledGlobally,or as isOAuthProvider,bD as isOfficialPluginSlug,TF as isPluginDisabledGlobally,Bc as isPrivateModelCatalogProvider,VS as isProviderSettingsUsable,zC as isRuleEnabled,wr as isSessionNotFoundError,fI as isSkillsToolAvailable,Yg as isTelemetryOptedOutGlobally,vF as isToolDisabledGlobally,aK as isUnusableSessionError,HX as isUserRunMessage,pc as listActiveConnectors,li as listHookConfigFiles,y6 as listLocalProviders,VI as listMcpServerOAuthStatuses,X1 as listPluginTools,bl as listPluginToolsWithDiagnostics,pV as listSessionHistoryFromBackend,qb as loadAgentPluginFromPath,Yr as loadAgentPluginPackages,XM as loadAgentPluginsFromPaths,zb as loadAgentPluginsFromPathsWithDiagnostics,Ql as loadConfiguredAgentConfigs,Woe as loadLlmsConfigFromFile,sl as loadMcpSettingsFile,Z_e as loadOpenTelemetryAdapter,da as loadRulesForSystemPromptFromRecords,QA as localHubHasNoActiveSessions,E6 as loginAndSaveLocalProviderOAuthCredentials,Rg as loginAndSaveProviderOAuthCredentials,fg as loginClineOAuth,R6 as loginLocalProvider,kg as loginOcaOAuth,Sg as loginOpenAICodex,xl as makeSubSessionId,dy as makeTeamTaskSubSessionId,h6 as markLocalProviderEnabled,jne as marketplaceEntryKey,qd as mergeAgentHooks,fxe as mergeCloudHandoffMetadata,mu as mergeRulesForSystemPrompt,DS as migrateLegacyProviderSettings,DMe as noopBasicLogger,Hr as normalizeAgendaTaskLocation,zN as normalizeGitHubRemoteUrl,Zs as normalizeHubWebSocketUrl,I6 as normalizeOAuthProvider,Nm as normalizePluginCommandName,$c as normalizeProviderId,at as normalizeRuntimeCapabilities,UMe as normalizeSdkError,HMe as normalizeUserInput,Cr as normalizeWorkspacePath,mv as parseAgendaTaskSpec,Vr as parseAgentSkillMarkdown,Jy as parseConfiguredAgentConfig,Up as parseHookEventPayload,VN as parseMcpHeaders,eT as parseMcpInstallArgs,Ah as parseMcpServerRegistration,vD as parsePluginSource,_f as parseRuleConfigFromMarkdown,Fn as parseSessionCompactionState,Hw as parseSettings,xf as parseSkillConfigFromMarkdown,FMe as parseUserCommandEnvelope,Mf as parseWorkflowConfigFromMarkdown,zS as peekClineRecommendedModels,FT as persistClineAccountTelemetryIdentity,cZ as persistConnectorConnection,lxe as preflightCloudHandoffGit,wte as prepareRemoteConfigCoreIntegration,jA as prewarmDetachedHubServer,aP as prewarmFileIndex,nPe as probeHubConnection,Dn as probeHubServer,dR as probeMcpServerConnection,Sk as probeProcessStartToken,Rs as probeProcessStartTokenAsync,ei as projectSessionCompactionState,$b as projectSessionMessagesForDisplay,Qs as queryHubSessionActivity,Jv as readBearerToken,gxe as readCloudHandoffMetadata,pF as readCompactionModeGlobally,uF as readCompactionStrategyGlobally,ce as readGlobalSettings,$e as readHubDiscovery,Xp as readImportedFromMetadata,bp as readModelsFileSync,gF as readPlanActModeGlobally,bte as readRemoteConfigSessionBlobUploadMetadata,Gd as readSessionCheckpointHistory,mJ as readSupersededHubDiscovery,hF as readToolAutoApproveGlobally,yF as readTuiThemeGlobally,lZ as reconnectPersistedConnectors,ow as refreshClineToken,gw as refreshOcaToken,iw as refreshOpenAICodexToken,k6 as refreshProviderModelsFromSource,BMe as registerDisposable,cl as registerMcpServersFromSettingsFile,WN as registerRemoteConfigSessionBlobUpload,Ys as rememberRecoverableLocalHubUrl,coe as remoteHelperBinaryFilename,uZ as removePersistedConnectorConnection,sT as removePluginMcpServersFromSettings,Ete as requestDesktopToolApproval,Ao as requestHubDrain,hd as requestHubShutdown,O8 as resetClineRecommendedModelsCacheForTests,ro as resolveAgentPluginPaths,sa as resolveAgentPluginPathsWithDiagnostics,vs as resolveAndLoadAgentPlugins,$p as resolveClientTelemetryProperties,HT as resolveClineAccountTelemetryIdentity,ld as resolveClineDataDir,yge as resolveClineDir,Hy as resolveCompatibleLocalHubUrl,D6 as resolveComposioConnectionStatePath,Td as resolveCoreDeviceId,_t as resolveCoreDistinctId,yI as resolveCoreSelectedToolIds,BV as resolveDefaultHubHost,$V as resolveDefaultHubPathname,Hl as resolveDefaultHubPort,ye as resolveDefaultMcpSettingsPath,Qr as resolveDisabledAgentPluginNames,Gc as resolveDisabledPluginPaths,Pn as resolveDisabledToolNames,ZS as resolveHooksConfigSearchPaths,ky as resolveHubBuildEpochMs,dn as resolveHubBuildId,md as resolveHubBuildIdentity,Ro as resolveHubEndpointOptions,Iee as resolveHubEventLogPath,CN as resolveHubInstanceLockPath,Io as resolveHubOwnerContext,QZ as resolveHubRunQueuePath,A9 as resolveHubUrl,QS as resolveLocalClineAuthToken,hT as resolveMarketplaceMcpServerName,yo as resolveMcpServerRegistration,Mn as resolveMcpServerRegistrations,UX as resolveMessageDisplayRole,rC as resolveModelToolSettings,hn as resolveModelsRegistryPath,na as resolvePluginConfigSearchPaths,dr as resolvePluginSkillDirectoriesFromPaths,cn as resolveProductionHubOwnerContext,kU as resolveProviderApiKeyFromSettings,Lg as resolveProviderConfig,Lf as resolveRulesConfigSearchPaths,u3 as resolveSessionBackend,Gt as resolveSharedHubOwnerContext,Of as resolveSkillsConfigSearchPaths,Zu as resolveToolClientType,Nf as resolveWorkflowsConfigSearchPaths,Rge as resolveWorkspaceHubOwnerContext,ZA as restartLocalHubIfIdleAfterStartupTimeout,Xs as retireDiscoveredHub,uI as reviveTeamStateDates,pi as runHook,poe as runRemoteProcess,Ho as runSubprocessEvent,rH as safeCreateProviderConfig,Fw as safeParseSettings,vb as sanitizeImportedMessages,sd as sanitizeSessionToken,A6 as saveLocalProviderOAuthCredentials,w6 as saveLocalProviderSettings,Bi as saveProviderOAuthCredentials,b6 as saveVoiceInputSettings,me as sdkDebug,rPe as sendHubCommand,BO as serializeAgendaTaskSpec,CZ as setActiveConnectorSupervisor,cF as setAutoUpdateEnabledGlobally,mF as setCompactionModeGlobally,lF as setCompactionStrategyGlobally,tf as setDisabledAgentPlugin,ef as setDisabledPlugin,sC as setDisabledTools,Fge as setHubDaemonLauncher,il as setMcpServerDisabled,oC as setModelToolEnabledGlobally,fF as setPlanActModeGlobally,d0 as setSdkLogger,aF as setTelemetryOptOutGlobally,bF as setToolAutoApproveGlobally,SF as setTuiThemeGlobally,SJ as spawnDetachedHubServer,bJ as spawnDetachedHubServerWithRetry,Bh as splitCoreSessionConfig,W0 as startClineDeviceAuth,REe as startHubServer,Yv as startHubWebSocketServer,Cn as startLocalOAuthServer,zJ as stopLocalHubServerGracefully,WMe as stripUtf8Bom,YA as summarizeHubSessionActivity,gp as summarizeUsageFromMessages,oT as syncPluginMcpServersToSettings,L5 as syncStoredProviderRegistration,$h as toClineCoreStartInput,tb as toHookConfigFileName,_A as toHubHealthUrl,xV as toHubStatusUrl,jt as toProviderConfig,rp as toTeamProgressLifecycleEvent,Zg as toggleDisabledTool,v6 as transcribeConfiguredVoiceInput,C_ as transcribeLocalAudio,Cb as trimMessagesBeforeUserRun,la as truncateCommandOutput,iv as truncateNotificationBody,zne as uninstallMarketplaceEntry,sD as uninstallMarketplaceMcpServerFromSettings,dD as uninstallMarketplacePlugin,aD as uninstallMarketplaceSkill,Gte as uninstallMcpServer,mT as uninstallPlugin,g6 as updateLocalProvider,GI as updateMcpServerOAuthState,dl as updateMcpServerOAuthStateAsync,Ih as updateMcpSettingsFile,_n as updateMcpSettingsFileSync,Bge as upgradeManagedHub,xt as verifyHubConnection,uPe as watchManagedHubBuildMismatch,Ul as withHubStartupLock,Ve as writeGlobalSettings,Dl as writeHubDiscovery,MS as writeModelsFileSync};