@cline/core 0.0.60-nightly.1783998875 → 0.0.60

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.
@@ -42,7 +42,7 @@ import{createRequire as T_}from"node:module";var{defineProperty:T7,getOwnPropert
42
42
  </div>
43
43
  <script>setTimeout(() => window.close(), 3000);</script>
44
44
  </body>
45
- </html>`;function pY($){let W="";for(let Z=0;Z<$.length;Z+=1)W+=String.fromCharCode($[Z]??0);return btoa(W).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function b_($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function S_($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),pY(W)}async function a5(){let $=S_(),W=pY(await b_($));return{verifier:$,challenge:W}}function o5($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,W){return new URL(W,`${o5($)}/`).toString()}function G8($,W={}){let Z=$.trim();if(!Z)return{};try{let Q=new URL(Z);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:W.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(W.allowHashCodeState&&Z.includes("#")){let[Q,J]=Z.split("#",2);return{code:Q||void 0,state:J||void 0}}if(Z.includes("code=")){let Q=new URLSearchParams(Z);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:W.includeProvider?Q.get("provider")??void 0:void 0}}return{code:Z}}function y_($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function h0($){if(!$)return null;try{let W=$.split(".");if(W.length!==3)return null;let Z=W[1];if(!Z)return null;let Q=Z.replace(/-/g,"+").replace(/_/g,"/"),J=Q.padEnd(Q.length+(4-Q.length%4)%4,"="),j=y_(J);if(!j)return null;return JSON.parse(j)}catch{return null}}function K8($){try{let W=JSON.parse($),Z=W.error,Q=typeof Z==="string"?Z:Z&&typeof Z==="object"&&typeof Z.type==="string"?Z.type:void 0,J=typeof W.error_description==="string"?W.error_description:typeof W.message==="string"?W.message:Z&&typeof Z==="object"&&typeof Z.message==="string"?Z.message:void 0;return{code:Q,message:J}}catch{return{}}}function F8($,W){return Date.now()>=$.expires-W}async function A8($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let W,Z,Q=$.onManualCodeInput().then((j)=>{W=j,$.cancelWait()}).catch((j)=>{Z=j instanceof Error?j:Error(String(j)),$.cancelWait()}),J=await $.waitForCallback();if(Z)throw Z;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(W)return G8(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return G8(W,$.parseOptions);return{}}var s5={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},aY={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},R7="https://api.workos.com",h_="/auth",rY=Array.from({length:11},($,W)=>48801+W),k_=300000,I_=30000,f8=30000,x_=300,g_=5;class q1 extends Error{status;errorCode;constructor($,W){super($);this.name="ClineOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function m_($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function N7($,W,Z={}){let Q=$.userInfo.clineUserId??Z.accountId,J=$.refreshToken??Z.refresh;if(!J)throw Error("Token response did not include a refresh token");let j={...Z.metadata??{},provider:W,tokenType:$.tokenType,userInfo:$.userInfo};return delete j.startedAt,{access:$.accessToken,refresh:J,expires:m_($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function E7($){if(!$)return{};return typeof $==="function"?await $():$}function iY($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function nY($){await new Promise((W)=>setTimeout(W,$))}function w7($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function oY($,W){let Z=await fetch(Z2(R7,aY.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??f8)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new q1(`Device authorization failed: ${Z.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:Z.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:iY(Q.expires_in,x_),pollIntervalSeconds:iY(Q.interval,g_)}}async function sY($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(Z2($.workosApiBaseUrl,aY.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await Q.json().catch(()=>({}));if(Q.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await nY(Z*1000);break}case"slow_down":{Z+=1,await nY(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new q1(J.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:J.error});default:throw new q1(`WorkOS token polling failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function tY($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(W.apiBaseUrl,s5.register),{method:"POST",headers:{"Content-Type":"application/json",...await E7(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??f8)});if(!J.ok){let X=await J.text().catch(()=>""),Y=K8(X);throw new q1(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code})}let j=await J.json();return N7(w7(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAt:Date.now()}})}async function v_($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(Z2(Z.apiBaseUrl,s5.token),{method:"POST",headers:{"Content-Type":"application/json",...await E7(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!j.ok){let Y=await j.text().catch(()=>""),V=K8(Y);throw new q1(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let X=await j.json();return N7(w7(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAt:Date.now()}})}async function i4($){I1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:rY,Q=$.callbackPath??h_,J=W?null:await G1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??rY[0]}${Q}`;try{let X;if(W){let Y=M7().workOsClientId,V=await oY(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await sY({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:R7,onProgress:$.callbacks.onProgress});X=await tY(B,$,$.provider)}else{let Y=new URL(Z2($.apiBaseUrl,s5.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",j),Y.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await v_(V,j,$,B)}return x1($.telemetry,$.provider??"cline"),H1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw g1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function C7($){return await oY(M7().workOsClientId,$)}async function P7($){let W=$.provider??"cline";I1($.telemetry,W);try{let Z=await sY({clientId:M7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:R7}),Q=await tY(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return x1($.telemetry,W),H1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw g1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function t5($,W){let Z=Z2(W.apiBaseUrl,s5.refresh);W0(`cline.refresh.request url=${Z} refreshTokenHash=${M0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await E7(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??f8)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=K8(Y);throw W0(`cline.refresh.error status=${Q.status} errorCode=${V.code??"none"} message=${V.message??"none"}`),new q1(`Token refresh failed: ${Q.status}${V.message?` - ${V.message}`:""}`,{status:Q.status,errorCode:V.code})}let J=await Q.json(),j=$.metadata?.provider??W.provider,X=N7(w7(J,"Invalid token refresh response"),j,$);return W0(`cline.refresh.success newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} expires=${X.expires}`),X}async function n4($,W,Z){if(!$)return W0("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??k_,J=Z?.retryableTokenGraceMs??I_,j=Z?.forceRefresh===!0;if(!j&&!F8($,Q))return W0(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;W0(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${M0($.access)}`);try{return await t5($,W)}catch(X){let Y={status:X instanceof q1?X.status:void 0,errorCode:X instanceof q1?X.errorCode:void 0,errorName:X instanceof Error?X.name:void 0};if(X instanceof q1&&X.isLikelyInvalidGrant())return W0(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),F$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return W0(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),z7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw W0(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),z7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}T0();var WV={};N(WV,{refreshOpenAICodexToken:()=>$9,loginOpenAICodex:()=>a4,getValidOpenAICodexCredentials:()=>o4,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as c_}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class e5 extends Error{status;errorCode;constructor($,W){super($);this.name="OpenAICodexOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function u_($,W,Z=X0.redirectUri){let Q=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:W,redirect_uri:Z}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let J=await Q.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function d_($){try{let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok){let Q=await W.text().catch(()=>""),J=K8(Q);throw new e5(`Token refresh failed: ${W.status}${J.message?` - ${J.message}`:""}`,{status:W.status,errorCode:J.code})}let Z=await W.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}catch(W){if(W instanceof e5)throw W;return{type:"failed"}}}async function l_($="pi"){let{verifier:W,challenge:Z}=await a5(),Q=c_(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Z),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",Q),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:W,state:Q,url:J.toString()}}function p_(){try{let $=new URL(X0.redirectUri),W=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(W)?W:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function r_($,W){let Z=W?h0(W):h0($),Q=Z?Z:h0($),j=Q?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Q?.organizations;if(Array.isArray(X)&&X.length>0){let V=X[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=Q?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function $V($,W){let Z=r_($.access,$.idToken)??W?.accountId;if(!Z)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||W?.refresh||"",expires:$.expires,accountId:Z,email:$.email??W?.email,metadata:{...W?.metadata??{},provider:"openai-codex"}}}async function a4($){I1($.telemetry,"openai-codex");let W=p_(),{verifier:Z,state:Q,url:J}=await l_($.originator),j=await G1({host:W.host,ports:[W.port],callbackPath:W.callbackPath,expectedState:Q});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let X;try{let Y=await A8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==Q)throw Error("State mismatch");if(X=Y.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(H,{allowHashCodeState:!0});if(G.state&&G.state!==Q)throw Error("State mismatch");X=G.code}if(!X)throw Error("Missing authorization code");let V=await u_(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=$V(V);return x1($.telemetry,"openai-codex"),H1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw g1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function $9($,W){let Z=await d_($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=$V(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function o4($,W){if(!$)return null;let Z=W?.refreshBufferMs??X0.refreshBufferMs,Q=W?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!F8($,Z))return $;try{return await $9($.refresh,$)}catch(j){if(j instanceof e5&&j.isLikelyInvalidGrant())return F$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}T0();var fV={};N(fV,{refreshOcaToken:()=>J9,loginOcaOAuth:()=>t4,getValidOcaCredentials:()=>e4,OCI_HEADER_OPC_REQUEST_ID:()=>i_,DEFAULT_INTERNAL_OCA_BASE_URL:()=>W9,DEFAULT_INTERNAL_IDCS_URL:()=>JV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>jV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>QV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>Z9,DEFAULT_EXTERNAL_IDCS_URL:()=>YV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>VV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>XV});import{nanoid as ZV}from"nanoid";class b7{ttlMs;maxEntries;entries=new Map;constructor($,W){this.ttlMs=$;this.maxEntries=W}get($,W=Date.now()){this.pruneExpired(W);let Z=this.entries.get($);if(!Z)return;return this.entries.delete($),this.entries.set($,Z),Z.value}set($,W,Z=Date.now(),Q=this.ttlMs){this.pruneExpired(Z),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:W,expiresAt:Z+Q})}pruneExpired($){for(let[W,Z]of this.entries)if(Z.expiresAt<=$)this.entries.delete(W)}}var QV="a8331954c0cf48ba99b5dd223a14c6ea",JV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",jV="openid offline_access",W9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",XV="c1aba3deed5740659981a752714eba33",YV="https://login-ext.identity.oraclecloud.com",VV="openid offline_access",Z9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",i_="opc-request-id",n_="/auth/oca",a_=Array.from({length:11},($,W)=>48801+W),o_=300000,s_=30000,BV=30000,t_=600000;class Q9 extends Error{status;errorCode;constructor($,W){super($);this.name="OcaOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var f$={internal:{clientId:QV,idcsUrl:JV,scopes:jV,baseUrl:W9},external:{clientId:XV,idcsUrl:YV,scopes:VV,baseUrl:Z9}},s4=new Map,e_=86400000,$L=300000,WL=32,S7=new b7(e_,WL);function HV($){if(typeof $==="function")return $();return $??"internal"}function GV($){return{internal:{clientId:$?.internal?.clientId??f$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??f$.internal.idcsUrl,scopes:$?.internal?.scopes??f$.internal.scopes,baseUrl:$?.internal?.baseUrl??f$.internal.baseUrl},external:{clientId:$?.external?.clientId??f$.external.clientId,idcsUrl:$?.external?.idcsUrl??f$.external.idcsUrl,scopes:$?.external?.scopes??f$.external.scopes,baseUrl:$?.external?.baseUrl??f$.external.baseUrl}}}function ZL($=Date.now()){let W=$-t_;for(let[Z,Q]of s4.entries())if(Q.createdAt<W)s4.delete(Z)}function QL($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=h0(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=h0(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function KV($,W,Z){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let J=$.refresh_token??Z?.refresh;if(!J)throw Error("Token response did not include a refresh token");let j=h0($.id_token),X=h0(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:QL($,Q,$.id_token),accountId:Y??Z?.accountId,email:V??Z?.email,metadata:{...Z?.metadata??{},provider:"oca",mode:W,subject:Y,idToken:$.id_token}}}async function FV($,W){let Z=o5($),Q=S7.get(Z);if(Q)return Q;let J=`${Z}/.well-known/openid-configuration`,j=await fetch(J,{method:"GET",signal:AbortSignal.timeout(W)});if(!j.ok){let V=`${Z}/oauth2/v1/token`;return S7.set(Z,V,Date.now(),$L),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return S7.set(Z,Y),Y}function AV($){return{code:$.error,message:$.error_description}}async function JL($){let W=s4.get($.state);if(!W)throw Error("No PKCE verifier found for this state");s4.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await FV(Z.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:W.redirectUri,client_id:Z.clientId,code_verifier:W.verifier}),j=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let V=AV(X);throw new Q9(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=h0(X.id_token);if(!X.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==W.nonce)throw Error("OIDC nonce verification failed");return KV(X,$.mode)}function jL($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${o5(W.idcsUrl)}/oauth2/v1/authorize`);return Z.searchParams.set("client_id",W.clientId),Z.searchParams.set("response_type","code"),Z.searchParams.set("scope",W.scopes),Z.searchParams.set("code_challenge",$.challenge),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("redirect_uri",$.callbackUrl),Z.searchParams.set("state",$.state),Z.searchParams.set("nonce",$.nonce),Z.toString()}async function t4($){I1($.telemetry,"oca");let W=GV($.config),Z=HV($.mode),Q=$.callbackPorts?.length?$.callbackPorts:a_,J=$.callbackPath??n_,j=$.requestTimeoutMs??BV,X=await G1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=X.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=ZV(16),B=ZV(16),{verifier:H,challenge:G}=await a5();ZL(),s4.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=jL({callbackUrl:Y,mode:Z,state:V,nonce:B,challenge:G,config:W});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,D=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!D||D!==V)throw Error("State mismatch");let f=await JL({code:A,state:D,mode:Z,config:W,requestTimeoutMs:j});return x1($.telemetry,"oca"),H1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw g1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function J9($,W={}){let Z=GV(W.config),Q=W.requestTimeoutMs??BV,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:HV(W.mode),X=j==="external"?Z.external:Z.internal,Y=await FV(X.idcsUrl,Q),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(Q)}),H=await B.json();if(!B.ok){let G=AV(H);throw new Q9(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return KV(H,j,$)}async function e4($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??o_,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??s_;if(W?.forceRefresh!==!0&&!F8($,Q))return $;try{return await J9($,Z)}catch(X){if(X instanceof Q9&&X.isLikelyInvalidGrant())return F$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var j9="workos:";function XL($){let W=$.trim();return W.toLowerCase().startsWith(j9)?W:`${j9}${W}`}function YL($){let W=$.trim();return W.toLowerCase().startsWith(j9)?W.slice(j9.length):W}function VL($){let Z=h0($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function BL($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=VL(W);if(Q)return Q;return Date.now()-1}function HL($,W){let Z=$.auth?.accessToken?.trim(),Q=$.auth?.refreshToken?.trim();if(!Z||!Q)return null;let J=W?.normalizeAccessToken?.(Z)??Z;if(!J)return null;return{access:J,refresh:Q,expires:BL($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function GL($){let W=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Z={...$.settings?.auth??{},accessToken:W,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Q=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,X])=>X!==void 0)),J={...$.settings?.auth?.metadata??{},...Q};if(Object.keys(J).length>0)Z.metadata=J;let j={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Z};if($.save!==!1)$.manager.saveProviderSettings(j,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return j}function y7($){let W=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:W,getApiKey(Z){let Q=Z?.auth?.accessToken?.trim();if(Q)return $.formatAccessToken?.(Q)??Q;return Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Z){return GL({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function DV($){return y7({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:XL,normalizeStoredAccessToken:YL,login:({settings:W,callbacks:Z,telemetry:Q})=>i4({apiBaseUrl:W?.baseUrl?.trim()||UV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>n4(Z,{apiBaseUrl:W.baseUrl?.trim()||UV().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var KL=[DV({providerId:"cline"}),DV({providerId:"cline-pass",storageProviderId:"cline"}),y7({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>t4({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>e4(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),y7({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>a4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>o4($,{forceRefresh:W,telemetry:Z})})],FL=new Map(KL.map(($)=>[$.providerId,$]));function H0($){return FL.get($.trim().toLowerCase())}function Q2($){return H0($)!==void 0}function h7($){return H0($)?.storageProviderId}function k7($,W){let Z=H0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??U8(W,J)}async function $6($,W,Z){let Q=H0(W);if(!Q)throw Error(`Provider "${W}" does not support OAuth login`);let J=$.getProviderSettings(Q.storageProviderId),j=await Q.login({settings:J,callbacks:Z.callbacks,telemetry:Z.telemetry});return Q.saveCredentials({manager:$,settings:J,credentials:j})}function W6($,W){let Z=H0($);if(!Z)return null;return HL(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function J2($){let W=H0($.providerId);if(!W)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return W.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,W){let Z=H0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function I7($,W){let Z=H0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}T0();var WB={};N(WB,{createContextCompactionPrepareTurn:()=>H6,createCompactionStateAwarePrepareTurn:()=>G6});var MV={};N(MV,{projectSessionCompactionState:()=>j2,parseSessionCompactionState:()=>K1,createSessionCompactionState:()=>D8,SessionCompactionStateSchema:()=>Z6});import{createHash as AL}from"node:crypto";import{formatDisplayUserInput as LV}from"@cline/shared";import{z as O1}from"zod";function fL($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let W=$;if(W.role!=="user"&&W.role!=="assistant")return!1;return typeof W.content==="string"||Array.isArray(W.content)}var UL=O1.custom(fL),Z6=O1.object({version:O1.literal(1),updated_at:O1.string().datetime(),conversation_id:O1.string().min(1).optional(),source_message_count:O1.number().int().nonnegative(),source_prefix_hash:O1.string().min(1).optional(),source_last_message_key:O1.string().min(1).optional(),messages:O1.array(UL),system_prompt:O1.string().optional()});function x7($){return JSON.parse(JSON.stringify($))}function TV($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:LV($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:LV(W.text)}:W)}}function qV($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function DL($){let W=TV($);return qV(W.role),[["role",W.role],["content",W.content],["id",W.id??null],["agent",W.agent??null],["sessionId",W.sessionId??null],["metadata",W.metadata??null],["modelInfo",W.modelInfo??null],["metrics",W.metrics??null],["ts",W.ts??null]]}function OV($){if(!$)return"";let W=TV($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(qV(W.role),typeof W.ts==="number"&&Number.isFinite(W.ts))return`ts:${W.role}:${W.ts}`;return`content:${W.role}:${JSON.stringify(W.content)}`}function zV($,W=$.length){let Z=AL("sha256");Z.update(`cline-session-compaction-source-v1
45
+ </html>`;function pY($){let W="";for(let Z=0;Z<$.length;Z+=1)W+=String.fromCharCode($[Z]??0);return btoa(W).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function b_($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function S_($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),pY(W)}async function a5(){let $=S_(),W=pY(await b_($));return{verifier:$,challenge:W}}function o5($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,W){return new URL(W,`${o5($)}/`).toString()}function G8($,W={}){let Z=$.trim();if(!Z)return{};try{let Q=new URL(Z);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:W.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(W.allowHashCodeState&&Z.includes("#")){let[Q,J]=Z.split("#",2);return{code:Q||void 0,state:J||void 0}}if(Z.includes("code=")){let Q=new URLSearchParams(Z);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:W.includeProvider?Q.get("provider")??void 0:void 0}}return{code:Z}}function y_($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function h0($){if(!$)return null;try{let W=$.split(".");if(W.length!==3)return null;let Z=W[1];if(!Z)return null;let Q=Z.replace(/-/g,"+").replace(/_/g,"/"),J=Q.padEnd(Q.length+(4-Q.length%4)%4,"="),j=y_(J);if(!j)return null;return JSON.parse(j)}catch{return null}}function K8($){try{let W=JSON.parse($),Z=W.error,Q=typeof Z==="string"?Z:Z&&typeof Z==="object"&&typeof Z.type==="string"?Z.type:void 0,J=typeof W.error_description==="string"?W.error_description:typeof W.message==="string"?W.message:Z&&typeof Z==="object"&&typeof Z.message==="string"?Z.message:void 0;return{code:Q,message:J}}catch{return{}}}function F8($,W){return Date.now()>=$.expires-W}async function A8($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let W,Z,Q=$.onManualCodeInput().then((j)=>{W=j,$.cancelWait()}).catch((j)=>{Z=j instanceof Error?j:Error(String(j)),$.cancelWait()}),J=await $.waitForCallback();if(Z)throw Z;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(W)return G8(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return G8(W,$.parseOptions);return{}}var s5={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},aY={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},R7="https://api.workos.com",h_="/auth",rY=Array.from({length:11},($,W)=>48801+W),k_=300000,I_=30000,f8=30000,x_=300,g_=5;class q1 extends Error{status;errorCode;constructor($,W){super($);this.name="ClineOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function m_($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function N7($,W,Z={}){let Q=$.userInfo.clineUserId??Z.accountId,J=$.refreshToken??Z.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:m_($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:{provider:W,tokenType:$.tokenType,userInfo:$.userInfo}}}async function E7($){if(!$)return{};return typeof $==="function"?await $():$}function iY($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function nY($){await new Promise((W)=>setTimeout(W,$))}function w7($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function oY($,W){let Z=await fetch(Z2(R7,aY.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??f8)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new q1(`Device authorization failed: ${Z.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:Z.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:iY(Q.expires_in,x_),pollIntervalSeconds:iY(Q.interval,g_)}}async function sY($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(Z2($.workosApiBaseUrl,aY.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await Q.json().catch(()=>({}));if(Q.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await nY(Z*1000);break}case"slow_down":{Z+=1,await nY(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new q1(J.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:J.error});default:throw new q1(`WorkOS token polling failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function tY($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(W.apiBaseUrl,s5.register),{method:"POST",headers:{"Content-Type":"application/json",...await E7(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??f8)});if(!J.ok){let X=await J.text().catch(()=>""),Y=K8(X);throw new q1(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code})}let j=await J.json();return N7(w7(j,"Invalid token exchange response"),Z??W.provider)}async function v_($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(Z2(Z.apiBaseUrl,s5.token),{method:"POST",headers:{"Content-Type":"application/json",...await E7(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!j.ok){let Y=await j.text().catch(()=>""),V=K8(Y);throw new q1(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let X=await j.json();return N7(w7(X,"Invalid token exchange response"),Q??Z.provider)}async function i4($){I1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:rY,Q=$.callbackPath??h_,J=W?null:await G1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??rY[0]}${Q}`;try{let X;if(W){let Y=M7().workOsClientId,V=await oY(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await sY({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:R7,onProgress:$.callbacks.onProgress});X=await tY(B,$,$.provider)}else{let Y=new URL(Z2($.apiBaseUrl,s5.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",j),Y.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await v_(V,j,$,B)}return x1($.telemetry,$.provider??"cline"),H1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw g1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function C7($){return await oY(M7().workOsClientId,$)}async function P7($){let W=$.provider??"cline";I1($.telemetry,W);try{let Z=await sY({clientId:M7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:R7}),Q=await tY(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return x1($.telemetry,W),H1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw g1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function t5($,W){let Z=Z2(W.apiBaseUrl,s5.refresh);W0(`cline.refresh.request url=${Z} refreshTokenHash=${M0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await E7(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??f8)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=K8(Y);throw W0(`cline.refresh.error status=${Q.status} errorCode=${V.code??"none"} message=${V.message??"none"}`),new q1(`Token refresh failed: ${Q.status}${V.message?` - ${V.message}`:""}`,{status:Q.status,errorCode:V.code})}let J=await Q.json(),j=$.metadata?.provider??W.provider,X=N7(w7(J,"Invalid token refresh response"),j,$);return W0(`cline.refresh.success newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} expires=${X.expires}`),X}async function n4($,W,Z){if(!$)return W0("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??k_,J=Z?.retryableTokenGraceMs??I_,j=Z?.forceRefresh===!0;if(!j&&!F8($,Q))return W0(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;W0(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${M0($.access)}`);try{return await t5($,W)}catch(X){let Y={status:X instanceof q1?X.status:void 0,errorCode:X instanceof q1?X.errorCode:void 0,errorName:X instanceof Error?X.name:void 0};if(X instanceof q1&&X.isLikelyInvalidGrant())return W0(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),F$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return W0(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),z7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw W0(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),z7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}T0();var WV={};N(WV,{refreshOpenAICodexToken:()=>$9,loginOpenAICodex:()=>a4,getValidOpenAICodexCredentials:()=>o4,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as c_}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class e5 extends Error{status;errorCode;constructor($,W){super($);this.name="OpenAICodexOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function u_($,W,Z=X0.redirectUri){let Q=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:W,redirect_uri:Z}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let J=await Q.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function d_($){try{let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok){let Q=await W.text().catch(()=>""),J=K8(Q);throw new e5(`Token refresh failed: ${W.status}${J.message?` - ${J.message}`:""}`,{status:W.status,errorCode:J.code})}let Z=await W.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}catch(W){if(W instanceof e5)throw W;return{type:"failed"}}}async function l_($="pi"){let{verifier:W,challenge:Z}=await a5(),Q=c_(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Z),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",Q),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:W,state:Q,url:J.toString()}}function p_(){try{let $=new URL(X0.redirectUri),W=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(W)?W:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function r_($,W){let Z=W?h0(W):h0($),Q=Z?Z:h0($),j=Q?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Q?.organizations;if(Array.isArray(X)&&X.length>0){let V=X[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=Q?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function $V($,W){let Z=r_($.access,$.idToken)??W?.accountId;if(!Z)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||W?.refresh||"",expires:$.expires,accountId:Z,email:$.email??W?.email,metadata:{...W?.metadata??{},provider:"openai-codex"}}}async function a4($){I1($.telemetry,"openai-codex");let W=p_(),{verifier:Z,state:Q,url:J}=await l_($.originator),j=await G1({host:W.host,ports:[W.port],callbackPath:W.callbackPath,expectedState:Q});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let X;try{let Y=await A8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==Q)throw Error("State mismatch");if(X=Y.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(H,{allowHashCodeState:!0});if(G.state&&G.state!==Q)throw Error("State mismatch");X=G.code}if(!X)throw Error("Missing authorization code");let V=await u_(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=$V(V);return x1($.telemetry,"openai-codex"),H1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw g1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function $9($,W){let Z=await d_($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=$V(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function o4($,W){if(!$)return null;let Z=W?.refreshBufferMs??X0.refreshBufferMs,Q=W?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!F8($,Z))return $;try{return await $9($.refresh,$)}catch(j){if(j instanceof e5&&j.isLikelyInvalidGrant())return F$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}T0();var fV={};N(fV,{refreshOcaToken:()=>J9,loginOcaOAuth:()=>t4,getValidOcaCredentials:()=>e4,OCI_HEADER_OPC_REQUEST_ID:()=>i_,DEFAULT_INTERNAL_OCA_BASE_URL:()=>W9,DEFAULT_INTERNAL_IDCS_URL:()=>JV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>jV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>QV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>Z9,DEFAULT_EXTERNAL_IDCS_URL:()=>YV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>VV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>XV});import{nanoid as ZV}from"nanoid";class b7{ttlMs;maxEntries;entries=new Map;constructor($,W){this.ttlMs=$;this.maxEntries=W}get($,W=Date.now()){this.pruneExpired(W);let Z=this.entries.get($);if(!Z)return;return this.entries.delete($),this.entries.set($,Z),Z.value}set($,W,Z=Date.now(),Q=this.ttlMs){this.pruneExpired(Z),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:W,expiresAt:Z+Q})}pruneExpired($){for(let[W,Z]of this.entries)if(Z.expiresAt<=$)this.entries.delete(W)}}var QV="a8331954c0cf48ba99b5dd223a14c6ea",JV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",jV="openid offline_access",W9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",XV="c1aba3deed5740659981a752714eba33",YV="https://login-ext.identity.oraclecloud.com",VV="openid offline_access",Z9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",i_="opc-request-id",n_="/auth/oca",a_=Array.from({length:11},($,W)=>48801+W),o_=300000,s_=30000,BV=30000,t_=600000;class Q9 extends Error{status;errorCode;constructor($,W){super($);this.name="OcaOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var f$={internal:{clientId:QV,idcsUrl:JV,scopes:jV,baseUrl:W9},external:{clientId:XV,idcsUrl:YV,scopes:VV,baseUrl:Z9}},s4=new Map,e_=86400000,$L=300000,WL=32,S7=new b7(e_,WL);function HV($){if(typeof $==="function")return $();return $??"internal"}function GV($){return{internal:{clientId:$?.internal?.clientId??f$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??f$.internal.idcsUrl,scopes:$?.internal?.scopes??f$.internal.scopes,baseUrl:$?.internal?.baseUrl??f$.internal.baseUrl},external:{clientId:$?.external?.clientId??f$.external.clientId,idcsUrl:$?.external?.idcsUrl??f$.external.idcsUrl,scopes:$?.external?.scopes??f$.external.scopes,baseUrl:$?.external?.baseUrl??f$.external.baseUrl}}}function ZL($=Date.now()){let W=$-t_;for(let[Z,Q]of s4.entries())if(Q.createdAt<W)s4.delete(Z)}function QL($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=h0(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=h0(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function KV($,W,Z){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let J=$.refresh_token??Z?.refresh;if(!J)throw Error("Token response did not include a refresh token");let j=h0($.id_token),X=h0(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:QL($,Q,$.id_token),accountId:Y??Z?.accountId,email:V??Z?.email,metadata:{...Z?.metadata??{},provider:"oca",mode:W,subject:Y,idToken:$.id_token}}}async function FV($,W){let Z=o5($),Q=S7.get(Z);if(Q)return Q;let J=`${Z}/.well-known/openid-configuration`,j=await fetch(J,{method:"GET",signal:AbortSignal.timeout(W)});if(!j.ok){let V=`${Z}/oauth2/v1/token`;return S7.set(Z,V,Date.now(),$L),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return S7.set(Z,Y),Y}function AV($){return{code:$.error,message:$.error_description}}async function JL($){let W=s4.get($.state);if(!W)throw Error("No PKCE verifier found for this state");s4.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await FV(Z.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:W.redirectUri,client_id:Z.clientId,code_verifier:W.verifier}),j=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let V=AV(X);throw new Q9(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=h0(X.id_token);if(!X.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==W.nonce)throw Error("OIDC nonce verification failed");return KV(X,$.mode)}function jL($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${o5(W.idcsUrl)}/oauth2/v1/authorize`);return Z.searchParams.set("client_id",W.clientId),Z.searchParams.set("response_type","code"),Z.searchParams.set("scope",W.scopes),Z.searchParams.set("code_challenge",$.challenge),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("redirect_uri",$.callbackUrl),Z.searchParams.set("state",$.state),Z.searchParams.set("nonce",$.nonce),Z.toString()}async function t4($){I1($.telemetry,"oca");let W=GV($.config),Z=HV($.mode),Q=$.callbackPorts?.length?$.callbackPorts:a_,J=$.callbackPath??n_,j=$.requestTimeoutMs??BV,X=await G1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=X.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=ZV(16),B=ZV(16),{verifier:H,challenge:G}=await a5();ZL(),s4.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=jL({callbackUrl:Y,mode:Z,state:V,nonce:B,challenge:G,config:W});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,D=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!D||D!==V)throw Error("State mismatch");let f=await JL({code:A,state:D,mode:Z,config:W,requestTimeoutMs:j});return x1($.telemetry,"oca"),H1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw g1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function J9($,W={}){let Z=GV(W.config),Q=W.requestTimeoutMs??BV,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:HV(W.mode),X=j==="external"?Z.external:Z.internal,Y=await FV(X.idcsUrl,Q),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(Q)}),H=await B.json();if(!B.ok){let G=AV(H);throw new Q9(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return KV(H,j,$)}async function e4($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??o_,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??s_;if(W?.forceRefresh!==!0&&!F8($,Q))return $;try{return await J9($,Z)}catch(X){if(X instanceof Q9&&X.isLikelyInvalidGrant())return F$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var j9="workos:";function XL($){let W=$.trim();return W.toLowerCase().startsWith(j9)?W:`${j9}${W}`}function YL($){let W=$.trim();return W.toLowerCase().startsWith(j9)?W.slice(j9.length):W}function VL($){let Z=h0($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function BL($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=VL(W);if(Q)return Q;return Date.now()-1}function HL($,W){let Z=$.auth?.accessToken?.trim(),Q=$.auth?.refreshToken?.trim();if(!Z||!Q)return null;let J=W?.normalizeAccessToken?.(Z)??Z;if(!J)return null;return{access:J,refresh:Q,expires:BL($,J),accountId:$.auth?.accountId}}function GL($){let W=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Z={...$.settings?.auth??{},accessToken:W,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Q={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Z};if($.save!==!1)$.manager.saveProviderSettings(Q,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return Q}function y7($){let W=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:W,getApiKey(Z){let Q=Z?.auth?.accessToken?.trim();if(Q)return $.formatAccessToken?.(Q)??Q;return Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Z){return GL({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function DV($){return y7({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:XL,normalizeStoredAccessToken:YL,login:({settings:W,callbacks:Z,telemetry:Q})=>i4({apiBaseUrl:W?.baseUrl?.trim()||UV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>n4(Z,{apiBaseUrl:W.baseUrl?.trim()||UV().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var KL=[DV({providerId:"cline"}),DV({providerId:"cline-pass",storageProviderId:"cline"}),y7({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>t4({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>e4(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),y7({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>a4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>o4($,{forceRefresh:W,telemetry:Z})})],FL=new Map(KL.map(($)=>[$.providerId,$]));function H0($){return FL.get($.trim().toLowerCase())}function Q2($){return H0($)!==void 0}function h7($){return H0($)?.storageProviderId}function k7($,W){let Z=H0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??U8(W,J)}async function $6($,W,Z){let Q=H0(W);if(!Q)throw Error(`Provider "${W}" does not support OAuth login`);let J=$.getProviderSettings(Q.storageProviderId),j=await Q.login({settings:J,callbacks:Z.callbacks,telemetry:Z.telemetry});return Q.saveCredentials({manager:$,settings:J,credentials:j})}function W6($,W){let Z=H0($);if(!Z)return null;return HL(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function J2($){let W=H0($.providerId);if(!W)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return W.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,W){let Z=H0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function I7($,W){let Z=H0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}T0();var WB={};N(WB,{createContextCompactionPrepareTurn:()=>H6,createCompactionStateAwarePrepareTurn:()=>G6});var MV={};N(MV,{projectSessionCompactionState:()=>j2,parseSessionCompactionState:()=>K1,createSessionCompactionState:()=>D8,SessionCompactionStateSchema:()=>Z6});import{createHash as AL}from"node:crypto";import{formatDisplayUserInput as LV}from"@cline/shared";import{z as O1}from"zod";function fL($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let W=$;if(W.role!=="user"&&W.role!=="assistant")return!1;return typeof W.content==="string"||Array.isArray(W.content)}var UL=O1.custom(fL),Z6=O1.object({version:O1.literal(1),updated_at:O1.string().datetime(),conversation_id:O1.string().min(1).optional(),source_message_count:O1.number().int().nonnegative(),source_prefix_hash:O1.string().min(1).optional(),source_last_message_key:O1.string().min(1).optional(),messages:O1.array(UL),system_prompt:O1.string().optional()});function x7($){return JSON.parse(JSON.stringify($))}function TV($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:LV($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:LV(W.text)}:W)}}function qV($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function DL($){let W=TV($);return qV(W.role),[["role",W.role],["content",W.content],["id",W.id??null],["agent",W.agent??null],["sessionId",W.sessionId??null],["metadata",W.metadata??null],["modelInfo",W.modelInfo??null],["metrics",W.metrics??null],["ts",W.ts??null]]}function OV($){if(!$)return"";let W=TV($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(qV(W.role),typeof W.ts==="number"&&Number.isFinite(W.ts))return`ts:${W.role}:${W.ts}`;return`content:${W.role}:${JSON.stringify(W.content)}`}function zV($,W=$.length){let Z=AL("sha256");Z.update(`cline-session-compaction-source-v1
46
46
  `),Z.update(`${W}
47
47
  `);for(let Q of $.slice(0,W))Z.update(JSON.stringify(DL(Q))),Z.update(`
48
48
  `);return`sha256:${Z.digest("hex")}`}function D8($){let W=$.sourceMessages.at(-1),Z=OV(W);return Z6.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:zV($.sourceMessages),...Z?{source_last_message_key:Z}:{},messages:x7($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function j2($,W){if(!($.source_message_count<=W.length))return;let Q=!!$.source_prefix_hash&&zV(W,$.source_message_count)===$.source_prefix_hash,J=W[$.source_message_count-1],j=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&OV(J)===$.source_last_message_key;if(!(Q||j))return;return[...x7($.messages),...x7(W.slice($.source_message_count))]}function K1($){let W=Z6.safeParse($);return W.success?W.data:void 0}import{createHandlerAsync as IL}from"@cline/llms";function _L($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function RV($){return $.map((W)=>({...W,content:Array.isArray(W.content)?W.content.map((Z)=>({...Z})):W.content,...W.metadata?{metadata:{...W.metadata}}:{}}))}function z1($){try{return JSON.stringify($).length}catch{return String($).length}}function X9($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function CV($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function Y9($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z.role==="user"&&!CV(Z))return W}return-1}function LL($){for(let W=0;W<$.length;W+=1){let Z=$[W];if(Z.role==="user"&&!CV(Z))return W}return-1}function m7($){let W=new Set;if(!Array.isArray($.content))return W;for(let Z of $.content)if(Z.type==="tool_use")W.add(Z.id);else if(Z.type==="tool_result")W.add(Z.tool_use_id);return W}function TL($){let W=new Map;for(let Z=0;Z<$.length;Z+=1)for(let Q of m7($[Z])){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function g7($){let W=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")W.add(Q.tool_use_id)}for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(!Array.isArray(Q.content))continue;if(Q.content.some((J)=>J.type==="tool_use"&&!W.has(J.id)))return Z}return $.length}function qL($,W){let Z=TL($),Q=new Set,J=[W];while(J.length>0){let j=J.shift();if(j===void 0||Q.has(j))continue;Q.add(j);for(let X of m7($[j]))for(let Y of Z.get(X)??[])if(!Q.has(Y))J.push(Y)}return Q}function OL($){return $.type==="image"||$.type==="redacted_thinking"}function zL($){return $.type==="image"}function ML($,W,Z){if(W.dropThinkingBlocks&&$.type==="thinking")return!0;return W.dropUnsafeOutsideLiveTail&&!Z&&OL($)}function NV($,W,Z,Q="over_budget"){let J=[],j=[];for(let X=0;X<$.length;X+=1){let Y=$[X];if(Array.isArray(Y.content)&&Y.content.length===0){Z.push({kind:"dropped_message",path:{messageIndex:W[X]},reason:Q,originalSize:z1(Y),finalSize:0});continue}J.push(Y),j.push(W[X])}return{messages:J,originalIndexes:j}}function RL($,W,Z,Q,J,j){return $.map((X,Y)=>{if(!Array.isArray(X.content))return X;let V=!1,B=Y===Q||Y>=J,H=X.content.flatMap((G,K)=>{if(ML(G,j,B))return V=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:z1(G),finalSize:0}),[];if(G.type==="tool_result"&&Array.isArray(G.content)){let F=G.content.filter((A)=>{if(j.dropUnsafeOutsideLiveTail&&!B&&zL(A))return!1;return!0});if(F.length!==G.content.length){V=!0;let A={...G,content:F};return Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:z1(G),finalSize:z1(A)}),[A]}}return[G]});return V?{...X,content:H}:X})}function NL($,W,Z){return $.map((Q,J)=>{if(!Array.isArray(Q.content))return Q;let j=!1,X=Q.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return j=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[J],blockIndex:V},reason:"unsafe_to_truncate",originalSize:z1(Y),finalSize:0}),!1});return j?{...Q,content:X}:Q})}function _8($,W){if(W<=0)return"";if($.length<=W)return $;if(W<=16)return $.slice(0,Math.max(1,W));let Z=`
@@ -86,17 +86,17 @@ ${$.conversationText||"(empty)"}`),W.join(`
86
86
 
87
87
  `)}function pV($){let W=$.summarizer,Z=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:j,...X}=J;return{...X,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??PV,thinking:!1}};if(!W)return Z($.activeProviderConfig);let Q=W.providerConfig?.providerId===W.providerId?W.providerConfig:void 0;return Z({...Q??{},providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey??Q?.apiKey,baseUrl:W.baseUrl??Q?.baseUrl,headers:W.headers??Q?.headers,modelInfo:W.modelInfo??Q?.modelInfo,knownModels:W.knownModels??Q?.knownModels,maxOutputTokens:W.maxOutputTokens??PV})}function rV($){return{role:"user",content:`Context summary:
88
88
 
89
- ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var p7=1024;function xL($){let W=$.maxInputTokens;if(typeof W==="number"&&Number.isFinite(W))return W;let Z=$.modelInfo?.maxInputTokens??$.modelInfo?.contextWindow;if(typeof Z==="number"&&Number.isFinite(Z))return Z;let Q=$.knownModels?.[$.modelId],J=Q?.maxInputTokens??Q?.contextWindow;if(typeof J==="number"&&Number.isFinite(J))return J;return}function gL($){return Q6({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function mL($){let W=await IL($.providerConfig),Z="";for await(let Q of W.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){Z+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Z.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Z.trim()}function vL($){try{return JSON.stringify($).length}catch{return String($).length}}async function iV($){let W=$.context.messages;if(W.length<2)return;let Z=dV(W,$.preserveRecentTokens,$.estimateMessageTokens);if(Z<=0||Z>=W.length)return;let Q=W.slice(0,Z),J=uV(Q),j=J>=0?u7(Q[J])?.summary:void 0,X=J>=0?Q.slice(J+1):Q;if(X.length===0)return;let Y=d7(Q),V=pV({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=xL(V),H=$.summarizer===void 0,G=Math.max($.context.maxInputTokens,$.context.triggerTokens,p7);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:p7});let K=B??(H?G:p7),F=V9(l7({previousSummary:j,conversationText:"",fileOps:Y}).length),A=K-F;if(A<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,summaryRequestOverheadTokens:F});return}let D=gL({messages:X,targetTokens:A,estimateMessageTokens:$.estimateMessageTokens});if(D.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:D.warnings.map((b)=>b.code),summaryInputEstimatedTokens:D.estimatedTokens,targetTokens:A,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let f=d7(D.messages),_=gV(D.messages),U=l7({previousSummary:j,conversationText:_,fileOps:f});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:X.length,preservedMessages:W.length-Z,previousSummaryChars:j?.length??0,conversationTextChars:_.length,summaryRequestChars:U.length,summaryRequestEstimatedTokens:V9(U.length),newMessagesJsonChars:vL(X),summaryInputEstimatedTokens:D.estimatedTokens,summaryInputActions:D.actions.length,summaryInputWarnings:D.warnings.map((b)=>b.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let R=await mL({providerConfig:V,request:U,logger:$.logger});if(!R.trim())return;let L=lV(R,f),q=W.reduce((b,P)=>b+$.estimateMessageTokens(P),0),T=[rV({summary:L,fileOps:f,tokensBefore:q}),...W.slice(Z)],C=T.reduce((b,P)=>b+$.estimateMessageTokens(P),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:W.length,messagesAfter:T.length,messagesSummarized:Z,messagesPreserved:W.length-Z,tokensBefore:q,tokensAfter:C,maxInputTokens:$.context.maxInputTokens});let w=D.actions.filter((b)=>b.reason==="over_budget"||b.reason==="tool_pair_boundary").length;return{messages:T,budget:{policyIntent:"agentic_summary",actionCount:w,warningCount:D.warnings.length,liveTailHandling:D.liveTailHandling}}}import{CHARS_PER_TOKEN as cL}from"@cline/shared";function uL($){if(Y6($))return;if(typeof $.content==="string"){let Z=$.content.trim();return Z?{...$,content:Z}:void 0}let W=$.content.filter((Z)=>Z.type!=="text"||Z.text.trim());if(W.length===0)return;return{...$,content:W.map((Z)=>Z.type==="text"?{...Z,text:Z.text.trim()}:Z.type==="tool_result"?{...Z,content:c7(Z.content)}:Z)}}function nV($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function aV($,W){if($.length<=W)return $;let Z=`
90
- ...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function oV($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*cL);if(typeof $.content==="string"){let X=aV($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=aV(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function dL($,W){let Z=vV($),Q=H9($),J=cV($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=uL($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:tV(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function sV($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=tV(Z),J.estimatedTokens-j}function tV($){if(!Array.isArray($.content))return[];let W=[];for(let Z of $.content)if(Z.type==="tool_use")W.push(Z.id);else if(Z.type==="tool_result")W.push(Z.tool_use_id);return W}function lL($){let W=new Map;for(let Z of $)for(let Q of Z.toolPairIds){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function pL($,W,Z){let Q=new Set,J=[Z],j=0;while(j<J.length){let X=J[j];if(j+=1,X===void 0||!$.has(X)||Q.has(X))continue;Q.add(X);for(let Y of X.toolPairIds)for(let V of W.get(Y)??[])if(!Q.has(V))J.push(V)}return Q}function rL($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function G9($,W,Z,Q){let J=new Set($),j=lL($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=pL(J,j,$[X]);if(Y.size===0){X+=1;continue}let V=0;for(let B of Y)V+=B.estimatedTokens,J.delete(B);Q-=V,rL($,Y)}return Q}function iL($,W,Z,Q,J){if(Z<=W)return Z;for(let X=$.length-1;X>=0&&Z>W;X-=1){let Y=$[X];if(Y.isFirstUser)continue;let V=Math.max(IV,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=sV($,X,oV(Y.message,V),J)}if(Z<=W)return Z;let j=$.findIndex((X)=>X.isFirstUser);if(j>=0){if($[j].estimatedTokens<=Q)return Z;while(Z>W){let Y=$[j],V=Math.max(1,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)break;let B=Y.estimatedTokens;if(Z+=sV($,j,oV(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function nL($,W){return JSON.stringify($)!==JSON.stringify(W)}function aL($){let W=H9($);if(W<0||W===0&&!V6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function eV($){let W=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*B9),$.context.maxInputTokens)),{compactable:Z,protectedTail:Q}=aL($.context.messages);if(Z.length===0)return;let J=nV(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=dL(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=G9(Y,(f)=>f.message.role==="assistant"&&!f.isLastAssistant,j,B),B=G9(Y,(f)=>f.message.role==="user"&&!f.isFirstUser&&!f.isLastUser,j,B),B=G9(Y,(f)=>f.message.role==="assistant"&&f.isLastAssistant,j,B),B=G9(Y,(f)=>f.message.role==="user"&&f.isLastUser&&!f.isFirstUser,j,B),B=iL(Y,j,B,$.context.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((f)=>f.message),...Q],G=Q6({messages:H,targetTokens:W,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(G.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:G.warnings.map((f)=>f.code),projectedTokens:G.estimatedTokens,targetTokens:W,maxInputTokens:$.context.maxInputTokens});let K=G.messages;if(!nL($.context.messages,K))return;let F=V+J,A=nV(K,$.estimateMessageTokens),D=G.actions.filter((f)=>f.reason==="over_budget"||f.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:K.length,messagesRemoved:$.context.messages.length-K.length,tokensBefore:F,tokensAfter:A,budgetStatus:G.status,budgetActions:D,budgetWarnings:G.warnings.map((f)=>f.code),targetTokens:W,maxInputTokens:$.context.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:D,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var oL=0.5,sL=0.5;function $B($){try{return JSON.stringify($).length}catch{return String($).length}}function B6($){return typeof $==="number"&&Number.isFinite($)&&$>0}function tL($){let W=[];if(B6($.configMaxInputTokens))W.push($.configMaxInputTokens);if(B6($.modelMaxInputTokens))W.push($.modelMaxInputTokens);if(B6($.contextWindow)){W.push($.contextWindow);let Z=B6($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(B6(Z)&&Z>=$.contextWindow*oL)W.push(Z)}return W.length>0?Math.min(...W):SV}function eL($){let W=0,Z=0,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result")continue;let X=$B(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var $T={basic:({context:$,estimateMessageTokens:W,logger:Z})=>eV({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,mode:Q,estimateMessageTokens:J,logger:j})=>iV({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Q==="manual"?Math.min(Z?.preserveRecentTokens??v7,$.triggerTokens):Z?.preserveRecentTokens??v7,estimateMessageTokens:J,logger:j})};function WT($){if(typeof $.config.reserveTokens==="number"){let Z=Math.max(0,$.config.reserveTokens),Q=Math.max(0,$.maxInputTokens-Z);return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Z=$.config.thresholdRatio,Q=$.maxInputTokens*Z;return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:Z}}let W=Math.max(0,Math.min($.maxInputTokens-hV,$.maxInputTokens*yV));return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function ZT($){let W=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Z=Math.min(0.95,Math.max(0.05,W)),Q=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Z)));return{triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}function QT($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*sL):Math.floor($.triggerTokens*B9),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function JT($){let W=0,Z=!1;for(let Q of $)if(Q.role==="user")Z=!0;else if(Q.role==="assistant"&&Z)W+=1,Z=!1;return W}function H6($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=mV(),j=Z?.strategy??"basic",X=$T[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((w,b)=>w+J(b),0),G=tL({configMaxInputTokens:Z?.maxInputTokens,modelMaxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow,modelMaxTokens:B.model.info?.maxTokens}),K=WT({inputTokens:H,maxInputTokens:G,config:{maxInputTokens:Z?.maxInputTokens,reserveTokens:Z?.reserveTokens,thresholdRatio:Z?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:j,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:H,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:$B(B.apiMessages),...eL(B.apiMessages)}),Y==="auto"&&!K.shouldCompact)return;let F=Y==="manual"?ZT({inputTokens:H,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:W.manualTargetRatio}):K,A=Y==="auto"?QT({maxInputTokens:G,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:JT(B.messages)}):void 0,D={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?H/G:0},f=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:B.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let _=B.messages.length,U=B.messages.reduce((w,b)=>w+J(b),0),R=Date.now(),L=Z?.compact?await Z.compact(D):await X({context:D,providerConfig:{...Q,abortSignal:B.abortSignal},compaction:Z,mode:Y,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-R,T=$.sessionId??B.conversationId,C={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(L?.messages){let w=L.messages.reduce((b,P)=>b+J(P),0);if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:G,inputTokens:U,apiInputTokens:H,afterTokens:w,tokensSaved:U-w,utilizationBefore:`${(U/G*100).toFixed(1)}%`,utilizationAfter:`${(w/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:_,messagesAfter:L.messages.length,messagesRemoved:_-L.messages.length}),i5($.telemetry,{ulid:T,strategy:V,mode:Y,messagesBefore:_,messagesAfter:L.messages.length,messagesRemoved:_-L.messages.length,tokensBefore:U,tokensAfter:w,tokensSaved:U-w,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,...C}),L.budget&&(L.budget.actionCount>0||L.budget.warningCount>0))dY($.telemetry,{ulid:T,strategy:V,mode:Y,policyIntent:L.budget.policyIntent,actionCount:L.budget.actionCount,warningCount:L.budget.warningCount,liveTailHandling:L.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...C}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:L.budget.policyIntent,actionCount:L.budget.actionCount,warningCount:L.budget.warningCount})}else n5($.telemetry,{ulid:T,strategy:V,mode:Y,reason:"no_result",tokensBefore:U,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,...C});return L}}function G6($){return async(W)=>{let Z=$.getState?.(),Q=Z?j2(Z,W.messages):void 0;if(Z&&Q){let j=$.compact?await $.compact({...W,messages:Q,apiMessages:Q}):void 0;if(j?.messages){let X=j.systemPrompt??Z.system_prompt,Y=D8({sourceMessages:W.messages,compactedMessages:j.messages,conversationId:W.conversationId,systemPrompt:X});return await $.saveState?.(Y),{...j,...X!==void 0?{systemPrompt:X}:{}}}return{messages:Q,...j?.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:Z.system_prompt!==void 0?{systemPrompt:Z.system_prompt}:{}}}let J=$.compact?await $.compact(W):void 0;if(J?.messages){let j=D8({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}var uH={};N(uH,{zodToJsonSchema:()=>fz,validateWithZod:()=>Az,truncateCommandOutput:()=>V2,resolveToolRoutingConfig:()=>N8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>I9,getCoreHeadlessToolNames:()=>I6,getCoreDefaultEnabledToolIds:()=>k9,getCoreBuiltinToolCatalog:()=>L2,getCoreAcpToolNames:()=>x9,createWebFetchTool:()=>s7,createWebFetchExecutor:()=>E6,createToolPoliciesWithPreset:()=>T9,createSubmitAndExitTool:()=>W3,createSkillsTool:()=>H2,createShellTool:()=>O6,createShellExecutor:()=>B2,createSearchTool:()=>o7,createSearchExecutor:()=>N6,createReadFilesTool:()=>a7,createFileReadExecutor:()=>R6,createEditorTool:()=>e7,createEditorExecutor:()=>M6,createDefaultToolsWithPreset:()=>q9,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>w6,createDefaultExecutors:()=>M8,createBuiltinTools:()=>T2,createAskQuestionTool:()=>$3,createApplyPatchTool:()=>t7,createApplyPatchExecutor:()=>z6,WebFetchRequestSchema:()=>r7,ToolPresets:()=>s0,TEAM_TOOL_NAMES:()=>C8,SubmitInputSchema:()=>q6,StructuredCommandInputSchema:()=>X2,SkillsInputSchema:()=>L6,SearchCodebaseInputSchema:()=>A6,RunCommandsInputSchema:()=>f6,ReadFilesInputSchema:()=>F6,ReadFileRequestSchema:()=>m1,MAX_COMMAND_OUTPUT_CHARS:()=>c1,FetchWebContentInputSchema:()=>U6,EditFileInputSchema:()=>D6,DefaultToolNames:()=>q0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>R8,AskQuestionInputSchema:()=>T6,ApplyPatchInputSchema:()=>_6,ALL_DEFAULT_TOOL_NAMES:()=>U$});import{validateWithZod as Az,zodToJsonSchema as fz}from"@cline/shared";var q0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},U$=[q0.READ_FILES,q0.SEARCH_CODEBASE,q0.RUN_COMMANDS,q0.FETCH_WEB_CONTENT,q0.APPLY_PATCH,q0.EDITOR,q0.SKILLS,q0.ASK,q0.SUBMIT_AND_EXIT];T0();import{createTool as _$,validateWithZod as L$,zodToJsonSchema as u1}from"@cline/shared";var ZB="__clineInternalTelemetry";function QB($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as UB}from"node:child_process";import{StringDecoder as HT}from"node:string_decoder";import{getDefaultShell as GT,getShellArgs as KT}from"@cline/shared";import{validateWithZod as XT}from"@cline/shared";import{z as M}from"zod";var D$=6000,K6=M.string().describe("The absolute file path of a text file to read content from"),JB=M.object({start_line:M.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:M.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),m1=M.object({path:K6,start_line:JB.shape.start_line,end_line:JB.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),F6=M.object({files:M.array(m1).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),jB=M.union([F6,m1,M.array(m1),M.array(M.string()),M.string(),M.object({files:M.array(M.union([K6,m1]))}),M.object({files:m1}),M.object({files:K6}),M.object({file_paths:M.array(K6)}),M.object({file_paths:M.string()}),M.object({paths:M.array(M.union([K6,m1]))}),M.object({paths:m1}),M.object({paths:M.string()})]),A6=M.object({queries:M.array(M.string()).describe("Array of regex search queries to execute")}),XB=M.union([A6,M.array(M.string()),M.string(),M.object({queries:M.string()})]),K9=M.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${D$*2} characters) to avoid timeouts.`),X2=M.object({command:M.string().min(1).describe("The executable to run directly without shell parsing."),args:M.array(M.string()).optional().describe("Optional argv list passed directly to the executable.")}),YB=M.union([K9,X2]),f6=M.object({commands:M.array(K9).describe("Array of complete shell command strings to execute.")}),jT=M.object({commands:M.array(YB)}),VB=M.union([f6,jT,M.object({commands:YB}),M.array(X2),X2,M.object({command:K9}),M.object({cmd:K9}),M.array(M.string()),M.string()]),r7=M.object({url:M.string().describe("The URL to fetch"),prompt:M.string().min(2).describe("Analysis prompt for the fetched content")}),U6=M.object({requests:M.array(r7).describe("Array of the URLs for the web fetch requests")}),D6=M.object({path:M.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:M.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${D$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:M.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${D$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:M.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),_6=M.object({input:M.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),BB=M.union([_6,M.string()]),L6=M.object({skill:M.string().min(1).describe("Name of the skill to execute."),args:M.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),T6=M.object({question:M.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:M.array(M.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),q6=M.object({summary:M.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:M.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
89
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var p7=1024;function xL($){let W=$.maxInputTokens;if(typeof W==="number"&&Number.isFinite(W))return W;let Z=$.modelInfo?.maxInputTokens??$.modelInfo?.contextWindow;if(typeof Z==="number"&&Number.isFinite(Z))return Z;let Q=$.knownModels?.[$.modelId],J=Q?.maxInputTokens??Q?.contextWindow;if(typeof J==="number"&&Number.isFinite(J))return J;return}function gL($){return Q6({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function mL($){let W=await IL($.providerConfig),Z="";for await(let Q of W.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){Z+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Z.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Z.trim()}function vL($){try{return JSON.stringify($).length}catch{return String($).length}}async function iV($){let W=$.context.messages;if(W.length<2)return;let Z=dV(W,$.preserveRecentTokens,$.estimateMessageTokens);if(Z<=0||Z>=W.length)return;let Q=W.slice(0,Z),J=uV(Q),j=J>=0?u7(Q[J])?.summary:void 0,X=J>=0?Q.slice(J+1):Q;if(X.length===0)return;let Y=d7(Q),V=pV({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=xL(V),H=$.summarizer===void 0,G=Math.max($.context.maxInputTokens,$.context.triggerTokens,p7);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:p7});let K=B??(H?G:p7),F=V9(l7({previousSummary:j,conversationText:"",fileOps:Y}).length),A=K-F;if(A<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,summaryRequestOverheadTokens:F});return}let D=gL({messages:X,targetTokens:A,estimateMessageTokens:$.estimateMessageTokens});if(D.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:D.warnings.map((b)=>b.code),summaryInputEstimatedTokens:D.estimatedTokens,targetTokens:A,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let f=d7(D.messages),_=gV(D.messages),U=l7({previousSummary:j,conversationText:_,fileOps:f});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:X.length,preservedMessages:W.length-Z,previousSummaryChars:j?.length??0,conversationTextChars:_.length,summaryRequestChars:U.length,summaryRequestEstimatedTokens:V9(U.length),newMessagesJsonChars:vL(X),summaryInputEstimatedTokens:D.estimatedTokens,summaryInputActions:D.actions.length,summaryInputWarnings:D.warnings.map((b)=>b.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let R=await mL({providerConfig:V,request:U,logger:$.logger});if(!R.trim())return;let L=lV(R,f),q=W.reduce((b,P)=>b+$.estimateMessageTokens(P),0),T=[rV({summary:L,fileOps:f,tokensBefore:q}),...W.slice(Z)],w=T.reduce((b,P)=>b+$.estimateMessageTokens(P),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:W.length,messagesAfter:T.length,messagesSummarized:Z,messagesPreserved:W.length-Z,tokensBefore:q,tokensAfter:w,maxInputTokens:$.context.maxInputTokens});let E=D.actions.filter((b)=>b.reason==="over_budget"||b.reason==="tool_pair_boundary").length;return{messages:T,budget:{policyIntent:"agentic_summary",actionCount:E,warningCount:D.warnings.length,liveTailHandling:D.liveTailHandling}}}import{CHARS_PER_TOKEN as cL}from"@cline/shared";function uL($){if(Y6($))return;if(typeof $.content==="string"){let Z=$.content.trim();return Z?{...$,content:Z}:void 0}let W=$.content.filter((Z)=>Z.type!=="text"||Z.text.trim());if(W.length===0)return;return{...$,content:W.map((Z)=>Z.type==="text"?{...Z,text:Z.text.trim()}:Z.type==="tool_result"?{...Z,content:c7(Z.content)}:Z)}}function nV($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function aV($,W){if($.length<=W)return $;let Z=`
90
+ ...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function oV($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*cL);if(typeof $.content==="string"){let X=aV($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=aV(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function dL($,W){let Z=vV($),Q=H9($),J=cV($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=uL($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:tV(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function sV($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=tV(Z),J.estimatedTokens-j}function tV($){if(!Array.isArray($.content))return[];let W=[];for(let Z of $.content)if(Z.type==="tool_use")W.push(Z.id);else if(Z.type==="tool_result")W.push(Z.tool_use_id);return W}function lL($){let W=new Map;for(let Z of $)for(let Q of Z.toolPairIds){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function pL($,W,Z){let Q=new Set,J=[Z],j=0;while(j<J.length){let X=J[j];if(j+=1,X===void 0||!$.has(X)||Q.has(X))continue;Q.add(X);for(let Y of X.toolPairIds)for(let V of W.get(Y)??[])if(!Q.has(V))J.push(V)}return Q}function rL($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function G9($,W,Z,Q){let J=new Set($),j=lL($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=pL(J,j,$[X]);if(Y.size===0){X+=1;continue}let V=0;for(let B of Y)V+=B.estimatedTokens,J.delete(B);Q-=V,rL($,Y)}return Q}function iL($,W,Z,Q,J){if(Z<=W)return Z;for(let X=$.length-1;X>=0&&Z>W;X-=1){let Y=$[X];if(Y.isFirstUser)continue;let V=Math.max(IV,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=sV($,X,oV(Y.message,V),J)}if(Z<=W)return Z;let j=$.findIndex((X)=>X.isFirstUser);if(j>=0){if($[j].estimatedTokens<=Q)return Z;while(Z>W){let Y=$[j],V=Math.max(1,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)break;let B=Y.estimatedTokens;if(Z+=sV($,j,oV(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function nL($,W){return JSON.stringify($)!==JSON.stringify(W)}function aL($){let W=H9($);if(W<0||W===0&&!V6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function eV($){let W=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*B9),$.context.maxInputTokens)),{compactable:Z,protectedTail:Q}=aL($.context.messages);if(Z.length===0)return;let J=nV(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=dL(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=G9(Y,(f)=>f.message.role==="assistant"&&!f.isLastAssistant,j,B),B=G9(Y,(f)=>f.message.role==="user"&&!f.isFirstUser&&!f.isLastUser,j,B),B=G9(Y,(f)=>f.message.role==="assistant"&&f.isLastAssistant,j,B),B=G9(Y,(f)=>f.message.role==="user"&&f.isLastUser&&!f.isFirstUser,j,B),B=iL(Y,j,B,$.context.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((f)=>f.message),...Q],G=Q6({messages:H,targetTokens:W,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(G.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:G.warnings.map((f)=>f.code),projectedTokens:G.estimatedTokens,targetTokens:W,maxInputTokens:$.context.maxInputTokens});let K=G.messages;if(!nL($.context.messages,K))return;let F=V+J,A=nV(K,$.estimateMessageTokens),D=G.actions.filter((f)=>f.reason==="over_budget"||f.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:K.length,messagesRemoved:$.context.messages.length-K.length,tokensBefore:F,tokensAfter:A,budgetStatus:G.status,budgetActions:D,budgetWarnings:G.warnings.map((f)=>f.code),targetTokens:W,maxInputTokens:$.context.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:D,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var oL=0.5,sL=0.5;function $B($){try{return JSON.stringify($).length}catch{return String($).length}}function B6($){return typeof $==="number"&&Number.isFinite($)&&$>0}function tL($){let W=[];if(B6($.configMaxInputTokens))W.push($.configMaxInputTokens);if(B6($.modelMaxInputTokens))W.push($.modelMaxInputTokens);if(B6($.contextWindow)){W.push($.contextWindow);let Z=B6($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(B6(Z)&&Z>=$.contextWindow*oL)W.push(Z)}return W.length>0?Math.min(...W):SV}function eL($){let W=0,Z=0,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result")continue;let X=$B(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var $T={basic:({context:$,estimateMessageTokens:W,logger:Z})=>eV({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,mode:Q,estimateMessageTokens:J,logger:j})=>iV({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Q==="manual"?Math.min(Z?.preserveRecentTokens??v7,$.triggerTokens):Z?.preserveRecentTokens??v7,estimateMessageTokens:J,logger:j})};function WT($){if(typeof $.config.reserveTokens==="number"){let Z=Math.max(0,$.config.reserveTokens),Q=Math.max(0,$.maxInputTokens-Z);return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Z=$.config.thresholdRatio,Q=$.maxInputTokens*Z;return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:Z}}let W=Math.max(0,Math.min($.maxInputTokens-hV,$.maxInputTokens*yV));return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function ZT($){let W=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Z=Math.min(0.95,Math.max(0.05,W)),Q=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Z)));return{triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}function QT($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*sL):Math.floor($.triggerTokens*B9),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function JT($){let W=0,Z=!1;for(let Q of $)if(Q.role==="user")Z=!0;else if(Q.role==="assistant"&&Z)W+=1,Z=!1;return W}function H6($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=mV(),j=Z?.strategy??"basic",X=$T[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((E,b)=>E+J(b),0),G=tL({configMaxInputTokens:Z?.maxInputTokens,modelMaxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow,modelMaxTokens:B.model.info?.maxTokens}),K=WT({inputTokens:H,maxInputTokens:G,config:{maxInputTokens:Z?.maxInputTokens,reserveTokens:Z?.reserveTokens,thresholdRatio:Z?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:j,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:H,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:$B(B.apiMessages),...eL(B.apiMessages)}),Y==="auto"&&!K.shouldCompact)return;let F=Y==="manual"?ZT({inputTokens:H,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:W.manualTargetRatio}):K,A=Y==="auto"?QT({maxInputTokens:G,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:JT(B.messages)}):void 0,D={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?H/G:0},f=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:B.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let _=B.messages.length,U=B.messages.reduce((E,b)=>E+J(b),0),R=Date.now(),L=Z?.compact?await Z.compact(D):await X({context:D,providerConfig:{...Q,abortSignal:B.abortSignal},compaction:Z,mode:Y,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-R,T=$.sessionId??B.conversationId,w={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(L?.messages){let E=L.messages.reduce((b,P)=>b+J(P),0);if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:G,inputTokens:U,apiInputTokens:H,afterTokens:E,tokensSaved:U-E,utilizationBefore:`${(U/G*100).toFixed(1)}%`,utilizationAfter:`${(E/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:_,messagesAfter:L.messages.length,messagesRemoved:_-L.messages.length}),i5($.telemetry,{ulid:T,strategy:V,mode:Y,messagesBefore:_,messagesAfter:L.messages.length,messagesRemoved:_-L.messages.length,tokensBefore:U,tokensAfter:E,tokensSaved:U-E,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,...w}),L.budget&&(L.budget.actionCount>0||L.budget.warningCount>0))dY($.telemetry,{ulid:T,strategy:V,mode:Y,policyIntent:L.budget.policyIntent,actionCount:L.budget.actionCount,warningCount:L.budget.warningCount,liveTailHandling:L.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...w}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:L.budget.policyIntent,actionCount:L.budget.actionCount,warningCount:L.budget.warningCount})}else n5($.telemetry,{ulid:T,strategy:V,mode:Y,reason:"no_result",tokensBefore:U,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,...w});return L}}function G6($){return async(W)=>{let Z=$.getState?.(),Q=Z?j2(Z,W.messages):void 0;if(Z&&Q){let j=$.compact?await $.compact({...W,messages:Q,apiMessages:Q}):void 0;if(j?.messages){let X=j.systemPrompt??Z.system_prompt,Y=D8({sourceMessages:W.messages,compactedMessages:j.messages,conversationId:W.conversationId,systemPrompt:X});return await $.saveState?.(Y),{...j,...X!==void 0?{systemPrompt:X}:{}}}return{messages:Q,...j?.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:Z.system_prompt!==void 0?{systemPrompt:Z.system_prompt}:{}}}let J=$.compact?await $.compact(W):void 0;if(J?.messages){let j=D8({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}var uH={};N(uH,{zodToJsonSchema:()=>fz,validateWithZod:()=>Az,truncateCommandOutput:()=>V2,resolveToolRoutingConfig:()=>N8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>I9,getCoreHeadlessToolNames:()=>I6,getCoreDefaultEnabledToolIds:()=>k9,getCoreBuiltinToolCatalog:()=>L2,getCoreAcpToolNames:()=>x9,createWebFetchTool:()=>s7,createWebFetchExecutor:()=>E6,createToolPoliciesWithPreset:()=>T9,createSubmitAndExitTool:()=>W3,createSkillsTool:()=>H2,createShellTool:()=>O6,createShellExecutor:()=>B2,createSearchTool:()=>o7,createSearchExecutor:()=>N6,createReadFilesTool:()=>a7,createFileReadExecutor:()=>R6,createEditorTool:()=>e7,createEditorExecutor:()=>M6,createDefaultToolsWithPreset:()=>q9,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>w6,createDefaultExecutors:()=>M8,createBuiltinTools:()=>T2,createAskQuestionTool:()=>$3,createApplyPatchTool:()=>t7,createApplyPatchExecutor:()=>z6,WebFetchRequestSchema:()=>r7,ToolPresets:()=>s0,TEAM_TOOL_NAMES:()=>C8,SubmitInputSchema:()=>q6,StructuredCommandInputSchema:()=>X2,SkillsInputSchema:()=>L6,SearchCodebaseInputSchema:()=>A6,RunCommandsInputSchema:()=>f6,ReadFilesInputSchema:()=>F6,ReadFileRequestSchema:()=>m1,MAX_COMMAND_OUTPUT_CHARS:()=>c1,FetchWebContentInputSchema:()=>U6,EditFileInputSchema:()=>D6,DefaultToolNames:()=>q0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>R8,AskQuestionInputSchema:()=>T6,ApplyPatchInputSchema:()=>_6,ALL_DEFAULT_TOOL_NAMES:()=>U$});import{validateWithZod as Az,zodToJsonSchema as fz}from"@cline/shared";var q0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},U$=[q0.READ_FILES,q0.SEARCH_CODEBASE,q0.RUN_COMMANDS,q0.FETCH_WEB_CONTENT,q0.APPLY_PATCH,q0.EDITOR,q0.SKILLS,q0.ASK,q0.SUBMIT_AND_EXIT];T0();import{createTool as _$,validateWithZod as L$,zodToJsonSchema as u1}from"@cline/shared";var ZB="__clineInternalTelemetry";function QB($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as UB}from"node:child_process";import{StringDecoder as HT}from"node:string_decoder";import{getDefaultShell as GT,getShellArgs as KT}from"@cline/shared";import{validateWithZod as XT}from"@cline/shared";import{z as M}from"zod";var D$=6000,K6=M.string().describe("The absolute file path of a text file to read content from"),JB=M.object({start_line:M.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:M.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),m1=M.object({path:K6,start_line:JB.shape.start_line,end_line:JB.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),F6=M.object({files:M.array(m1).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),jB=M.union([F6,m1,M.array(m1),M.array(M.string()),M.string(),M.object({files:M.array(M.union([K6,m1]))}),M.object({files:m1}),M.object({files:K6}),M.object({file_paths:M.array(K6)}),M.object({file_paths:M.string()}),M.object({paths:M.array(M.union([K6,m1]))}),M.object({paths:m1}),M.object({paths:M.string()})]),A6=M.object({queries:M.array(M.string()).describe("Array of regex search queries to execute")}),XB=M.union([A6,M.array(M.string()),M.string(),M.object({queries:M.string()})]),K9=M.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${D$*2} characters) to avoid timeouts.`),X2=M.object({command:M.string().min(1).describe("The executable to run directly without shell parsing."),args:M.array(M.string()).optional().describe("Optional argv list passed directly to the executable.")}),YB=M.union([K9,X2]),f6=M.object({commands:M.array(K9).describe("Array of complete shell command strings to execute.")}),jT=M.object({commands:M.array(YB)}),VB=M.union([f6,jT,M.object({commands:YB}),M.array(X2),X2,M.object({command:K9}),M.object({cmd:K9}),M.array(M.string()),M.string()]),r7=M.object({url:M.string().describe("The URL to fetch"),prompt:M.string().min(2).describe("Analysis prompt for the fetched content")}),U6=M.object({requests:M.array(r7).describe("Array of the URLs for the web fetch requests")}),D6=M.object({path:M.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:M.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${D$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:M.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${D$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:M.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),_6=M.object({input:M.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),BB=M.union([_6,M.string()]),L6=M.object({skill:M.string().min(1).describe("Name of the skill to execute."),args:M.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),T6=M.object({question:M.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:M.array(M.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),q6=M.object({summary:M.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:M.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
91
91
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
92
92
  IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function Y2($){if($ instanceof Error)return $.message;return String($)}function GB($){if(typeof $.old_text==="string"&&$.old_text.length>D$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${D$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>D$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${D$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class L8 extends Error{timeoutMs;constructor($,W){super($);this.name="TimeoutError",this.timeoutMs=W}}function v1($,W,Z){return Promise.race([$,new Promise((Q,J)=>{setTimeout(()=>J(new L8(Z,W)),W)})])}function F9($){let{path:W,start_line:Z,end_line:Q}=$;if(Z==null&&Q==null)return W;return`${W}:${Z??1}-${Q??"EOF"}`}function KB($){let{start_line:W,end_line:Z}=$;if(W==null||Z==null||W<=Z)return null;return`start_line must be less than or equal to end_line (received start_line: ${W}, end_line: ${Z})`}var YT=new Set(["start_line","end_line"]);function VT($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let W=Object.keys($);return W.length>0&&W.every((Z)=>YT.has(Z))}function HB($){let W=[];for(let Z of $){if(VT(Z)){let Q=W[W.length-1];if(typeof Q==="string"){W[W.length-1]={path:Q,...Z};continue}if(Q!==null&&typeof Q==="object"&&!Array.isArray(Q)&&"path"in Q&&Object.keys(Z).every((J)=>!(J in Q))){W[W.length-1]={...Q,...Z};continue}}W.push(Z)}return W}function FB($){if(Array.isArray($))return HB($);if($!==null&&typeof $==="object")for(let W of["files","paths"]){let Z=$[W];if(Array.isArray(Z))return{...$,[W]:HB(Z)}}return $}function AB($){let W=XT(VB,$);if(typeof W==="string")return[W];if(Array.isArray(W))return W;if("commands"in W)return Array.isArray(W.commands)?W.commands:[W.commands];if("command"in W)return"args"in W?[W]:[W.command];if("cmd"in W)return[W.cmd];return[W]}function BT($){if(typeof $==="string")return $;let W=$.args??[];if(W.length===0)return $.command;let Z=W.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${Z.join(" ")}`}var i7=200;function fB($){let W=BT($);if(W.length<=i7)return W;let Z=W.length-i7;return`${W.slice(0,i7)} ... [command truncated: ${Z} more chars; full command is in the tool call input]`}var c1=48000;function V2($,W={}){let Z=W.maxChars??48000,Q=W.totalChars??$.length;if($.length<=Z&&Q<=Z)return $;let J=Math.ceil(Z/2),j=Math.max(1,Z-J);return`${$.slice(0,J)}
93
93
  [... output truncated: ${Q} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
94
- `+$.slice(-j)}var T8=2000,n7=2000,A9=48000,q8=48000;class f9 extends Error{exitCode;output;constructor($,W){super(`Command exited with code ${$}`);this.exitCode=$;this.output=W;this.name="CommandExitError"}}function DB($){let W=Math.ceil($/2),Z=Math.max(1,$-W),Q=new HT("utf8"),J="",j="",X=0,Y=(V)=>{if(!V)return;X+=V.length;let B=W-J.length;if(B>0){J+=V.slice(0,B),j=(j+V.slice(B)).slice(-Z);return}j=(j+V).slice(-Z)};return{append(V){Y(Q.write(V))},snapshot(){return Y(Q.end()),{text:J+j,totalChars:X,dropped:X>J.length+j.length}}}}function FT($,W,Z,Q,J){return new Promise((j,X)=>{let Y=process.platform==="win32",V=UB($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=DB(Q),G=DB(Q),K=!1,F=!1,A=(L)=>{if(F)return;F=!0,L()},D=()=>{if(!B)return;if(Y){UB("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(L)=>{K=!0,D(),A(()=>X(L))},_=setTimeout(()=>f(new L8(`Command timed out after ${Z}ms`,Z)),Z),U=()=>f(Error("Command was aborted"));if(W.signal)W.signal.addEventListener("abort",U);let R=()=>{clearTimeout(_),W.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(L)=>{H.append(L)}),V.stderr?.on("data",(L)=>{G.append(L)}),V.on("close",(L)=>{if(R(),K)return;let q=H.snapshot(),T=G.snapshot();if(L!==0){let C=L??1,w=J?q.text+(T.text?`
94
+ `+$.slice(-j)}var T8=2000,n7=2000,A9=48000,q8=48000;class f9 extends Error{exitCode;output;constructor($,W){super(`Command exited with code ${$}`);this.exitCode=$;this.output=W;this.name="CommandExitError"}}function DB($){let W=Math.ceil($/2),Z=Math.max(1,$-W),Q=new HT("utf8"),J="",j="",X=0,Y=(V)=>{if(!V)return;X+=V.length;let B=W-J.length;if(B>0){J+=V.slice(0,B),j=(j+V.slice(B)).slice(-Z);return}j=(j+V).slice(-Z)};return{append(V){Y(Q.write(V))},snapshot(){return Y(Q.end()),{text:J+j,totalChars:X,dropped:X>J.length+j.length}}}}function FT($,W,Z,Q,J){return new Promise((j,X)=>{let Y=process.platform==="win32",V=UB($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=DB(Q),G=DB(Q),K=!1,F=!1,A=(L)=>{if(F)return;F=!0,L()},D=()=>{if(!B)return;if(Y){UB("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(L)=>{K=!0,D(),A(()=>X(L))},_=setTimeout(()=>f(new L8(`Command timed out after ${Z}ms`,Z)),Z),U=()=>f(Error("Command was aborted"));if(W.signal)W.signal.addEventListener("abort",U);let R=()=>{clearTimeout(_),W.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(L)=>{H.append(L)}),V.stderr?.on("data",(L)=>{G.append(L)}),V.on("close",(L)=>{if(R(),K)return;let q=H.snapshot(),T=G.snapshot();if(L!==0){let w=L??1,E=J?q.text+(T.text?`
95
95
  [stderr]
96
- ${T.text}`:""):q.text,b=q.dropped||J&&T.dropped,P=J?q.totalChars+T.totalChars:q.totalChars;if(b||w.length>Q)w=V2(w,{maxChars:Q,totalChars:P});let r=w.length>0?`[Command exited with code ${C}]
97
- ${w}`:`[Command exited with code ${C}]`;A(()=>X(new f9(C,r)))}else{let C=J?q.text+(T.text?`
96
+ ${T.text}`:""):q.text,b=q.dropped||J&&T.dropped,P=J?q.totalChars+T.totalChars:q.totalChars;if(b||E.length>Q)E=V2(E,{maxChars:Q,totalChars:P});let r=E.length>0?`[Command exited with code ${w}]
97
+ ${E}`:`[Command exited with code ${w}]`;A(()=>X(new f9(w,r)))}else{let w=J?q.text+(T.text?`
98
98
  [stderr]
99
- ${T.text}`:""):q.text;if(q.dropped||J&&T.dropped||C.length>Q){let b=J?q.totalChars+T.totalChars:q.totalChars;C=V2(C,{maxChars:Q,totalChars:b})}A(()=>j(C))}}),V.on("error",(L)=>{R(),A(()=>X(Error(`Failed to execute command: ${L.message}`)))})})}function B2($={}){let{shell:W=GT(process.platform),timeoutMs:Z=30000,env:Q={},combineOutput:J=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??c1;return(X,Y,V)=>{let B=typeof X!=="string";return FT({executable:B?X.command:W,args:B?X.args??[]:KT(W,X),cwd:Y,env:Q},V,Z,j,J)}}function _B($,W){let Z=$.metadata?.[W];return typeof Z==="string"?Z:void 0}function AT($,W){uY(QB($.metadata),{tool_name:"run_commands",effective_timeout_ms:W.effectiveTimeoutMs,timeout_source:W.timeoutSource,command_count:W.commandCount,duration_ms:W.durationMs,ulid:$.sessionId,mode:_B($,"mode"),source:_B($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function fT($){let W=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return W?.[1]??W?.[2]??W?.[3]}function UT($){let W=[];for(let Z=0;Z<$.length;Z+=1){let Q=$[Z],J=fT(Q);if(!J){W.push(Q);continue}let j=$.findIndex((Y,V)=>V>Z&&Y.trim()===J);if(j===-1){W.push(Q);continue}let X=[Q];while(Z<j){Z+=1;let Y=$[Z];X.push(Y)}W.push(X.join(`
99
+ ${T.text}`:""):q.text;if(q.dropped||J&&T.dropped||w.length>Q){let b=J?q.totalChars+T.totalChars:q.totalChars;w=V2(w,{maxChars:Q,totalChars:b})}A(()=>j(w))}}),V.on("error",(L)=>{R(),A(()=>X(Error(`Failed to execute command: ${L.message}`)))})})}function B2($={}){let{shell:W=GT(process.platform),timeoutMs:Z=30000,env:Q={},combineOutput:J=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??c1;return(X,Y,V)=>{let B=typeof X!=="string";return FT({executable:B?X.command:W,args:B?X.args??[]:KT(W,X),cwd:Y,env:Q},V,Z,j,J)}}function _B($,W){let Z=$.metadata?.[W];return typeof Z==="string"?Z:void 0}function AT($,W){uY(QB($.metadata),{tool_name:"run_commands",effective_timeout_ms:W.effectiveTimeoutMs,timeout_source:W.timeoutSource,command_count:W.commandCount,duration_ms:W.durationMs,ulid:$.sessionId,mode:_B($,"mode"),source:_B($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function fT($){let W=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return W?.[1]??W?.[2]??W?.[3]}function UT($){let W=[];for(let Z=0;Z<$.length;Z+=1){let Q=$[Z],J=fT(Q);if(!J){W.push(Q);continue}let j=$.findIndex((Y,V)=>V>Z&&Y.trim()===J);if(j===-1){W.push(Q);continue}let X=[Q];while(Z<j){Z+=1;let Y=$[Z];X.push(Y)}W.push(X.join(`
100
100
  `))}return W}function DT($){let W=[],Z=[],Q=()=>{if(Z.length>0)W.push(...UT(Z)),Z=[]};for(let J of $){if(typeof J==="string"){Z.push(J);continue}Q(),W.push(J)}return Q(),W}async function _T($,W){let{executor:Z,cwd:Q,context:J,timeoutMs:j,timeoutSource:X}=W;return Promise.all($.map(async(Y)=>{let V=Date.now(),B=fB(Y);try{let H=await v1(Z(Y,Q,J),j,`Command timed out after ${j}ms`);return{query:B,result:H,success:!0}}catch(H){if(H instanceof L8)AT(J,{effectiveTimeoutMs:H.timeoutMs,timeoutSource:X,commandCount:$.length,durationMs:Date.now()-V});if(H instanceof f9)return{query:B,result:H.output,error:H.message,success:!1};let G=Y2(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function a7($,W={}){let Z=W.fileReadTimeoutMs??1e4;return _$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${T8} lines / ~${Math.round(A9/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:u1(F6),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(Q,J)=>{let j=L$(jB,FB(Q)),X;if(typeof j==="string")X=[{path:j}];else if(Array.isArray(j))X=j.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in j)X=(Array.isArray(j.files)?j.files:[j.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in j)X=(Array.isArray(j.file_paths)?j.file_paths:[j.file_paths]).map((V)=>({path:V}));else if("paths"in j)X=(Array.isArray(j.paths)?j.paths:[j.paths]).map((V)=>typeof V==="string"?{path:V}:V);else X=[j];return Promise.all(X.map(async(Y)=>{let V=KB(Y);if(V)return{query:F9(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await v1($(Y,J),Z,`File read timed out after ${Z}ms`);return{query:F9(Y),result:B,success:!0}}catch(B){let H=Y2(B);return{query:F9(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function o7($,W={}){let Z=W.searchTimeoutMs??30000,Q=W.cwd??process.cwd();return _$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(q8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:u1(A6),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(J,j)=>{let X=L$(XB,J),Y=Array.isArray(X)?X:typeof X==="object"?Array.isArray(X.queries)?X.queries:[X.queries]:[X];return Promise.all(Y.map(async(V)=>{try{let B=await v1($(V,Q,j),Z,`Search timed out after ${Z}ms`);return{query:V,result:B,success:!0}}catch(B){let H=Y2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var LB="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function O6($,W={}){let Z=W.bashTimeoutMs??30000,Q=W.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=W.cwd??process.cwd(),j=process.platform==="win32";return _$({name:"run_commands",description:j?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+LB+`Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+LB+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:u1(f6),timeoutMs:Z*2,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let V=DT(AB(X));return _T(V,{executor:$,cwd:J,context:Y,timeoutMs:Z,timeoutSource:Q})}})}function s7($,W={}){let Z=W.webFetchTimeoutMs??30000;return _$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:u1(U6),timeoutMs:Z*2,retryable:!0,maxRetries:2,execute:async(Q,J)=>{let j=L$(U6,Q);return Promise.all(j.requests.map(async(X)=>{try{let Y=await v1($(X.url,X.prompt,J),Z,`Web fetch timed out after ${Z}ms`);return{query:X.url,result:Y,success:!0}}catch(Y){let V=Y2(Y);return{query:X.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var LT=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
101
101
 
102
102
  *** Begin Patch
@@ -159,12 +159,12 @@ ${V}`}async function gT($,W,Z,Q){let j=(await A1.readFile($,Q)).split(`
159
159
  `),X=j.length+1;if(W<1||W>X)throw Error(`Invalid insert_line: ${W}. insert_line must be a positive one-based boundary line in the range 1-${X}. Use ${X} to append at EOF.`);let Y=W-1;return j.splice(Y,0,...Z.split(`
160
160
  `)),await A1.writeFile($,j.join(`
161
161
  `),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function M6($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0,maxDiffLines:Q=200}=$;return async(J,j,X)=>{let Y=ST(j,J.path,Z);if(J.insert_line!=null)return gT(Y,J.insert_line,J.new_text,W);if(!await IT(Y))return kT(Y,J.new_text,W);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return xT(Y,J.old_text,J.new_text,W,Q)}}import{createReadStream as mT}from"node:fs";import*as U9 from"node:fs/promises";import*as q$ from"node:path";import{createInterface as vT}from"node:readline";import{resolveExistingFilePath as cT}from"@cline/shared/storage";var uT=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),dT={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},zB=1e8,lT=50000;function MB($){let{reason:W}=$;if(W instanceof Error)return W;if(W!==void 0)return Error(String(W));return Error("File read was aborted")}async function pT($,W,Z,Q,J,j){if(j?.aborted)throw MB(j);let X=Math.max(Q??1,1),Y=J??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:X+lT-1,H=[],G=0,K=0,F=!1,A=!1,D=Number.isFinite(Y)?Math.min(Y,X+T8-1):X+T8-1,f=Z?String(D).length+3:0,_=mT($,{encoding:W}),U=vT({input:_,crlfDelay:Number.POSITIVE_INFINITY}),R=j?()=>_.destroy(MB(j)):void 0;if(j&&R)j.addEventListener("abort",R,{once:!0});try{for await(let b of U){if(K+=1,K>Y){K=Y;break}if(!V&&F&&K>=B){A=!0;break}if(K<X||F)continue;if(H.length>=T8){F=!0;continue}let P=b;if(P.length>n7)P=`${P.slice(0,n7)} [line truncated]`;let r=G+P.length+f+1;if(r>A9&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:P}),G=r}}finally{if(j&&R)j.removeEventListener("abort",R);U.close(),_.destroy()}let L=String(H[H.length-1]?.lineNumber??K).length,q=H.map(({lineNumber:b,text:P})=>Z?`${String(b).padStart(L," ")} | ${P}`:P).join(`
162
- `),T=H[H.length-1]?.lineNumber;if(T===void 0)return q;let C=Math.min(Y,K);if(T>=C)return q;let w=A?`${K}+ lines`:C;return`${q}
162
+ `),T=H[H.length-1]?.lineNumber;if(T===void 0)return q;let w=Math.min(Y,K);if(T>=w)return q;let E=A?`${K}+ lines`:w;return`${q}
163
163
 
164
- [Showing lines ${X}-${T} of ${w}. Use start_line/end_line to read other sections.]`}function R6($={}){let{maxFileSizeBytes:W,encoding:Z,includeLineNumbers:Q}={...dT,...$};return async(J,j)=>{let{path:X,start_line:Y,end_line:V}=J,B=q$.isAbsolute(X)?q$.normalize(X):q$.resolve(process.cwd(),X),H=cT(B)??B,G=q$.extname(H).toLowerCase(),K=uT.get(G),F=await U9.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(K){if(F.size>W)throw Error(`Image file too large: ${F.size} bytes (max: ${W} bytes).`);if(j.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await U9.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>zB)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${zB} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return pT(H,Z,Q,Y,V,j.signal)}}import{spawn as SB}from"node:child_process";import*as yB from"node:fs/promises";import*as L9 from"node:path";var PB={};N(PB,{prewarmFileIndex:()=>_9,getFileIndex:()=>d1,enrichPromptWithMentions:()=>z8});import{spawn as rT}from"node:child_process";import{readdir as iT}from"node:fs/promises";import j3 from"node:path";import{isMainThread as EB,parentPort as RB,Worker as nT}from"node:worker_threads";var aT=15000,oT=600000,sT=1000,tT=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function NB($){let W=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return W==="EACCES"||W==="EPERM"||W==="ENOENT"}var O8=new Map;function eT(){if(!EB)return!1;return!0}function $q($){if(O8.size<=1)return;for(let[W,Z]of O8.entries()){if(Z.pending)continue;if($-Z.lastAccessedAt>oT)O8.delete(W)}}function Wq($,W){return j3.relative($,W).split(j3.sep).join("/")}async function Zq($){let Z=(await new Promise((Q,J)=>{let j=rT("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),X="",Y="";j.stdout.on("data",(V)=>{X+=V.toString()}),j.stderr.on("data",(V)=>{Y+=V.toString()}),j.on("error",J),j.on("close",(V)=>{if(V===0){Q(X);return}J(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(Z)}async function wB($,W,Z){let Q;try{Q=await iT(W,{withFileTypes:!0})}catch(J){if(NB(J))return;throw J}for(let J of Q){let j=j3.join(W,J.name);if(J.isDirectory()){if(tT.has(J.name))continue;try{await wB($,j,Z)}catch(X){if(NB(X))continue;throw X}continue}if(J.isFile())Z.add(Wq($,j))}}async function Qq($){let W=new Set;return await wB($,$,W),W}async function D9($){try{return await Zq($)}catch{return Qq($)}}function Jq(){if(EB||!RB)return;let $=RB;$.on("message",(W)=>{if(W.type!=="index")return;D9(W.cwd).then((Z)=>{let Q={type:"indexResult",requestId:W.requestId,files:Array.from(Z)};$.postMessage(Q)}).catch((Z)=>{let Q={type:"indexResult",requestId:W.requestId,error:Z instanceof Error?Z.message:"Failed to build file index"};$.postMessage(Q)})})}class CB{worker=new nT(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let W=this.pending.get($.requestId);if(!W)return;if(this.pending.delete($.requestId),$.error){W.reject(Error($.error));return}W.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let W=++this.nextRequestId,Z=new Promise((J,j)=>{let X=setTimeout(()=>{this.pending.delete(W),J(null)},sT);X.unref(),this.pending.set(W,{resolve:(Y)=>{clearTimeout(X),J(Y)},reject:(Y)=>{clearTimeout(X),j(Y)}})}),Q={type:"index",requestId:W,cwd:$};return this.worker.postMessage(Q),Z}flushPending($){for(let[W,Z]of this.pending.entries())Z.reject($),this.pending.delete(W)}}Jq();var J3;function jq(){if(!eT())return null;if(J3===void 0)J3=new CB;return J3}async function Xq($){let W=jq();if(!W)return D9($);try{let Z=await W.requestIndex($);if(Z===null)return D9($);return new Set(Z)}catch{return D9($)}}async function d1($,W={}){let Z=W.ttlMs??aT,Q=Date.now();$q(Q);let J=O8.get($);if(J&&Z>0&&Q-J.lastBuiltAt<=Z&&J.files.size>0)return J.lastAccessedAt=Q,J.files;if(J?.pending)return J.lastAccessedAt=Q,J.pending;let j=Xq($).then((X)=>{return O8.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return O8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:Q,pending:j}),j}async function _9($,W={}){await d1($,{...W,ttlMs:0})}import{stat as Yq}from"node:fs/promises";import G2 from"node:path";var Vq=/[),.:;!?`'"]+$/,Bq=/^[(`'"]+/;function Hq($){let W=$.matchAll(/(^|[\s])@([^\s]+)/g),Z=[];for(let Q of W){let J=(Q[2]??"").trim();if(J.length===0)continue;let j=J.replace(Bq,"").replace(Vq,"");if(j.length===0||j.includes("@"))continue;Z.push(j)}return Array.from(new Set(Z))}function Gq($,W){let Z=$.replace(/\\/g,"/"),Q=G2.isAbsolute(Z)?G2.resolve(Z):G2.resolve(W,Z),J=G2.relative(W,Q);if(J.startsWith("..")||G2.isAbsolute(J))return;return J.split(G2.sep).join("/")}async function z8($,W,Z={}){let Q=Hq($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:j,maxTotalBytes:X}=Z,Y=await d1(W,{ttlMs:Z.ttlMs}),V=[],B=[],H=[],G=0;for(let K of Q){if(J&&H.length>=J){B.push(K);continue}let F=Gq(K,W);if(!F||!Y.has(F)){B.push(K);continue}if(!j||!X){V.push(F);continue}let A=G2.join(W,F);try{if(!(await Yq(A)).isFile()){B.push(K);continue}let f=G+j;if(f>X){B.push(K);continue}G=f,V.push(F)}catch{B.push(K)}}return{prompt:$,mentions:Q,matchedFiles:V,ignoredMentions:B}}var Kq=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],Fq=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],K2=null;function Aq(){if(K2!==null)return Promise.resolve(K2);return new Promise(($)=>{let W=SB("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});W.on("close",(Z)=>{K2=Z===0,$(K2)}),W.on("error",()=>{K2=!1,$(!1)}),setTimeout(()=>{if(!W.killed)W.kill("SIGTERM");if(K2===null)K2=!1,$(!1)},1000)})}function fq($,W,Z,Q,J=5000,j){return new Promise((X)=>{let Y=SB("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:W,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),X(null)},J),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),X(F)};if(j?.aborted){H(),X(null);return}j?.addEventListener("abort",()=>{K(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let A=[],D=V.split(`
164
+ [Showing lines ${X}-${T} of ${E}. Use start_line/end_line to read other sections.]`}function R6($={}){let{maxFileSizeBytes:W,encoding:Z,includeLineNumbers:Q}={...dT,...$};return async(J,j)=>{let{path:X,start_line:Y,end_line:V}=J,B=q$.isAbsolute(X)?q$.normalize(X):q$.resolve(process.cwd(),X),H=cT(B)??B,G=q$.extname(H).toLowerCase(),K=uT.get(G),F=await U9.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(K){if(F.size>W)throw Error(`Image file too large: ${F.size} bytes (max: ${W} bytes).`);if(j.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await U9.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>zB)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${zB} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return pT(H,Z,Q,Y,V,j.signal)}}import{spawn as SB}from"node:child_process";import*as yB from"node:fs/promises";import*as L9 from"node:path";var PB={};N(PB,{prewarmFileIndex:()=>_9,getFileIndex:()=>d1,enrichPromptWithMentions:()=>z8});import{spawn as rT}from"node:child_process";import{readdir as iT}from"node:fs/promises";import j3 from"node:path";import{isMainThread as EB,parentPort as RB,Worker as nT}from"node:worker_threads";var aT=15000,oT=600000,sT=1000,tT=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function NB($){let W=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return W==="EACCES"||W==="EPERM"||W==="ENOENT"}var O8=new Map;function eT(){if(!EB)return!1;return!0}function $q($){if(O8.size<=1)return;for(let[W,Z]of O8.entries()){if(Z.pending)continue;if($-Z.lastAccessedAt>oT)O8.delete(W)}}function Wq($,W){return j3.relative($,W).split(j3.sep).join("/")}async function Zq($){let Z=(await new Promise((Q,J)=>{let j=rT("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),X="",Y="";j.stdout.on("data",(V)=>{X+=V.toString()}),j.stderr.on("data",(V)=>{Y+=V.toString()}),j.on("error",J),j.on("close",(V)=>{if(V===0){Q(X);return}J(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(Z)}async function wB($,W,Z){let Q;try{Q=await iT(W,{withFileTypes:!0})}catch(J){if(NB(J))return;throw J}for(let J of Q){let j=j3.join(W,J.name);if(J.isDirectory()){if(tT.has(J.name))continue;try{await wB($,j,Z)}catch(X){if(NB(X))continue;throw X}continue}if(J.isFile())Z.add(Wq($,j))}}async function Qq($){let W=new Set;return await wB($,$,W),W}async function D9($){try{return await Zq($)}catch{return Qq($)}}function Jq(){if(EB||!RB)return;let $=RB;$.on("message",(W)=>{if(W.type!=="index")return;D9(W.cwd).then((Z)=>{let Q={type:"indexResult",requestId:W.requestId,files:Array.from(Z)};$.postMessage(Q)}).catch((Z)=>{let Q={type:"indexResult",requestId:W.requestId,error:Z instanceof Error?Z.message:"Failed to build file index"};$.postMessage(Q)})})}class CB{worker=new nT(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let W=this.pending.get($.requestId);if(!W)return;if(this.pending.delete($.requestId),$.error){W.reject(Error($.error));return}W.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let W=++this.nextRequestId,Z=new Promise((J,j)=>{let X=setTimeout(()=>{this.pending.delete(W),J(null)},sT);X.unref(),this.pending.set(W,{resolve:(Y)=>{clearTimeout(X),J(Y)},reject:(Y)=>{clearTimeout(X),j(Y)}})}),Q={type:"index",requestId:W,cwd:$};return this.worker.postMessage(Q),Z}flushPending($){for(let[W,Z]of this.pending.entries())Z.reject($),this.pending.delete(W)}}Jq();var J3;function jq(){if(!eT())return null;if(J3===void 0)J3=new CB;return J3}async function Xq($){let W=jq();if(!W)return D9($);try{let Z=await W.requestIndex($);if(Z===null)return D9($);return new Set(Z)}catch{return D9($)}}async function d1($,W={}){let Z=W.ttlMs??aT,Q=Date.now();$q(Q);let J=O8.get($);if(J&&Z>0&&Q-J.lastBuiltAt<=Z&&J.files.size>0)return J.lastAccessedAt=Q,J.files;if(J?.pending)return J.lastAccessedAt=Q,J.pending;let j=Xq($).then((X)=>{return O8.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return O8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:Q,pending:j}),j}async function _9($,W={}){await d1($,{...W,ttlMs:0})}import{stat as Yq}from"node:fs/promises";import G2 from"node:path";var Vq=/[),.:;!?`'"]+$/,Bq=/^[(`'"]+/;function Hq($){let W=$.matchAll(/(^|[\s])@([^\s]+)/g),Z=[];for(let Q of W){let J=(Q[2]??"").trim();if(J.length===0)continue;let j=J.replace(Bq,"").replace(Vq,"");if(j.length===0||j.includes("@"))continue;Z.push(j)}return Array.from(new Set(Z))}function Gq($,W){let Z=$.replace(/\\/g,"/"),Q=G2.isAbsolute(Z)?G2.resolve(Z):G2.resolve(W,Z),J=G2.relative(W,Q);if(J.startsWith("..")||G2.isAbsolute(J))return;return J.split(G2.sep).join("/")}async function z8($,W,Z={}){let Q=Hq($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:j,maxTotalBytes:X}=Z,Y=await d1(W,{ttlMs:Z.ttlMs}),V=[],B=[],H=[],G=0;for(let K of Q){if(J&&H.length>=J){B.push(K);continue}let F=Gq(K,W);if(!F||!Y.has(F)){B.push(K);continue}if(!j||!X){V.push(F);continue}let A=G2.join(W,F);try{if(!(await Yq(A)).isFile()){B.push(K);continue}let f=G+j;if(f>X){B.push(K);continue}G=f,V.push(F)}catch{B.push(K)}}return{prompt:$,mentions:Q,matchedFiles:V,ignoredMentions:B}}var Kq=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],Fq=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],K2=null;function Aq(){if(K2!==null)return Promise.resolve(K2);return new Promise(($)=>{let W=SB("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});W.on("close",(Z)=>{K2=Z===0,$(K2)}),W.on("error",()=>{K2=!1,$(!1)}),setTimeout(()=>{if(!W.killed)W.kill("SIGTERM");if(K2===null)K2=!1,$(!1)},1000)})}function fq($,W,Z,Q,J=5000,j){return new Promise((X)=>{let Y=SB("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:W,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),X(null)},J),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),X(F)};if(j?.aborted){H(),X(null);return}j?.addEventListener("abort",()=>{K(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let A=[],D=V.split(`
165
165
  `).filter((f)=>f.trim());for(let f of D){if(A.length>=Z)break;let _=JSON.parse(f);if(_.type==="match"){let U=_.data,R=[];if(_.data.submatches&&_.data.submatches.length>0){let L=_.data.submatches[0];A.push({file:U.path.text,line:U.line_number,column:(L?.start??0)+1,match:L?.match?.text??"",context:R})}}else if(_.type==="context"&&A.length>0){let U=A[A.length-1],R=_.data.line_number===U.line?">":" ";U.context.push(`${R} ${_.data.line_number}: ${_.data.lines?.text??_.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),Y.on("error",()=>{K(null)})})}function Uq($,W,Z,Q){let J=$.split("/"),j=J[J.length-1]??"";if(J.length-1>Q)return!1;for(let V=0;V<J.length-1;V++)if(W.has(J[V]??""))return!1;let Y=L9.posix.extname(j).slice(1).toLowerCase();return Z.has(Y)||!Y&&!j.startsWith(".")}function N6($={}){let{includeExtensions:W=Kq,excludeDirs:Z=Fq,maxResults:Q=100,contextLines:J=2,maxDepth:j=20}=$,X=new Set(Z),Y=new Set(W.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let G=await Aq(),K=null;if(G)K=await fq(V,B,Q,J,5000,H.signal);if(K){let U=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let R of K)U.push(`${R.file}:${R.line}:${R.column}`),U.push(...R.context),U.push("");if(K.length>=Q)U.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return bB(U.join(`
166
166
  `))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],D=0,f=await d1(B);for(let U of f){if(H.signal?.aborted)throw Error("Search operation aborted");if(!Uq(U,X,Y,j))continue;if(A.length>=Q)break;D++;let R=L9.join(B,U);try{let q=(await yB.readFile(R,"utf-8")).split(`
167
- `);for(let T=0;T<q.length;T++){let C=q[T];F.lastIndex=0;let w=F.exec(C);while(w!==null){if(A.length>=Q)break;let b=Math.max(0,T-J),P=Math.min(q.length-1,T+J),r=[];for(let $0=b;$0<=P;$0++){let A0=$0===T?">":" ";r.push(`${A0} ${$0+1}: ${q[$0]}`)}if(A.push({file:U,line:T+1,column:w.index+1,match:w[0],context:r}),w.index===F.lastIndex)F.lastIndex++;w=F.exec(C)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
167
+ `);for(let T=0;T<q.length;T++){let w=q[T];F.lastIndex=0;let E=F.exec(w);while(E!==null){if(A.length>=Q)break;let b=Math.max(0,T-J),P=Math.min(q.length-1,T+J),r=[];for(let $0=b;$0<=P;$0++){let A0=$0===T?">":" ";r.push(`${A0} ${$0+1}: ${q[$0]}`)}if(A.push({file:U,line:T+1,column:E.index+1,match:E[0],context:r}),E.index===F.lastIndex)F.lastIndex++;E=F.exec(w)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
168
168
  Searched ${D} files.`;let _=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${D} files.`,""];for(let U of A)_.push(`${U.file}:${U.line}:${U.column}`),_.push(...U.context),_.push("");if(A.length>=Q)_.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return bB(_.join(`
169
169
  `))}}function bB($){if($.length<=q8)return $;let W=Math.ceil(q8/2),Z=Math.max(1,q8-W);return`${$.slice(0,W)}
170
170
  [... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
@@ -172,7 +172,7 @@ Searched ${D} files.`;let _=[`Found ${A.length} result${A.length===1?"":"s"} for
172
172
  `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(W,Z)=>String.fromCharCode(parseInt(Z,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
173
173
  `).replace(/\n{3,}/g,`
174
174
 
175
- `).trim()}function E6($={}){let{timeoutMs:W=30000,maxResponseBytes:Z=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:j=!0}=$;return async(X,Y,V)=>{let B;try{B=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),W),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(X,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:j?"follow":"manual",signal:H.signal});if(clearTimeout(G),!j&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",D=F.body?.getReader();if(!D)throw Error("Failed to read response body");let f=[],_=0;while(!0){let{done:C,value:w}=await D.read();if(C)break;if(_+=w.length,_>Z)throw D.cancel(),Error(`Response too large: exceeded ${Z} bytes`);f.push(w)}let U=new Uint8Array(_),R=0;for(let C of f)U.set(C,R),R+=C.length;let L=new TextDecoder("utf-8").decode(U),q;if(A.includes("text/html")||A.includes("application/xhtml"))q=Dq(L);else if(A.includes("application/json"))try{let C=JSON.parse(L);q=JSON.stringify(C,null,2)}catch{q=L}else q=L;let T=[`URL: ${X}`,`Content-Type: ${A}`,`Size: ${_} bytes`,"","--- Content ---",q.slice(0,50000)];if(q.length>50000)T.push(`
175
+ `).trim()}function E6($={}){let{timeoutMs:W=30000,maxResponseBytes:Z=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:j=!0}=$;return async(X,Y,V)=>{let B;try{B=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),W),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(X,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:j?"follow":"manual",signal:H.signal});if(clearTimeout(G),!j&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",D=F.body?.getReader();if(!D)throw Error("Failed to read response body");let f=[],_=0;while(!0){let{done:w,value:E}=await D.read();if(w)break;if(_+=E.length,_>Z)throw D.cancel(),Error(`Response too large: exceeded ${Z} bytes`);f.push(E)}let U=new Uint8Array(_),R=0;for(let w of f)U.set(w,R),R+=w.length;let L=new TextDecoder("utf-8").decode(U),q;if(A.includes("text/html")||A.includes("application/xhtml"))q=Dq(L);else if(A.includes("application/json"))try{let w=JSON.parse(L);q=JSON.stringify(w,null,2)}catch{q=L}else q=L;let T=[`URL: ${X}`,`Content-Type: ${A}`,`Size: ${_} bytes`,"","--- Content ---",q.slice(0,50000)];if(q.length>50000)T.push(`
176
176
  [Content truncated: showing first 50000 of ${q.length} characters]`);return T.push("","--- Analysis Request ---",`Prompt: ${Y}`),T.join(`
177
177
  `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${W}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function w6($={}){return B2($)}function M8($={}){return{readFile:R6($.fileRead),search:N6($.search),bash:w6($.bash),webFetch:E6($.webFetch),applyPatch:z6($.applyPatch),editor:M6($.editor)}}var _q={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},R8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function hB($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function Lq($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return hB(W,$.providerIdIncludes)&&hB(Z,$.modelIdIncludes)}function N8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!Lq(X,$,W,Z))continue;for(let Y of X.disableTools??[])J.set(Y,!1);for(let Y of X.enableTools??[])J.set(Y,!0)}let j={};for(let[X,Y]of J.entries())j[_q[X]]=Y;return j}var s0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function T9($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of U$)Z[Q]=W;return Z}function q9($,W){let Z=s0[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return T$({...j,...W})}import{createTool as pO,zodToJsonSchema as rO}from"@cline/shared";import{z as L3}from"zod";f1();import{createAgentRuntime as yO}from"@cline/agents";import{createContributionRegistry as hO,mergeModelOptions as KH}from"@cline/shared";import{createGateway as mq,createHandlerAsync as vq,hasRegisteredHandler as cq,MODEL_COLLECTIONS_BY_PROVIDER_ID as uq,normalizeProviderId as dq}from"@cline/llms";import{EMPTY_CONTENT_TEXT as Pq}from"@cline/shared";function bq($){let W=yq($.content),Z=[],Q=$.id??Iq(),J=0,j=[],X=()=>{if(j.length===0)return;let Y=J===0?Q:`${Q}_part_${J}`;J+=1,Z.push({id:Y,role:$.role,content:j.map(hq),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:rB($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:Pq}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:rB($.metrics)}),Z;for(let Y of W){if(Y.type!=="tool_result"){j.push(Y);continue}X(),Z.push({id:`${Q}_tool_${Y.tool_use_id}`,role:"tool",content:[nB(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function w9($){return $.flatMap(bq)}function Sq($){let W=$.content.map(aB).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:kq($.metrics)}}function E8($){return $.map(Sq)}function C9($){let W=[];for(let Z of $){let Q=Z.content.map(aB).filter((X)=>X!==void 0),J=Z.role==="tool"?"user":Z.role,j=W[W.length-1];if(J==="user"&&Q.length>0&&Q.every((X)=>X.type==="tool_result")&&j?.role==="user"&&Array.isArray(j.content)&&j.content.every((X)=>X.type==="tool_result")){j.content.push(...Q);continue}W.push({role:J,content:Q})}return W}function yq($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function hq($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return nB($)}}function nB($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function aB($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let W=$.metadata;return{type:"thinking",thinking:$.text,signature:W?.signature,details:W?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let W=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:W?.thoughtSignature??W?.signature}}case"tool-result":{let W=$.output,Z=typeof W==="string"?W:Array.isArray(W)?W:JSON.stringify(W);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Z,is_error:$.isError}}}}function rB($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function kq($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var iB=0;function Iq(){return iB+=1,`msg_${Date.now().toString(36)}_${iB.toString(36)}`}function xq($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let W=$.tool_call.function,Z=W.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??W.id,toolName:W.name,inputText:typeof Z==="string"?Z:void 0,input:typeof Z==="string"?void 0:Z,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:gq($),error:$.error}];default:return[]}}function gq($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function oB($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=C9(W.messages),X=W.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of J.createMessage(W.systemPrompt??"",j,X))for(let V of xq(Y)){if(V.type==="finish")Z=!0;else if(V.type==="tool-call-delta")Q=!0;yield V}if(!Z)yield{type:"finish",reason:Q?"tool-calls":"stop"}}catch(J){if(!Z)yield{type:"finish",reason:W.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function lq($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function pq($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function rq($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(pq($))Object.assign(W,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(W,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Z=$.gcp?.region??$.region;Object.assign(W,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Z,region:Z})}if($.providerId==="sapaicore")Object.assign(W,$.sap);return lq(W)}function Y3($){let W=$.providerConfig;if(W?.knownModels)return W.knownModels;if($.knownModels)return $.knownModels;return uq[$.providerId]?.models??void 0}function iq($){if(!$?.length)return;let W=new Set;for(let Z of $)switch(Z){case"tools":case"reasoning":case"prompt-cache":case"images":W.add(Z);break;case"structured_output":W.add("structured-output");break;default:W.add("text")}return W.add("text"),[...W]}function nq($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:iq(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function sB($,W,Z){let Q=$.providerConfig,J=Q?.providerId===$.providerId?Q:void 0,j={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:Y3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(cq(dq(j.providerId)))return oB(()=>vq(j));return mq({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,fetch:j.fetch,options:rq(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>nq(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens})}import{createMediaBudgetState as aq,IMAGE_OMITTED_PLACEHOLDER as tB,normalizeUserInput as eB,resolveMediaBudget as oq,validateAndReserveImageMedia as sq}from"@cline/shared";var tq=8000,eq=50000,$O=6000000,WO=200000,ZO=12000,QO=65536,S6=2000,$H=40000,JO=8,V3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},jO=new Set(["read","read_files"]),A2="[outdated - see the latest file content]",WH="Tool execution was interrupted before a result was produced.",ZH=($)=>`
178
178
 
@@ -201,12 +201,12 @@ Searched ${D} files.`;let _=[`Found ${A.length} result${A.length===1?"":"s"} for
201
201
  ${Q}`;return Z||Q}function gO($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function mO($,W){return $.filter((Z)=>gO(Z.name,W))}function vO($,W){return p1(mO($,W))}function cO($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return{};return{beforeRun:async(Z)=>{for(let Q of W){let J=await Q.beforeRun?.(Z);if(J?.stop)return J}return},afterRun:async(Z)=>{for(let Q of W)await Q.afterRun?.(Z)},beforeModel:async(Z)=>{let Q=Z.request,J;for(let j of W){let X=await j.beforeModel?.({...Z,request:Q});if(!X)continue;if(X.stop)return X;J={...J,...X,options:KH(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:KH(Q.options,X.options)}:{}}}return J},afterModel:async(Z)=>{for(let Q of W){let J=await Q.afterModel?.(Z);if(J?.stop)return J}return},beforeTool:async(Z)=>{let Q=Z.input,J;for(let j of W){let X=await j.beforeTool?.({...Z,input:Q});if(!X)continue;if(X.stop||X.skip)return X;if(J={...J,...X},Object.hasOwn(X,"input"))Q=X.input}return J},afterTool:async(Z)=>{let Q=Z.result,J;for(let j of W){let X=await j.afterTool?.({...Z,result:Q});if(!X)continue;if(X.stop)return X;if(J={...J,...X},X.result)Q=X.result}return J},onEvent:async(Z)=>{for(let Q of W)await Q.onEvent?.(Z)}}}class z${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new _3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,W={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=W.logger??$.logger,this.telemetry=W.telemetry??$.telemetry,this.createAgentRuntimeImpl=W.createAgentRuntimeImpl??yO,this.conversation=new F3($.initialMessages),this.messageBuilder=new H3(XH()),this.contributionRegistry=hO({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Z=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new D3({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>uO(this.logger,j,X,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(j,X)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:j}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let J=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new U3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let W=new Set(this.config.tools.map((Q)=>Q.name)),Z=[...this.config.tools];for(let Q of $)if(!W.has(Q.name))Z.push(Q),W.add(Q.name);this.config={...this.config,tools:Z}}updateConnection($){let W=f2($),Z={...this.config};if(W.providerId!==void 0)Z.providerId=W.providerId;if(W.modelId!==void 0)Z.modelId=W.modelId;if(W.apiKey!==void 0)Z.apiKey=W.apiKey;if(W.baseUrl!==void 0)Z.baseUrl=W.baseUrl;if(W.headers!==void 0)Z.headers=W.headers;if(W.providerConfig!==void 0)Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"reasoningEffort"))Z.reasoningEffort=W.reasoningEffort??void 0;if(Object.hasOwn(W,"thinkingBudgetTokens"))Z.thinkingBudgetTokens=W.thinkingBudgetTokens??void 0;if(Object.hasOwn(W,"thinking")){if(Z.thinking=W.thinking??void 0,W.thinking===!1||W.thinking===null)Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0}this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let W=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=W,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(W)}async shutdown($,W){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,W,Z){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!1})}continue($,W,Z){return this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let W of this.contributionRegistry.getRegisteredRules()){let Z=await IO(W);if(Z)$.push(Z)}return xO(this.config.systemPrompt,$)}executeRun($){let W;return W=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===W)this.activeRunPromise=null}),this.activeRunPromise=W,W}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let W=new Date,Z=$.userMessage;if(Z!==void 0){let U=await lO(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let Q=await this.composeSystemPrompt(),J=sB(this.config,this.logger,this.telemetry),j=new Map;for(let U of this.contributionRegistry.getRegisteredTools())j.set(U.name,U);let X=vO([...j.values()],this.config.toolPolicies),Y=new Map;for(let U of X)Y.set(U.name,U);for(let U of this.config.tools)Y.set(U.name,U);let V=this.conversation.getConversationId(),B=FH(this.config),H=Array.from(Y.values()),G=w9(this.conversation.getMessages()),K=VH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[ZB]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:Q}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),D,f;try{if($.isContinue)D=await F.continue(void 0);else D=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(D&&D.messages.length>0){let U=E8(D.messages);this.conversation.replaceMessages(U)}let _=new Date;try{return this.buildLegacyResult({runResult:D,thrownError:f,startedAt:W,endedAt:_})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=cO([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((W)=>W.hooks)]);return{...$,beforeModel:async(W)=>{let Z=await $.beforeModel?.(W);if(Z?.stop)return Z;let Q=Z?.messages??W.request.messages,J=await this.prepareMessagesForModelRequest(Q);return{...Z,messages:J}}}}createRuntimePrepareTurn($,W){let Z=this.config.prepareTurn;if(!Z)return;return async(Q)=>{let J=E8(Q.messages),j=await this.prepareProviderMessagesForApi(J),X=await Z({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:J,apiMessages:j,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:W,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!X)return;return{...X.messages?{messages:w9(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(C9($));return w9(W)}async prepareProviderMessagesForApi($){let W=$,Z=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of Z)W=await Q.build(W);return this.messageBuilder.buildForApi(W)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let W=this.toolStartedAt.get($.toolCall.toolCallId),Z=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),j=J?.type==="tool-result"&&J.isError===!0,X=j?kO(J?.type==="tool-result"?J.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:J?.type==="tool-result"?J.output:void 0,error:X,durationMs:W===void 0?0:Z.getTime()-W.getTime(),startedAt:W??Z,endedAt:Z};if(this.currentRunToolCalls.push(Y),j){if(this.currentTurnFailedTools+=1,X)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${X}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let W=this.currentTurnFailedTools,Z=this.currentTurnSuccessfulTools;if(W>0&&Z===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${W} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(Z>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let W of this.eventAdapter.translate($))this.emitLegacyEvent(W)}syncConversationFromRuntimeMessage($,W){if($.length>0){this.conversation.replaceMessages(E8($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=E8(W).filter((J)=>!J.id||!Z.has(J.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let W of this.listeners)try{W($)}catch(Z){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Z})}}inspectLoopForToolCall($,W,Z){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:W});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:Z,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let W=await this.mistakeTracker.record($);if(W.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]}),this.activeRuntime?.abort(W.reason??W.message)})}buildLegacyResult($){let{runResult:W,thrownError:Z,startedAt:Q,endedAt:J}=$,j=J.getTime()-Q.getTime(),X=Z?"error":dO(W),Y=(W?.status==="failed"?W.error?.message:void 0)||W?.outputText||"",V=W?{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens>0?W.usage.cacheReadTokens:void 0,cacheWriteTokens:W.usage.cacheWriteTokens>0?W.usage.cacheWriteTokens:void 0,totalCost:W.usage.totalCost}:this.currentRunUsage,B=W?E8(W.messages):this.conversation.getMessages(),H=FH(this.config);if(Z)throw Z;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:W?.iterations??0,finishReason:X,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:Q,endedAt:J,durationMs:j}}}function uO($,W,Z,Q){if(!$)return;if(W==="debug"){$.debug(Z,Q);return}if(W==="error"&&$.error){$.error(Z,Q);return}let J=W==="warn"?"warn":W==="error"?"error":"info";$.log(Z,{...Q,severity:J})}function dO($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function lO($,W,Z,Q){let{buildInitialUserContent:J}=await Promise.resolve().then(() => GH);return J($,W,Z,Q)}function FH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=Y3($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as AH}from"@cline/shared";function fH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return AH({ide:W.clineIdeName?.trim()||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,rules:`# Team Teammate Role
202
202
  ${Z}`,platform:W.clinePlatform,metadata:W.workspaceMetadata})}function UH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return AH({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function M$($){let W={...$};return{getRuntimeConfig:()=>W,getConnectionConfig:()=>({providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function U2($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?fH($.prompt,W):UH($.prompt,W);return{...$.configProvider.getConnectionConfig(),systemPrompt:Z,tools:$.tools,maxIterations:$.maxIterations??W.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:W.hooks,extensions:W.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:W.logger,role:$.role}}function R$($){let W=U2($),Z=new z$(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var iO=L3.object({systemPrompt:L3.string().describe("System prompt defining the sub-agent's behavior"),task:L3.string().describe("Task for the sub-agent to complete")});function N$($){return pO({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:rO(iO),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=R$({kind:"subagent",prompt:W.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:Z.agentId,abortSignal:Z.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=J.getAgentId(),X=J.getConversationId(),Y=Z.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:X,parentAgentId:Y,input:W})}catch{}try{let V=await J.run(W.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as f0,TEAM_AWAIT_TIMEOUT_MS as nO,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as aO,TEAM_RUN_TEXT_PREVIEW_LIMIT as oO,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as sO,TeamAttachOutcomeFragmentInputSchema as DH,TeamAwaitRunsInputSchema as _H,TeamBroadcastInputSchema as LH,TeamBroadcastToolResultSchema as tO,TeamCancelRunInputSchema as TH,TeamCancelRunToolResultSchema as eO,TeamCleanupInputSchema as qH,TeamCleanupToolResultSchema as $z,TeamCreateOutcomeInputSchema as OH,TeamCreateOutcomeToolResultSchema as Wz,TeamFinalizeOutcomeInputSchema as zH,TeamFinalizeOutcomeToolResultSchema as Zz,TeamListOutcomesInputSchema as MH,TeamListRunsInputSchema as RH,TeamMailboxMessageToolResultSchema as Qz,TeamMissionLogInputSchema as NH,TeamMissionLogToolResultSchema as Jz,TeamOutcomeFragmentToolResultSchema as EH,TeamOutcomeToolResultSchema as jz,TeamReadMailboxInputSchema as wH,TeamReviewOutcomeFragmentInputSchema as CH,TeamRunTaskInputSchema as PH,TeamRunTaskToolResultSchema as T3,TeamRunToolSummarySchema as q3,TeamSendMessageInputSchema as bH,TeamSendMessageToolResultSchema as Xz,TeamShutdownTeammateInputSchema as SH,TeamSimpleAgentStatusToolResultSchema as yH,TeamSpawnTeammateInputSchema as hH,TeamStatusInputSchema as kH,TeamStatusToolResultSchema as Yz,TeamTaskInputSchema as IH,TeamTaskToolResultSchema as k6,validateWithZod as x,zodToJsonSchema as U0}from"@cline/shared";function xH($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function D2($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function Vz($){let W=$.result;if(!W)return;return{textPreview:xH(W.text,oO),iterations:W.iterations,finishReason:W.finishReason,durationMs:W.durationMs,usage:{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens,cacheWriteTokens:W.usage.cacheWriteTokens,totalCost:W.usage.totalCost}}}function y9($){return $?.toISOString()}function O3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:xH($.message,aO),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:y9($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:y9($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:y9($.heartbeatAt),lastProgressAt:y9($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:Vz($)}}function Bz($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var C8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function gH($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(..._2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:U2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function P8($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=_2({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;gH({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function _2($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(f0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:U0(hH),execute:async(X)=>{let Y=x(hH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!W)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(gH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(_2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return x(yH,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(f0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:U0(SH),execute:async(X)=>{let Y=x(SH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),x(yH,{agentId:Y.agentId,status:"stopped"})}})),J.push(f0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:U0(kH),execute:async(X)=>{return x(kH,X),x(Yz,$.runtime.getSnapshot())}})),J.push(f0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:U0(IH),execute:async(X)=>{let Y=x(IH,X);switch(Y.action){case"create":{let V=new Set(sO.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:D2(Y.title,"title"),description:D2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return x(k6,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return x(k6,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(D2(Y.taskId,"taskId"),$.requesterId);return x(k6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(D2(Y.taskId,"taskId"),$.requesterId,D2(Y.summary,"summary"));return x(k6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(D2(Y.taskId,"taskId"),$.requesterId,D2(Y.reason,"reason"));return x(k6,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(f0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:U0(PH),execute:async(X)=>{let Y=x(PH,X);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return x(T3,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=j.get(Y.agentId);if(V){let H=await V;return x(T3,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>x(T3,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(Y.agentId)});return j.set(Y.agentId,B),await B}})),J.push(f0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:U0(TH),execute:async(X)=>{let Y=x(TH,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return x(eO,{runId:V.id,status:V.status})}})),J.push(f0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:U0(RH),execute:async(X)=>x(q3.array(),$.runtime.listRuns(x(RH,X)).map(O3))})),J.push(f0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:U0(_H),timeoutMs:nO,execute:async(X)=>{let Y=x(_H,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return Bz(H),x(q3,O3(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return x(q3.array(),V.map(O3))}})),J.push(f0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:U0(bH),execute:async(X)=>{let Y=x(bH,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return x(Xz,{id:V.id,toAgentId:V.toAgentId})}})),J.push(f0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:U0(LH),execute:async(X)=>{let Y=x(LH,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return x(tO,{delivered:V.length})}})),J.push(f0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:U0(wH),execute:async(X)=>{let Y=x(wH,X);return x(Qz.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(f0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:U0(NH),execute:async(X)=>{let Y=x(NH,X),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return x(Jz,{id:V.id})}})),J.push(f0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:U0(qH),execute:async(X)=>{if(x(qH,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),x($z,{status:"cleaned"})}})),J.push(f0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:U0(OH),execute:async(X)=>{let Y=x(OH,X),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return x(Wz,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(f0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:U0(DH),execute:async(X)=>{let Y=x(DH,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return x(EH,{fragmentId:V.id,status:V.status})}})),J.push(f0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:U0(CH),execute:async(X)=>{let Y=x(CH,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return x(EH,{fragmentId:V.id,status:V.status})}})),J.push(f0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:U0(zH),execute:async(X)=>{let Y=x(zH,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return x(Zz,{outcomeId:V.id,status:V.status})}})),J.push(f0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:U0(MH),execute:async(X)=>{return x(MH,X),x(jz.array(),$.runtime.listOutcomes())}})),J}function h9($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}function mH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var Hz=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:N$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...C8]}],Gz={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function Kz($){return $==="plan"||$==="yolo"?$:"act"}function cH($){let W=Kz($.mode),Z=s0[l1({mode:W})],Q=N8($.providerId??"",$.modelId??"",W,R8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function vH($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=cH(W);if($==="spawn_agent")return Z.enableSpawnAgent===!0;if($==="teams")return Z.enableAgentTeams===!0;if($==="editor")return Z.enableEditor===!0||Z.enableApplyPatch===!0;let Q=Gz[$];return Q?Z[Q]===!0:!1}function Fz($,W){if($.id==="editor"){let{flags:Z}=cH(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:vH($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:vH($.id,W)}}function L2($={}){return Hz.map((W)=>Fz(W,$))}function k9($={}){return L2($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function I9($){if(!$.enabled)return new Set;let W=L2($.availabilityContext),Z=new Set(W.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(W.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!Z.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${W.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function I6($,W={}){return L2(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function x9($,W={}){return I6($,W)}function T2($={}){let{executorOptions:W={},executors:Z,...Q}=$,J={...M8(W),...Z??{}};return T$({...Q,executors:J})}import{mkdirSync as Lz,writeFileSync as Tz}from"node:fs";import{dirname as qz}from"node:path";import{normalizeUserInput as Oz,stripModeNotices as zz}from"@cline/shared";import{nanoid as Mz}from"nanoid";var dH={};N(dH,{sanitizeSessionToken:()=>q2,parseTeamTaskSubSessionId:()=>S8,parseSubSessionId:()=>g6,makeTeamTaskSubSessionId:()=>x6,makeSubSessionId:()=>b8,deriveSubsessionStatus:()=>m6});import{nanoid as Uz}from"nanoid";function q2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function b8($,W){let Z=q2($),Q=q2(W),J=`${Z}__${Q}`;return J.length>180?J.slice(0,180):J}function x6($,W){let Z=q2($),Q=q2(W);return`${Z}__teamtask__${Q}__${Uz(6)}`}function S8($){let Z=$.indexOf("__teamtask__");if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+12),j=J.lastIndexOf("__");if(j<=0)return null;let X=J.slice(0,j),Y=J.slice(j+2);if(!Q||!X||!Y)return null;return{rootSessionId:Q,agentId:X,teamTaskId:Y}}function g6($){if(S8($))return null;let W="__",Z=$.indexOf(W);if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+W.length);if(!Q||!J)return null;return{rootSessionId:Q,agentId:J}}function m6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let W=String($.reason??"").toLowerCase();if(W.includes("cancel")||W.includes("abort")||W.includes("interrupt"))return"cancelled";if(W.includes("fail")||W.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as e}from"zod";var rH={};N(rH,{isTerminalSessionStatus:()=>pH,isNonTerminalSessionStatus:()=>K0,SessionSource:()=>F0,SESSION_STATUSES:()=>v6,NON_TERMINAL_SESSION_STATUSES:()=>lH});import{SESSION_STATUS_VALUES as Dz}from"@cline/shared";var v6=Dz,lH=["idle","running","pending"];function pH($){return!lH.includes($)}function K0($){return!pH($)}var F0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var _z=e.enum(v6),m0=e.object({version:e.literal(1),session_id:e.string().min(1),source:e.string().min(1),pid:e.number().int(),started_at:e.string().min(1),ended_at:e.string().min(1).optional(),exit_code:e.number().int().nullable().optional(),status:_z,interactive:e.boolean(),provider:e.string().min(1),model:e.string().min(1),cwd:e.string().min(1),workspace_root:e.string().min(1),team_name:e.string().min(1).optional(),enable_tools:e.boolean(),enable_spawn:e.boolean(),enable_teams:e.boolean(),prompt:e.string().optional(),metadata:e.record(e.string(),e.unknown()).optional(),messages_path:e.string().min(1).optional(),compaction_path:e.string().min(1).optional()});function iH($){if(!$)return!1;return Object.values($).some((W)=>typeof W==="function")}function M3($,W){let Z=[...$??[],...W??[]];if(Z.length===0)return;let Q=[],J=new Set;for(let j of Z){if(J.has(j.name))continue;J.add(j.name),Q.push(j)}return Q}function nH($){return JSON.stringify($,(W,Z)=>{if(Z instanceof Error)return{name:Z.name,message:Z.message,stack:Z.stack};return Z})}function r1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function z3($,W){let Z={...$};Z.id=r1(Z.id)??Mz();let Q=Z.modelInfo&&typeof Z.modelInfo==="object"?{...Z.modelInfo}:void 0,J={id:r1(Q?.id)??r1(Z.modelId)??r1(W?.id),provider:r1(Q?.provider)??r1(Z.providerId)??r1(W?.provider),family:r1(Q?.family)??r1(W?.family)};if(delete Z.providerId,delete Z.modelId,J.id&&J.provider)Z.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Z.modelInfo;return Z}function g9($){return $.map((W)=>z3(W))}function m9($,W,Z=[]){let Q=$.map((V,B)=>{let H=Z[B],K=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return z3(K)}),J=Z.length,j=[];for(let V=J;V<Q.length;V+=1)if(Q[V]?.role==="assistant")j.push(V);if(j.length===0){let V=[...Q].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return Q;j.push(Q.length-1-V)}let X=j[j.length-1],Y=j.some((V)=>Q[V]?.metrics);for(let V of j){let B=Q[V],H=B.metrics;if(!H&&V===X&&!Y){let G=W.usage;H={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}Q[V]={...z3(B,{id:W.model.id,provider:W.model.provider,family:W.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??W.endedAt.getTime()}}return Q}function c6($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var Rz=120;function O2($){let W=$?.trim();return W?W.slice(0,Rz):void 0}function R3($){let W=zz(Oz($??"")).trim();if(!W)return;return O2(W.split(`
203
203
  `)[0]?.trim())}function E$($){if(!$)return;let W={...$},Z=O2(typeof W.title==="string"?W.title:void 0);if(Z)W.title=Z;else delete W.title;return Object.keys(W).length>0?W:void 0}function u6($){let W=E$($.metadata)??{},Z=$.title!==void 0?O2($.title):R3($.prompt);if(Z)W.title=Z;return Object.keys(W).length>0?W:void 0}function N3($){let W=S8($);if(W)return{agent:"teammate",sessionId:W.rootSessionId,taskType:"team"};let Z=g6($);if(Z)return{agent:"subagent",sessionId:Z.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function E3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:g9($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function aH($,W,Z){Lz(qz($),{recursive:!0}),Tz($,`${JSON.stringify(E3({updatedAt:W,context:Z,messages:[]}),null,2)}
204
- `,"utf8")}function oH($,W){return m0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:W?.endedAt??$.endedAt??void 0,exit_code:W?.exitCode??$.exitCode??void 0,status:W?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:W?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function sH($,W,Z){let Q=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let j=await W(J);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Q+=1,Q>=Z)return j;continue}return j}}T0();var tH={};N(tH,{summarizeUsageFromMessages:()=>h8,sumUsageTotals:()=>d6,getCurrentContextSize:()=>w3,createInitialAccumulatedUsage:()=>O0,accumulateUsageTotals:()=>D0});function O0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function D0($,W){return{inputTokens:$.inputTokens+Math.max(0,W.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,W.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,W.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,W.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,W.totalCost??0)}}function d6($){let W=O0();for(let Z of $)W=D0(W,Z);return W}function y8($){return typeof $==="number"&&Number.isFinite($)?$:0}function h8($){let W=O0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=D0(W,{inputTokens:y8(Q.inputTokens),outputTokens:y8(Q.outputTokens),cacheReadTokens:y8(Q.cacheReadTokens),cacheWriteTokens:y8(Q.cacheWriteTokens),totalCost:y8(Q.cost)})}return W}function w3($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=y8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function Nz($){if(!$||typeof $!=="object")return;let W=$,Z=W.skill??W.skill_name??W.skillName;if(typeof Z!=="string")return;let Q=Z.trim();return Q.length>0?Q:void 0}function C3($){if(!$||typeof $!=="object")return{};let W=$;return{agentId:typeof W.agentId==="string"?W.agentId:void 0,conversationId:typeof W.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W.parentAgentId==="string"?W.parentAgentId:void 0}}function i1($){let W=$.agentId?.trim();if(!W)return;let Z=$.parentAgentId?.trim()||void 0,Q=$.teamRole,J="root";if(Q==="teammate")J="team_teammate";else if(Q==="lead")J="team_lead";else if(Z)J="subagent";return{agentId:W,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Z,createdByAgentId:$.createdByAgentId?.trim()||Z||void 0,isSubagent:Boolean(Z),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function Ez($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function wz($){let W=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Z of W){let Q=Z?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function P3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=C3(W),G=i1({agentId:Z?.agentId??H.agentId,conversationId:Z?.conversationId??H.conversationId,parentAgentId:Z?.parentAgentId??H.parentAgentId,createdByAgentId:Z?.createdByAgentId,teamId:Z?.teamId??V?.getTeamId(),teamName:Z?.teamName??V?.getTeamName(),teamRole:Z?.teamRole,teamAgentId:Z?.teamAgentId});if(W.type==="content_start"&&W.contentType==="tool"&&W.toolName==="skills"){let K=Nz(W.input);if(K)v5(Y,{ulid:Q,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(W.type==="content_end"&&W.contentType==="tool"){let K=W.toolName??"unknown",F=!W.error;if(H8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))c5(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")p4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")p4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=Ez(W);if(B){j.turnPrimaryUsage=D0(j.turnPrimaryUsage??O0(),K);let A=D0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),B8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),g5(Y,{ulid:Q,tokensIn:W.inputTokens,tokensOut:W.outputTokens,cacheWriteTokens:W.cacheWriteTokens,cacheReadTokens:W.cacheReadTokens,totalCost:W.cost,model:J.modelId,...G})}else{let A=wz({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),D=j.turnUsageByAgent??new Map;j.turnUsageByAgent=D,D.set(A,D0(D.get(A)??O0(),K))}let F=D0(j.turnPrimaryUsage??O0(),d6(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,D0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,F))}if(W.type==="iteration_end"&&B)$.persistMessages(Q,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Q,event:W,teamAgentId:Z?.teamAgentId,teamRole:Z!==void 0?Z.teamRole??(B?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:nH(W),ts:Date.now()}})}function w$($){return $.workspaceRoot??$.cwd}import{buildClineClientRequestHeaders as mR,hasRuntimeConfigExtension as vR}from"@cline/shared";var k8="0.0.60-nightly.1783998875";var l6={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:k8,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};f1();import{existsSync as p9,readFileSync as fM,statSync as UM}from"node:fs";import{basename as DM,dirname as d9,join as r9,resolve as l9}from"node:path";import{discoverPluginModulePaths as _M,resolveConfiguredPluginModulePaths as TG,resolvePluginConfigSearchPaths as LM,SKILLS_CONFIG_DIRECTORY_NAME as TM}from"@cline/shared/storage";import{resolve as nz}from"node:path";import{normalizePluginManifest as az}from"@cline/shared";import{existsSync as N0,readFileSync as x8}from"node:fs";import{builtinModules as Cz,createRequire as h3}from"node:module";import{dirname as C$,extname as r6,isAbsolute as Pz,resolve as n}from"node:path";import{fileURLToPath as WG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as bz}from"@cline/shared";var ZG=C$(WG(import.meta.url)),Sz=h3(import.meta.url),yz=n(ZG,"..","..","..","..",".."),b3=Iz(yz),hz=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],k3=new Set(Cz.flatMap(($)=>[$,$.replace(/^node:/,"")])),p6=new Set(bz),kz=["development","node","import","require","default"];function Iz($){let W={},Z={"@cline/sdk":n($,"packages/sdk/src/index.ts"),"@cline/agents":n($,"packages/agents/src/index.ts"),"@cline/core":n($,"packages/core/src/index.ts"),"@cline/llms":n($,"packages/llms/src/index.ts"),"@cline/shared":n($,"packages/shared/src/index.ts"),"@cline/shared/storage":n($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":n($,"packages/shared/src/db/index.ts")};for(let[Q,J]of Object.entries(Z))if(N0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=n($,"packages",Q),j=n(J,"package.json");if(!N0(j))continue;try{let X=JSON.parse(x8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=n(J,X.exports);if(N0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=xz(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function xz($,W){let Z=I3(W);if(!Z)return null;let Q=QG($,Z);for(let J of Q)if(N0(J))return J;return null}function I3($,W=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(W.has($))return null;W.add($);let Z=$;for(let Q of kz){let J=I3(Z[Q],W);if(J)return J}return null}function QG($,W){let Z=W.replace(/^\.\//,""),Q=[n($,W)];if(Z.startsWith("dist/")){let J=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[n($,`${J}.ts`),n($,`${J}.tsx`),n($,`${J}.mts`),n($,`${J}.cts`),...Q]}return Q}function gz($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function v9($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function I8($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function mz($){let W=I8($);if($===W)return".";return`.${$.slice(W.length)}`}function JG($){return I8($).startsWith("@cline/")}function S3($,W){let Z=I8(W),Q=C$($);while(!0){let J=n(Q,"node_modules",Z);if(N0(J)||N0(n(J,"package.json")))return!0;let j=n(Q,"..");if(j===Q)return!1;Q=j}}function $G($){return y3($)!==null}function y3($){try{return Sz.resolve($)}catch{}return vz($)}function vz($){let W=I8($),Z=jG(W);if(!Z)return null;let Q=n(Z,"package.json");try{let J=JSON.parse(x8(Q,"utf8")),j=mz($),X=j==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,j)?J.exports[j]:void 0,Y=I3(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=n(Z,Y),B=[V,...QG(Z,Y).filter((H)=>H!==V)];for(let H of B)if(N0(H))return H;return null}catch{return null}}function cz(){let $=[ZG],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(C$(C$(W)));let Z=process.execPath?.trim();if(Z)$.push(C$(Z));return[...new Set($.map((Q)=>n(Q)))]}function uz($,W){let Z=$;while(!0){let Q=n(Z,"package.json");if(N0(Q))try{if(JSON.parse(x8(Q,"utf8")).name===W)return Z}catch{}let J=n(Z,"node_modules",W,"package.json");if(N0(J))return C$(J);let j=n(Z,"..");if(j===Z)return null;Z=j}}function jG($){for(let W of cz()){let Z=uz(W,$);if(Z)return Z}return null}function dz($){let Z=C$($);for(let Q=0;Q<4;Q++){let J=n(Z,"package.json");if(N0(J))try{let X=JSON.parse(x8(J,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=n(Z,"..");if(j===Z)return!1;Z=j}return!1}function XG($,W){let Z=W.startsWith("file:")?WG(W):Pz(W)?W:n(C$($),W);if(N0(Z)&&p6.has(r6(Z)))return Z;for(let Q of p6){let J=`${Z}${Q}`;if(N0(J))return J}for(let Q of p6){let J=n(Z,`index${Q}`);if(N0(J))return J}return null}function YG($){let W=new Set,Z=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of Z)for(let J of $.matchAll(Q)){let j=J[1];if(j)W.add(j)}return[...W]}function lz($){return r6($)!==".ts"}function VG($,W,Z=new Set){if(Z.has($)||!N0($))return;if(Z.add($),!p6.has(r6($)))return;let Q=x8($,"utf8"),J=lz($);for(let j of YG(Q)){if(j.startsWith("node:")||k3.has(j))continue;if(v9(j)){if(!J)continue;if(Object.hasOwn(b3,j)||Object.hasOwn(b3,I8(j))||S3($,j)||JG(j)&&$G(j)||W&&$G(j))continue;throw Error(`Cannot find module '${I8(j)}'`)}let X=XG($,j);if(X)VG(X,W,Z)}}function BG($,W=new Set,Z=new Set){if(W.has($)||!N0($))return Z;if(W.add($),!p6.has(r6($)))return Z;let Q=x8($,"utf8");for(let J of YG(Q)){if(Z.add(J),v9(J))continue;let j=XG($,J);if(j)BG(j,W,Z)}return Z}function pz($,W){let Z=h3($),Q={},J=BG($),j=new Set(hz);for(let[X,Y]of Object.entries(b3)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(v9(X)&&(JG(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||S3($,X))continue;let Y=y3(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!v9(X)||Object.hasOwn(Q,X)||S3($,X)||X.startsWith("node:")||k3.has(X))continue;let Y=y3(X);if(Y)Q[X]=Y}return Q}function rz($){let W=r6($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var z2;function iz(){if(z2!==void 0)return z2;let $=jG("jiti");if(!$)return z2=null,null;let W=n($,"dist","babel.cjs");if(!N0(W))return z2=null,null;try{let Q=h3(W)(W);z2=typeof Q==="function"?Q:null}catch{z2=null}return z2}async function HG($,W={}){let Z=!dz($);VG($,Z);let Q=pz($,Z),J=gz(Q),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let Y=Object.entries(J).filter(([,G])=>rz(G)).map(([G])=>G),V=iz(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await X($,{alias:J,cache:W.useCache,requireCache:W.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...k3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function GG($,W){if(!$)return!0;if($.providerIds?.length){if(!W?.providerId||!$.providerIds.includes(W.providerId))return!1}if($.modelIds?.length){if(!W?.modelId||!$.modelIds.includes(W.modelId))return!1}return!0}function KG($){return typeof $==="object"&&$!==null}function x3($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function oz($,W){if(!KG($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!x3($.manifest.capabilities))throw Error(`Invalid plugin module at ${W}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${W}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!x3($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!x3($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function sz($,W){if(!KG($))throw Error(`Invalid plugin module at ${W}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${W}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);oz($,W)}async function i6($,W={}){let Z=nz(W.cwd??process.cwd(),$),Q=await HG(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];sz(j,Z);let X=j,Y=X.setup,V=Y?(B,H)=>{let G={...W.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:W.client??H.client,user:W.user??H.user,workspaceInfo:W.workspaceInfo??H.workspaceInfo,automation:W.automation??H.automation,logger:W.logger??H.logger,telemetry:W.telemetry??H.telemetry};return Y(B,K)}:void 0;return{...X,manifest:az(X.manifest),setup:V}}async function c9($,W={}){return(await M2($,W)).plugins}async function M2($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await i6(Y,W);if(!GG(V.manifest,W))continue;let B=J.get(V.name);if(B)Q.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:Y,order:j++})}catch(V){let B=V instanceof Error?V.message:String(V);Z.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let X=[...J.values()].sort((Y,V)=>Y.order-V.order);return{plugins:X.map((Y)=>Y.plugin),pluginPaths:X.map((Y)=>Y.pluginPath),failures:Z,warnings:Q}}import{existsSync as c3}from"node:fs";import{createRequire as LG}from"node:module";import{dirname as u9,join as m8}from"node:path";import{fileURLToPath as ZM}from"node:url";var DG={};N(DG,{resolveSubprocessRuntimeExecutable:()=>g3,buildSubprocessSandboxCommand:()=>UG,SubprocessSandbox:()=>g8,CLINE_JS_RUNTIME_PATH_ENV:()=>fG});import{spawn as tz}from"node:child_process";import{basename as ez}from"node:path";import{augmentNodeCommandForDebug as $M,withResolvedClineBuildEnv as WM}from"@cline/shared";function FG($){if($ instanceof Error)return $;return Error(String($))}var fG="CLINE_JS_RUNTIME_PATH";function AG($){let W=$?.trim();if(!W)return!1;let Z=ez(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function g3($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[fG]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(AG(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&AG(j))return j}return"node"}function UG($,W={}){let Z=g3({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return $M([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class g8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let W=this.pending.get($);if(!W)return;if(this.pending.delete($),W.timeout)clearTimeout(W.timeout);return W}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],W=UG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=tz(W[0]??g3(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:WM(process.env),windowsHide:!0});this.process=Z;let Q="",J=(j)=>{let X=Q+j;Q=X.length>4000?X.slice(-4000):X};Z.stderr?.setEncoding("utf8"),Z.stderr?.on("data",(j)=>{J(j)}),Z.on("message",(j)=>{this.onMessage(j)}),Z.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${FG(j).message}`))}),Z.on("exit",(j,X)=>{this.process=null;let Y=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${Y?`: ${Y}`:""}`))})}async call($,W,Z={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,j={type:"call",id:J,method:$,args:W};return await new Promise((X,Y)=>{let V={resolve:(B)=>X(B),reject:Y};if((Z.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Z.timeoutMs}ms: ${$}`))},Z.timeoutMs);this.pending.set(J,V),Q.send(j,(B)=>{if(!B)return;let H=this.clearPendingRequest(J);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${FG(B).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((W)=>{let Z=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}W()},300);$.once("exit",()=>{clearTimeout(Z),W()});try{$.kill("SIGTERM")}catch{clearTimeout(Z),W()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let W=this.clearPendingRequest($.id);if(!W)return;if($.ok){W.resolve($.result);return}W.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[W,Z]of this.pending.entries()){if(this.pending.delete(W),Z.timeout)clearTimeout(Z.timeout);Z.reject($)}}}function QM($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function n6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function JM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function jM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=LG($).resolve(`${JM()}/package.json`),Q=m8(u9(Z),"extensions","plugin-sandbox-bootstrap.js");return c3(Q)?Q:void 0}catch{return}}function XM(){let $=process.execPath?.trim();if(!$)return;let W=m8(u9(u9($)),"extensions","plugin-sandbox-bootstrap.js");return c3(W)?W:void 0}function YM(){let $=u9(ZM(import.meta.url)),W=LG(import.meta.url),Z=[m8($,"plugin-sandbox-bootstrap.js"),m8($,"extensions","plugin-sandbox-bootstrap.js"),m8($,"agents","plugin-sandbox-bootstrap.js"),jM(),XM()];for(let j of Z.filter((X)=>typeof X==="string"))if(c3(j))return{file:j};let Q=m8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=W.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
204
+ `,"utf8")}function oH($,W){return m0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:W?.endedAt??$.endedAt??void 0,exit_code:W?.exitCode??$.exitCode??void 0,status:W?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:W?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function sH($,W,Z){let Q=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let j=await W(J);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Q+=1,Q>=Z)return j;continue}return j}}T0();var tH={};N(tH,{summarizeUsageFromMessages:()=>h8,sumUsageTotals:()=>d6,getCurrentContextSize:()=>w3,createInitialAccumulatedUsage:()=>O0,accumulateUsageTotals:()=>D0});function O0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function D0($,W){return{inputTokens:$.inputTokens+Math.max(0,W.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,W.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,W.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,W.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,W.totalCost??0)}}function d6($){let W=O0();for(let Z of $)W=D0(W,Z);return W}function y8($){return typeof $==="number"&&Number.isFinite($)?$:0}function h8($){let W=O0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=D0(W,{inputTokens:y8(Q.inputTokens),outputTokens:y8(Q.outputTokens),cacheReadTokens:y8(Q.cacheReadTokens),cacheWriteTokens:y8(Q.cacheWriteTokens),totalCost:y8(Q.cost)})}return W}function w3($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=y8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function Nz($){if(!$||typeof $!=="object")return;let W=$,Z=W.skill??W.skill_name??W.skillName;if(typeof Z!=="string")return;let Q=Z.trim();return Q.length>0?Q:void 0}function C3($){if(!$||typeof $!=="object")return{};let W=$;return{agentId:typeof W.agentId==="string"?W.agentId:void 0,conversationId:typeof W.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W.parentAgentId==="string"?W.parentAgentId:void 0}}function i1($){let W=$.agentId?.trim();if(!W)return;let Z=$.parentAgentId?.trim()||void 0,Q=$.teamRole,J="root";if(Q==="teammate")J="team_teammate";else if(Q==="lead")J="team_lead";else if(Z)J="subagent";return{agentId:W,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Z,createdByAgentId:$.createdByAgentId?.trim()||Z||void 0,isSubagent:Boolean(Z),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function Ez($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function wz($){let W=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Z of W){let Q=Z?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function P3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=C3(W),G=i1({agentId:Z?.agentId??H.agentId,conversationId:Z?.conversationId??H.conversationId,parentAgentId:Z?.parentAgentId??H.parentAgentId,createdByAgentId:Z?.createdByAgentId,teamId:Z?.teamId??V?.getTeamId(),teamName:Z?.teamName??V?.getTeamName(),teamRole:Z?.teamRole,teamAgentId:Z?.teamAgentId});if(W.type==="content_start"&&W.contentType==="tool"&&W.toolName==="skills"){let K=Nz(W.input);if(K)v5(Y,{ulid:Q,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(W.type==="content_end"&&W.contentType==="tool"){let K=W.toolName??"unknown",F=!W.error;if(H8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))c5(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")p4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")p4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=Ez(W);if(B){j.turnPrimaryUsage=D0(j.turnPrimaryUsage??O0(),K);let A=D0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),B8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),g5(Y,{ulid:Q,tokensIn:W.inputTokens,tokensOut:W.outputTokens,cacheWriteTokens:W.cacheWriteTokens,cacheReadTokens:W.cacheReadTokens,totalCost:W.cost,model:J.modelId,...G})}else{let A=wz({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),D=j.turnUsageByAgent??new Map;j.turnUsageByAgent=D,D.set(A,D0(D.get(A)??O0(),K))}let F=D0(j.turnPrimaryUsage??O0(),d6(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,D0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,F))}if(W.type==="iteration_end"&&B)$.persistMessages(Q,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Q,event:W,teamAgentId:Z?.teamAgentId,teamRole:Z!==void 0?Z.teamRole??(B?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:nH(W),ts:Date.now()}})}function w$($){return $.workspaceRoot??$.cwd}import{buildClineClientRequestHeaders as mR,hasRuntimeConfigExtension as vR}from"@cline/shared";var k8="0.0.60";var l6={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:k8,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};f1();import{existsSync as p9,readFileSync as fM,statSync as UM}from"node:fs";import{basename as DM,dirname as d9,join as r9,resolve as l9}from"node:path";import{discoverPluginModulePaths as _M,resolveConfiguredPluginModulePaths as TG,resolvePluginConfigSearchPaths as LM,SKILLS_CONFIG_DIRECTORY_NAME as TM}from"@cline/shared/storage";import{resolve as nz}from"node:path";import{normalizePluginManifest as az}from"@cline/shared";import{existsSync as N0,readFileSync as x8}from"node:fs";import{builtinModules as Cz,createRequire as h3}from"node:module";import{dirname as C$,extname as r6,isAbsolute as Pz,resolve as n}from"node:path";import{fileURLToPath as WG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as bz}from"@cline/shared";var ZG=C$(WG(import.meta.url)),Sz=h3(import.meta.url),yz=n(ZG,"..","..","..","..",".."),b3=Iz(yz),hz=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],k3=new Set(Cz.flatMap(($)=>[$,$.replace(/^node:/,"")])),p6=new Set(bz),kz=["development","node","import","require","default"];function Iz($){let W={},Z={"@cline/sdk":n($,"packages/sdk/src/index.ts"),"@cline/agents":n($,"packages/agents/src/index.ts"),"@cline/core":n($,"packages/core/src/index.ts"),"@cline/llms":n($,"packages/llms/src/index.ts"),"@cline/shared":n($,"packages/shared/src/index.ts"),"@cline/shared/storage":n($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":n($,"packages/shared/src/db/index.ts")};for(let[Q,J]of Object.entries(Z))if(N0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=n($,"packages",Q),j=n(J,"package.json");if(!N0(j))continue;try{let X=JSON.parse(x8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=n(J,X.exports);if(N0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=xz(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function xz($,W){let Z=I3(W);if(!Z)return null;let Q=QG($,Z);for(let J of Q)if(N0(J))return J;return null}function I3($,W=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(W.has($))return null;W.add($);let Z=$;for(let Q of kz){let J=I3(Z[Q],W);if(J)return J}return null}function QG($,W){let Z=W.replace(/^\.\//,""),Q=[n($,W)];if(Z.startsWith("dist/")){let J=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[n($,`${J}.ts`),n($,`${J}.tsx`),n($,`${J}.mts`),n($,`${J}.cts`),...Q]}return Q}function gz($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function v9($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function I8($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function mz($){let W=I8($);if($===W)return".";return`.${$.slice(W.length)}`}function JG($){return I8($).startsWith("@cline/")}function S3($,W){let Z=I8(W),Q=C$($);while(!0){let J=n(Q,"node_modules",Z);if(N0(J)||N0(n(J,"package.json")))return!0;let j=n(Q,"..");if(j===Q)return!1;Q=j}}function $G($){return y3($)!==null}function y3($){try{return Sz.resolve($)}catch{}return vz($)}function vz($){let W=I8($),Z=jG(W);if(!Z)return null;let Q=n(Z,"package.json");try{let J=JSON.parse(x8(Q,"utf8")),j=mz($),X=j==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,j)?J.exports[j]:void 0,Y=I3(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=n(Z,Y),B=[V,...QG(Z,Y).filter((H)=>H!==V)];for(let H of B)if(N0(H))return H;return null}catch{return null}}function cz(){let $=[ZG],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(C$(C$(W)));let Z=process.execPath?.trim();if(Z)$.push(C$(Z));return[...new Set($.map((Q)=>n(Q)))]}function uz($,W){let Z=$;while(!0){let Q=n(Z,"package.json");if(N0(Q))try{if(JSON.parse(x8(Q,"utf8")).name===W)return Z}catch{}let J=n(Z,"node_modules",W,"package.json");if(N0(J))return C$(J);let j=n(Z,"..");if(j===Z)return null;Z=j}}function jG($){for(let W of cz()){let Z=uz(W,$);if(Z)return Z}return null}function dz($){let Z=C$($);for(let Q=0;Q<4;Q++){let J=n(Z,"package.json");if(N0(J))try{let X=JSON.parse(x8(J,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=n(Z,"..");if(j===Z)return!1;Z=j}return!1}function XG($,W){let Z=W.startsWith("file:")?WG(W):Pz(W)?W:n(C$($),W);if(N0(Z)&&p6.has(r6(Z)))return Z;for(let Q of p6){let J=`${Z}${Q}`;if(N0(J))return J}for(let Q of p6){let J=n(Z,`index${Q}`);if(N0(J))return J}return null}function YG($){let W=new Set,Z=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of Z)for(let J of $.matchAll(Q)){let j=J[1];if(j)W.add(j)}return[...W]}function lz($){return r6($)!==".ts"}function VG($,W,Z=new Set){if(Z.has($)||!N0($))return;if(Z.add($),!p6.has(r6($)))return;let Q=x8($,"utf8"),J=lz($);for(let j of YG(Q)){if(j.startsWith("node:")||k3.has(j))continue;if(v9(j)){if(!J)continue;if(Object.hasOwn(b3,j)||Object.hasOwn(b3,I8(j))||S3($,j)||JG(j)&&$G(j)||W&&$G(j))continue;throw Error(`Cannot find module '${I8(j)}'`)}let X=XG($,j);if(X)VG(X,W,Z)}}function BG($,W=new Set,Z=new Set){if(W.has($)||!N0($))return Z;if(W.add($),!p6.has(r6($)))return Z;let Q=x8($,"utf8");for(let J of YG(Q)){if(Z.add(J),v9(J))continue;let j=XG($,J);if(j)BG(j,W,Z)}return Z}function pz($,W){let Z=h3($),Q={},J=BG($),j=new Set(hz);for(let[X,Y]of Object.entries(b3)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(v9(X)&&(JG(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||S3($,X))continue;let Y=y3(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!v9(X)||Object.hasOwn(Q,X)||S3($,X)||X.startsWith("node:")||k3.has(X))continue;let Y=y3(X);if(Y)Q[X]=Y}return Q}function rz($){let W=r6($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var z2;function iz(){if(z2!==void 0)return z2;let $=jG("jiti");if(!$)return z2=null,null;let W=n($,"dist","babel.cjs");if(!N0(W))return z2=null,null;try{let Q=h3(W)(W);z2=typeof Q==="function"?Q:null}catch{z2=null}return z2}async function HG($,W={}){let Z=!dz($);VG($,Z);let Q=pz($,Z),J=gz(Q),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let Y=Object.entries(J).filter(([,G])=>rz(G)).map(([G])=>G),V=iz(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await X($,{alias:J,cache:W.useCache,requireCache:W.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...k3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function GG($,W){if(!$)return!0;if($.providerIds?.length){if(!W?.providerId||!$.providerIds.includes(W.providerId))return!1}if($.modelIds?.length){if(!W?.modelId||!$.modelIds.includes(W.modelId))return!1}return!0}function KG($){return typeof $==="object"&&$!==null}function x3($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function oz($,W){if(!KG($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!x3($.manifest.capabilities))throw Error(`Invalid plugin module at ${W}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${W}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!x3($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!x3($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function sz($,W){if(!KG($))throw Error(`Invalid plugin module at ${W}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${W}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);oz($,W)}async function i6($,W={}){let Z=nz(W.cwd??process.cwd(),$),Q=await HG(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];sz(j,Z);let X=j,Y=X.setup,V=Y?(B,H)=>{let G={...W.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:W.client??H.client,user:W.user??H.user,workspaceInfo:W.workspaceInfo??H.workspaceInfo,automation:W.automation??H.automation,logger:W.logger??H.logger,telemetry:W.telemetry??H.telemetry};return Y(B,K)}:void 0;return{...X,manifest:az(X.manifest),setup:V}}async function c9($,W={}){return(await M2($,W)).plugins}async function M2($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await i6(Y,W);if(!GG(V.manifest,W))continue;let B=J.get(V.name);if(B)Q.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:Y,order:j++})}catch(V){let B=V instanceof Error?V.message:String(V);Z.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let X=[...J.values()].sort((Y,V)=>Y.order-V.order);return{plugins:X.map((Y)=>Y.plugin),pluginPaths:X.map((Y)=>Y.pluginPath),failures:Z,warnings:Q}}import{existsSync as c3}from"node:fs";import{createRequire as LG}from"node:module";import{dirname as u9,join as m8}from"node:path";import{fileURLToPath as ZM}from"node:url";var DG={};N(DG,{resolveSubprocessRuntimeExecutable:()=>g3,buildSubprocessSandboxCommand:()=>UG,SubprocessSandbox:()=>g8,CLINE_JS_RUNTIME_PATH_ENV:()=>fG});import{spawn as tz}from"node:child_process";import{basename as ez}from"node:path";import{augmentNodeCommandForDebug as $M,withResolvedClineBuildEnv as WM}from"@cline/shared";function FG($){if($ instanceof Error)return $;return Error(String($))}var fG="CLINE_JS_RUNTIME_PATH";function AG($){let W=$?.trim();if(!W)return!1;let Z=ez(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function g3($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[fG]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(AG(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&AG(j))return j}return"node"}function UG($,W={}){let Z=g3({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return $M([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class g8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let W=this.pending.get($);if(!W)return;if(this.pending.delete($),W.timeout)clearTimeout(W.timeout);return W}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],W=UG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=tz(W[0]??g3(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:WM(process.env),windowsHide:!0});this.process=Z;let Q="",J=(j)=>{let X=Q+j;Q=X.length>4000?X.slice(-4000):X};Z.stderr?.setEncoding("utf8"),Z.stderr?.on("data",(j)=>{J(j)}),Z.on("message",(j)=>{this.onMessage(j)}),Z.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${FG(j).message}`))}),Z.on("exit",(j,X)=>{this.process=null;let Y=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${Y?`: ${Y}`:""}`))})}async call($,W,Z={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,j={type:"call",id:J,method:$,args:W};return await new Promise((X,Y)=>{let V={resolve:(B)=>X(B),reject:Y};if((Z.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Z.timeoutMs}ms: ${$}`))},Z.timeoutMs);this.pending.set(J,V),Q.send(j,(B)=>{if(!B)return;let H=this.clearPendingRequest(J);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${FG(B).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((W)=>{let Z=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}W()},300);$.once("exit",()=>{clearTimeout(Z),W()});try{$.kill("SIGTERM")}catch{clearTimeout(Z),W()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let W=this.clearPendingRequest($.id);if(!W)return;if($.ok){W.resolve($.result);return}W.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[W,Z]of this.pending.entries()){if(this.pending.delete(W),Z.timeout)clearTimeout(Z.timeout);Z.reject($)}}}function QM($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function n6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function JM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function jM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=LG($).resolve(`${JM()}/package.json`),Q=m8(u9(Z),"extensions","plugin-sandbox-bootstrap.js");return c3(Q)?Q:void 0}catch{return}}function XM(){let $=process.execPath?.trim();if(!$)return;let W=m8(u9(u9($)),"extensions","plugin-sandbox-bootstrap.js");return c3(W)?W:void 0}function YM(){let $=u9(ZM(import.meta.url)),W=LG(import.meta.url),Z=[m8($,"plugin-sandbox-bootstrap.js"),m8($,"extensions","plugin-sandbox-bootstrap.js"),m8($,"agents","plugin-sandbox-bootstrap.js"),jM(),XM()];for(let j of Z.filter((X)=>typeof X==="string"))if(c3(j))return{file:j};let Q=m8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=W.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
205
205
  `)}}var m3=YM();function v3($,W,Z){if(typeof $==="number"&&$>0)return $;if(Z){let Q=process.env[Z];if(Q){let J=Number(Q);if(Number.isInteger(J)&&J>0)return J}}return W}async function v8($){let W=new g8({name:"plugin-sandbox",..."file"in m3?{bootstrapFile:m3.file}:{bootstrapScript:m3.script},onEvent:$.onEvent}),Z=v3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Q=v3($.hookTimeoutMs,3000),J=v3($.contributionTimeoutMs,60000),j={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},X,Y=()=>{return X??=W.call("initialize",j,{timeoutMs:Z}).finally(()=>{X=void 0}),X},V;try{V=await W.call("initialize",j,{timeoutMs:Z})}catch(G){throw await W.shutdown().catch(()=>{}),G}let B=V.plugins.map(QM);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{VM(F,W,G,J,Y),BM(F,W,G,J,Y),HM(F,W,G,J,Y),KM(F,W,G,J,Y),GM(F,G)}};return K.hooks=AM(W,G,Q,Y),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await W.shutdown()},warnings:V.warnings}}function VM($,W,Z,Q,J){for(let j of Z.contributions?.tools??[]){let X={name:j.name,description:j.description??"",inputSchema:j.inputSchema??{type:"object",properties:{}},timeoutMs:j.timeoutMs,retryable:j.retryable,execute:async(Y,V)=>{try{return await W.call("executeTool",{pluginId:Z.pluginId,contributionId:j.id,input:Y,context:V},{timeoutMs:Q})}catch(B){if(!n6(B))throw B;return await J(),await W.call("executeTool",{pluginId:Z.pluginId,contributionId:j.id,input:Y,context:V},{timeoutMs:Q})}}};$.registerTool(X)}}function BM($,W,Z,Q,J){for(let j of Z.contributions?.commands??[])$.registerCommand({name:j.name,description:j.description,handler:async(X)=>{try{return await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}catch(Y){if(!n6(Y))throw Y;return await J(),await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}}})}function HM($,W,Z,Q,J){for(let j of Z.contributions?.rules??[])$.registerRule({id:j.ruleId,source:j.source,content:j.hasContentHandler===!0?async()=>{try{return await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}catch(X){if(!n6(X))throw X;return await J(),await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}}:j.content??""})}function GM($,W){for(let Z of W.contributions?.providers??[])$.registerProvider({name:Z.name,description:Z.description,metadata:Z.metadata});for(let Z of W.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Z.eventType,source:Z.source,description:Z.description,attributesSchema:Z.attributesSchema,payloadSchema:Z.payloadSchema,examples:Z.examples,metadata:Z.metadata});for(let Z of W.contributions?.mcpServers??[])$.registerMcpServer(Z)}function KM($,W,Z,Q,J){for(let j of Z.contributions?.messageBuilders??[])$.registerMessageBuilder({name:j.name,async build(X){try{let Y=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return _G(Y)?Y:X}catch(Y){if(!n6(Y))throw Y;await J();let V=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return _G(V)?V:X}}})}function _G($){return Array.isArray($)&&$.every((W)=>typeof W==="object"&&W!==null&&("role"in W)&&("content"in W))}function FM($,W,Z,Q,J){return async(j)=>{try{return await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}catch(X){if(!n6(X))throw X;return await J(),await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}}}function AM($,W,Z,Q){let J={};for(let j of W.hooks??[])J[j]=FM($,W.pluginId,j,Z,Q);return Object.keys(J).length>0?J:void 0}var d3="package.json",qM="package";function a6($){return LM($)}function o6($){return _M($)}function OM($){try{return p9($)&&UM($).isDirectory()}catch{return!1}}function l3($){let W=[],Z=new Set;for(let Q of $){let J=l9(Q);if(Z.has(J))continue;Z.add(J),W.push(J)}return W}function qG($){let W=l3($);return N9(W)}function OG($){return a6($).flatMap((W)=>o6(W)).filter((W)=>p9(W))}function zM($,W){let Z=[];for(let Q of $)try{Z.push(...TG([Q],W))}catch{}return Z}function u3($){return typeof $==="object"&&$!==null}function MM($){try{let W=JSON.parse(fM(r9($,d3),"utf8"));if(!u3(W)||!u3(W.cline))return[];let Z=W.cline.plugins;if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(typeof J==="string"){Q.push(J);continue}if(!u3(J)||!Array.isArray(J.paths))continue;for(let j of J.paths)if(typeof j==="string")Q.push(j)}return Q}catch{return[]}}function zG($,W){let Z=l9(W);return MM($).some((Q)=>l9($,Q)===Z)}function RM($,W){return DM($)===qM&&p9(r9(d9($),d3))&&zG(d9($),W)}function NM($){let W=l9($),Z=[],Q=d9(W);while(!0){if(RM(Q,W)){Z.push(Q);break}if(p9(r9(Q,d3))){if(zG(Q,W))Z.push(Q);break}let J=d9(Q);if(J===Q)break;Q=J}return l3(Z)}function n1($={}){let W=$.cwd??process.cwd(),Z=OG($.workspacePath),Q=TG($.pluginPaths??[],W);return qG([...Q,...Z])}function EM($={}){let W=$.cwd??process.cwd(),Z=OG($.workspacePath),Q=zM($.pluginPaths??[],W);return qG([...Q,...Z])}function a1($){let W=[];for(let Z of $)for(let Q of NM(Z)){let J=r9(Q,TM);if(OM(J))W.push(J)}return l3(W)}function MG($={}){return a1(EM($))}async function c8($={}){let W=n1($);if(W.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Q=await M2(W,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}let Z=await v8({pluginPaths:W,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Z.extensions??[],shutdown:Z.shutdown,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}import{execFile as wM}from"node:child_process";import{promisify as CM}from"node:util";var PM=CM(wM);function p3($,W){$?.log(W,{severity:"warn"})}function bM($){let W=$?.checkpoint;if(!W||typeof W!=="object"||Array.isArray(W))return;let Z=W;if(!Z.latest||!Array.isArray(Z.history))return;let Q=Z.latest,J=Z.history.filter((j)=>!!j&&typeof j==="object"&&typeof j.ref==="string"&&typeof j.createdAt==="number"&&typeof j.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:J}}async function R2($,W){let Z=await PM("git",["-C",$,...W],{windowsHide:!0});return{stdout:Z.stdout.trim(),stderr:Z.stderr.trim()}}async function r3($,W){if(!$)return;let Z=`refs/cline/checkpoints/${W}/`;try{let{stdout:Q}=await R2($,["for-each-ref","--format=%(refname)",Z]),J=Q.trim().split(`
206
206
  `).filter(Boolean);await Promise.allSettled(J.map((j)=>R2($,["update-ref","-d",j])))}catch{}}async function RG($,W,Z){if(!$||Z.length===0)return;await Promise.allSettled(Z.map((Q)=>R2($,["update-ref",`refs/cline/checkpoints/${W}/${Q.runCount}`,Q.ref])))}function SM($,W){let Z=$.findIndex((Q)=>Q.runCount===W.runCount);if(Z<0)return[...$,W];return $.map((Q,J)=>J===Z?W:Q)}function NG($){let W=$.initialRunCount??0,Z,Q=async()=>{if(Z!==void 0)return Z;try{Z=(await R2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:W});if(!await Q())return;let j=async(B)=>{try{let G=(await R2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:W,kind:"commit"}}catch(H){p3($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${W}`,Y="";try{Y=(await R2($.cwd,["stash","create",X])).stdout.trim()}catch(B){return p3($.logger,`Checkpoint snapshot failed: ${B instanceof Error?B.message:String(B)}`),j("Checkpoint HEAD fallback failed")}if(!Y)return j("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${W}`;try{await R2($.cwd,["update-ref",V,Y])}catch(B){p3($.logger,`Checkpoint store failed: ${B instanceof Error?B.message:String(B)}`);return}return{ref:Y,createdAt:Date.now(),runCount:W,kind:"stash"}};return{beforeRun:async({snapshot:j})=>{if(j.parentAgentId!=null)return;W+=1;return},beforeModel:async({snapshot:j})=>{if(j.parentAgentId!=null||j.iteration!==1||W<1)return;let X=await J();if(!X)return;let Y=await $.readSessionMetadata(),V=bM(Y);if(V?.latest.ref===X.ref)return;let B=SM(V?.history??[],X);await $.writeSessionMetadata({...Y??{},checkpoint:{latest:X,history:B}});return}}}import{spawn as cM}from"node:child_process";import{appendFileSync as uM,readFileSync as dM}from"node:fs";import{join as lM}from"node:path";import{augmentNodeCommandForDebug as CG,withResolvedClineBuildEnv as a3}from"@cline/shared";import{ensureHookLogDir as EG}from"@cline/shared/storage";function u8($,W){if(!W)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:W}}import{existsSync as yM,readdirSync as hM}from"node:fs";import{basename as kM,extname as IM,join as xM}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as i9,resolveHooksConfigSearchPaths as gM}from"@cline/shared/storage";function s6($){return gM($)}var d8;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(d8||={});var t6={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},mM=new Map(Object.values(d8).map(($)=>[$.toLowerCase(),$])),vM=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function e6($){let W=IM($).toLowerCase();if(!vM.has(W))return;let Z=kM($,W).trim().toLowerCase();return mM.get(Z)}function P$($){let W=[],Z=new Set,Q=s6($).filter((J)=>yM(J));for(let J of Q)try{for(let j of hM(J,{withFileTypes:!0})){if(!j.isFile())continue;let X=e6(j.name);if(!X)continue;let Y=xM(J,j.name);if(Z.has(Y))continue;Z.add(Y),W.push({fileName:X,hookEventName:t6[X],path:Y})}}catch{}return W.sort((J,j)=>J.path.localeCompare(j.path))}function a9($){if(!$||typeof $!=="object")return{};let W={};for(let[Z,Q]of Object.entries($))W[Z]=typeof Q==="string"?Q:JSON.stringify(Q);return W}function n9($,W,Z){let Q=Z instanceof Error?`: ${Z.message}`:"",J=`${W}${Q}`;if($){try{$.log(J,{severity:"warn",...Z!==void 0?{error:Z}:{}})}catch{}return}console.warn(J)}function pM($,W){if(!W)return $;if(!$)return{...W};let Z=[$.context,W.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
207
207
  `),Q=[...$.appendMessages??[],...W.appendMessages??[]];return{cancel:$.cancel===!0||W.cancel===!0?!0:void 0,review:$.review===!0||W.review===!0?!0:void 0,context:Z||void 0,overrideInput:W.overrideInput!==void 0?W.overrideInput:$.overrideInput,systemPrompt:W.systemPrompt!==void 0?W.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function rM($){if(!$||typeof $!=="object")return;let W=$,Z=typeof W.context==="string"?W.context:typeof W.contextModification==="string"?W.contextModification:typeof W.errorMessage==="string"?W.errorMessage:void 0;return{cancel:typeof W.cancel==="boolean"?W.cancel:void 0,review:typeof W.review==="boolean"?W.review:void 0,context:Z,overrideInput:Object.hasOwn(W,"overrideInput")?W.overrideInput:void 0}}function i3($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function E0($,W){let Z=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:W.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:W.workspacePath?[W.workspacePath]:[],workspaceInfo:W.workspaceInfo,userId:Z,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function iM($){let W=$.trim();if(!W)return{};let Q=W.split(`
208
208
  `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function nM($,W){let Z=$.stdin;if(!Z)throw Error("hook command failed to create stdin");await new Promise((Q,J)=>{let j=!1,X=()=>{Z.off("error",V),Z.off("finish",B),$.off("close",H)},Y=(G)=>{if(j)return;if(j=!0,X(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){Q();return}J(G);return}Q()},V=(G)=>Y(G),B=()=>Y(),H=()=>Y();Z.on("error",V),Z.once("finish",B),$.once("close",H);try{Z.end(W)}catch(G){Y(G)}})}async function PG($,W){if(W.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await wG($,W)}catch(Z){let Q=sM(W.command,process.platform,Z);if(!Q)throw Z;return await wG($,{...W,command:Q})}}async function wG($,W){let Z=CG(W.command,{env:W.env,debugRole:"hook"}),Q=cM(Z[0],Z.slice(1),{cwd:W.cwd,env:a3(W.env),stdio:W.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W.detached,windowsHide:!0}),J=new Promise((K)=>{Q.once("spawn",()=>K())}),j=new Promise((K,F)=>{Q.once("error",(A)=>F(A))}),X=JSON.stringify($);if(await Promise.race([J,j]),await nM(Q,X),W.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let Y="",V="",B=!1,H;Q.stdout.on("data",(K)=>{Y+=K.toString()}),Q.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,Q.kill("SIGKILL")},W.timeoutMs);Q.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=iM(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,j])}function aM($){try{let Z=dM($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Z?.startsWith("#!"))return;let Q=Z.slice(2).trim();if(!Q)return;let J=Q.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function oM($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function sM($,W=process.platform,Z){if(W!=="win32"||!oM(Z))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function bG($){if($.length===0)return;let[W,...Z]=$,Q=W.replace(/\\/g,"/").toLowerCase(),J=Q.split("/").at(-1)??Q;if(J==="env")return bG(Z);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Z];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Z]:[J,...Z];return $}function tM($){let W=aM($);if(W&&W.length>0)return[...bG(W)??W,$];let Z=$.toLowerCase();if(Z.endsWith(".sh")||Z.endsWith(".bash")||Z.endsWith(".zsh"))return["bash",$];if(Z.endsWith(".js")||Z.endsWith(".mjs")||Z.endsWith(".cjs"))return CG(["node",$],{debugRole:"hook"});if(Z.endsWith(".ts")||Z.endsWith(".mts")||Z.endsWith(".cts"))return["bun","run",$];if(Z.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Z.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function eM($){let W={};for(let Z of P$($)){if(!Z.hookEventName)continue;let Q=Z.hookEventName,J=W[Q]??[];J.push(tM(Z.path)),W[Q]=J}return W}async function $R($){let W;for(let Z of $.commands){let Q=Z.join(" ");try{let J=await PG($.payload,{command:Z,cwd:$.cwd,env:a3(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){n9($.logger,`hook command timed out: ${Q}`);continue}if(J?.parseError){n9($.logger,`hook command returned invalid JSON control output: ${Q} (${J.parseError})`);continue}W=pM(W,rM(J?.parsedJson))}catch(J){n9($.logger,`hook command failed: ${Q}`,J)}}return W}function N2($){for(let W of $.commands){let Z=W.join(" ");PG($.payload,{command:W,cwd:$.cwd,env:a3(process.env),detached:!0}).catch((Q)=>{n9($.logger,`hook command failed: ${Z}`,Q)})}}function b$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function n3($,W){return{...b$($.snapshot),userMessage:W}}function SG($){return{...b$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function yG($){return{...b$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function hG($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function WR($){if(!$)return;let W={};if($.cancel===!0)W.stop=!0;if($.overrideInput!==void 0)W.input=$.overrideInput;return Object.keys(W).length>0?W:void 0}function l8($){let W={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Z=(Q)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
209
- `,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??lM(EG(),"hooks.jsonl");EG(X),uM(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=n3(Q,"");Z({...E0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=SG(Q);Z({...E0(J,W),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:a9(J.call.input)}});return},afterTool:async(Q)=>{let J=yG(Q);Z({...E0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:a9(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:Q,result:J})=>{let j=b$(Q);if(J.status==="completed"){Z({...E0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||i3(J.error?.message)){Z({...E0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...E0(j,W),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let J=n3({snapshot:Q.snapshot},hG(Q.message.content));Z({...E0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function $W($){let W=eM($.workspacePath);if(!Object.values(W).some((G)=>G.length>0))return;let Q=async(G,K)=>{let F=W[K]??[];if(F.length===0)return;N2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...E0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...E0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return $R({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...E0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:a9(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:a9(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},Y=async(G)=>{let K=W.agent_end??[];if(K.length===0)return;N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=W.agent_error??[];if(K.length===0)return;N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(i3(G.reason)){let F=W.agent_abort??[];if(F.length>0)N2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0||(W.prompt_submit?.length??0)>0){if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(b$(G.snapshot),K);return};if((W.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(n3({snapshot:G.snapshot},hG(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(SG(G));return WR(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(yG(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...b$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((W.agent_error?.length??0)>0||(W.agent_abort?.length??0)>0||(W.session_shutdown?.length??0)>0){let G=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||i3(A.error?.message)){await B({...b$(F),reason:A.error?.message});return}if(A.error)await V({...b$(F),iteration:A.iterations,error:A.error})}}return H}function p8($){return u8("core.hook_config_files",$W($))}function E2($,W){let Z=$.map((Q)=>Q[W]).filter((Q)=>typeof Q==="function");if(Z.length===0)return;return async(Q)=>{let J;for(let j of Z){let X=await j(Q);if(!X||typeof X!=="object")continue;let Y=X;J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function w2($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:E2(W,"beforeRun"),afterRun:E2(W,"afterRun"),beforeModel:E2(W,"beforeModel"),afterModel:E2(W,"afterModel"),beforeTool:E2(W,"beforeTool"),afterTool:E2(W,"afterTool"),onEvent:E2(W,"onEvent")}}var kG={};N(kG,{normalizeRuntimeCapabilities:()=>w0});function w0(...$){let W,Z;for(let J of $){if(!J)continue;if(J.toolExecutors)W={...W??{},...J.toolExecutors};if(J.requestToolApproval)Z=J.requestToolApproval}let Q=W&&Object.keys(W).length>0;if(!Q&&!Z)return;return{...Q?{toolExecutors:W}:{},...Z?{requestToolApproval:Z}:{}}}var lG={};N(lG,{toProviderConfig:()=>e0,emptyStoredProviderSettings:()=>h$,StoredProviderSettingsSchema:()=>a8,StoredProviderSettingsEntrySchema:()=>_Z,ProviderSettingsSchemaTyped:()=>n8});import{z as y$}from"zod";var dG={};N(dG,{toProviderConfig:()=>e0,safeParseSettings:()=>DZ,safeCreateProviderConfig:()=>jJ,parseSettings:()=>UZ,normalizeProviderId:()=>i8,isBuiltInProviderId:()=>QJ,createProviderConfig:()=>JJ,SapSettingsSchema:()=>FZ,ReasoningSettingsSchema:()=>BZ,ProviderSettingsSchema:()=>S$,ProviderProtocolSchema:()=>XZ,ProviderIdSchema:()=>jW,ProviderClientSchema:()=>YZ,OcaSettingsSchema:()=>AZ,ModelCatalogSettingsSchema:()=>fZ,GcpSettingsSchema:()=>GZ,BUILT_IN_PROVIDER_IDS:()=>ZJ,BUILT_IN_PROVIDER:()=>JW,AzureSettingsSchema:()=>KZ,AwsSettingsSchema:()=>HZ,AuthSettingsSchema:()=>VZ});import*as t0 from"@cline/llms";import{z as E}from"zod";var uG={};N(uG,{resolveProviderConfig:()=>QW,getProviderConfig:()=>jZ,getLiveModelsCatalog:()=>r8,clearPublicModelsCatalogCache:()=>MR,clearPrivateModelsCatalogCache:()=>WJ,clearLiveModelsCatalogCache:()=>$J,OPENAI_COMPATIBLE_PROVIDERS:()=>ZW,DEFAULT_MODELS_CATALOG_URL:()=>WZ});import*as t from"@cline/llms";function o3($){if(!Array.isArray($))return[];return $.map((W)=>{if(typeof W==="string")return W.trim();if(W&&typeof W==="object"){let Z=W;for(let Q of[Z.id,Z.name,Z.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((W)=>W.length>0)}function ZR($,W){let Z=o3($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=o3(Q.data??Q.models);if(J.length>0)return J;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let X=Object.keys(Q.models).filter((Y)=>Y.trim().length>0);if(X.length>0)return X}let j=Q.providers?.[W];if(j&&typeof j==="object"){let Y=o3(j.models??j);if(Y.length>0)return Y}return[]}async function o9($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return ZR(await Z.json(),W)}function IG($){return $.replace(/\/+$/,"")}function s9($,W,Z){let Q=Z?.trim();if(!Q)return;let J=$?.trim();if(!J||!W?.trim())return Q;try{let j=new URL(Q),X=new URL(W),Y=new URL(J);if(j.origin!==X.origin)return Q;let V=IG(X.pathname),B=IG(Y.pathname);if(V&&j.pathname.startsWith(`${V}/`)){let H=j.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=j.pathname;return Y.search=j.search,Y.hash=j.hash,Y.toString()}catch{return Q}}function QR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function JR($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var jR=Object.values(t.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:QR($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),gG=Object.fromEntries(jR.map(($)=>[$.id,$]));function XR($){return gG[$]}function YR(){return Object.fromEntries(Object.entries(gG).filter(([,$])=>JR($)))}function mG($=[]){let W=$.flatMap((Z)=>{switch(Z){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Z];default:return[]}});return W.length>0?W:void 0}var WZ="https://models.dev/api.json",VR=600000,vG=300000,BR=5000,$Z=new Map,WW=new Map,s3=new Map,t9=new Map;async function HR(){return t.getGeneratedProviderModels()}async function GR($,W={},Z={},Q={},J={},j={}){if($==="litellm")return t.sortModelsByReleaseDate(Q);let X=await HR(),Y=t.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>X[K]??{})),B=Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(J).length>0;if(B&&H)return t.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return t.sortModelsByReleaseDate({...W,...t.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let G=t.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return t.sortModelsByReleaseDate({...t.preferCanonicalModelIds(G,t.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return t.sortModelsByReleaseDate({...G,...j})}function KR($,W){let Z=t.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function ZZ($){let W=$?.trim();return W&&W.length>0?W:""}function e3($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function FR($){let W=2166136261;for(let Z=0;Z<$.length;Z+=1)W^=$.charCodeAt(Z),W+=(W<<1)+(W<<4)+(W<<7)+(W<<8)+(W<<24);return(W>>>0).toString(16)}function AR($,W){return`${$}:${ZZ(W.baseUrl)}:${FR(e3(W)??"")}`}async function QZ($,W,Z=BR){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function C2($,W,Z){if(Z&&!$.includes(W))$.push(W)}function JZ($,W){let Z=["streaming","tools"];return C2(Z,"images",Boolean(W.supportsImages)),C2(Z,"prompt-cache",Boolean(W.supportsPromptCache)),C2(Z,"reasoning",Boolean(W.supportsReasoning)),{id:$,name:W.name??$,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxTokens:W.maxTokens,capabilities:Z,releaseDate:W.releaseDate,status:"active"}}async function fR($,W){let Z=await QZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${W}`,"Content-Type":"application/json"}});if(!Z.ok)throw Error(`Baseten model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=X.supported_features??[];j[Y]=JZ(Y,{name:Y,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return j}function xG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function UR($,W){let Z=await QZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":W}});if(!Z.ok)throw Error(`Hicap model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;j[Y]=JZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function DR($,W){let Q=`${(ZZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await QZ(Q,{method:"GET",headers:{Authorization:`Bearer ${W}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let X=(await J.json())?.data??[],Y={};for(let V of X){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];C2(F,"tools",H.includes("tools")),C2(F,"reasoning",H.includes("reasoning")),C2(F,"temperature",G.includes("temperature")),C2(F,"images",K.includes("image"));let A={input:xG(V.pricing?.prompt),output:xG(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return Y}function _R($){let W=ZZ($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function LR($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function TR($){let W=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Z=500,Q=W?`: ${W.slice(0,500)}${W.length>500?"...":""}`:"";return`HTTP ${$.status}${Q}`}async function qR($,W){let Z=_R($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of LR(Z))for(let[X,Y]of J)try{let V=await QZ(j,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),D=K.litellm_params?.model?.trim()||F;if(!D)continue;let f=K.model_info,_=JZ(D,{name:F??D,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[D]=_,F)G[F]={..._,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await TR(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);Q.push(`${new URL(j).pathname} (${X}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${Q.join("; ")}`)}var cG={baseten:fR,hicap:UR,litellm:qR,poolside:DR},t3=new Map,e9=new Map;function OR($,W){return`${$}:${ZZ(W.baseUrl)}`}async function zR($,W,Z){let Q=t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=s9(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??vG,X=OR($,Z),Y=Date.now(),V=t3.get(X);if(V&&V.expiresAt>Y)return V.data;let B=e9.get(X);if(B)return B;let H=o9(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,JZ(F,{name:F})]));return t3.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{e9.delete(X)});return e9.set(X,H),H}function MR(){t3.clear(),e9.clear()}async function RR($,W){let Z=e3(W);if(!Z)return{};let Q=cG[$];if(!Q)return{};return Q(W,Z)}function NR($,W,Z){if(!Z)return!1;if(!cG[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(e3(Z))}async function ER($,W,Z){let Q=W?.cacheTtlMs??vG,J=AR($,Z),j=Date.now(),X=s3.get(J);if(X&&X.expiresAt>j)return X.data;let Y=t9.get(J);if(Y)return Y;let V=RR($,Z).then((B)=>{return s3.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{t9.delete(J)});return t9.set(J,V),V}async function wR($){return t.fetchLiveProviderModels($,globalThis.fetch)}async function r8($={}){let W=$.url??WZ,Z=$.cacheTtlMs??VR,Q=Date.now(),J=$Z.get(W);if(J&&J.expiresAt>Q)return J.data;let j=WW.get(W);if(j)return j;let X=wR(W).then((Y)=>{return $Z.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{WW.delete(W)});return WW.set(W,X),X}function $J($){if($){$Z.delete($),WW.delete($);return}$Z.clear(),WW.clear()}function WJ(){s3.clear(),t9.clear()}function CR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:mG(Z.capabilities)}]))}var ZW=CR(YR());function jZ($){let W=XR($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:mG(W.capabilities)}}async function QW($,W,Z){let Q=jZ($);if(!Q)return;try{let J=W?.loadLatestOnInit?await r8(W):void 0,j=J?KR($,J):{},X=Z&&NR($,W,Z)?await ER($,W,Z):{},V=Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await zR($,W,V).catch(()=>({})):{},H=await GR($,Q.knownModels,j,X,B,Z?.knownModels);return{...Q,knownModels:H}}catch(J){if(W?.failOnError)throw J;if($==="litellm")return{...Q,knownModels:{}};return Q}}var JW=t0.BUILT_IN_PROVIDER,ZJ=t0.BUILT_IN_PROVIDER_IDS,QJ=t0.isBuiltInProviderId,i8=t0.normalizeProviderId,jW=E.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),XZ=E.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),YZ=E.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),VZ=E.object({apiKey:E.string().optional(),accessToken:E.string().optional(),refreshToken:E.string().optional(),expiresAt:E.number().int().positive().optional(),accountId:E.string().optional(),metadata:E.record(E.string(),E.unknown()).optional()}),PR=E.enum(["none","low","medium","high","xhigh"]),BZ=E.object({enabled:E.boolean().optional(),effort:PR.optional(),budgetTokens:E.number().int().positive().optional()}),HZ=E.object({accessKey:E.string().optional(),secretKey:E.string().optional(),sessionToken:E.string().optional(),region:E.string().optional(),profile:E.string().optional(),authentication:E.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:E.boolean().optional(),useCrossRegionInference:E.boolean().optional(),useGlobalInference:E.boolean().optional(),endpoint:E.string().url().optional(),customModelBaseId:E.string().optional()}),GZ=E.object({projectId:E.string().optional(),region:E.string().optional()}),KZ=E.object({apiVersion:E.string().optional(),useIdentity:E.boolean().optional()}),FZ=E.object({clientId:E.string().optional(),clientSecret:E.string().optional(),tokenUrl:E.string().url().optional(),resourceGroup:E.string().optional(),deploymentId:E.string().optional(),useOrchestrationMode:E.boolean().optional(),api:E.enum(["orchestration","foundation-models"]).optional(),defaultSettings:E.record(E.string(),E.unknown()).optional()}),AZ=E.object({mode:E.enum(["internal","external"]).optional(),usePromptCache:E.boolean().optional()}),fZ=E.object({loadLatestOnInit:E.boolean().optional(),loadPrivateOnAuth:E.boolean().optional(),url:E.string().url().optional(),cacheTtlMs:E.number().int().positive().optional(),failOnError:E.boolean().optional()}),S$=E.object({provider:jW,apiKey:E.string().optional(),auth:VZ.optional(),model:E.string().optional(),protocol:XZ.optional(),client:YZ.optional(),routingProviderId:jW.optional(),maxTokens:E.number().int().positive().optional(),contextWindow:E.number().int().positive().optional(),baseUrl:E.string().url().optional(),headers:E.record(E.string(),E.string()).optional(),timeout:E.number().int().positive().optional(),reasoning:BZ.optional(),aws:HZ.optional(),gcp:GZ.optional(),azure:KZ.optional(),sap:FZ.optional(),oca:AZ.optional(),region:E.string().optional(),apiLine:E.enum(["china","international"]).optional(),capabilities:E.array(E.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:fZ.optional()});function UZ($){return S$.parse($)}function DZ($){return S$.safeParse($)}function bR($){return $.protocol==="openai-responses"||$.client==="openai"}function e0($,W={}){let Z=$.provider,Q=i8(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=ZW[Q],V=Object.assign({},...t0.resolveProviderModelCatalogKeys(Q).map((D)=>t0.getGeneratedModelsForProvider(D))),B=Object.keys(V)[0],H=U8(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?W9:Z9:Y?.baseUrl),K=$.routingProviderId??(bR($)&&Q!==JW.OPENAI_NATIVE?JW.OPENAI_NATIVE:void 0),F=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Z,clientType:$.client,routingProviderId:K,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([D,f])=>f!==void 0))}function JJ($){let W=UZ($);return e0(W)}function jJ($){let W=DZ($);if(W.success)return{success:!0,config:e0(W.data)};return{success:!1,error:W.error}}var n8=S$;var _Z=y$.object({settings:S$,updatedAt:y$.string().datetime(),tokenSource:y$.enum(["manual","oauth","migration"]).default("manual")}),a8=y$.object({version:y$.literal(1),lastUsedProvider:y$.string().min(1).optional(),providers:y$.record(y$.string(),_Z)});function h$(){return{version:1,providers:{}}}f1();var nG={};N(nG,{InMemoryWorkspaceManager:()=>s8});import{upsertWorkspaceInfo as kR,WorkspaceManifestSchema as YJ}from"@cline/shared";var iG={};N(iG,{normalizeWorkspacePath:()=>o1,generateWorkspaceInfoWithDiagnostics:()=>XW,generateWorkspaceInfo:()=>o8,buildWorkspaceMetadataWithInfo:()=>XJ,buildWorkspaceMetadata:()=>YW});import{basename as SR,resolve as yR}from"node:path";import{performance as pG}from"node:perf_hooks";import{processWorkspaceInfo as rG}from"@cline/shared";import hR from"simple-git";function o1($){return yR($)}async function o8($){return(await XW($)).info}function LZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function XW($){let W=o1($),Z={rootPath:W,hint:SR(W)},Q;try{let J=hR({baseDir:W});if(!await J.checkIsRepo())return{info:Z,vcsType:"none"};try{let X=await J.getRemotes(!0);if(X.length>0){let Y=X.map((V)=>{let B=V.refs.fetch||V.refs.push;return`${V.name}: ${B}`});Z.associatedRemoteUrls=Y}}catch(X){Q??=LZ(X)}try{let X=(await J.revparse(["HEAD"])).trim();if(X.length>0)Z.latestGitCommitHash=X}catch(X){Q??=LZ(X)}try{let X=(await J.branch()).current.trim();if(X.length>0)Z.latestGitBranchName=X}catch(X){Q??=LZ(X)}return{info:Z,vcsType:"git",error:Q}}catch(J){return{info:Z,vcsType:"none",error:LZ(J)}}}async function YW($){let W=await o8($);return rG(W)}async function XJ($){let W=pG.now(),Z=await XW($),Q=pG.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:rG(J),durationMs:Q,vcsType:Z.vcsType,initError:Z.error}}class s8{manifest;listeners=new Set;constructor($){this.manifest=YJ.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await o8($);return this.manifest=kR(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=o1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=YJ.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=YJ.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let W=o1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}T0();import{createHash as IR}from"node:crypto";var aG=new Set,oG=new Set;function xR($){return IR("sha256").update($).digest("hex")}function gR($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function sG($){if(!$.telemetry)return;let W=xR($.rootPath),Z=$.rootCount??1;if(!aG.has(W))aG.add(W),h5($.telemetry,{root_count:Z,vcs_types:gR($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!oG.has(W)){oG.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",k5($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function cR($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function uR($,W,Z){if(W.length>0)for(let j of W)Z?.log(j.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(cR).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Z?.log(`Some plugins failed to initialize. ${Q}${J}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Z?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function dR($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function tG($,W){return vR($,W)}function lR($){let W=0;for(let Z of $??[]){if(Z.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0)?.kind==="recovery_notice")continue;W+=1}return W}function pR($){let W={...$.storedHeaders??{},...$.configHeaders??{}},Z=$.accountId?.trim()||rR($.accessToken);if(W.originator="cline",W.session_id=$.sessionId,W["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Z)W["ChatGPT-Account-Id"]=Z;return W}function rR($){let W=$?.trim();if(!W)return;let Z=h0(W),Q=Z?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let J=Z?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let j=Z?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return}function iR($,W,Z,Q,J,j){let X=Q.getProviderSettings($.providerId),Y=J||X?.modelCatalog?{...J??{},...X?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=mR({providerId:$.providerId,sessionId:W,source:Z,defaultSource:F0.CLI,clientName:$.extensionContext?.client?.name,clientVersion:$.extensionContext?.client?.version,clientVersionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot,coreVersion:k8}),H=$.providerId==="openai-codex"?pR({sessionId:W,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):B?{...X?.headers??{},...$.headers??{},...B}:$.headers??X?.headers,G={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:H,reasoning:dR($,X?.reasoning),modelCatalog:Y},K={...e0(G),...V??{}};if(B)K.headers={...H??{},...V?.headers??{},...B};if($.knownModels)K.knownModels=$.knownModels;if($.extensionContext)K.extensionContext=$.extensionContext;let A=$.fetch??K.fetch??j;if(A)K.fetch=A;return K}async function eG($){let{input:W,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:J,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:Y,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,D=w$(W.config),{modelCatalogDefaults:f,userInstructionService:_,configExtensions:U,onTeamRestored:R,...L}=K??{},q=Object.keys(L).length>0?L:void 0,{workspaceInfo:T,workspaceMetadata:C,durationMs:w,vcsType:b,initError:P}=await XJ(D),r=q?.extensionContext,$0={...r??{},workspace:{...T,...r?.workspace??{}},session:{...r?.session??{},sessionId:Z},logger:r?.logger??q?.logger,telemetry:r?.telemetry??q?.telemetry??J};sG({telemetry:$0.telemetry,rootPath:T.rootPath,workspaceInfo:T,rootCount:1,vcsType:b,durationMs:w,initError:P,featureFlagEnabled:!0});let A0=p8({cwd:W.config.cwd,workspacePath:D,rootSessionId:Z,logger:q?.logger,workspaceInfo:T}),Y8=iH(q?.hooks)?void 0:l8({rootSessionId:Z,workspacePath:D,workspaceInfo:T}),e$=w2([q?.hooks,Y8]),g0;if(tG(U,"plugins"))try{g0=await c8({pluginPaths:q?.pluginPaths,workspacePath:D,cwd:W.config.cwd,onEvent:V,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:T,session:$0.session,client:$0.client,user:$0.user,logger:$0.logger,telemetry:$0.telemetry,automation:$0.automation}),uR(g0.failures,g0.warnings,q?.logger)}catch(V8){let _7=V8 instanceof Error?V8.message:String(V8);q?.logger?.log?.(`plugin loading failed; continuing without plugins (${_7})`)}let Y0=M3(A0?[A0]:void 0,M3(q?.extensions,E9(g0?.extensions))),G$=tG(U,"plugins")?a1(g0?.pluginPaths??[]):void 0,L0={...W.config,...q??{},sessionId:Z,hooks:e$,extensions:Y0,extensionContext:$0,telemetry:$0.telemetry},S0=iR(L0,Z,W.source,Q,f,Y),T1=w2([L0.hooks,L0.checkpoint?.enabled===!0?NG({cwd:L0.cwd,sessionId:Z,logger:L0.logger,createCheckpoint:L0.checkpoint?.createCheckpoint,initialRunCount:lR(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),g={...L0,providerConfig:S0,workspaceMetadata:C,hooks:T1},z0=W.toolPolicies??L0.toolPolicies??X,I=w0(j,W.capabilities),s=I?.requestToolApproval,y0=I?.toolExecutors,V0=H?.(g),b5=new s8({currentWorkspacePath:T.rootPath,workspaces:{[T.rootPath]:T}});return{effectiveInput:W,config:g,providerConfig:S0,workspaceMetadata:C,workspaceInfo:T,extensions:Y0,hooks:T1,toolPolicies:z0,requestToolApproval:s,pluginSandboxShutdown:g0?.shutdown,runtimeBuilderInput:{config:g,hooks:T1,extensions:Y0,onTeamEvent:B,createSpawnTool:G,onTeamRestored:R,onSubAgentEvent:V0?.onSubAgentEvent,onSubAgentStart:V0?.onSubAgentStart,onSubAgentEnd:V0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:G$,configExtensions:U,toolExecutors:y0,toolPolicies:z0,workspaceManager:b5,logger:g.logger,telemetry:g.telemetry,requestToolApproval:s}}}import{existsSync as TZ,mkdirSync as nR,readdirSync as aR,rmdirSync as oR,rmSync as sR,unlinkSync as tR}from"node:fs";import{dirname as $K,join as VW}from"node:path";function j0(){return new Date().toISOString()}function BW($){if(!$||!TZ($))return;try{tR($)}catch{}}function eR($){let W=S8($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=g6($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class VJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return VW(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!TZ(W))nR(W,{recursive:!0});return W}sessionMessagesPath($){return VW(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return VW(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return VW(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!TZ(W)){W=$K(W);continue}try{if(aR(W).length>0)break;oR(W)}catch{break}W=$K(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!TZ($))return;try{sR($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=eR($),j=this.sessionArtifactsDir(Q);return{messagesPath:VW(j,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as $N}from"@cline/shared/storage";T0();function WK($,W,Z,Q,J){if(Z)x5($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else I5($.telemetry,{ulid:W,apiProvider:$.providerId,...J});WN($.telemetry,{workspacePath:Q})}function WN($,W){let Z=$N("Hooks"),Q=P$(W.workspacePath),J=new Map;for(let j of Q){let X=j.hookEventName??"unknown",Y=J.get(X)??{global:0,workspace:0};if(j.path===Z||j.path.startsWith(`${Z}/`))Y.global+=1;else Y.workspace+=1;J.set(X,Y)}for(let[j,X]of J.entries())r5($,j,X.global,X.workspace)}function ZK($,W){for(let Z of W.mentions)l5($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)u5($,"file",Z.length);for(let Z of W.ignoredMentions)d5($,"file","not_found",Z)}var Q_={};N(Q_,{ProviderSettingsManager:()=>V1});import{chmodSync as j_,existsSync as _Y,mkdirSync as vm,readFileSync as cm,renameSync as um,rmSync as dm,writeFileSync as lm}from"node:fs";import{basename as X_,dirname as LY}from"node:path";import{resolveProviderSettingsPath as pm}from"@cline/shared/storage";var O={};N(O,{writeHubDiscovery:()=>aZ,writeGlobalSettings:()=>M1,withHubStartupLock:()=>oZ,verifyHubConnection:()=>E1,updateMcpSettingsFileSync:()=>U1,updateMcpSettingsFile:()=>J4,updateMcpServerOAuthStateAsync:()=>EW,updateMcpServerOAuthState:()=>h2,updateLocalProvider:()=>j7,uninstallPlugin:()=>T5,uninstallMarketplaceSkill:()=>vQ,uninstallMarketplacePlugin:()=>cQ,uninstallMarketplaceMcpServerFromSettings:()=>gQ,uninstallMarketplaceEntry:()=>xX,truncateNotificationBody:()=>H5,truncateCommandOutput:()=>V2,toggleDisabledTool:()=>R9,toTeamProgressLifecycleEvent:()=>L4,toProviderConfig:()=>e0,toHubStatusUrl:()=>eJ,toHubHealthUrl:()=>sZ,toHookConfigFileName:()=>e6,syncPluginMcpServersToSettings:()=>_5,summarizeUsageFromMessages:()=>h8,stopLocalHubServerGracefully:()=>Gj,startLocalOAuthServer:()=>G1,startHubWebSocketServer:()=>Z8,startHubServer:()=>SU,startClineDeviceAuth:()=>C7,splitCoreSessionConfig:()=>hW,spawnDetachedHubServerWithRetry:()=>G4,spawnDetachedHubServer:()=>jj,setTelemetryOptOutGlobally:()=>xB,setSdkLogger:()=>O7,setMcpServerDisabled:()=>S2,setDisabledTools:()=>X3,setDisabledPlugin:()=>pB,setCompactionStrategyGlobally:()=>cB,setAutoUpdateEnabledGlobally:()=>mB,sendHubCommand:()=>Mf,sdkDebug:()=>W0,saveProviderOAuthCredentials:()=>J2,saveLocalProviderSettings:()=>tX,saveLocalProviderOAuthCredentials:()=>ZY,sanitizeSessionToken:()=>q2,safeParseSettings:()=>DZ,safeCreateProviderConfig:()=>jJ,runSubprocessEvent:()=>N4,runHook:()=>w4,reviveTeamStateDates:()=>h9,restartLocalHubIfIdleAfterStartupTimeout:()=>ZQ,resolveWorkspaceHubOwnerContext:()=>tF,resolveWorkflowsConfigSearchPaths:()=>TW,resolveSkillsConfigSearchPaths:()=>_W,resolveSharedHubOwnerContext:()=>u0,resolveSessionBackend:()=>Sj,resolveRulesConfigSearchPaths:()=>LW,resolveProviderConfig:()=>QW,resolveProviderApiKeyFromSettings:()=>k7,resolveProductionHubOwnerContext:()=>j1,resolvePluginSkillDirectoriesFromPaths:()=>a1,resolvePluginConfigSearchPaths:()=>a6,resolveMcpServerRegistrations:()=>$1,resolveMarketplaceMcpServerName:()=>O5,resolveLocalClineAuthToken:()=>JY,resolveHubUrl:()=>uj,resolveHubOwnerContext:()=>W$,resolveHubEndpointOptions:()=>J1,resolveHubBuildId:()=>nZ,resolveHooksConfigSearchPaths:()=>s6,resolveDisabledToolNames:()=>R1,resolveDisabledPluginPaths:()=>P6,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>H4,resolveDefaultHubPathname:()=>Jj,resolveDefaultHubHost:()=>Qj,resolveCoreSelectedToolIds:()=>I9,resolveCoreDistinctId:()=>d0,resolveCompatibleLocalHubUrl:()=>iW,resolveClineDir:()=>nF,resolveClineDataDir:()=>u2,resolveAndLoadAgentPlugins:()=>c8,resolveAgentPluginPaths:()=>n1,requestHubShutdown:()=>rW,requestDesktopToolApproval:()=>qX,removePluginMcpServersFromSettings:()=>L5,rememberRecoverableLocalHubUrl:()=>u$,registerRemoteConfigSessionBlobUpload:()=>CQ,registerMcpServersFromSettingsFile:()=>k2,registerDisposable:()=>Im,refreshProviderModelsFromSource:()=>eX,refreshOpenAICodexToken:()=>$9,refreshOcaToken:()=>J9,refreshClineToken:()=>t5,readSessionCheckpointHistory:()=>s2,readRemoteConfigSessionBlobUploadMetadata:()=>KX,readHubDiscovery:()=>_0,readGlobalSettings:()=>R0,readCompactionStrategyGlobally:()=>vB,readBearerToken:()=>OQ,projectSessionCompactionState:()=>j2,probeHubServer:()=>Z$,probeHubConnection:()=>zf,prewarmFileIndex:()=>_9,prewarmDetachedHubServer:()=>eZ,prepareRemoteConfigCoreIntegration:()=>AX,parseWorkflowConfigFromMarkdown:()=>DW,parseUserCommandEnvelope:()=>km,parseSkillConfigFromMarkdown:()=>fW,parseSettings:()=>UZ,parseSessionCompactionState:()=>K1,parseRuleConfigFromMarkdown:()=>UW,parsePluginSource:()=>oQ,parseMcpInstallArgs:()=>D5,parseHookEventPayload:()=>E4,parseConfiguredAgentConfig:()=>sW,normalizeWorkspacePath:()=>o1,normalizeUserInput:()=>hm,normalizeSdkError:()=>ym,normalizeRuntimeCapabilities:()=>w0,normalizeProviderId:()=>i8,normalizeOAuthProvider:()=>$Y,normalizeHubWebSocketUrl:()=>d$,noopBasicLogger:()=>Sm,migrateLegacyProviderSettings:()=>E5,mergeRulesForSystemPrompt:()=>Z4,mergeAgentHooks:()=>w2,marketplaceEntryKey:()=>IX,markLocalProviderEnabled:()=>aX,makeTeamTaskSubSessionId:()=>x6,makeSubSessionId:()=>b8,loginOpenAICodex:()=>a4,loginOcaOAuth:()=>t4,loginLocalProvider:()=>WY,loginClineOAuth:()=>i4,loginAndSaveProviderOAuthCredentials:()=>$6,loginAndSaveLocalProviderOAuthCredentials:()=>QY,loadOpenTelemetryAdapter:()=>jm,loadMcpSettingsFile:()=>b2,loadLlmsConfigFromFile:()=>fY,loadConfiguredAgentConfigs:()=>U4,loadAgentPluginsFromPathsWithDiagnostics:()=>M2,loadAgentPluginsFromPaths:()=>c9,loadAgentPluginFromPath:()=>i6,listSessionHistoryFromBackend:()=>aJ,listPluginToolsWithDiagnostics:()=>cZ,listPluginTools:()=>PW,listMcpServerOAuthStatuses:()=>wW,listLocalProviders:()=>oX,listHookConfigFiles:()=>P$,isToolDisabledGlobally:()=>uB,isTelemetryOptedOutGlobally:()=>M9,isSessionNotFoundError:()=>$$,isRuleEnabled:()=>PZ,isPluginDisabledGlobally:()=>lB,isOfficialPluginSlug:()=>aQ,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>mQ,isLocalHubOrigin:()=>GX,isLocalHubHostName:()=>zQ,isHubReconnectableTransportError:()=>Bj,isHubCommandTimeoutError:()=>WQ,isDiscoveryFilePresent:()=>oF,isClinePassLimitMessage:()=>Lm,isClinePassLimitError:()=>_m,isClineOrgIndividualInferenceSubscriptionMessage:()=>Dm,isClineOrgIndividualInferenceSubscriptionError:()=>Um,isClineNotSubscribedMessage:()=>fm,isClineNotSubscribedError:()=>Am,isClineAccountActionRequest:()=>qZ,isBuiltInProviderId:()=>QJ,isAutoUpdateEnabledGlobally:()=>gB,installPlugin:()=>dX,installMcpServer:()=>OX,identifyAccount:()=>H1,hashSecret:()=>M0,hasMcpSettingsFile:()=>t1,getValidOpenAICodexCredentials:()=>o4,getValidOcaCredentials:()=>e4,getValidClineCredentials:()=>n4,getProviderOAuthCredentialsFromSettings:()=>W6,getProviderConfigFields:()=>jY,getProviderConfig:()=>jZ,getProviderAuthStorageId:()=>h7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>y2,getMarketplaceSkillCandidates:()=>z5,getLocalProviderModels:()=>sX,getLiveModelsCatalog:()=>r8,getGlobalMarketplaceSkillPaths:()=>M5,getFileIndex:()=>d1,getCurrentContextSize:()=>w3,getCoreHeadlessToolNames:()=>I6,getCoreDefaultEnabledToolIds:()=>k9,getCoreBuiltinToolCatalog:()=>L2,getCoreAcpToolNames:()=>x9,getClinePassSubscriptionUrl:()=>Fm,getClineOrgIndividualInferenceSubscriptionMessage:()=>Gm,getClineNotSubscribedMessage:()=>Km,getClineDefaultSystemPrompt:()=>Tm,generateWorkspaceInfoWithDiagnostics:()=>XW,generateWorkspaceInfo:()=>o8,formatRulesForSystemPrompt:()=>W4,formatProviderOAuthApiKey:()=>I7,formatDisplayUserInput:()=>bm,findInstalledGlobalMarketplaceSkillName:()=>R5,findCheckpointForRun:()=>M4,filterExtensionToolRegistrations:()=>E9,filterDisabledTools:()=>p1,filterDisabledPluginPaths:()=>N9,fetchClineRecommendedModels:()=>FY,extractClinePassLimitMessage:()=>Hm,executeClineAccountAction:()=>OZ,ensureHubWebSocketServer:()=>MQ,ensureHubServer:()=>yU,ensureDetachedHubServer:()=>JA,ensureCustomProvidersLoaded:()=>Z7,ensureCompatibleLocalHubUrl:()=>p2,enrichPromptWithMentions:()=>z8,emptyWorkspaceManifest:()=>wm,emptyStoredProviderSettings:()=>h$,discoverPluginModulePaths:()=>o6,disablePluginMcpServersInSettings:()=>NX,deriveSubsessionStatus:()=>m6,deleteLocalProvider:()=>X7,defineLlmsConfig:()=>AY,createWorkflowsConfigDefinition:()=>zW,createUserInstructionConfigService:()=>k$,createToolPoliciesWithPreset:()=>T9,createTool:()=>Em,createTeamName:()=>SQ,createSubprocessHooks:()=>FQ,createSpawnAgentTool:()=>N$,createSkillsConfigDefinition:()=>qW,createShellTool:()=>O6,createShellExecutor:()=>B2,createSessionHost:()=>O4,createSessionCompactionState:()=>D8,createRuntimeHost:()=>O4,createRulesConfigDefinition:()=>OW,createRemoteConfigSessionMessagesArtifactUploader:()=>FX,createProviderConfig:()=>JJ,createOpenTelemetryTelemetryService:()=>V5,createOAuthClientCallbacks:()=>t8,createMcpTools:()=>V4,createLocalHubScheduleRuntimeHandlers:()=>RQ,createLlmsSdk:()=>DY,createInitialAccumulatedUsage:()=>O0,createInMemoryHubOwnerContext:()=>aF,createHubServerUrl:()=>D1,createHubAuthToken:()=>iZ,createHookConfigFileHooks:()=>$W,createHookConfigFileExtension:()=>p8,createHookAuditHooks:()=>l8,createDisabledMcpToolPolicy:()=>CW,createDisabledMcpToolPolicies:()=>vZ,createDelegatedAgentConfigProvider:()=>M$,createDelegatedAgent:()=>R$,createDefaultToolsWithPreset:()=>q9,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>w6,createDefaultMcpServerClientFactory:()=>X4,createDefaultExecutors:()=>M8,createCoreSettingsService:()=>x2,createCoreSessionSnapshot:()=>w1,createContributionRegistry:()=>Nm,createContextCompactionPrepareTurn:()=>H6,createConfiguredTelemetryService:()=>Y$,createConfiguredTelemetryHandle:()=>r$,createConfiguredAgentTools:()=>D4,createCompactionStateAwarePrepareTurn:()=>G6,createClineTelemetryServiceMetadata:()=>Rm,createClineTelemetryServiceConfig:()=>Mm,createCheckpointComparePlan:()=>BQ,createBuiltinTools:()=>T2,createAgentTeamsTools:()=>_2,createAgentRuntime:()=>mm,createAgentHooksExtension:()=>u8,connectToHub:()=>UQ,completeClineDeviceAuth:()=>P7,compareCheckpointToWorkspace:()=>J5,collectPluginMcpOAuthCandidates:()=>sQ,clearPrivateModelsCatalogCache:()=>WJ,clearLiveModelsCatalogCache:()=>$J,clearHubDiscovery:()=>c0,captureWorkspacePathResolved:()=>mY,captureWorkspaceInitialized:()=>h5,captureWorkspaceInitError:()=>k5,captureToolUsage:()=>H8,captureTokenUsage:()=>g5,captureTaskRestarted:()=>x5,captureTaskCreated:()=>I5,captureTaskCompleted:()=>l4,captureSubagentExecution:()=>r4,captureSkillUsed:()=>v5,captureSdkError:()=>zm,captureProviderConfigured:()=>vY,captureProviderApiError:()=>p4,captureModeSwitch:()=>m5,captureMentionUsed:()=>u5,captureMentionSearchResults:()=>l5,captureMentionFailed:()=>d5,captureHookDiscovery:()=>r5,captureExtensionActivated:()=>gY,captureDiffEditFailure:()=>c5,captureConversationTurnEvent:()=>B8,captureCompactionSkipped:()=>n5,captureCompactionExecuted:()=>i5,captureAuthSucceeded:()=>x1,captureAuthStarted:()=>I1,captureAuthLoggedOut:()=>F$,captureAuthFailed:()=>g1,captureAgentUnexpectedReasoningTokens:()=>xY,captureAgentTeamCreated:()=>p5,captureAgentCreated:()=>A$,buildWorkspaceMetadata:()=>YW,buildTeamProgressSummary:()=>_4,buildSdkErrorProperties:()=>qm,buildRemoteConfigSessionBlobUploadMetadata:()=>EQ,buildMcpInstallTransport:()=>yQ,buildDelegatedAgentConfig:()=>U2,buildConnectionUpdate:()=>A3,buildConfiguredAgentToolName:()=>tW,buildConfiguredAgentToolDescriptors:()=>eW,buildCheckpointWorkspaceDiff:()=>HQ,bootstrapAgentTeams:()=>P8,authorizeMcpServerOAuth:()=>IZ,addLocalProvider:()=>nX,accumulateUsageTotals:()=>D0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>AW,UnifiedConfigFileWatcher:()=>P2,ToolPresets:()=>s0,TelemetryService:()=>b4,TelemetryLoggerSink:()=>Y5,TEAM_TOOL_NAMES:()=>C8,SubprocessSandbox:()=>g8,StructuredCommandInputSchema:()=>X2,StoredProviderSettingsSchema:()=>a8,StoredProviderSettingsEntrySchema:()=>_Z,SqliteTeamStore:()=>Q8,SqliteSessionStore:()=>P1,SessionVersioningService:()=>a$,SessionVersioningError:()=>p0,SessionSource:()=>F0,SessionNotFoundError:()=>e1,SapSettingsSchema:()=>FZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>FW,SESSION_STATUSES:()=>v6,SESSION_NOT_FOUND_ERROR_CODE:()=>g2,SDK_ERROR_TELEMETRY_EVENT:()=>xm,RpcClineAccountService:()=>GW,RemoteRuntimeHost:()=>A4,ReasoningSettingsSchema:()=>BZ,RULES_CONFIG_DIRECTORY_NAME:()=>CZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>wQ,ProviderSettingsSchema:()=>S$,ProviderSettingsManager:()=>V1,ProviderProtocolSchema:()=>XZ,ProviderIdSchema:()=>jW,ProviderClientSchema:()=>YZ,OpenTelemetryProvider:()=>S4,OcaSettingsSchema:()=>AZ,OPENAI_COMPATIBLE_PROVIDERS:()=>ZW,NodeHubClient:()=>_1,NoOpFeatureFlagsProvider:()=>o2,NativeHubTransportAdapter:()=>f5,ModelCatalogSettingsSchema:()=>fZ,McpSettingsUpdateSkippedError:()=>Q4,McpSettingsMutatorPurityError:()=>I$,McpSettingsLockTimeoutError:()=>x$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>y1,Llms:()=>Xm,InMemoryWorkspaceManager:()=>s8,InMemoryMcpManager:()=>I2,HubUIClient:()=>pj,HubTransportError:()=>k0,HubSessionClient:()=>lj,HubServerTransport:()=>h4,HubScheduleService:()=>P4,HubScheduleCommandService:()=>C4,HubRuntimeHost:()=>Q$,HubCommandError:()=>K4,HookEventPayloadSchema:()=>KQ,HookEventNameSchema:()=>GQ,HookConfigFileName:()=>d8,HOOK_CONFIG_FILE_EVENT_MAP:()=>t6,HOOKS_CONFIG_DIRECTORY_NAME:()=>i9,GlobalSettingsSchema:()=>C6,GcpSettingsSchema:()=>GZ,FileTeamPersistenceStore:()=>B7,FeatureFlagsService:()=>a2,FeatureFlagDefaultValue:()=>Pm,FEATURE_FLAGS:()=>Cm,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>f7,DefaultToolNames:()=>q0,DefaultRuntimeBuilder:()=>x4,DefaultLlmsSdk:()=>C5,DEFAULT_MODELS_CATALOG_URL:()=>WZ,DEFAULT_HUB_PORT:()=>Wj,DEFAULT_HUB_PATHNAME:()=>Zj,DEFAULT_HUB_HOST:()=>$j,CoreSettingsService:()=>g$,CoreSessionService:()=>S1,ContributionRegistry:()=>Om,ClinePassLimitError:()=>Bm,ClineOrgIndividualInferenceSubscriptionError:()=>Vm,ClineNotSubscribedError:()=>Ym,ClineCore:()=>j5,ClineAccountService:()=>HW,ChatViewStateSchema:()=>GY,ChatSummarySchema:()=>A7,ChatSessionStatusSchema:()=>G7,ChatSessionConfigSchema:()=>H7,ChatMessageSchema:()=>F7,ChatMessageRoleSchema:()=>K7,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>w5,BrowserWebSocketHubAdapter:()=>A5,BUILT_IN_PROVIDER_IDS:()=>ZJ,BUILT_IN_PROVIDER:()=>JW,AzureSettingsSchema:()=>KZ,AwsSettingsSchema:()=>HZ,AuthSettingsSchema:()=>VZ,AgentTeamsRuntime:()=>n2,AgentTeam:()=>q4,Agent:()=>gm,ALL_DEFAULT_TOOL_NAMES:()=>U$});z(O,C$0);import*as Xm from"@cline/llms";import{ClineNotSubscribedError as Ym,ClineOrgIndividualInferenceSubscriptionError as Vm,ClinePassLimitError as Bm,extractClinePassLimitMessage as Hm,getClineOrgIndividualInferenceSubscriptionMessage as Gm,getClineNotSubscribedMessage as Km,getClinePassSubscriptionUrl as Fm,isClineNotSubscribedError as Am,isClineNotSubscribedMessage as fm,isClineOrgIndividualInferenceSubscriptionError as Um,isClineOrgIndividualInferenceSubscriptionMessage as Dm,isClinePassLimitError as _m,isClinePassLimitMessage as Lm}from"@cline/llms";import{buildClineSystemPrompt as Tm,buildSdkErrorProperties as qm,ContributionRegistry as Om,captureSdkError as zm,createClineTelemetryServiceConfig as Mm,createClineTelemetryServiceMetadata as Rm,createContributionRegistry as Nm,createTool as Em,emptyWorkspaceManifest as wm,FEATURE_FLAGS as Cm,FeatureFlagDefaultValue as Pm,formatDisplayUserInput as bm,noopBasicLogger as Sm,normalizeSdkError as ym,normalizeUserInput as hm,parseUserCommandEnvelope as km,registerDisposable as Im,SDK_ERROR_TELEMETRY_EVENT as xm}from"@cline/shared";import"@cline/shared/storage";var JK={};N(JK,{isClineAccountActionRequest:()=>qZ,executeClineAccountAction:()=>OZ,RpcClineAccountService:()=>GW,ClineAccountService:()=>HW});function ZN($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function QK($,W,Z){let Q=ZN(Z);if(Q)return Q;let J=W.trim();if(J){let j=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class HW{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let W=$.apiBaseUrl.trim();if(!W)throw Error("apiBaseUrl is required");this.apiBaseUrl=W,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let W=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(W)}/balance`)}async fetchUsageTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/usages`)).items??[]}async fetchPaymentTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let W=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)W.searchParams.set("type",$.type);return this.request(`${W.pathname}${W.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}`)}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}/balance`)}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");let Z=await this.resolveOrganizationMemberId(W,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(W)}/members/${encodeURIComponent(Z)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let W=$?.trim();if(W)return W;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,W){let Z=W?.trim();if(Z)return Z;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let X=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,W){let Z=(await this.getAuthTokenFn())?.trim();if(!Z)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,j=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:W?.method??"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json",...Q??{}},body:W?.body!==void 0?JSON.stringify(W.body):void 0,signal:J.signal});if(X.status===204||W?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let Y=await X.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!X.ok)throw Error(QK(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(QK(X.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(j)}}}function qZ($){return $.action==="clineAccount"}async function OZ($,W){switch($.operation){case"fetchMe":return W.fetchMe();case"fetchBalance":return W.fetchBalance($.userId);case"fetchUsageTransactions":return W.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return W.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return W.fetchUserOrganizations();case"fetchOrganizationBalance":return W.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return W.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await W.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return W.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class GW{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:W})}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:W,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var jK={};N(jK,{createOAuthClientCallbacks:()=>t8});function t8($){return{onAuth:({url:W,instructions:Z})=>{if($.onOutput?.(Z??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(W)).catch((Q)=>{$.onOpenUrlError?.({url:W,error:Q})})}catch(Q){$.onOpenUrlError?.({url:W,error:Q})}$.onOutput?.(W)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var Af={};N(Af,{ClineCore:()=>j5});function XK($){if($===!0)return{};if(!$)return;return $}function YK($){if($==="user")return"global";return $}class BJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let W=this.getService().ingestEvent($);return{event:W.event,duplicate:W.duplicate,matchedSpecIds:W.matchedSpecs.map((Z)=>Z.specId),queuedRuns:W.queuedRuns,suppressions:W.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function VK($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:i8(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:jN(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content),delivery:Q.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:JN(J)}},async abortSession(Z){return await W.abort(Z,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}function zZ($){let W=QN($.automationService,$.automation),Z=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!W&&!Z&&!Q&&!J&&!j)return $.context;return{...$.context??{},...Z?{client:Z}:{},...Q?{user:Q}:{},...J?{logger:J}:{},...j?{telemetry:j}:{},...W?{automation:W}:{}}}function QN($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function JN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function jN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var KF={};N(KF,{createCoreSettingsService:()=>x2,CoreSettingsService:()=>g$});import{existsSync as SW,readFileSync as lE}from"node:fs";import{basename as NJ,dirname as jF,extname as pE,isAbsolute as VF,join as rE,relative as BF,resolve as XF}from"node:path";var zK={};N(zK,{resolveWorkflowsConfigSearchPaths:()=>TW,resolveSkillsConfigSearchPaths:()=>_W,resolveRulesConfigSearchPaths:()=>LW,parseWorkflowConfigFromMarkdown:()=>DW,parseSkillConfigFromMarkdown:()=>fW,parseRuleConfigFromMarkdown:()=>UW,createWorkflowsConfigDefinition:()=>zW,createUserInstructionConfigService:()=>k$,createSkillsConfigDefinition:()=>qW,createRulesConfigDefinition:()=>OW,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>AW,UnifiedConfigFileWatcher:()=>P2,SKILLS_CONFIG_DIRECTORY_NAME:()=>FW,RULES_CONFIG_DIRECTORY_NAME:()=>CZ});import{createHash as XN}from"node:crypto";import{watch as YN}from"node:fs";import{readdir as VN,readFile as BN}from"node:fs/promises";import{join as HN}from"node:path";function GN($){return XN("sha1").update($).digest("hex")}function GK($){return Boolean($&&typeof $==="object"&&"code"in $)}function BK($){return GK($)&&$.code==="ENOENT"}function HK($){return GK($)&&($.code==="EACCES"||$.code==="EPERM")}class P2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,W){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=W?.debounceMs??75,this.emitParseErrors=W?.emitParseErrors??!1;for(let Z of $){if(this.definitionsByType.has(Z.type))throw Error(`Duplicate unified config definition type '${Z.type}'.`);this.definitionsByType.set(Z.type,Z),this.recordsByType.set(Z.type,new Map),this.discoveredDirectoriesByType.set(Z.type,new Set);for(let Q of Z.directories){let J=this.baseTypesByDirectory.get(Q);if(J)J.add(Z.type);else this.baseTypesByDirectory.set(Q,new Set([Z.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let W=this.definitionsByType.get($);if(!W)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(W)})}getSnapshot($){let W=this.recordsByType.get($);return new Map([...W?.entries()??[]].map(([Z,Q])=>[Z,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[W,Z]of this.recordsByType.entries())$.set(W,new Map([...Z.entries()].map(([Q,J])=>[Q,{...J}])));return $}emit($){for(let W of this.listeners)W($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[W,Z]of this.watchersByDirectory.entries()){if($.has(W))continue;Z.close(),this.watchersByDirectory.delete(W)}this.watchedTypesByDirectory=$;for(let W of $.keys()){if(this.watchersByDirectory.has(W))continue;try{let Z=YN(W,()=>{let Q=this.watchedTypesByDirectory.get(W);if(!Q)return;for(let J of Q)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(W,Z),Z.on("error",(Q)=>{let J=this.watchedTypesByDirectory.get(W);if(!J)return;for(let j of J)this.emit({kind:"error",type:j,error:Q,filePath:W})})}catch(Z){if(!BK(Z)&&!HK(Z)){let Q=$.get(W);if(!Q)continue;for(let J of Q)this.emit({kind:"error",type:J,error:Z,filePath:W})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let W of $){let Z=this.definitionsByType.get(W);if(!Z)continue;await this.refreshTypeInternal(Z)}})},this.debounceMs)}async refreshTypeInternal($){let{records:W,discoveredDirectories:Z}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[J,j]of Q.entries()){if(W.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:j.filePath})}for(let[J,j]of W.entries()){let X=Q.get(J);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:J,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,W),this.discoveredDirectoriesByType.set($.type,Z),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let W=new Map,Z=new Set;for(let Q of $.directories){Z.add(Q);let J=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let j of J){let{fileName:X,filePath:Y}=j;if(Z.add(j.directoryPath),$.includeFile&&!$.includeFile(X,Y))continue;try{let V=await BN(Y,"utf8"),B={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:Y,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;W.set(G,{type:$.type,id:G,item:H,filePath:Y,fingerprint:GN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:W,discoveredDirectories:Z}}buildDesiredTypesByDirectory(){let $=new Map;for(let[W,Z]of this.baseTypesByDirectory.entries())$.set(W,new Set(Z));for(let[W,Z]of this.discoveredDirectoriesByType.entries())for(let Q of Z){let J=$.get(Q);if(J)J.add(W);else $.set(Q,new Set([W]))}return $}async readDirectoryFileCandidates($){try{return(await VN($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:HN($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(BK(W)||HK(W))return[];throw W}}}import{readdir as GJ,readFile as KN,stat as HJ}from"node:fs/promises";import{basename as s1,dirname as FN,extname as RZ,join as v0,resolve as KW}from"node:path";import{AGENTS_RULES_FILE_NAME as KK,RULES_CONFIG_DIRECTORY_NAME as CZ,resolveGlobalAgentsRulesPath as AN,resolveRulesConfigSearchPaths as fN,resolveSkillsConfigSearchPaths as UN,resolveWorkflowsConfigSearchPaths as DN,SKILLS_CONFIG_DIRECTORY_NAME as FW,WORKFLOWS_CONFIG_DIRECTORY_NAME as AW}from"@cline/shared/storage";import _N from"yaml";var MZ="SKILL.md",LN="managed.json",TN=new Set([".md",".markdown",".txt"]);function KJ($){return $.trim().toLowerCase()}function e8($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function NZ($){return TN.has(RZ($).toLowerCase())}function FK($){let W=[],Z=new Set;for(let Q of $){let J=KW(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function qN($){let W=[...$?.directories??_W($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...MG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return FK(W)}async function FJ($){try{let W=await GJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=v0($,Q.name),j=v0(J,LN);try{let X=await KN(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(e8(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(e8(W))return[];throw W}}function AJ($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z;try{let j=_N.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function EZ($,W,Z){if($===void 0||$===null){if(Z)throw Error(`Missing required frontmatter field '${W}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${W}' must be a string.`);let Q=$.trim();if(!Q&&Z)throw Error(`Frontmatter field '${W}' cannot be empty.`);return Q||void 0}function $4($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function ON($,W){if(s1($.filePath).toLowerCase()!==KK.toLowerCase())return s1($.filePath,RZ($.filePath));if(W&&KW($.filePath)===KW(W,KK))return"Workspace AGENTS.md";if(KW($.filePath)===KW(AN()))return"Global AGENTS.md";return s1($.filePath,RZ($.filePath))}function fW($,W){let{data:Z,body:Q,parseError:J}=AJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in skill file.");let Y=EZ(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:EZ(Z.description,"description",!1),disabled:$4(Z.disabled,"disabled")??($4(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function UW($,W){let{data:Z,body:Q,parseError:J}=AJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=EZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:$4(Z.disabled,"disabled")??($4(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function DW($,W){let{data:Z,body:Q,parseError:J}=AJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=EZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:$4(Z.disabled,"disabled")??($4(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function _W($){return UN($)}function LW($){return fN($)}function TW($){return DN($)}async function AK($){if(s1($)===".cline"){let W=await FJ($);return(await Promise.all(W.map((Q)=>AK(v0(Q,FW))))).flat()}try{let W=await GJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===MZ){Z.push({directoryPath:$,fileName:Q.name,filePath:v0($,Q.name)});continue}let J=v0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await HJ(J).then((X)=>X.isDirectory()).catch((X)=>{if(e8(X))return!1;throw X}))Z.push({directoryPath:J,fileName:MZ,filePath:v0(J,MZ)})}return Z}catch(W){if(e8(W))return[];throw W}}async function wZ($){if(s1($)===".cline"){let W=await FJ($);return(await Promise.all(W.map((Q)=>wZ(v0(Q,"rules.md"))))).flat()}try{if((await HJ($)).isFile())return[{directoryPath:FN($),fileName:s1($),filePath:$}]}catch(W){if(!e8(W))throw W}try{let Z=(await GJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&NZ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:v0($,J.name)})),Q=v0($,"AGENTS.md");try{if((await HJ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(e8(W))return[];throw W}}async function zN($){if(s1($)===".cline"){let W=await FJ($);return(await Promise.all(W.map((Q)=>wZ(v0(Q,AW))))).flat()}return wZ($)}function qW($){let W=qN($),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?FK([...W,Z]):W,discoverFiles:AK,includeFile:(Q)=>Q===MZ,parseFile:(Q)=>fW(Q.content,s1(Q.directoryPath)),resolveId:(Q)=>KJ(Q.name)}}function OW($){let W=$?.directories??LW($?.workspacePath),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:wZ,includeFile:(Q,J)=>Q===".clinerules"||NZ(Q)||NZ(J),parseFile:(Q)=>UW(Q.content,ON(Q,$?.workspacePath)),resolveId:(Q)=>KJ(Q.name)}}function zW($){let W=$?.directories??TW($?.workspacePath),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:zN,includeFile:(Q)=>NZ(Q),parseFile:(Q)=>DW(Q.content,s1(Q.filePath,RZ(Q.filePath))),resolveId:(Q)=>KJ(Q.name)}}function fK($){let W=[qW($?.skills),OW($?.rules),zW($?.workflows)];return new P2(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as UK}from"@cline/shared";function MN($,W){if($.description?.trim())return UK($.description,".");if(W==="workflow")return;return UK($.instructions,".")}function RN($){return $.disabled!==!0}function DK($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>RN(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:MN(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function MW($){let W=new Map;for(let Z of[...DK($,"workflow"),...DK($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function _K($,W){if(!$.startsWith("/")||$.length<2)return $;let Z=$.match(/^\/(\S+)/);if(!Z)return $;let Q=Z[1];if(!Q)return $;let J=Q.length+1,j=$.slice(J),X=MW(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}var TK={};N(TK,{mergeRulesForSystemPrompt:()=>Z4,loadRulesForSystemPromptFromWatcher:()=>fJ,listEnabledRulesFromWatcher:()=>LK,isRuleEnabled:()=>PZ,formatRulesForSystemPrompt:()=>W4});function PZ($){return $.disabled!==!0}function W4($){if($.length===0)return"";return`
209
+ `,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??lM(EG(),"hooks.jsonl");EG(X),uM(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=n3(Q,"");Z({...E0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=SG(Q);Z({...E0(J,W),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:a9(J.call.input)}});return},afterTool:async(Q)=>{let J=yG(Q);Z({...E0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:a9(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:Q,result:J})=>{let j=b$(Q);if(J.status==="completed"){Z({...E0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||i3(J.error?.message)){Z({...E0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...E0(j,W),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let J=n3({snapshot:Q.snapshot},hG(Q.message.content));Z({...E0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function $W($){let W=eM($.workspacePath);if(!Object.values(W).some((G)=>G.length>0))return;let Q=async(G,K)=>{let F=W[K]??[];if(F.length===0)return;N2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...E0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...E0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return $R({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...E0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:a9(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:a9(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},Y=async(G)=>{let K=W.agent_end??[];if(K.length===0)return;N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=W.agent_error??[];if(K.length===0)return;N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(i3(G.reason)){let F=W.agent_abort??[];if(F.length>0)N2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;N2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0||(W.prompt_submit?.length??0)>0){if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(b$(G.snapshot),K);return};if((W.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(n3({snapshot:G.snapshot},hG(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(SG(G));return WR(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(yG(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...b$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((W.agent_error?.length??0)>0||(W.agent_abort?.length??0)>0||(W.session_shutdown?.length??0)>0){let G=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||i3(A.error?.message)){await B({...b$(F),reason:A.error?.message});return}if(A.error)await V({...b$(F),iteration:A.iterations,error:A.error})}}return H}function p8($){return u8("core.hook_config_files",$W($))}function E2($,W){let Z=$.map((Q)=>Q[W]).filter((Q)=>typeof Q==="function");if(Z.length===0)return;return async(Q)=>{let J;for(let j of Z){let X=await j(Q);if(!X||typeof X!=="object")continue;let Y=X;J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function w2($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:E2(W,"beforeRun"),afterRun:E2(W,"afterRun"),beforeModel:E2(W,"beforeModel"),afterModel:E2(W,"afterModel"),beforeTool:E2(W,"beforeTool"),afterTool:E2(W,"afterTool"),onEvent:E2(W,"onEvent")}}var kG={};N(kG,{normalizeRuntimeCapabilities:()=>w0});function w0(...$){let W,Z;for(let J of $){if(!J)continue;if(J.toolExecutors)W={...W??{},...J.toolExecutors};if(J.requestToolApproval)Z=J.requestToolApproval}let Q=W&&Object.keys(W).length>0;if(!Q&&!Z)return;return{...Q?{toolExecutors:W}:{},...Z?{requestToolApproval:Z}:{}}}var lG={};N(lG,{toProviderConfig:()=>e0,emptyStoredProviderSettings:()=>h$,StoredProviderSettingsSchema:()=>a8,StoredProviderSettingsEntrySchema:()=>_Z,ProviderSettingsSchemaTyped:()=>n8});import{z as y$}from"zod";var dG={};N(dG,{toProviderConfig:()=>e0,safeParseSettings:()=>DZ,safeCreateProviderConfig:()=>jJ,parseSettings:()=>UZ,normalizeProviderId:()=>i8,isBuiltInProviderId:()=>QJ,createProviderConfig:()=>JJ,SapSettingsSchema:()=>FZ,ReasoningSettingsSchema:()=>BZ,ProviderSettingsSchema:()=>S$,ProviderProtocolSchema:()=>XZ,ProviderIdSchema:()=>jW,ProviderClientSchema:()=>YZ,OcaSettingsSchema:()=>AZ,ModelCatalogSettingsSchema:()=>fZ,GcpSettingsSchema:()=>GZ,BUILT_IN_PROVIDER_IDS:()=>ZJ,BUILT_IN_PROVIDER:()=>JW,AzureSettingsSchema:()=>KZ,AwsSettingsSchema:()=>HZ,AuthSettingsSchema:()=>VZ});import*as t0 from"@cline/llms";import{z as C}from"zod";var uG={};N(uG,{resolveProviderConfig:()=>QW,getProviderConfig:()=>jZ,getLiveModelsCatalog:()=>r8,clearPublicModelsCatalogCache:()=>MR,clearPrivateModelsCatalogCache:()=>WJ,clearLiveModelsCatalogCache:()=>$J,OPENAI_COMPATIBLE_PROVIDERS:()=>ZW,DEFAULT_MODELS_CATALOG_URL:()=>WZ});import*as t from"@cline/llms";function o3($){if(!Array.isArray($))return[];return $.map((W)=>{if(typeof W==="string")return W.trim();if(W&&typeof W==="object"){let Z=W;for(let Q of[Z.id,Z.name,Z.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((W)=>W.length>0)}function ZR($,W){let Z=o3($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=o3(Q.data??Q.models);if(J.length>0)return J;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let X=Object.keys(Q.models).filter((Y)=>Y.trim().length>0);if(X.length>0)return X}let j=Q.providers?.[W];if(j&&typeof j==="object"){let Y=o3(j.models??j);if(Y.length>0)return Y}return[]}async function o9($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return ZR(await Z.json(),W)}function IG($){return $.replace(/\/+$/,"")}function s9($,W,Z){let Q=Z?.trim();if(!Q)return;let J=$?.trim();if(!J||!W?.trim())return Q;try{let j=new URL(Q),X=new URL(W),Y=new URL(J);if(j.origin!==X.origin)return Q;let V=IG(X.pathname),B=IG(Y.pathname);if(V&&j.pathname.startsWith(`${V}/`)){let H=j.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=j.pathname;return Y.search=j.search,Y.hash=j.hash,Y.toString()}catch{return Q}}function QR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function JR($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var jR=Object.values(t.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:QR($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),gG=Object.fromEntries(jR.map(($)=>[$.id,$]));function XR($){return gG[$]}function YR(){return Object.fromEntries(Object.entries(gG).filter(([,$])=>JR($)))}function mG($=[]){let W=$.flatMap((Z)=>{switch(Z){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Z];default:return[]}});return W.length>0?W:void 0}var WZ="https://models.dev/api.json",VR=600000,vG=300000,BR=5000,$Z=new Map,WW=new Map,s3=new Map,t9=new Map;async function HR(){return t.getGeneratedProviderModels()}async function GR($,W={},Z={},Q={},J={},j={}){if($==="litellm")return t.sortModelsByReleaseDate(Q);let X=await HR(),Y=t.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>X[K]??{})),B=Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(J).length>0;if(B&&H)return t.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return t.sortModelsByReleaseDate({...W,...t.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let G=t.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return t.sortModelsByReleaseDate({...t.preferCanonicalModelIds(G,t.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return t.sortModelsByReleaseDate({...G,...j})}function KR($,W){let Z=t.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function ZZ($){let W=$?.trim();return W&&W.length>0?W:""}function e3($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function FR($){let W=2166136261;for(let Z=0;Z<$.length;Z+=1)W^=$.charCodeAt(Z),W+=(W<<1)+(W<<4)+(W<<7)+(W<<8)+(W<<24);return(W>>>0).toString(16)}function AR($,W){return`${$}:${ZZ(W.baseUrl)}:${FR(e3(W)??"")}`}async function QZ($,W,Z=BR){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function C2($,W,Z){if(Z&&!$.includes(W))$.push(W)}function JZ($,W){let Z=["streaming","tools"];return C2(Z,"images",Boolean(W.supportsImages)),C2(Z,"prompt-cache",Boolean(W.supportsPromptCache)),C2(Z,"reasoning",Boolean(W.supportsReasoning)),{id:$,name:W.name??$,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxTokens:W.maxTokens,capabilities:Z,releaseDate:W.releaseDate,status:"active"}}async function fR($,W){let Z=await QZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${W}`,"Content-Type":"application/json"}});if(!Z.ok)throw Error(`Baseten model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=X.supported_features??[];j[Y]=JZ(Y,{name:Y,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return j}function xG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function UR($,W){let Z=await QZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":W}});if(!Z.ok)throw Error(`Hicap model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;j[Y]=JZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function DR($,W){let Q=`${(ZZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await QZ(Q,{method:"GET",headers:{Authorization:`Bearer ${W}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let X=(await J.json())?.data??[],Y={};for(let V of X){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];C2(F,"tools",H.includes("tools")),C2(F,"reasoning",H.includes("reasoning")),C2(F,"temperature",G.includes("temperature")),C2(F,"images",K.includes("image"));let A={input:xG(V.pricing?.prompt),output:xG(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return Y}function _R($){let W=ZZ($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function LR($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function TR($){let W=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Z=500,Q=W?`: ${W.slice(0,500)}${W.length>500?"...":""}`:"";return`HTTP ${$.status}${Q}`}async function qR($,W){let Z=_R($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of LR(Z))for(let[X,Y]of J)try{let V=await QZ(j,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),D=K.litellm_params?.model?.trim()||F;if(!D)continue;let f=K.model_info,_=JZ(D,{name:F??D,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[D]=_,F)G[F]={..._,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await TR(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);Q.push(`${new URL(j).pathname} (${X}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${Q.join("; ")}`)}var cG={baseten:fR,hicap:UR,litellm:qR,poolside:DR},t3=new Map,e9=new Map;function OR($,W){return`${$}:${ZZ(W.baseUrl)}`}async function zR($,W,Z){let Q=t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=s9(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??vG,X=OR($,Z),Y=Date.now(),V=t3.get(X);if(V&&V.expiresAt>Y)return V.data;let B=e9.get(X);if(B)return B;let H=o9(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,JZ(F,{name:F})]));return t3.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{e9.delete(X)});return e9.set(X,H),H}function MR(){t3.clear(),e9.clear()}async function RR($,W){let Z=e3(W);if(!Z)return{};let Q=cG[$];if(!Q)return{};return Q(W,Z)}function NR($,W,Z){if(!Z)return!1;if(!cG[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(e3(Z))}async function ER($,W,Z){let Q=W?.cacheTtlMs??vG,J=AR($,Z),j=Date.now(),X=s3.get(J);if(X&&X.expiresAt>j)return X.data;let Y=t9.get(J);if(Y)return Y;let V=RR($,Z).then((B)=>{return s3.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{t9.delete(J)});return t9.set(J,V),V}async function wR($){return t.fetchLiveProviderModels($,globalThis.fetch)}async function r8($={}){let W=$.url??WZ,Z=$.cacheTtlMs??VR,Q=Date.now(),J=$Z.get(W);if(J&&J.expiresAt>Q)return J.data;let j=WW.get(W);if(j)return j;let X=wR(W).then((Y)=>{return $Z.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{WW.delete(W)});return WW.set(W,X),X}function $J($){if($){$Z.delete($),WW.delete($);return}$Z.clear(),WW.clear()}function WJ(){s3.clear(),t9.clear()}function CR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:mG(Z.capabilities)}]))}var ZW=CR(YR());function jZ($){let W=XR($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:mG(W.capabilities)}}async function QW($,W,Z){let Q=jZ($);if(!Q)return;try{let J=W?.loadLatestOnInit?await r8(W):void 0,j=J?KR($,J):{},X=Z&&NR($,W,Z)?await ER($,W,Z):{},V=Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await zR($,W,V).catch(()=>({})):{},H=await GR($,Q.knownModels,j,X,B,Z?.knownModels);return{...Q,knownModels:H}}catch(J){if(W?.failOnError)throw J;if($==="litellm")return{...Q,knownModels:{}};return Q}}var JW=t0.BUILT_IN_PROVIDER,ZJ=t0.BUILT_IN_PROVIDER_IDS,QJ=t0.isBuiltInProviderId,i8=t0.normalizeProviderId,jW=C.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),XZ=C.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),YZ=C.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),VZ=C.object({apiKey:C.string().optional(),accessToken:C.string().optional(),refreshToken:C.string().optional(),expiresAt:C.number().int().positive().optional(),accountId:C.string().optional()}),PR=C.enum(["none","low","medium","high","xhigh"]),BZ=C.object({enabled:C.boolean().optional(),effort:PR.optional(),budgetTokens:C.number().int().positive().optional()}),HZ=C.object({accessKey:C.string().optional(),secretKey:C.string().optional(),sessionToken:C.string().optional(),region:C.string().optional(),profile:C.string().optional(),authentication:C.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:C.boolean().optional(),useCrossRegionInference:C.boolean().optional(),useGlobalInference:C.boolean().optional(),endpoint:C.string().url().optional(),customModelBaseId:C.string().optional()}),GZ=C.object({projectId:C.string().optional(),region:C.string().optional()}),KZ=C.object({apiVersion:C.string().optional(),useIdentity:C.boolean().optional()}),FZ=C.object({clientId:C.string().optional(),clientSecret:C.string().optional(),tokenUrl:C.string().url().optional(),resourceGroup:C.string().optional(),deploymentId:C.string().optional(),useOrchestrationMode:C.boolean().optional(),api:C.enum(["orchestration","foundation-models"]).optional(),defaultSettings:C.record(C.string(),C.unknown()).optional()}),AZ=C.object({mode:C.enum(["internal","external"]).optional(),usePromptCache:C.boolean().optional()}),fZ=C.object({loadLatestOnInit:C.boolean().optional(),loadPrivateOnAuth:C.boolean().optional(),url:C.string().url().optional(),cacheTtlMs:C.number().int().positive().optional(),failOnError:C.boolean().optional()}),S$=C.object({provider:jW,apiKey:C.string().optional(),auth:VZ.optional(),model:C.string().optional(),protocol:XZ.optional(),client:YZ.optional(),routingProviderId:jW.optional(),maxTokens:C.number().int().positive().optional(),contextWindow:C.number().int().positive().optional(),baseUrl:C.string().url().optional(),headers:C.record(C.string(),C.string()).optional(),timeout:C.number().int().positive().optional(),reasoning:BZ.optional(),aws:HZ.optional(),gcp:GZ.optional(),azure:KZ.optional(),sap:FZ.optional(),oca:AZ.optional(),region:C.string().optional(),apiLine:C.enum(["china","international"]).optional(),capabilities:C.array(C.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:fZ.optional()});function UZ($){return S$.parse($)}function DZ($){return S$.safeParse($)}function bR($){return $.protocol==="openai-responses"||$.client==="openai"}function e0($,W={}){let Z=$.provider,Q=i8(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=ZW[Q],V=Object.assign({},...t0.resolveProviderModelCatalogKeys(Q).map((D)=>t0.getGeneratedModelsForProvider(D))),B=Object.keys(V)[0],H=U8(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?W9:Z9:Y?.baseUrl),K=$.routingProviderId??(bR($)&&Q!==JW.OPENAI_NATIVE?JW.OPENAI_NATIVE:void 0),F=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Z,clientType:$.client,routingProviderId:K,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([D,f])=>f!==void 0))}function JJ($){let W=UZ($);return e0(W)}function jJ($){let W=DZ($);if(W.success)return{success:!0,config:e0(W.data)};return{success:!1,error:W.error}}var n8=S$;var _Z=y$.object({settings:S$,updatedAt:y$.string().datetime(),tokenSource:y$.enum(["manual","oauth","migration"]).default("manual")}),a8=y$.object({version:y$.literal(1),lastUsedProvider:y$.string().min(1).optional(),providers:y$.record(y$.string(),_Z)});function h$(){return{version:1,providers:{}}}f1();var nG={};N(nG,{InMemoryWorkspaceManager:()=>s8});import{upsertWorkspaceInfo as kR,WorkspaceManifestSchema as YJ}from"@cline/shared";var iG={};N(iG,{normalizeWorkspacePath:()=>o1,generateWorkspaceInfoWithDiagnostics:()=>XW,generateWorkspaceInfo:()=>o8,buildWorkspaceMetadataWithInfo:()=>XJ,buildWorkspaceMetadata:()=>YW});import{basename as SR,resolve as yR}from"node:path";import{performance as pG}from"node:perf_hooks";import{processWorkspaceInfo as rG}from"@cline/shared";import hR from"simple-git";function o1($){return yR($)}async function o8($){return(await XW($)).info}function LZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function XW($){let W=o1($),Z={rootPath:W,hint:SR(W)},Q;try{let J=hR({baseDir:W});if(!await J.checkIsRepo())return{info:Z,vcsType:"none"};try{let X=await J.getRemotes(!0);if(X.length>0){let Y=X.map((V)=>{let B=V.refs.fetch||V.refs.push;return`${V.name}: ${B}`});Z.associatedRemoteUrls=Y}}catch(X){Q??=LZ(X)}try{let X=(await J.revparse(["HEAD"])).trim();if(X.length>0)Z.latestGitCommitHash=X}catch(X){Q??=LZ(X)}try{let X=(await J.branch()).current.trim();if(X.length>0)Z.latestGitBranchName=X}catch(X){Q??=LZ(X)}return{info:Z,vcsType:"git",error:Q}}catch(J){return{info:Z,vcsType:"none",error:LZ(J)}}}async function YW($){let W=await o8($);return rG(W)}async function XJ($){let W=pG.now(),Z=await XW($),Q=pG.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:rG(J),durationMs:Q,vcsType:Z.vcsType,initError:Z.error}}class s8{manifest;listeners=new Set;constructor($){this.manifest=YJ.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await o8($);return this.manifest=kR(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=o1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=YJ.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=YJ.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let W=o1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}T0();import{createHash as IR}from"node:crypto";var aG=new Set,oG=new Set;function xR($){return IR("sha256").update($).digest("hex")}function gR($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function sG($){if(!$.telemetry)return;let W=xR($.rootPath),Z=$.rootCount??1;if(!aG.has(W))aG.add(W),h5($.telemetry,{root_count:Z,vcs_types:gR($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!oG.has(W)){oG.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",k5($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function cR($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function uR($,W,Z){if(W.length>0)for(let j of W)Z?.log(j.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(cR).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Z?.log(`Some plugins failed to initialize. ${Q}${J}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Z?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function dR($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function tG($,W){return vR($,W)}function lR($){let W=0;for(let Z of $??[]){if(Z.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0)?.kind==="recovery_notice")continue;W+=1}return W}function pR($){let W={...$.storedHeaders??{},...$.configHeaders??{}},Z=$.accountId?.trim()||rR($.accessToken);if(W.originator="cline",W.session_id=$.sessionId,W["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Z)W["ChatGPT-Account-Id"]=Z;return W}function rR($){let W=$?.trim();if(!W)return;let Z=h0(W),Q=Z?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let J=Z?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let j=Z?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return}function iR($,W,Z,Q,J,j){let X=Q.getProviderSettings($.providerId),Y=J||X?.modelCatalog?{...J??{},...X?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=mR({providerId:$.providerId,sessionId:W,source:Z,defaultSource:F0.CLI,clientName:$.extensionContext?.client?.name,clientVersion:$.extensionContext?.client?.version,clientVersionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot,coreVersion:k8}),H=$.providerId==="openai-codex"?pR({sessionId:W,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):B?{...X?.headers??{},...$.headers??{},...B}:$.headers??X?.headers,G={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:H,reasoning:dR($,X?.reasoning),modelCatalog:Y},K={...e0(G),...V??{}};if(B)K.headers={...H??{},...V?.headers??{},...B};if($.knownModels)K.knownModels=$.knownModels;if($.extensionContext)K.extensionContext=$.extensionContext;let A=$.fetch??K.fetch??j;if(A)K.fetch=A;return K}async function eG($){let{input:W,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:J,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:Y,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,D=w$(W.config),{modelCatalogDefaults:f,userInstructionService:_,configExtensions:U,onTeamRestored:R,...L}=K??{},q=Object.keys(L).length>0?L:void 0,{workspaceInfo:T,workspaceMetadata:w,durationMs:E,vcsType:b,initError:P}=await XJ(D),r=q?.extensionContext,$0={...r??{},workspace:{...T,...r?.workspace??{}},session:{...r?.session??{},sessionId:Z},logger:r?.logger??q?.logger,telemetry:r?.telemetry??q?.telemetry??J};sG({telemetry:$0.telemetry,rootPath:T.rootPath,workspaceInfo:T,rootCount:1,vcsType:b,durationMs:E,initError:P,featureFlagEnabled:!0});let A0=p8({cwd:W.config.cwd,workspacePath:D,rootSessionId:Z,logger:q?.logger,workspaceInfo:T}),Y8=iH(q?.hooks)?void 0:l8({rootSessionId:Z,workspacePath:D,workspaceInfo:T}),e$=w2([q?.hooks,Y8]),g0;if(tG(U,"plugins"))try{g0=await c8({pluginPaths:q?.pluginPaths,workspacePath:D,cwd:W.config.cwd,onEvent:V,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:T,session:$0.session,client:$0.client,user:$0.user,logger:$0.logger,telemetry:$0.telemetry,automation:$0.automation}),uR(g0.failures,g0.warnings,q?.logger)}catch(V8){let _7=V8 instanceof Error?V8.message:String(V8);q?.logger?.log?.(`plugin loading failed; continuing without plugins (${_7})`)}let Y0=M3(A0?[A0]:void 0,M3(q?.extensions,E9(g0?.extensions))),G$=tG(U,"plugins")?a1(g0?.pluginPaths??[]):void 0,L0={...W.config,...q??{},sessionId:Z,hooks:e$,extensions:Y0,extensionContext:$0,telemetry:$0.telemetry},S0=iR(L0,Z,W.source,Q,f,Y),T1=w2([L0.hooks,L0.checkpoint?.enabled===!0?NG({cwd:L0.cwd,sessionId:Z,logger:L0.logger,createCheckpoint:L0.checkpoint?.createCheckpoint,initialRunCount:lR(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),g={...L0,providerConfig:S0,workspaceMetadata:w,hooks:T1},z0=W.toolPolicies??L0.toolPolicies??X,I=w0(j,W.capabilities),s=I?.requestToolApproval,y0=I?.toolExecutors,V0=H?.(g),b5=new s8({currentWorkspacePath:T.rootPath,workspaces:{[T.rootPath]:T}});return{effectiveInput:W,config:g,providerConfig:S0,workspaceMetadata:w,workspaceInfo:T,extensions:Y0,hooks:T1,toolPolicies:z0,requestToolApproval:s,pluginSandboxShutdown:g0?.shutdown,runtimeBuilderInput:{config:g,hooks:T1,extensions:Y0,onTeamEvent:B,createSpawnTool:G,onTeamRestored:R,onSubAgentEvent:V0?.onSubAgentEvent,onSubAgentStart:V0?.onSubAgentStart,onSubAgentEnd:V0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:G$,configExtensions:U,toolExecutors:y0,toolPolicies:z0,workspaceManager:b5,logger:g.logger,telemetry:g.telemetry,requestToolApproval:s}}}import{existsSync as TZ,mkdirSync as nR,readdirSync as aR,rmdirSync as oR,rmSync as sR,unlinkSync as tR}from"node:fs";import{dirname as $K,join as VW}from"node:path";function j0(){return new Date().toISOString()}function BW($){if(!$||!TZ($))return;try{tR($)}catch{}}function eR($){let W=S8($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=g6($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class VJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return VW(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!TZ(W))nR(W,{recursive:!0});return W}sessionMessagesPath($){return VW(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return VW(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return VW(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!TZ(W)){W=$K(W);continue}try{if(aR(W).length>0)break;oR(W)}catch{break}W=$K(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!TZ($))return;try{sR($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=eR($),j=this.sessionArtifactsDir(Q);return{messagesPath:VW(j,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as $N}from"@cline/shared/storage";T0();function WK($,W,Z,Q,J){if(Z)x5($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else I5($.telemetry,{ulid:W,apiProvider:$.providerId,...J});WN($.telemetry,{workspacePath:Q})}function WN($,W){let Z=$N("Hooks"),Q=P$(W.workspacePath),J=new Map;for(let j of Q){let X=j.hookEventName??"unknown",Y=J.get(X)??{global:0,workspace:0};if(j.path===Z||j.path.startsWith(`${Z}/`))Y.global+=1;else Y.workspace+=1;J.set(X,Y)}for(let[j,X]of J.entries())r5($,j,X.global,X.workspace)}function ZK($,W){for(let Z of W.mentions)l5($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)u5($,"file",Z.length);for(let Z of W.ignoredMentions)d5($,"file","not_found",Z)}var Q_={};N(Q_,{ProviderSettingsManager:()=>V1});import{chmodSync as j_,existsSync as _Y,mkdirSync as vm,readFileSync as cm,renameSync as um,rmSync as dm,writeFileSync as lm}from"node:fs";import{basename as X_,dirname as LY}from"node:path";import{resolveProviderSettingsPath as pm}from"@cline/shared/storage";var O={};N(O,{writeHubDiscovery:()=>aZ,writeGlobalSettings:()=>M1,withHubStartupLock:()=>oZ,verifyHubConnection:()=>E1,updateMcpSettingsFileSync:()=>U1,updateMcpSettingsFile:()=>J4,updateMcpServerOAuthStateAsync:()=>EW,updateMcpServerOAuthState:()=>h2,updateLocalProvider:()=>j7,uninstallPlugin:()=>T5,uninstallMarketplaceSkill:()=>vQ,uninstallMarketplacePlugin:()=>cQ,uninstallMarketplaceMcpServerFromSettings:()=>gQ,uninstallMarketplaceEntry:()=>xX,truncateNotificationBody:()=>H5,truncateCommandOutput:()=>V2,toggleDisabledTool:()=>R9,toTeamProgressLifecycleEvent:()=>L4,toProviderConfig:()=>e0,toHubStatusUrl:()=>eJ,toHubHealthUrl:()=>sZ,toHookConfigFileName:()=>e6,syncPluginMcpServersToSettings:()=>_5,summarizeUsageFromMessages:()=>h8,stopLocalHubServerGracefully:()=>Gj,startLocalOAuthServer:()=>G1,startHubWebSocketServer:()=>Z8,startHubServer:()=>SU,startClineDeviceAuth:()=>C7,splitCoreSessionConfig:()=>hW,spawnDetachedHubServerWithRetry:()=>G4,spawnDetachedHubServer:()=>jj,setTelemetryOptOutGlobally:()=>xB,setSdkLogger:()=>O7,setMcpServerDisabled:()=>S2,setDisabledTools:()=>X3,setDisabledPlugin:()=>pB,setCompactionStrategyGlobally:()=>cB,setAutoUpdateEnabledGlobally:()=>mB,sendHubCommand:()=>Mf,sdkDebug:()=>W0,saveProviderOAuthCredentials:()=>J2,saveLocalProviderSettings:()=>tX,saveLocalProviderOAuthCredentials:()=>ZY,sanitizeSessionToken:()=>q2,safeParseSettings:()=>DZ,safeCreateProviderConfig:()=>jJ,runSubprocessEvent:()=>N4,runHook:()=>w4,reviveTeamStateDates:()=>h9,restartLocalHubIfIdleAfterStartupTimeout:()=>ZQ,resolveWorkspaceHubOwnerContext:()=>tF,resolveWorkflowsConfigSearchPaths:()=>TW,resolveSkillsConfigSearchPaths:()=>_W,resolveSharedHubOwnerContext:()=>u0,resolveSessionBackend:()=>Sj,resolveRulesConfigSearchPaths:()=>LW,resolveProviderConfig:()=>QW,resolveProviderApiKeyFromSettings:()=>k7,resolveProductionHubOwnerContext:()=>j1,resolvePluginSkillDirectoriesFromPaths:()=>a1,resolvePluginConfigSearchPaths:()=>a6,resolveMcpServerRegistrations:()=>$1,resolveMarketplaceMcpServerName:()=>O5,resolveLocalClineAuthToken:()=>JY,resolveHubUrl:()=>uj,resolveHubOwnerContext:()=>W$,resolveHubEndpointOptions:()=>J1,resolveHubBuildId:()=>nZ,resolveHooksConfigSearchPaths:()=>s6,resolveDisabledToolNames:()=>R1,resolveDisabledPluginPaths:()=>P6,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>H4,resolveDefaultHubPathname:()=>Jj,resolveDefaultHubHost:()=>Qj,resolveCoreSelectedToolIds:()=>I9,resolveCoreDistinctId:()=>d0,resolveCompatibleLocalHubUrl:()=>iW,resolveClineDir:()=>nF,resolveClineDataDir:()=>u2,resolveAndLoadAgentPlugins:()=>c8,resolveAgentPluginPaths:()=>n1,requestHubShutdown:()=>rW,requestDesktopToolApproval:()=>qX,removePluginMcpServersFromSettings:()=>L5,rememberRecoverableLocalHubUrl:()=>u$,registerRemoteConfigSessionBlobUpload:()=>CQ,registerMcpServersFromSettingsFile:()=>k2,registerDisposable:()=>Im,refreshProviderModelsFromSource:()=>eX,refreshOpenAICodexToken:()=>$9,refreshOcaToken:()=>J9,refreshClineToken:()=>t5,readSessionCheckpointHistory:()=>s2,readRemoteConfigSessionBlobUploadMetadata:()=>KX,readHubDiscovery:()=>_0,readGlobalSettings:()=>R0,readCompactionStrategyGlobally:()=>vB,readBearerToken:()=>OQ,projectSessionCompactionState:()=>j2,probeHubServer:()=>Z$,probeHubConnection:()=>zf,prewarmFileIndex:()=>_9,prewarmDetachedHubServer:()=>eZ,prepareRemoteConfigCoreIntegration:()=>AX,parseWorkflowConfigFromMarkdown:()=>DW,parseUserCommandEnvelope:()=>km,parseSkillConfigFromMarkdown:()=>fW,parseSettings:()=>UZ,parseSessionCompactionState:()=>K1,parseRuleConfigFromMarkdown:()=>UW,parsePluginSource:()=>oQ,parseMcpInstallArgs:()=>D5,parseHookEventPayload:()=>E4,parseConfiguredAgentConfig:()=>sW,normalizeWorkspacePath:()=>o1,normalizeUserInput:()=>hm,normalizeSdkError:()=>ym,normalizeRuntimeCapabilities:()=>w0,normalizeProviderId:()=>i8,normalizeOAuthProvider:()=>$Y,normalizeHubWebSocketUrl:()=>d$,noopBasicLogger:()=>Sm,migrateLegacyProviderSettings:()=>E5,mergeRulesForSystemPrompt:()=>Z4,mergeAgentHooks:()=>w2,marketplaceEntryKey:()=>IX,markLocalProviderEnabled:()=>aX,makeTeamTaskSubSessionId:()=>x6,makeSubSessionId:()=>b8,loginOpenAICodex:()=>a4,loginOcaOAuth:()=>t4,loginLocalProvider:()=>WY,loginClineOAuth:()=>i4,loginAndSaveProviderOAuthCredentials:()=>$6,loginAndSaveLocalProviderOAuthCredentials:()=>QY,loadOpenTelemetryAdapter:()=>jm,loadMcpSettingsFile:()=>b2,loadLlmsConfigFromFile:()=>fY,loadConfiguredAgentConfigs:()=>U4,loadAgentPluginsFromPathsWithDiagnostics:()=>M2,loadAgentPluginsFromPaths:()=>c9,loadAgentPluginFromPath:()=>i6,listSessionHistoryFromBackend:()=>aJ,listPluginToolsWithDiagnostics:()=>cZ,listPluginTools:()=>PW,listMcpServerOAuthStatuses:()=>wW,listLocalProviders:()=>oX,listHookConfigFiles:()=>P$,isToolDisabledGlobally:()=>uB,isTelemetryOptedOutGlobally:()=>M9,isSessionNotFoundError:()=>$$,isRuleEnabled:()=>PZ,isPluginDisabledGlobally:()=>lB,isOfficialPluginSlug:()=>aQ,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>mQ,isLocalHubOrigin:()=>GX,isLocalHubHostName:()=>zQ,isHubReconnectableTransportError:()=>Bj,isHubCommandTimeoutError:()=>WQ,isDiscoveryFilePresent:()=>oF,isClinePassLimitMessage:()=>Lm,isClinePassLimitError:()=>_m,isClineOrgIndividualInferenceSubscriptionMessage:()=>Dm,isClineOrgIndividualInferenceSubscriptionError:()=>Um,isClineNotSubscribedMessage:()=>fm,isClineNotSubscribedError:()=>Am,isClineAccountActionRequest:()=>qZ,isBuiltInProviderId:()=>QJ,isAutoUpdateEnabledGlobally:()=>gB,installPlugin:()=>dX,installMcpServer:()=>OX,identifyAccount:()=>H1,hashSecret:()=>M0,hasMcpSettingsFile:()=>t1,getValidOpenAICodexCredentials:()=>o4,getValidOcaCredentials:()=>e4,getValidClineCredentials:()=>n4,getProviderOAuthCredentialsFromSettings:()=>W6,getProviderConfigFields:()=>jY,getProviderConfig:()=>jZ,getProviderAuthStorageId:()=>h7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>y2,getMarketplaceSkillCandidates:()=>z5,getLocalProviderModels:()=>sX,getLiveModelsCatalog:()=>r8,getGlobalMarketplaceSkillPaths:()=>M5,getFileIndex:()=>d1,getCurrentContextSize:()=>w3,getCoreHeadlessToolNames:()=>I6,getCoreDefaultEnabledToolIds:()=>k9,getCoreBuiltinToolCatalog:()=>L2,getCoreAcpToolNames:()=>x9,getClinePassSubscriptionUrl:()=>Fm,getClineOrgIndividualInferenceSubscriptionMessage:()=>Gm,getClineNotSubscribedMessage:()=>Km,getClineDefaultSystemPrompt:()=>Tm,generateWorkspaceInfoWithDiagnostics:()=>XW,generateWorkspaceInfo:()=>o8,formatRulesForSystemPrompt:()=>W4,formatProviderOAuthApiKey:()=>I7,formatDisplayUserInput:()=>bm,findInstalledGlobalMarketplaceSkillName:()=>R5,findCheckpointForRun:()=>M4,filterExtensionToolRegistrations:()=>E9,filterDisabledTools:()=>p1,filterDisabledPluginPaths:()=>N9,fetchClineRecommendedModels:()=>FY,extractClinePassLimitMessage:()=>Hm,executeClineAccountAction:()=>OZ,ensureHubWebSocketServer:()=>MQ,ensureHubServer:()=>yU,ensureDetachedHubServer:()=>JA,ensureCustomProvidersLoaded:()=>Z7,ensureCompatibleLocalHubUrl:()=>p2,enrichPromptWithMentions:()=>z8,emptyWorkspaceManifest:()=>wm,emptyStoredProviderSettings:()=>h$,discoverPluginModulePaths:()=>o6,disablePluginMcpServersInSettings:()=>NX,deriveSubsessionStatus:()=>m6,deleteLocalProvider:()=>X7,defineLlmsConfig:()=>AY,createWorkflowsConfigDefinition:()=>zW,createUserInstructionConfigService:()=>k$,createToolPoliciesWithPreset:()=>T9,createTool:()=>Em,createTeamName:()=>SQ,createSubprocessHooks:()=>FQ,createSpawnAgentTool:()=>N$,createSkillsConfigDefinition:()=>qW,createShellTool:()=>O6,createShellExecutor:()=>B2,createSessionHost:()=>O4,createSessionCompactionState:()=>D8,createRuntimeHost:()=>O4,createRulesConfigDefinition:()=>OW,createRemoteConfigSessionMessagesArtifactUploader:()=>FX,createProviderConfig:()=>JJ,createOpenTelemetryTelemetryService:()=>V5,createOAuthClientCallbacks:()=>t8,createMcpTools:()=>V4,createLocalHubScheduleRuntimeHandlers:()=>RQ,createLlmsSdk:()=>DY,createInitialAccumulatedUsage:()=>O0,createInMemoryHubOwnerContext:()=>aF,createHubServerUrl:()=>D1,createHubAuthToken:()=>iZ,createHookConfigFileHooks:()=>$W,createHookConfigFileExtension:()=>p8,createHookAuditHooks:()=>l8,createDisabledMcpToolPolicy:()=>CW,createDisabledMcpToolPolicies:()=>vZ,createDelegatedAgentConfigProvider:()=>M$,createDelegatedAgent:()=>R$,createDefaultToolsWithPreset:()=>q9,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>w6,createDefaultMcpServerClientFactory:()=>X4,createDefaultExecutors:()=>M8,createCoreSettingsService:()=>x2,createCoreSessionSnapshot:()=>w1,createContributionRegistry:()=>Nm,createContextCompactionPrepareTurn:()=>H6,createConfiguredTelemetryService:()=>Y$,createConfiguredTelemetryHandle:()=>r$,createConfiguredAgentTools:()=>D4,createCompactionStateAwarePrepareTurn:()=>G6,createClineTelemetryServiceMetadata:()=>Rm,createClineTelemetryServiceConfig:()=>Mm,createCheckpointComparePlan:()=>BQ,createBuiltinTools:()=>T2,createAgentTeamsTools:()=>_2,createAgentRuntime:()=>mm,createAgentHooksExtension:()=>u8,connectToHub:()=>UQ,completeClineDeviceAuth:()=>P7,compareCheckpointToWorkspace:()=>J5,collectPluginMcpOAuthCandidates:()=>sQ,clearPrivateModelsCatalogCache:()=>WJ,clearLiveModelsCatalogCache:()=>$J,clearHubDiscovery:()=>c0,captureWorkspacePathResolved:()=>mY,captureWorkspaceInitialized:()=>h5,captureWorkspaceInitError:()=>k5,captureToolUsage:()=>H8,captureTokenUsage:()=>g5,captureTaskRestarted:()=>x5,captureTaskCreated:()=>I5,captureTaskCompleted:()=>l4,captureSubagentExecution:()=>r4,captureSkillUsed:()=>v5,captureSdkError:()=>zm,captureProviderConfigured:()=>vY,captureProviderApiError:()=>p4,captureModeSwitch:()=>m5,captureMentionUsed:()=>u5,captureMentionSearchResults:()=>l5,captureMentionFailed:()=>d5,captureHookDiscovery:()=>r5,captureExtensionActivated:()=>gY,captureDiffEditFailure:()=>c5,captureConversationTurnEvent:()=>B8,captureCompactionSkipped:()=>n5,captureCompactionExecuted:()=>i5,captureAuthSucceeded:()=>x1,captureAuthStarted:()=>I1,captureAuthLoggedOut:()=>F$,captureAuthFailed:()=>g1,captureAgentUnexpectedReasoningTokens:()=>xY,captureAgentTeamCreated:()=>p5,captureAgentCreated:()=>A$,buildWorkspaceMetadata:()=>YW,buildTeamProgressSummary:()=>_4,buildSdkErrorProperties:()=>qm,buildRemoteConfigSessionBlobUploadMetadata:()=>EQ,buildMcpInstallTransport:()=>yQ,buildDelegatedAgentConfig:()=>U2,buildConnectionUpdate:()=>A3,buildConfiguredAgentToolName:()=>tW,buildConfiguredAgentToolDescriptors:()=>eW,buildCheckpointWorkspaceDiff:()=>HQ,bootstrapAgentTeams:()=>P8,authorizeMcpServerOAuth:()=>IZ,addLocalProvider:()=>nX,accumulateUsageTotals:()=>D0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>AW,UnifiedConfigFileWatcher:()=>P2,ToolPresets:()=>s0,TelemetryService:()=>b4,TelemetryLoggerSink:()=>Y5,TEAM_TOOL_NAMES:()=>C8,SubprocessSandbox:()=>g8,StructuredCommandInputSchema:()=>X2,StoredProviderSettingsSchema:()=>a8,StoredProviderSettingsEntrySchema:()=>_Z,SqliteTeamStore:()=>Q8,SqliteSessionStore:()=>P1,SessionVersioningService:()=>a$,SessionVersioningError:()=>p0,SessionSource:()=>F0,SessionNotFoundError:()=>e1,SapSettingsSchema:()=>FZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>FW,SESSION_STATUSES:()=>v6,SESSION_NOT_FOUND_ERROR_CODE:()=>g2,SDK_ERROR_TELEMETRY_EVENT:()=>xm,RpcClineAccountService:()=>GW,RemoteRuntimeHost:()=>A4,ReasoningSettingsSchema:()=>BZ,RULES_CONFIG_DIRECTORY_NAME:()=>CZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>wQ,ProviderSettingsSchema:()=>S$,ProviderSettingsManager:()=>V1,ProviderProtocolSchema:()=>XZ,ProviderIdSchema:()=>jW,ProviderClientSchema:()=>YZ,OpenTelemetryProvider:()=>S4,OcaSettingsSchema:()=>AZ,OPENAI_COMPATIBLE_PROVIDERS:()=>ZW,NodeHubClient:()=>_1,NoOpFeatureFlagsProvider:()=>o2,NativeHubTransportAdapter:()=>f5,ModelCatalogSettingsSchema:()=>fZ,McpSettingsUpdateSkippedError:()=>Q4,McpSettingsMutatorPurityError:()=>I$,McpSettingsLockTimeoutError:()=>x$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>y1,Llms:()=>Xm,InMemoryWorkspaceManager:()=>s8,InMemoryMcpManager:()=>I2,HubUIClient:()=>pj,HubTransportError:()=>k0,HubSessionClient:()=>lj,HubServerTransport:()=>h4,HubScheduleService:()=>P4,HubScheduleCommandService:()=>C4,HubRuntimeHost:()=>Q$,HubCommandError:()=>K4,HookEventPayloadSchema:()=>KQ,HookEventNameSchema:()=>GQ,HookConfigFileName:()=>d8,HOOK_CONFIG_FILE_EVENT_MAP:()=>t6,HOOKS_CONFIG_DIRECTORY_NAME:()=>i9,GlobalSettingsSchema:()=>C6,GcpSettingsSchema:()=>GZ,FileTeamPersistenceStore:()=>B7,FeatureFlagsService:()=>a2,FeatureFlagDefaultValue:()=>Pm,FEATURE_FLAGS:()=>Cm,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>f7,DefaultToolNames:()=>q0,DefaultRuntimeBuilder:()=>x4,DefaultLlmsSdk:()=>C5,DEFAULT_MODELS_CATALOG_URL:()=>WZ,DEFAULT_HUB_PORT:()=>Wj,DEFAULT_HUB_PATHNAME:()=>Zj,DEFAULT_HUB_HOST:()=>$j,CoreSettingsService:()=>g$,CoreSessionService:()=>S1,ContributionRegistry:()=>Om,ClinePassLimitError:()=>Bm,ClineOrgIndividualInferenceSubscriptionError:()=>Vm,ClineNotSubscribedError:()=>Ym,ClineCore:()=>j5,ClineAccountService:()=>HW,ChatViewStateSchema:()=>GY,ChatSummarySchema:()=>A7,ChatSessionStatusSchema:()=>G7,ChatSessionConfigSchema:()=>H7,ChatMessageSchema:()=>F7,ChatMessageRoleSchema:()=>K7,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>w5,BrowserWebSocketHubAdapter:()=>A5,BUILT_IN_PROVIDER_IDS:()=>ZJ,BUILT_IN_PROVIDER:()=>JW,AzureSettingsSchema:()=>KZ,AwsSettingsSchema:()=>HZ,AuthSettingsSchema:()=>VZ,AgentTeamsRuntime:()=>n2,AgentTeam:()=>q4,Agent:()=>gm,ALL_DEFAULT_TOOL_NAMES:()=>U$});z(O,C$0);import*as Xm from"@cline/llms";import{ClineNotSubscribedError as Ym,ClineOrgIndividualInferenceSubscriptionError as Vm,ClinePassLimitError as Bm,extractClinePassLimitMessage as Hm,getClineOrgIndividualInferenceSubscriptionMessage as Gm,getClineNotSubscribedMessage as Km,getClinePassSubscriptionUrl as Fm,isClineNotSubscribedError as Am,isClineNotSubscribedMessage as fm,isClineOrgIndividualInferenceSubscriptionError as Um,isClineOrgIndividualInferenceSubscriptionMessage as Dm,isClinePassLimitError as _m,isClinePassLimitMessage as Lm}from"@cline/llms";import{buildClineSystemPrompt as Tm,buildSdkErrorProperties as qm,ContributionRegistry as Om,captureSdkError as zm,createClineTelemetryServiceConfig as Mm,createClineTelemetryServiceMetadata as Rm,createContributionRegistry as Nm,createTool as Em,emptyWorkspaceManifest as wm,FEATURE_FLAGS as Cm,FeatureFlagDefaultValue as Pm,formatDisplayUserInput as bm,noopBasicLogger as Sm,normalizeSdkError as ym,normalizeUserInput as hm,parseUserCommandEnvelope as km,registerDisposable as Im,SDK_ERROR_TELEMETRY_EVENT as xm}from"@cline/shared";import"@cline/shared/storage";var JK={};N(JK,{isClineAccountActionRequest:()=>qZ,executeClineAccountAction:()=>OZ,RpcClineAccountService:()=>GW,ClineAccountService:()=>HW});function ZN($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function QK($,W,Z){let Q=ZN(Z);if(Q)return Q;let J=W.trim();if(J){let j=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class HW{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let W=$.apiBaseUrl.trim();if(!W)throw Error("apiBaseUrl is required");this.apiBaseUrl=W,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let W=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(W)}/balance`)}async fetchUsageTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/usages`)).items??[]}async fetchPaymentTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let W=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)W.searchParams.set("type",$.type);return this.request(`${W.pathname}${W.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}`)}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}/balance`)}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");let Z=await this.resolveOrganizationMemberId(W,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(W)}/members/${encodeURIComponent(Z)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let W=$?.trim();if(W)return W;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,W){let Z=W?.trim();if(Z)return Z;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let X=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,W){let Z=(await this.getAuthTokenFn())?.trim();if(!Z)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,j=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:W?.method??"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json",...Q??{}},body:W?.body!==void 0?JSON.stringify(W.body):void 0,signal:J.signal});if(X.status===204||W?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let Y=await X.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!X.ok)throw Error(QK(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(QK(X.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(j)}}}function qZ($){return $.action==="clineAccount"}async function OZ($,W){switch($.operation){case"fetchMe":return W.fetchMe();case"fetchBalance":return W.fetchBalance($.userId);case"fetchUsageTransactions":return W.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return W.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return W.fetchUserOrganizations();case"fetchOrganizationBalance":return W.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return W.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await W.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return W.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class GW{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:W})}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:W,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var jK={};N(jK,{createOAuthClientCallbacks:()=>t8});function t8($){return{onAuth:({url:W,instructions:Z})=>{if($.onOutput?.(Z??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(W)).catch((Q)=>{$.onOpenUrlError?.({url:W,error:Q})})}catch(Q){$.onOpenUrlError?.({url:W,error:Q})}$.onOutput?.(W)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var Af={};N(Af,{ClineCore:()=>j5});function XK($){if($===!0)return{};if(!$)return;return $}function YK($){if($==="user")return"global";return $}class BJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let W=this.getService().ingestEvent($);return{event:W.event,duplicate:W.duplicate,matchedSpecIds:W.matchedSpecs.map((Z)=>Z.specId),queuedRuns:W.queuedRuns,suppressions:W.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function VK($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:i8(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:jN(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content),delivery:Q.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:JN(J)}},async abortSession(Z){return await W.abort(Z,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}function zZ($){let W=QN($.automationService,$.automation),Z=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!W&&!Z&&!Q&&!J&&!j)return $.context;return{...$.context??{},...Z?{client:Z}:{},...Q?{user:Q}:{},...J?{logger:J}:{},...j?{telemetry:j}:{},...W?{automation:W}:{}}}function QN($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function JN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function jN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var KF={};N(KF,{createCoreSettingsService:()=>x2,CoreSettingsService:()=>g$});import{existsSync as SW,readFileSync as lE}from"node:fs";import{basename as NJ,dirname as jF,extname as pE,isAbsolute as VF,join as rE,relative as BF,resolve as XF}from"node:path";var zK={};N(zK,{resolveWorkflowsConfigSearchPaths:()=>TW,resolveSkillsConfigSearchPaths:()=>_W,resolveRulesConfigSearchPaths:()=>LW,parseWorkflowConfigFromMarkdown:()=>DW,parseSkillConfigFromMarkdown:()=>fW,parseRuleConfigFromMarkdown:()=>UW,createWorkflowsConfigDefinition:()=>zW,createUserInstructionConfigService:()=>k$,createSkillsConfigDefinition:()=>qW,createRulesConfigDefinition:()=>OW,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>AW,UnifiedConfigFileWatcher:()=>P2,SKILLS_CONFIG_DIRECTORY_NAME:()=>FW,RULES_CONFIG_DIRECTORY_NAME:()=>CZ});import{createHash as XN}from"node:crypto";import{watch as YN}from"node:fs";import{readdir as VN,readFile as BN}from"node:fs/promises";import{join as HN}from"node:path";function GN($){return XN("sha1").update($).digest("hex")}function GK($){return Boolean($&&typeof $==="object"&&"code"in $)}function BK($){return GK($)&&$.code==="ENOENT"}function HK($){return GK($)&&($.code==="EACCES"||$.code==="EPERM")}class P2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,W){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=W?.debounceMs??75,this.emitParseErrors=W?.emitParseErrors??!1;for(let Z of $){if(this.definitionsByType.has(Z.type))throw Error(`Duplicate unified config definition type '${Z.type}'.`);this.definitionsByType.set(Z.type,Z),this.recordsByType.set(Z.type,new Map),this.discoveredDirectoriesByType.set(Z.type,new Set);for(let Q of Z.directories){let J=this.baseTypesByDirectory.get(Q);if(J)J.add(Z.type);else this.baseTypesByDirectory.set(Q,new Set([Z.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let W=this.definitionsByType.get($);if(!W)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(W)})}getSnapshot($){let W=this.recordsByType.get($);return new Map([...W?.entries()??[]].map(([Z,Q])=>[Z,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[W,Z]of this.recordsByType.entries())$.set(W,new Map([...Z.entries()].map(([Q,J])=>[Q,{...J}])));return $}emit($){for(let W of this.listeners)W($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[W,Z]of this.watchersByDirectory.entries()){if($.has(W))continue;Z.close(),this.watchersByDirectory.delete(W)}this.watchedTypesByDirectory=$;for(let W of $.keys()){if(this.watchersByDirectory.has(W))continue;try{let Z=YN(W,()=>{let Q=this.watchedTypesByDirectory.get(W);if(!Q)return;for(let J of Q)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(W,Z),Z.on("error",(Q)=>{let J=this.watchedTypesByDirectory.get(W);if(!J)return;for(let j of J)this.emit({kind:"error",type:j,error:Q,filePath:W})})}catch(Z){if(!BK(Z)&&!HK(Z)){let Q=$.get(W);if(!Q)continue;for(let J of Q)this.emit({kind:"error",type:J,error:Z,filePath:W})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let W of $){let Z=this.definitionsByType.get(W);if(!Z)continue;await this.refreshTypeInternal(Z)}})},this.debounceMs)}async refreshTypeInternal($){let{records:W,discoveredDirectories:Z}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[J,j]of Q.entries()){if(W.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:j.filePath})}for(let[J,j]of W.entries()){let X=Q.get(J);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:J,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,W),this.discoveredDirectoriesByType.set($.type,Z),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let W=new Map,Z=new Set;for(let Q of $.directories){Z.add(Q);let J=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let j of J){let{fileName:X,filePath:Y}=j;if(Z.add(j.directoryPath),$.includeFile&&!$.includeFile(X,Y))continue;try{let V=await BN(Y,"utf8"),B={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:Y,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;W.set(G,{type:$.type,id:G,item:H,filePath:Y,fingerprint:GN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:W,discoveredDirectories:Z}}buildDesiredTypesByDirectory(){let $=new Map;for(let[W,Z]of this.baseTypesByDirectory.entries())$.set(W,new Set(Z));for(let[W,Z]of this.discoveredDirectoriesByType.entries())for(let Q of Z){let J=$.get(Q);if(J)J.add(W);else $.set(Q,new Set([W]))}return $}async readDirectoryFileCandidates($){try{return(await VN($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:HN($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(BK(W)||HK(W))return[];throw W}}}import{readdir as GJ,readFile as KN,stat as HJ}from"node:fs/promises";import{basename as s1,dirname as FN,extname as RZ,join as v0,resolve as KW}from"node:path";import{AGENTS_RULES_FILE_NAME as KK,RULES_CONFIG_DIRECTORY_NAME as CZ,resolveGlobalAgentsRulesPath as AN,resolveRulesConfigSearchPaths as fN,resolveSkillsConfigSearchPaths as UN,resolveWorkflowsConfigSearchPaths as DN,SKILLS_CONFIG_DIRECTORY_NAME as FW,WORKFLOWS_CONFIG_DIRECTORY_NAME as AW}from"@cline/shared/storage";import _N from"yaml";var MZ="SKILL.md",LN="managed.json",TN=new Set([".md",".markdown",".txt"]);function KJ($){return $.trim().toLowerCase()}function e8($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function NZ($){return TN.has(RZ($).toLowerCase())}function FK($){let W=[],Z=new Set;for(let Q of $){let J=KW(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function qN($){let W=[...$?.directories??_W($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...MG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return FK(W)}async function FJ($){try{let W=await GJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=v0($,Q.name),j=v0(J,LN);try{let X=await KN(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(e8(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(e8(W))return[];throw W}}function AJ($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z;try{let j=_N.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function EZ($,W,Z){if($===void 0||$===null){if(Z)throw Error(`Missing required frontmatter field '${W}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${W}' must be a string.`);let Q=$.trim();if(!Q&&Z)throw Error(`Frontmatter field '${W}' cannot be empty.`);return Q||void 0}function $4($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function ON($,W){if(s1($.filePath).toLowerCase()!==KK.toLowerCase())return s1($.filePath,RZ($.filePath));if(W&&KW($.filePath)===KW(W,KK))return"Workspace AGENTS.md";if(KW($.filePath)===KW(AN()))return"Global AGENTS.md";return s1($.filePath,RZ($.filePath))}function fW($,W){let{data:Z,body:Q,parseError:J}=AJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in skill file.");let Y=EZ(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:EZ(Z.description,"description",!1),disabled:$4(Z.disabled,"disabled")??($4(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function UW($,W){let{data:Z,body:Q,parseError:J}=AJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=EZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:$4(Z.disabled,"disabled")??($4(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function DW($,W){let{data:Z,body:Q,parseError:J}=AJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=EZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:$4(Z.disabled,"disabled")??($4(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function _W($){return UN($)}function LW($){return fN($)}function TW($){return DN($)}async function AK($){if(s1($)===".cline"){let W=await FJ($);return(await Promise.all(W.map((Q)=>AK(v0(Q,FW))))).flat()}try{let W=await GJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===MZ){Z.push({directoryPath:$,fileName:Q.name,filePath:v0($,Q.name)});continue}let J=v0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await HJ(J).then((X)=>X.isDirectory()).catch((X)=>{if(e8(X))return!1;throw X}))Z.push({directoryPath:J,fileName:MZ,filePath:v0(J,MZ)})}return Z}catch(W){if(e8(W))return[];throw W}}async function wZ($){if(s1($)===".cline"){let W=await FJ($);return(await Promise.all(W.map((Q)=>wZ(v0(Q,"rules.md"))))).flat()}try{if((await HJ($)).isFile())return[{directoryPath:FN($),fileName:s1($),filePath:$}]}catch(W){if(!e8(W))throw W}try{let Z=(await GJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&NZ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:v0($,J.name)})),Q=v0($,"AGENTS.md");try{if((await HJ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(e8(W))return[];throw W}}async function zN($){if(s1($)===".cline"){let W=await FJ($);return(await Promise.all(W.map((Q)=>wZ(v0(Q,AW))))).flat()}return wZ($)}function qW($){let W=qN($),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?FK([...W,Z]):W,discoverFiles:AK,includeFile:(Q)=>Q===MZ,parseFile:(Q)=>fW(Q.content,s1(Q.directoryPath)),resolveId:(Q)=>KJ(Q.name)}}function OW($){let W=$?.directories??LW($?.workspacePath),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:wZ,includeFile:(Q,J)=>Q===".clinerules"||NZ(Q)||NZ(J),parseFile:(Q)=>UW(Q.content,ON(Q,$?.workspacePath)),resolveId:(Q)=>KJ(Q.name)}}function zW($){let W=$?.directories??TW($?.workspacePath),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:zN,includeFile:(Q)=>NZ(Q),parseFile:(Q)=>DW(Q.content,s1(Q.filePath,RZ(Q.filePath))),resolveId:(Q)=>KJ(Q.name)}}function fK($){let W=[qW($?.skills),OW($?.rules),zW($?.workflows)];return new P2(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as UK}from"@cline/shared";function MN($,W){if($.description?.trim())return UK($.description,".");if(W==="workflow")return;return UK($.instructions,".")}function RN($){return $.disabled!==!0}function DK($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>RN(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:MN(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function MW($){let W=new Map;for(let Z of[...DK($,"workflow"),...DK($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function _K($,W){if(!$.startsWith("/")||$.length<2)return $;let Z=$.match(/^\/(\S+)/);if(!Z)return $;let Q=Z[1];if(!Q)return $;let J=Q.length+1,j=$.slice(J),X=MW(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}var TK={};N(TK,{mergeRulesForSystemPrompt:()=>Z4,loadRulesForSystemPromptFromWatcher:()=>fJ,listEnabledRulesFromWatcher:()=>LK,isRuleEnabled:()=>PZ,formatRulesForSystemPrompt:()=>W4});function PZ($){return $.disabled!==!0}function W4($){if($.length===0)return"";return`
210
210
 
211
211
  # Rules
212
212
  ${$.map((Z)=>`## ${Z.name}
@@ -594,7 +594,7 @@ ${J}`,$.config.mode)}function W5($,W){return fS($,W==="plan"?"plan":W==="yolo"?"
594
594
  ${G}${V.instructions}
595
595
  </command-instructions>`};return Object.defineProperty(Z,"configuredSkills",{get:()=>ZX($,W).map(({skill:Q,...J})=>J),enumerable:!0}),Z}function hh($,W,Z,Q){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},j=async()=>{let X=await Q($,Z.capabilityName,{},W);if(X?.snapshot)J=X.snapshot};return{start:j,stop:()=>{},refreshType:async()=>{await j()},listRecords:(X)=>[...J.records[X]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(X)=>{if(!X.startsWith("/")||X.length<2)return X;let V=X.match(/^\/(\S+)/)?.[1];if(!V)return X;let B=J.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${X.slice(V.length+1)}`:X},hasConfiguredSkills:(X)=>ZX(J,X).some((Y)=>!Y.disabled),createSkillsExecutor:(X)=>ef(J,X),createExtension:(X)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[X.includeRules?"rules":void 0,X.registerSkillsTool?"tools":void 0,X.includeSkills||X.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(X.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>W4(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(X.registerSkillsTool)Y.registerTool(H2(ef(J,X.allowedSkillNames)));for(let V of J.runtimeCommands.filter((B)=>B.kind==="skill"&&X.includeSkills||B.kind==="workflow"&&X.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
596
596
 
597
- ${H}`:V.instructions}})}})}}function kh($,W,Z,Q){let J=Z.map((j)=>[j.executor,async(...X)=>{let Y=X.at(-1),V=X.slice(0,-1);return(await Q($,j.capabilityName,{executor:j.executor,args:V,context:$U(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Ih($,W,Z,Q){if(Z.length===0)return;return Z.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(j,X){return(await Q($,J.capabilityName,{toolName:J.name,input:j,context:$U(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(bh(V))}:void 0))?.result}}))}function xh($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of Ch){let Y=J.get(X);if(!Y)continue;j[X]=async(V)=>{return(await Q($,Y.capabilityName,{context:V},W))?.control}}return Object.keys(j).length>0?j:void 0}function JX($){let W=$.contributions.filter((V)=>V.kind==="toolExecutor"),Z=$.contributions.filter((V)=>V.kind==="tool"),Q=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),j=$.contributions.find((V)=>V.kind==="checkpoint"),X=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:kh($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:xh($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:Ih($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:hh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var WU="hubCapabilityOwnerClientId";function TQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function gh($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function mh($){let W=y4($)??{},Z={},Q=TQ(W.providerId);if(Q)Z.providerId=Q;let J=TQ(W.modelId);if(J)Z.modelId=J;let j=TQ(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=TQ(W.baseUrl);if(X!==void 0)Z.baseUrl=X;if(W.headers&&typeof W.headers==="object")Z.headers=W.headers;if(W.providerConfig&&typeof W.providerConfig==="object")Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"thinking")){if(typeof W.thinking==="boolean"||W.thinking===null)Z.thinking=W.thinking}if(Object.hasOwn(W,"reasoningEffort")){let Y=gh(W.reasoningEffort);if(Y!==void 0)Z.reasoningEffort=Y}if(Object.hasOwn(W,"thinkingBudgetTokens")){if(typeof W.thinkingBudgetTokens==="number"&&Number.isFinite(W.thinkingBudgetTokens)&&W.thinkingBudgetTokens>0)Z.thinkingBudgetTokens=Math.trunc(W.thinkingBudgetTokens);else if(W.thinkingBudgetTokens===null)Z.thinkingBudgetTokens=null}return f2(Z)}function vh($,W){return $.sessionState.get(W)?.createdByClientId}function ch($){if(!$||!(WU in $))return $;let W={...$};return delete W[WU],W}function JU($){let W=vh($.ctx,$.sessionId);if(!W)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(W!==$.clientId)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${W}`);return}async function jU($,W,Z){let Q=performance.now(),J={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:W.sessionId};l("info","session.create.begin",J);let j=W.payload&&typeof W.payload==="object"?W.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},Y=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,V=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{},B=K1(j.initialCompactionState);if(typeof Y?.mode==="string")X.mode=Y.mode;else if(typeof V.mode==="string")X.mode=V.mode;if(typeof Y?.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")X.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)X.checkpointEnabled=!0;let H=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},G=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!G)return l("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(W,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=W.clientId?.trim()||"hub-client",F=QX(V.clientContributions);l("info","session.create.contributions_parsed",{...J,clientId:K,workspaceRoot:G,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:F.length});let D=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||ZU(),f=QU(V.configExtensions);l("info","session.create.runtime_build.begin",{...J,sessionId:D,configExtensionCount:f?.length??0});let _=JX({sessionId:D,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});l("info","session.create.start_session.begin",{...J,sessionId:D,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub")});let U=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:D,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});l("info","session.create.start_session.end",{...J,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!U.result}),ij($,U.sessionId,K,"creator",{interactive:X.interactive!==!1}),l("info","session.create.read_records.begin",{...J,sessionId:U.sessionId});let[R,L]=await Promise.all([b0($,U.sessionId),l0($,U.sessionId)]);if(l("info","session.create.read_records.end",{...J,sessionId:U.sessionId,hasSession:!!R,hasSnapshot:!!L,elapsedMs:Math.round(performance.now()-Q)}),R)$.publish($.buildEvent("session.created",{session:R,...L?{snapshot:L}:{}},U.sessionId));return l("info","session.create.reply",{...J,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(W,{session:R,...L?{snapshot:L}:{}})}async function XU($,W,Z){let Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.sessionId==="string"?Q.sessionId.trim():W.sessionId?.trim()||"",j=Q.checkpointRunCount;if(!J)return h(W,"invalid_restore","session.restore requires a session id");let X=Q.restore&&typeof Q.restore==="object"?Q.restore:{},Y=X.messages!==!1;if(typeof j!=="number")return h(W,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(Y&&!V)return h(W,"invalid_restore","sessionConfig is required when restore.messages is true");let B=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},H=K1(Q.initialCompactionState),G=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;let K=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},F=W.clientId?.trim()||"hub-client",A=QX(B.clientContributions),f=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||ZU(),_=QU(B.configExtensions),U=JX({sessionId:f,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),L=await new a$().restoreCheckpoint({sessionId:J,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(w)=>$.sessionHost.getSession(w),readMessages:(w)=>$.sessionHost.readSessionMessages(w),buildStartInput:(w)=>{if(w.restoredCheckpointMetadata)G.checkpoint=w.restoredCheckpointMetadata;let b=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():w.sourceSession.workspaceRoot||w.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:w.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:_,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:f,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:w.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:w.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??w.plan.cwd,workspaceRoot:V?.workspaceRoot??b,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(w)=>$.sessionHost.startSession(w),getStartedSessionId:(w)=>w.sessionId,readRestoredSession:(w)=>$.sessionHost.getSession(w)});if(!Y)return u(W,{checkpoint:L.checkpoint});let q=L.startResult;if(!q)return h(W,"restore_failed","Checkpoint restore did not start a session");ij($,q.sessionId,F,"creator",{interactive:G.interactive!==!1});let[T,C]=await Promise.all([b0($,q.sessionId),l0($,q.sessionId)]);if(T)$.publish($.buildEvent("session.created",{session:T,...C?{snapshot:C}:{}},q.sessionId));return u(W,{session:T,...C?{snapshot:C}:{},messages:L.messages??[],checkpoint:L.checkpoint})}catch(V){if(V instanceof p0)return h(W,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(W,"restore_failed",V instanceof Error?V.message:String(V))}}async function YU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_attach","session.attach requires a session id");let Q=await b0($,Z);if(!Q)return h(W,"session_not_found",`Unknown session: ${Z}`);Cf($,Z,W.clientId?.trim()||"hub-client","participant");let J=await b0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),u(W,{session:J??Q})}async function VU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_detach","session.detach requires a session id");let Q=W.clientId?.trim()||"hub-client",J=$.sessionState.get(Z);if(J){if(J.participants.delete(Q),J.createdByClientId===Q)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Z)}i$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([b0($,Z),l0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),u(W)}async function BU($,W){let Z=P0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([b0($,Z),Q?l0($,Z):Promise.resolve(void 0)]);return J?u(W,{session:J,...j?{snapshot:j}:{}}):h(W,"session_not_found",`Unknown session: ${Z}`)}async function HU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.messages requires a session id");if(!await b0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=await $.sessionHost.readSessionMessages(Z);return u(W,{sessionId:Z,messages:J})}async function GU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.get requires a session id");if(!await b0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=JU({sessionId:Z,ctx:$,clientId:J,envelope:W});if(j)return j;let X=await $.sessionHost.readSessionCompactionState(Z);return u(W,{sessionId:Z,state:X})}async function KU($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>_Q(j,$.sessionState.get(j.sessionId)));return u(W,{sessions:J})}async function FU($,W){let Z=P0(W),Q=ch(y4(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([b0($,Z),l0($,Z)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Z));return{version:W.version,requestId:W.requestId,ok:J.updated,payload:{updated:J.updated,session:j,...X?{snapshot:X}:{}}}}async function AU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_update_connection","session.update_connection requires a session id");let Q=$.sessionHost.updateSessionConnection;if(!Q)return h(W,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=y4(W.payload),j=mh(J?.updates);return await Q.call($.sessionHost,Z,j),u(W,{sessionId:Z,updated:!0})}async function fU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.update requires a session id");let Q=W.clientId?.trim()||"hub-client",J=await b0($,Z);if(!J)return h(W,"session_not_found",`Unknown session: ${Z}`);let j=JU({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=K1(X.state);if(!Y)return h(W,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Z,Y),[B,H]=V.updated?await Promise.all([b0($,Z),l0($,Z)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...H?{snapshot:H}:{}},Z));return{version:W.version,requestId:W.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...H?{snapshot:H}:{}}}}async function UU($,W){let Z=P0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(W,{deleted:Q})}async function DU($,W){let Z=P0(W),Q=$.sessionHost.pendingPrompts;if(!Q)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await Q.list({sessionId:Z});return u(W,{sessionId:Z,prompts:J})}async function _U($,W){let Z=P0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=typeof W.payload?.prompt==="string"?W.payload.prompt:void 0,j=W.payload?.delivery==="queue"||W.payload?.delivery==="steer"?W.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await X.update({sessionId:Z,promptId:Q,prompt:J,delivery:j});return u(W,Y)}async function LU($,W){let Z=P0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await J.delete({sessionId:Z,promptId:Q});return u(W,j)}function TU($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var dh=new Set(["skills","workflows","rules","tools","mcp"]);function jX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function F5($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="string")throw Error(`settings payload '${W}' must be a string.`);return Z}function lh($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="boolean")throw Error(`settings payload '${W}' must be a boolean.`);return Z}function qU($){if($===void 0)return{};if(!jX($))throw Error("settings.list payload must be an object.");return{cwd:F5($,"cwd"),workspaceRoot:F5($,"workspaceRoot"),availabilityContext:jX($.availabilityContext)?$.availabilityContext:void 0}}function ph($){if(!jX($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!dh.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...qU($),type:W,id:F5($,"id"),path:F5($,"path"),name:F5($,"name"),enabled:lh($,"enabled")}}class h4{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=uh("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new y1({sessionService:new S1(new P1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(W)=>this.publish(W),buildEvent:$8,requestCapability:(W,Z,Q,J,j)=>Sf(this.ctx,W,Z,Q,J,j)},this.schedules=new P4({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(W,Z)=>{let Q=W==="schedule.execution.completed"?"schedule.execution_completed":W==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish($8(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new C4(this.schedules),this.settings=$.settingsService??new g$,$.cronOptions)this.cronService=new uW({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{sf(this.ctx,W).catch((Z)=>{sj("session event handling failed",Z),qQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Z,severity:"error",handled:!0,context:{eventType:W.type,sessionId:W.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())aj(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(i$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let W=await this.dispatchCommand($);return this.captureFailedReply($,W),W}catch(W){throw qQ(this.options.telemetry,{component:"core",operation:"hub.command",error:W,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),W}}async dispatchCommand($){switch($.command){case"client.register":return If(this.ctx,$);case"client.update":return xf(this.ctx,$);case"client.unregister":return gf(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return mf(this.ctx,$);case"session.create":return await jU(this.ctx,$,(W)=>nj(this.ctx,W));case"session.restore":return await XU(this.ctx,$,(W)=>nj(this.ctx,W));case"session.attach":return await YU(this.ctx,$);case"session.detach":return await VU(this.ctx,$);case"session.get":return await BU(this.ctx,$);case"session.messages":return await HU(this.ctx,$);case"session.compaction.get":return await GU(this.ctx,$);case"session.list":return await KU(this.ctx,$);case"session.update":return await FU(this.ctx,$);case"session.update_connection":return await AU(this.ctx,$);case"session.compaction.update":return await fU(this.ctx,$);case"session.pending_prompts":return await DU(this.ctx,$);case"session.update_pending_prompt":return await _U(this.ctx,$);case"session.remove_pending_prompt":return await LU(this.ctx,$);case"session.delete":return await UU(this.ctx,$);case"session.hook":return await of(this.ctx,$);case"run.start":case"session.send_input":return await nf(this.ctx,$);case"run.abort":return await af(this.ctx,$);case"capability.request":return await hf(this.ctx,$);case"approval.respond":return await Pf(this.ctx,$);case"capability.respond":return kf(this.ctx,$);case"capability.progress":return yf(this.ctx,$);case"ui.notify":return this.publish($8("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish($8("ui.show_window",$.payload??{})),u($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await rf(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let W=await this.scheduleCommands.handleCommand($);if(W.ok){let Z=TU($.command);if(Z)this.publish($8(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!rh(W.error.code))return;qQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(W.error.message),severity:W.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:W.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let W=await this.settings.list(qU($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:W instanceof Error?W.message:String(W)}}}}async handleSettingsToggle($){try{let W=await this.settings.toggle(ph($.payload));return this.publish($8("settings.changed",{types:W.changedTypes,snapshot:W.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W.snapshot,changedTypes:W.changedTypes}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:W instanceof Error?W.message:String(W)}}}}subscribe($,W,Z){let Q=this.listeners.get($)??new Set,J={sessionId:Z?.sessionId,listener:W};return Q.add(J),this.listeners.set($,Q),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[W,Z]of this.sessionState.entries()){if(Z.participants.delete($),Z.createdByClientId===$)Z.createdByClientId=void 0;if(Z.participants.size===0)this.sessionState.delete(W)}i$(this.ctx,(W)=>W.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let W of this.listeners.values())for(let Z of W){if(Z.sessionId&&Z.sessionId!==$.sessionId)continue;try{Z.listener($)}catch(Q){sj(`listener threw while publishing ${$.event}`,Q),qQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function rh($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as oh}from"node:crypto";import sh from"node:http";import th from"node:net";import{URL as BX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as MU,HUB_CAPABILITIES as eh,isHubProtocolCompatible as $k,MAX_CLIENT_HUB_PROTOCOL_VERSION as RU,MIN_CLIENT_HUB_PROTOCOL_VERSION as NU}from"@cline/shared";import{WebSocketServer as Wk}from"ws";import{captureSdkError as OU,HUB_COMMAND_SLOW_LOG_MS as ih,resolveHubCommandTimeoutMs as nh,safeJsonParse as ah}from"@cline/shared";function XX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function zU($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class A5{transport;telemetry;constructor($,W){this.transport=$;this.telemetry=W}attach($){let W=new Map,Z=new Set,Q=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},j=(V)=>{J({kind:"event",envelope:V})},X=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=XX(B);l("info","command.start",K);let F=setTimeout(()=>{if(G)return;l("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},ih),A=this.transport.command(B.envelope);A.then((L)=>{if(!G)return;l(L.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:L.ok,errorCode:L.error?.code,errorMessage:L.error?.message})},(L)=>{if(!G)return;l("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:L})});let D=!1,f,_,U=nh(B.envelope.command,B.envelope.timeoutMs);try{_=U===null?await A:await Promise.race([A,new Promise((L)=>{f=setTimeout(()=>{D=!0,OU(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),L(zU(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},U)})])}catch(L){if(clearTimeout(F),f)clearTimeout(f);throw L}if(G=D,clearTimeout(F),f)clearTimeout(f);let R=Math.round(performance.now()-H);if(D)l("error","command.timeout",{...K,durationMs:R,timeoutMs:U});else l(_.ok?"info":"warn","command.end",{...K,durationMs:R,ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message});if(B.envelope.command==="client.register"&&_.ok){let q=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(q)Z.add(q)}else if(B.envelope.command==="client.unregister"&&_.ok){let L=B.envelope.clientId?.trim();if(L)Z.delete(L)}J({kind:"reply",envelope:_});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(W.has(H))break;let G=await this.transport.subscribe(B.clientId,j,{sessionId:B.sessionId});W.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;W.get(H)?.(),W.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?ah(V.data):void 0;if(!H||H.kind!=="command"){l("error","rejected malformed websocket frame",{error:B});return}l("error","command.error",{...XX(H),error:B}),OU(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:XX(H)}),J({kind:"reply",envelope:zU(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(Q)return;Q=!0;for(let V of W.values())V();W.clear();for(let V of Z)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Z.clear(),$.removeEventListener("message",X),$.removeEventListener("close",Y)};return $.addEventListener("message",X),$.addEventListener("close",Y),Y}}class f5{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function Zk($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((W)=>Buffer.from(W))).toString();return String($)}function Qk($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:Zk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function Jk($){try{$.write(`HTTP/1.1 400 Bad Request\r
597
+ ${H}`:V.instructions}})}})}}function kh($,W,Z,Q){let J=Z.map((j)=>[j.executor,async(...X)=>{let Y=X.at(-1),V=X.slice(0,-1);return(await Q($,j.capabilityName,{executor:j.executor,args:V,context:$U(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Ih($,W,Z,Q){if(Z.length===0)return;return Z.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(j,X){return(await Q($,J.capabilityName,{toolName:J.name,input:j,context:$U(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(bh(V))}:void 0))?.result}}))}function xh($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of Ch){let Y=J.get(X);if(!Y)continue;j[X]=async(V)=>{return(await Q($,Y.capabilityName,{context:V},W))?.control}}return Object.keys(j).length>0?j:void 0}function JX($){let W=$.contributions.filter((V)=>V.kind==="toolExecutor"),Z=$.contributions.filter((V)=>V.kind==="tool"),Q=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),j=$.contributions.find((V)=>V.kind==="checkpoint"),X=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:kh($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:xh($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:Ih($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:hh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var WU="hubCapabilityOwnerClientId";function TQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function gh($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function mh($){let W=y4($)??{},Z={},Q=TQ(W.providerId);if(Q)Z.providerId=Q;let J=TQ(W.modelId);if(J)Z.modelId=J;let j=TQ(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=TQ(W.baseUrl);if(X!==void 0)Z.baseUrl=X;if(W.headers&&typeof W.headers==="object")Z.headers=W.headers;if(W.providerConfig&&typeof W.providerConfig==="object")Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"thinking")){if(typeof W.thinking==="boolean"||W.thinking===null)Z.thinking=W.thinking}if(Object.hasOwn(W,"reasoningEffort")){let Y=gh(W.reasoningEffort);if(Y!==void 0)Z.reasoningEffort=Y}if(Object.hasOwn(W,"thinkingBudgetTokens")){if(typeof W.thinkingBudgetTokens==="number"&&Number.isFinite(W.thinkingBudgetTokens)&&W.thinkingBudgetTokens>0)Z.thinkingBudgetTokens=Math.trunc(W.thinkingBudgetTokens);else if(W.thinkingBudgetTokens===null)Z.thinkingBudgetTokens=null}return f2(Z)}function vh($,W){return $.sessionState.get(W)?.createdByClientId}function ch($){if(!$||!(WU in $))return $;let W={...$};return delete W[WU],W}function JU($){let W=vh($.ctx,$.sessionId);if(!W)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(W!==$.clientId)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${W}`);return}async function jU($,W,Z){let Q=performance.now(),J={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:W.sessionId};l("info","session.create.begin",J);let j=W.payload&&typeof W.payload==="object"?W.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},Y=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,V=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{},B=K1(j.initialCompactionState);if(typeof Y?.mode==="string")X.mode=Y.mode;else if(typeof V.mode==="string")X.mode=V.mode;if(typeof Y?.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")X.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)X.checkpointEnabled=!0;let H=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},G=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!G)return l("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(W,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=W.clientId?.trim()||"hub-client",F=QX(V.clientContributions);l("info","session.create.contributions_parsed",{...J,clientId:K,workspaceRoot:G,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:F.length});let D=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||ZU(),f=QU(V.configExtensions);l("info","session.create.runtime_build.begin",{...J,sessionId:D,configExtensionCount:f?.length??0});let _=JX({sessionId:D,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});l("info","session.create.start_session.begin",{...J,sessionId:D,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub")});let U=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:D,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});l("info","session.create.start_session.end",{...J,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!U.result}),ij($,U.sessionId,K,"creator",{interactive:X.interactive!==!1}),l("info","session.create.read_records.begin",{...J,sessionId:U.sessionId});let[R,L]=await Promise.all([b0($,U.sessionId),l0($,U.sessionId)]);if(l("info","session.create.read_records.end",{...J,sessionId:U.sessionId,hasSession:!!R,hasSnapshot:!!L,elapsedMs:Math.round(performance.now()-Q)}),R)$.publish($.buildEvent("session.created",{session:R,...L?{snapshot:L}:{}},U.sessionId));return l("info","session.create.reply",{...J,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(W,{session:R,...L?{snapshot:L}:{}})}async function XU($,W,Z){let Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.sessionId==="string"?Q.sessionId.trim():W.sessionId?.trim()||"",j=Q.checkpointRunCount;if(!J)return h(W,"invalid_restore","session.restore requires a session id");let X=Q.restore&&typeof Q.restore==="object"?Q.restore:{},Y=X.messages!==!1;if(typeof j!=="number")return h(W,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(Y&&!V)return h(W,"invalid_restore","sessionConfig is required when restore.messages is true");let B=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},H=K1(Q.initialCompactionState),G=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;let K=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},F=W.clientId?.trim()||"hub-client",A=QX(B.clientContributions),f=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||ZU(),_=QU(B.configExtensions),U=JX({sessionId:f,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),L=await new a$().restoreCheckpoint({sessionId:J,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)G.checkpoint=E.restoredCheckpointMetadata;let b=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:E.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:_,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:f,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??b,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!Y)return u(W,{checkpoint:L.checkpoint});let q=L.startResult;if(!q)return h(W,"restore_failed","Checkpoint restore did not start a session");ij($,q.sessionId,F,"creator",{interactive:G.interactive!==!1});let[T,w]=await Promise.all([b0($,q.sessionId),l0($,q.sessionId)]);if(T)$.publish($.buildEvent("session.created",{session:T,...w?{snapshot:w}:{}},q.sessionId));return u(W,{session:T,...w?{snapshot:w}:{},messages:L.messages??[],checkpoint:L.checkpoint})}catch(V){if(V instanceof p0)return h(W,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(W,"restore_failed",V instanceof Error?V.message:String(V))}}async function YU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_attach","session.attach requires a session id");let Q=await b0($,Z);if(!Q)return h(W,"session_not_found",`Unknown session: ${Z}`);Cf($,Z,W.clientId?.trim()||"hub-client","participant");let J=await b0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),u(W,{session:J??Q})}async function VU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_detach","session.detach requires a session id");let Q=W.clientId?.trim()||"hub-client",J=$.sessionState.get(Z);if(J){if(J.participants.delete(Q),J.createdByClientId===Q)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Z)}i$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([b0($,Z),l0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),u(W)}async function BU($,W){let Z=P0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([b0($,Z),Q?l0($,Z):Promise.resolve(void 0)]);return J?u(W,{session:J,...j?{snapshot:j}:{}}):h(W,"session_not_found",`Unknown session: ${Z}`)}async function HU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.messages requires a session id");if(!await b0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=await $.sessionHost.readSessionMessages(Z);return u(W,{sessionId:Z,messages:J})}async function GU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.get requires a session id");if(!await b0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=JU({sessionId:Z,ctx:$,clientId:J,envelope:W});if(j)return j;let X=await $.sessionHost.readSessionCompactionState(Z);return u(W,{sessionId:Z,state:X})}async function KU($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>_Q(j,$.sessionState.get(j.sessionId)));return u(W,{sessions:J})}async function FU($,W){let Z=P0(W),Q=ch(y4(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([b0($,Z),l0($,Z)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Z));return{version:W.version,requestId:W.requestId,ok:J.updated,payload:{updated:J.updated,session:j,...X?{snapshot:X}:{}}}}async function AU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_update_connection","session.update_connection requires a session id");let Q=$.sessionHost.updateSessionConnection;if(!Q)return h(W,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=y4(W.payload),j=mh(J?.updates);return await Q.call($.sessionHost,Z,j),u(W,{sessionId:Z,updated:!0})}async function fU($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.update requires a session id");let Q=W.clientId?.trim()||"hub-client",J=await b0($,Z);if(!J)return h(W,"session_not_found",`Unknown session: ${Z}`);let j=JU({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=K1(X.state);if(!Y)return h(W,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Z,Y),[B,H]=V.updated?await Promise.all([b0($,Z),l0($,Z)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...H?{snapshot:H}:{}},Z));return{version:W.version,requestId:W.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...H?{snapshot:H}:{}}}}async function UU($,W){let Z=P0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(W,{deleted:Q})}async function DU($,W){let Z=P0(W),Q=$.sessionHost.pendingPrompts;if(!Q)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await Q.list({sessionId:Z});return u(W,{sessionId:Z,prompts:J})}async function _U($,W){let Z=P0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=typeof W.payload?.prompt==="string"?W.payload.prompt:void 0,j=W.payload?.delivery==="queue"||W.payload?.delivery==="steer"?W.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await X.update({sessionId:Z,promptId:Q,prompt:J,delivery:j});return u(W,Y)}async function LU($,W){let Z=P0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await J.delete({sessionId:Z,promptId:Q});return u(W,j)}function TU($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var dh=new Set(["skills","workflows","rules","tools","mcp"]);function jX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function F5($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="string")throw Error(`settings payload '${W}' must be a string.`);return Z}function lh($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="boolean")throw Error(`settings payload '${W}' must be a boolean.`);return Z}function qU($){if($===void 0)return{};if(!jX($))throw Error("settings.list payload must be an object.");return{cwd:F5($,"cwd"),workspaceRoot:F5($,"workspaceRoot"),availabilityContext:jX($.availabilityContext)?$.availabilityContext:void 0}}function ph($){if(!jX($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!dh.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...qU($),type:W,id:F5($,"id"),path:F5($,"path"),name:F5($,"name"),enabled:lh($,"enabled")}}class h4{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=uh("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new y1({sessionService:new S1(new P1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(W)=>this.publish(W),buildEvent:$8,requestCapability:(W,Z,Q,J,j)=>Sf(this.ctx,W,Z,Q,J,j)},this.schedules=new P4({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(W,Z)=>{let Q=W==="schedule.execution.completed"?"schedule.execution_completed":W==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish($8(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new C4(this.schedules),this.settings=$.settingsService??new g$,$.cronOptions)this.cronService=new uW({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{sf(this.ctx,W).catch((Z)=>{sj("session event handling failed",Z),qQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Z,severity:"error",handled:!0,context:{eventType:W.type,sessionId:W.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())aj(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(i$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let W=await this.dispatchCommand($);return this.captureFailedReply($,W),W}catch(W){throw qQ(this.options.telemetry,{component:"core",operation:"hub.command",error:W,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),W}}async dispatchCommand($){switch($.command){case"client.register":return If(this.ctx,$);case"client.update":return xf(this.ctx,$);case"client.unregister":return gf(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return mf(this.ctx,$);case"session.create":return await jU(this.ctx,$,(W)=>nj(this.ctx,W));case"session.restore":return await XU(this.ctx,$,(W)=>nj(this.ctx,W));case"session.attach":return await YU(this.ctx,$);case"session.detach":return await VU(this.ctx,$);case"session.get":return await BU(this.ctx,$);case"session.messages":return await HU(this.ctx,$);case"session.compaction.get":return await GU(this.ctx,$);case"session.list":return await KU(this.ctx,$);case"session.update":return await FU(this.ctx,$);case"session.update_connection":return await AU(this.ctx,$);case"session.compaction.update":return await fU(this.ctx,$);case"session.pending_prompts":return await DU(this.ctx,$);case"session.update_pending_prompt":return await _U(this.ctx,$);case"session.remove_pending_prompt":return await LU(this.ctx,$);case"session.delete":return await UU(this.ctx,$);case"session.hook":return await of(this.ctx,$);case"run.start":case"session.send_input":return await nf(this.ctx,$);case"run.abort":return await af(this.ctx,$);case"capability.request":return await hf(this.ctx,$);case"approval.respond":return await Pf(this.ctx,$);case"capability.respond":return kf(this.ctx,$);case"capability.progress":return yf(this.ctx,$);case"ui.notify":return this.publish($8("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish($8("ui.show_window",$.payload??{})),u($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await rf(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let W=await this.scheduleCommands.handleCommand($);if(W.ok){let Z=TU($.command);if(Z)this.publish($8(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!rh(W.error.code))return;qQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(W.error.message),severity:W.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:W.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let W=await this.settings.list(qU($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:W instanceof Error?W.message:String(W)}}}}async handleSettingsToggle($){try{let W=await this.settings.toggle(ph($.payload));return this.publish($8("settings.changed",{types:W.changedTypes,snapshot:W.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W.snapshot,changedTypes:W.changedTypes}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:W instanceof Error?W.message:String(W)}}}}subscribe($,W,Z){let Q=this.listeners.get($)??new Set,J={sessionId:Z?.sessionId,listener:W};return Q.add(J),this.listeners.set($,Q),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[W,Z]of this.sessionState.entries()){if(Z.participants.delete($),Z.createdByClientId===$)Z.createdByClientId=void 0;if(Z.participants.size===0)this.sessionState.delete(W)}i$(this.ctx,(W)=>W.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let W of this.listeners.values())for(let Z of W){if(Z.sessionId&&Z.sessionId!==$.sessionId)continue;try{Z.listener($)}catch(Q){sj(`listener threw while publishing ${$.event}`,Q),qQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function rh($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as oh}from"node:crypto";import sh from"node:http";import th from"node:net";import{URL as BX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as MU,HUB_CAPABILITIES as eh,isHubProtocolCompatible as $k,MAX_CLIENT_HUB_PROTOCOL_VERSION as RU,MIN_CLIENT_HUB_PROTOCOL_VERSION as NU}from"@cline/shared";import{WebSocketServer as Wk}from"ws";import{captureSdkError as OU,HUB_COMMAND_SLOW_LOG_MS as ih,resolveHubCommandTimeoutMs as nh,safeJsonParse as ah}from"@cline/shared";function XX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function zU($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class A5{transport;telemetry;constructor($,W){this.transport=$;this.telemetry=W}attach($){let W=new Map,Z=new Set,Q=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},j=(V)=>{J({kind:"event",envelope:V})},X=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=XX(B);l("info","command.start",K);let F=setTimeout(()=>{if(G)return;l("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},ih),A=this.transport.command(B.envelope);A.then((L)=>{if(!G)return;l(L.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:L.ok,errorCode:L.error?.code,errorMessage:L.error?.message})},(L)=>{if(!G)return;l("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:L})});let D=!1,f,_,U=nh(B.envelope.command,B.envelope.timeoutMs);try{_=U===null?await A:await Promise.race([A,new Promise((L)=>{f=setTimeout(()=>{D=!0,OU(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),L(zU(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},U)})])}catch(L){if(clearTimeout(F),f)clearTimeout(f);throw L}if(G=D,clearTimeout(F),f)clearTimeout(f);let R=Math.round(performance.now()-H);if(D)l("error","command.timeout",{...K,durationMs:R,timeoutMs:U});else l(_.ok?"info":"warn","command.end",{...K,durationMs:R,ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message});if(B.envelope.command==="client.register"&&_.ok){let q=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(q)Z.add(q)}else if(B.envelope.command==="client.unregister"&&_.ok){let L=B.envelope.clientId?.trim();if(L)Z.delete(L)}J({kind:"reply",envelope:_});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(W.has(H))break;let G=await this.transport.subscribe(B.clientId,j,{sessionId:B.sessionId});W.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;W.get(H)?.(),W.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?ah(V.data):void 0;if(!H||H.kind!=="command"){l("error","rejected malformed websocket frame",{error:B});return}l("error","command.error",{...XX(H),error:B}),OU(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:XX(H)}),J({kind:"reply",envelope:zU(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(Q)return;Q=!0;for(let V of W.values())V();W.clear();for(let V of Z)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Z.clear(),$.removeEventListener("message",X),$.removeEventListener("close",Y)};return $.addEventListener("message",X),$.addEventListener("close",Y),Y}}class f5{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function Zk($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((W)=>Buffer.from(W))).toString();return String($)}function Qk($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:Zk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function Jk($){try{$.write(`HTTP/1.1 400 Bad Request\r
598
598
  Connection: close\r
599
599
  Content-Length: 0\r
600
600
  \r
@@ -603,7 +603,7 @@ Connection: close\r
603
603
  Content-Length: 0\r
604
604
  \r
605
605
  `),$.end()}catch{$.destroy()}}function YX($,W){if(!$||!W)return!1;let Z=Buffer.from($,"utf8"),Q=Buffer.from(W,"utf8");return Z.length===Q.length&&oh(Z,Q)}function EU($,W){let Z=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${W.host}:${W.port}${W.pathname}: ${Q}`,j=Error(Z?`${J} (${Z})`:J);if(Z)$.code=Z,j.code=Z;if($ instanceof Error&&$.stack)j.stack=`${j.name}: ${j.message}
606
- Caused by: ${$.stack}`;return j}async function Xk($){return await new Promise((W,Z)=>{let Q=th.createServer();Q.once("error",Z),Q.listen(0,$,()=>{let J=Q.address();if(!J||typeof J==="string"){Q.close(()=>Z(Error("Failed to resolve free port")));return}let j=J.port;Q.close((X)=>{if(X){Z(X);return}W(j)})})})}function Yk($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var VX=new Map,wU="cline-hub-auth.",Vk=30000;function HX($){return Array.isArray($)?$.join(","):$??""}function CU($){return $===32||$===9}function OQ($){let W=HX($).trim(),Z="bearer";if(W.length<=6||W.slice(0,6).toLowerCase()!=="bearer"||!CU(W.charCodeAt(6)))return null;let Q=7;while(Q<W.length&&CU(W.charCodeAt(Q)))Q+=1;return W.slice(Q).trim()||null}function Bk($){for(let W of HX($).split(",")){let Z=W.trim();if(Z.startsWith(wU))return Z.slice(wU.length).trim()||null}return null}function zQ($){let W=$.trim().toLowerCase();return W==="localhost"||W==="127.0.0.1"||W==="::1"||W==="[::1]"}function GX($){let W=HX($).trim();if(!W)return!1;try{return zQ(new BX(W).hostname)}catch{return!1}}async function Z8($){let W=$.owner??W$(),Z=$.host??"127.0.0.1",Q=$.pathname??"/hub",J=$.port??H4(),j=J===0?await Xk(Z):J,X=j,Y=D1(Z,j,Q),V=nZ(),B=iZ(),H=new h4($);await H.start();let G=new A5(new f5(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:MU,minClientProtocolVersion:NU,maxClientProtocolVersion:RU,capabilities:eh,coreVersion:l6.version,buildId:V,pid:process.pid,startedAt:F},D=new Set,f,_,U=async()=>{if(_)return _;return _=(async()=>{if(f)clearInterval(f),f=void 0;for(let T of D)T.terminate?.();D.clear();for(let T of K)T();if(K.clear(),await new Promise((T,C)=>{L.close((w)=>{if(w){C(w);return}T()})}),await new Promise((T,C)=>{R.close((w)=>{if(w){C(w);return}T()})}),await H.stop(),(await _0(W.discoveryPath))?.url===Y)await c0(W.discoveryPath)})(),_},R=sh.createServer((q,T)=>{if((q.url??"/")==="/health"){let w=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Z,port:X,url:Y});T.statusCode=200,T.setHeader("content-type","application/json"),T.end(w);return}if((q.url??"/")==="/status"){if(!YX(OQ(q.headers.authorization),B)){T.statusCode=401,T.end("Unauthorized");return}let w=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Z,port:X,url:Y,updatedAt:new Date().toISOString()});T.statusCode=200,T.setHeader("content-type","application/json"),T.end(w);return}if((q.url??"/")==="/version"){T.statusCode=200,T.setHeader("content-type","application/json"),T.end(JSON.stringify(A));return}if(new BX(q.url??"/",`http://${Z}:${X}`).pathname==="/shutdown"&&q.method==="POST"){if(!YX(OQ(q.headers.authorization),B)){T.statusCode=401,T.end("Unauthorized");return}T.statusCode=202,T.setHeader("content-type","application/json"),T.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}T.statusCode=404,T.end("Not found")}),L=new Wk({noServer:!0});f=setInterval(()=>{for(let q of D){if(q.isAlive===!1){try{q.terminate?.()}catch{}D.delete(q);continue}q.isAlive=!1;try{q.ping?.()}catch{try{q.terminate?.()}catch{}D.delete(q)}}},Vk),R.on("upgrade",(q,T,C)=>{if(new BX(q.url??"/",`http://${Z}:${X}`).pathname!==Q){T.destroy();return}if(!(YX(Bk(q.headers["sec-websocket-protocol"]),B)||zQ(Z)&&GX(q.headers.origin))){jk(T);return}try{L.handleUpgrade(q,T,C,(P)=>{let r=P;r.isAlive=!0,r.on("pong",()=>{r.isAlive=!0}),D.add(r);let $0=G.attach(Qk(P));K.add($0),P.once("close",()=>{D.delete(r),$0(),K.delete($0)})})}catch{Jk(T)}});try{await new Promise((q,T)=>{R.once("error",(C)=>{T(EU(C,{host:Z,port:j,pathname:Q}))}),R.listen(j,Z,()=>{let C=R.address();if(!C||typeof C==="string"){T(EU(Error("Failed to resolve hub port"),{host:Z,port:j,pathname:Q}));return}X=C.port,Y=D1(Z,X,Q),q()})})}catch(q){if(f)clearInterval(f),f=void 0;throw await H.stop().catch(()=>{return}),q}return await aZ(W.discoveryPath,{hubId:H.getHubId(),protocolVersion:MU,minClientProtocolVersion:NU,maxClientProtocolVersion:RU,capabilities:[...A.capabilities],coreVersion:l6.version,buildId:V,authToken:B,host:Z,port:X,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Z,port:X,url:Y,authToken:B,close:U}}async function MQ($){let W=$.owner??W$(),Z=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",J=$.port??H4(),j=$.pathname??"/hub",X=D1(Q,J,j),Y=W.discoveryPath,V=(H)=>{if(!Z)u$(H.url,H.authToken);return H},B=VX.get(Y);if(B){let H=await B;if(H.url===X)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await oZ(W.discoveryPath,async()=>{let H=await _0(W.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let F=await Z$(H.url,{authToken:H.authToken});if(F?.url&&$k(F).compatible&&await E1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await c0(W.discoveryPath);let K=async(F)=>{let A=Z8({...F,owner:W});VX.set(Y,A);try{let D=await A;return V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){throw VX.delete(Y),D}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Yk(F))throw F;return await K({...$,port:0})}})}function bU(){return PU()==="production"?j1():u0()}function Hk($){return PU()!=="production"&&!$}async function SU($){let W=J1({host:$.host,port:$.port,pathname:$.pathname});return await Z8({...$,...W,owner:bU()})}async function yU($){let W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=J1({host:$.host,port:$.port,pathname:$.pathname});return await MQ({...$,...Z,allowPortFallback:$.allowPortFallback??Hk(W),owner:bU()})}NQ();var IU={};N(IU,{registerRemoteConfigSessionBlobUpload:()=>CQ,readRemoteConfigSessionBlobUploadMetadata:()=>KX,prepareRemoteConfigCoreIntegration:()=>AX,createRemoteConfigSessionMessagesArtifactUploader:()=>FX,buildRemoteConfigSessionBlobUploadMetadata:()=>EQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>wQ});import{buildRemoteConfigSessionBlobUploadMetadata as EQ,clearRemoteConfigSessionBlobUpload as Gk,createClineTelemetryServiceConfig as Kk,createSessionId as Fk,createRemoteConfigSessionMessagesArtifactUploader as Ak,prepareRemoteConfigRuntime as fk,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as wQ,readRemoteConfigSessionBlobUploadMetadata as KX,registerRemoteConfigSessionBlobUpload as CQ}from"@cline/shared";function Uk($,W){let Z=$.telemetry||W.telemetryService?{...W.telemetryService??{},...$.telemetry??{}}:void 0;if(!Z)return;return Y$(Kk(Z)).telemetry}function FX(){let $=Ak();return{async uploadMessagesFile(W){await $.uploadMessagesFile(W)}}}async function AX($){let W=await fk($),Z=Uk(W,$),Q=[W.pluginDefinition],J=W.claims?.subject,j=EQ(W.bundle?.remoteConfig,J),X;return{prepared:W,extensions:Q,telemetry:Z,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=j?Y.config.sessionId?.trim()||Fk():Y.config.sessionId;if(H&&j)X=H;let G=H&&j?CQ(H,W.bundle?.remoteConfig,J):void 0,K=G?{...Y.sessionMetadata??{},[wQ]:G}:Y.sessionMetadata;return{...Y,...K?{sessionMetadata:K}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...Q],telemetry:Z??B}}},async dispose(){if(X)Gk(X)}}}var dU={};N(dU,{createTeamName:()=>SQ,DefaultRuntimeBuilder:()=>x4});import{hasRuntimeConfigExtension as Pk}from"@cline/shared";import{nanoid as bk}from"nanoid";f1();var uU={};N(uU,{createLocalTeamStore:()=>_X,SqliteTeamStore:()=>Q8,FileTeamStore:()=>U5});import{appendFileSync as Dk,existsSync as k4,mkdirSync as xU,readdirSync as _k,readFileSync as gU,renameSync as Lk,writeFileSync as Tk}from"node:fs";import{join as fX}from"node:path";import{resolveTeamDataDir as qk}from"@cline/shared/storage";function mU(){return new Date().toISOString()}function UX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function vU($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class U5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??qk()}init(){this.ensureTeamDir()}listTeamNames(){if(!k4(this.teamDirPath))return[];return _k(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>k4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let W=this.readEnvelope($);return W?.teamState?vU(W.teamState):void 0}readHistory($,W=200){let Z=this.historyPath($);if(!k4(Z))return[];return gU(Z,"utf8").split(`
606
+ Caused by: ${$.stack}`;return j}async function Xk($){return await new Promise((W,Z)=>{let Q=th.createServer();Q.once("error",Z),Q.listen(0,$,()=>{let J=Q.address();if(!J||typeof J==="string"){Q.close(()=>Z(Error("Failed to resolve free port")));return}let j=J.port;Q.close((X)=>{if(X){Z(X);return}W(j)})})})}function Yk($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var VX=new Map,wU="cline-hub-auth.",Vk=30000;function HX($){return Array.isArray($)?$.join(","):$??""}function CU($){return $===32||$===9}function OQ($){let W=HX($).trim(),Z="bearer";if(W.length<=6||W.slice(0,6).toLowerCase()!=="bearer"||!CU(W.charCodeAt(6)))return null;let Q=7;while(Q<W.length&&CU(W.charCodeAt(Q)))Q+=1;return W.slice(Q).trim()||null}function Bk($){for(let W of HX($).split(",")){let Z=W.trim();if(Z.startsWith(wU))return Z.slice(wU.length).trim()||null}return null}function zQ($){let W=$.trim().toLowerCase();return W==="localhost"||W==="127.0.0.1"||W==="::1"||W==="[::1]"}function GX($){let W=HX($).trim();if(!W)return!1;try{return zQ(new BX(W).hostname)}catch{return!1}}async function Z8($){let W=$.owner??W$(),Z=$.host??"127.0.0.1",Q=$.pathname??"/hub",J=$.port??H4(),j=J===0?await Xk(Z):J,X=j,Y=D1(Z,j,Q),V=nZ(),B=iZ(),H=new h4($);await H.start();let G=new A5(new f5(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:MU,minClientProtocolVersion:NU,maxClientProtocolVersion:RU,capabilities:eh,coreVersion:l6.version,buildId:V,pid:process.pid,startedAt:F},D=new Set,f,_,U=async()=>{if(_)return _;return _=(async()=>{if(f)clearInterval(f),f=void 0;for(let T of D)T.terminate?.();D.clear();for(let T of K)T();if(K.clear(),await new Promise((T,w)=>{L.close((E)=>{if(E){w(E);return}T()})}),await new Promise((T,w)=>{R.close((E)=>{if(E){w(E);return}T()})}),await H.stop(),(await _0(W.discoveryPath))?.url===Y)await c0(W.discoveryPath)})(),_},R=sh.createServer((q,T)=>{if((q.url??"/")==="/health"){let E=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Z,port:X,url:Y});T.statusCode=200,T.setHeader("content-type","application/json"),T.end(E);return}if((q.url??"/")==="/status"){if(!YX(OQ(q.headers.authorization),B)){T.statusCode=401,T.end("Unauthorized");return}let E=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Z,port:X,url:Y,updatedAt:new Date().toISOString()});T.statusCode=200,T.setHeader("content-type","application/json"),T.end(E);return}if((q.url??"/")==="/version"){T.statusCode=200,T.setHeader("content-type","application/json"),T.end(JSON.stringify(A));return}if(new BX(q.url??"/",`http://${Z}:${X}`).pathname==="/shutdown"&&q.method==="POST"){if(!YX(OQ(q.headers.authorization),B)){T.statusCode=401,T.end("Unauthorized");return}T.statusCode=202,T.setHeader("content-type","application/json"),T.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}T.statusCode=404,T.end("Not found")}),L=new Wk({noServer:!0});f=setInterval(()=>{for(let q of D){if(q.isAlive===!1){try{q.terminate?.()}catch{}D.delete(q);continue}q.isAlive=!1;try{q.ping?.()}catch{try{q.terminate?.()}catch{}D.delete(q)}}},Vk),R.on("upgrade",(q,T,w)=>{if(new BX(q.url??"/",`http://${Z}:${X}`).pathname!==Q){T.destroy();return}if(!(YX(Bk(q.headers["sec-websocket-protocol"]),B)||zQ(Z)&&GX(q.headers.origin))){jk(T);return}try{L.handleUpgrade(q,T,w,(P)=>{let r=P;r.isAlive=!0,r.on("pong",()=>{r.isAlive=!0}),D.add(r);let $0=G.attach(Qk(P));K.add($0),P.once("close",()=>{D.delete(r),$0(),K.delete($0)})})}catch{Jk(T)}});try{await new Promise((q,T)=>{R.once("error",(w)=>{T(EU(w,{host:Z,port:j,pathname:Q}))}),R.listen(j,Z,()=>{let w=R.address();if(!w||typeof w==="string"){T(EU(Error("Failed to resolve hub port"),{host:Z,port:j,pathname:Q}));return}X=w.port,Y=D1(Z,X,Q),q()})})}catch(q){if(f)clearInterval(f),f=void 0;throw await H.stop().catch(()=>{return}),q}return await aZ(W.discoveryPath,{hubId:H.getHubId(),protocolVersion:MU,minClientProtocolVersion:NU,maxClientProtocolVersion:RU,capabilities:[...A.capabilities],coreVersion:l6.version,buildId:V,authToken:B,host:Z,port:X,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Z,port:X,url:Y,authToken:B,close:U}}async function MQ($){let W=$.owner??W$(),Z=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",J=$.port??H4(),j=$.pathname??"/hub",X=D1(Q,J,j),Y=W.discoveryPath,V=(H)=>{if(!Z)u$(H.url,H.authToken);return H},B=VX.get(Y);if(B){let H=await B;if(H.url===X)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await oZ(W.discoveryPath,async()=>{let H=await _0(W.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let F=await Z$(H.url,{authToken:H.authToken});if(F?.url&&$k(F).compatible&&await E1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await c0(W.discoveryPath);let K=async(F)=>{let A=Z8({...F,owner:W});VX.set(Y,A);try{let D=await A;return V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){throw VX.delete(Y),D}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Yk(F))throw F;return await K({...$,port:0})}})}function bU(){return PU()==="production"?j1():u0()}function Hk($){return PU()!=="production"&&!$}async function SU($){let W=J1({host:$.host,port:$.port,pathname:$.pathname});return await Z8({...$,...W,owner:bU()})}async function yU($){let W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=J1({host:$.host,port:$.port,pathname:$.pathname});return await MQ({...$,...Z,allowPortFallback:$.allowPortFallback??Hk(W),owner:bU()})}NQ();var IU={};N(IU,{registerRemoteConfigSessionBlobUpload:()=>CQ,readRemoteConfigSessionBlobUploadMetadata:()=>KX,prepareRemoteConfigCoreIntegration:()=>AX,createRemoteConfigSessionMessagesArtifactUploader:()=>FX,buildRemoteConfigSessionBlobUploadMetadata:()=>EQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>wQ});import{buildRemoteConfigSessionBlobUploadMetadata as EQ,clearRemoteConfigSessionBlobUpload as Gk,createClineTelemetryServiceConfig as Kk,createSessionId as Fk,createRemoteConfigSessionMessagesArtifactUploader as Ak,prepareRemoteConfigRuntime as fk,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as wQ,readRemoteConfigSessionBlobUploadMetadata as KX,registerRemoteConfigSessionBlobUpload as CQ}from"@cline/shared";function Uk($,W){let Z=$.telemetry||W.telemetryService?{...W.telemetryService??{},...$.telemetry??{}}:void 0;if(!Z)return;return Y$(Kk(Z)).telemetry}function FX(){let $=Ak();return{async uploadMessagesFile(W){await $.uploadMessagesFile(W)}}}async function AX($){let W=await fk($),Z=Uk(W,$),Q=[W.pluginDefinition],J=W.claims?.subject,j=EQ(W.bundle?.remoteConfig,J),X;return{prepared:W,extensions:Q,telemetry:Z,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=j?Y.config.sessionId?.trim()||Fk():Y.config.sessionId;if(H&&j)X=H;let G=H&&j?CQ(H,W.bundle?.remoteConfig,J):void 0,K=G?{...Y.sessionMetadata??{},[wQ]:G}:Y.sessionMetadata;return{...Y,...K?{sessionMetadata:K}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...Q],telemetry:Z??B}}},async dispose(){if(X)Gk(X)}}}var dU={};N(dU,{createTeamName:()=>SQ,DefaultRuntimeBuilder:()=>x4});import{hasRuntimeConfigExtension as Pk}from"@cline/shared";import{nanoid as bk}from"nanoid";f1();var uU={};N(uU,{createLocalTeamStore:()=>_X,SqliteTeamStore:()=>Q8,FileTeamStore:()=>U5});import{appendFileSync as Dk,existsSync as k4,mkdirSync as xU,readdirSync as _k,readFileSync as gU,renameSync as Lk,writeFileSync as Tk}from"node:fs";import{join as fX}from"node:path";import{resolveTeamDataDir as qk}from"@cline/shared/storage";function mU(){return new Date().toISOString()}function UX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function vU($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class U5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??qk()}init(){this.ensureTeamDir()}listTeamNames(){if(!k4(this.teamDirPath))return[];return _k(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>k4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let W=this.readEnvelope($);return W?.teamState?vU(W.teamState):void 0}readHistory($,W=200){let Z=this.historyPath($);if(!k4(Z))return[];return gU(Z,"utf8").split(`
607
607
  `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,W)}loadRuntime($){let W=this.readEnvelope($);return{state:W?.teamState?vU(W.teamState):void 0,teammates:W?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,W){this.ensureTeamSubdir($),Dk(this.historyPath($),`${JSON.stringify({ts:mU(),eventType:W.type,payload:W})}
608
608
  `,"utf8")}persistRuntime($,W,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:mU(),teamState:W,teammates:Z},J=this.statePath($),j=`${J}.tmp`;Tk(j,`${JSON.stringify(Q,null,2)}
609
609
  `,"utf8"),Lk(j,J)}markInProgressRunsInterrupted($,W){let Z=this.readEnvelope($);if(!Z?.teamState?.runs?.length)return[];let Q=Z.teamState.runs.filter((j)=>j.status==="queued"||j.status==="running").map((j)=>j.id);if(Q.length===0)return[];let J=new Date;return Z.teamState={...Z.teamState,runs:Z.teamState.runs.map((j)=>j.status==="queued"||j.status==="running"?{...j,status:"interrupted",error:W,endedAt:J}:j)},this.persistRuntime($,Z.teamState,Z.teammates),Q}ensureTeamDir(){if(!k4(this.teamDirPath))xU(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let W=fX(this.ensureTeamDir(),UX($));if(!k4(W))xU(W,{recursive:!0});return W}statePath($){return fX(this.ensureTeamDir(),UX($),"state.json")}historyPath($){return fX(this.ensureTeamDir(),UX($),"task-history.jsonl")}readEnvelope($){let W=this.statePath($);if(!k4(W))return;try{let Z=JSON.parse(gU(W,"utf8"));if(Z?.version===1&&Z.teamState)return Z}catch{}return}}import{existsSync as Ok,mkdirSync as zk}from"node:fs";import{join as Mk}from"node:path";import{safeJsonParse as cU}from"@cline/shared";import{loadSqliteDb as Rk,nowIso as DX}from"@cline/shared/db";import{resolveDbDataDir as Nk}from"@cline/shared/storage";function Ek(){return Nk()}function I4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function wk($){let W=cU($);if(!Array.isArray(W))return[];let Z=[];for(let Q of W){if(!Q||typeof Q!=="object")continue;let J=Q,j=J.agentId,X=J.rolePrompt;if(typeof j!=="string"||!j.trim())continue;if(typeof X!=="string"||!X.trim())continue;let Y={agentId:j.trim(),rolePrompt:X};if(typeof J.modelId==="string"&&J.modelId.trim())Y.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))Y.maxIterations=Math.max(1,Math.floor(J.maxIterations));Z.push(Y)}return Z}function Ck($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class Q8{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??Ek()}init(){this.getRawDb()}ensureTeamDir(){if(!Ok(this.teamDirPath))zk(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Mk(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Rk(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
@@ -737,7 +737,7 @@ Caused by: ${$.stack}`;return j}async function Xk($){return await new Promise((W
737
737
  reviewed_by = excluded.reviewed_by,
738
738
  reviewed_at = excluded.reviewed_at,
739
739
  version = team_outcome_fragments.version + 1`,[Q,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,W){let Z=I4($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Z]);if(Q.length===0)return[];let J=DX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
740
- WHERE team_name = ? AND status IN ('queued', 'running')`,[W,J,Z]),Q.map((j)=>j.run_id)}handleTeamEvent($,W){this.appendTeamEvent($,W.type,W)}}function _X($={}){try{let W=new Q8($);return W.init(),W}catch{let W=new U5({teamDir:$.teamDir});return W.init(),W}}function PQ($,W){return Pk($,W)}function Sk($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function yk($,W){return $.filter((Z)=>Sk(Z.name,W))}function LX($,W){return p1(yk($,W))}var hk={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 kk($){let W=$.trim().toLowerCase();return hk[W]??W}function Ik($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(kk));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function SQ(){return`team-${bk(5)}`}function bQ($,W,Z,Q,J,j,X,Y){let V=s0[l1({mode:Z})],B=N8(W,Q,Z,J??R8);return LX(T2({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function xk($){return bQ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,gk,$.toolExecutors).some((W)=>W.name==="skills")}var gk=async()=>"";async function mk($){let W=Z0();if(!t1({filePath:W}))return{tools:[]};let Z=new I2({clientFactory:X4({settingsPath:W})}),Q;try{Q=await k2(Z,{filePath:W})}catch(Y){await Z.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=Q.filter((Y)=>Y.disabled!==!0),j=await Promise.allSettled(J.map((Y)=>V4({serverName:Y.name,provider:Z}))),X=[];for(let[Y,V]of j.entries())if(V.status==="fulfilled")X.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:X,shutdown:async()=>{await Z.dispose()}}}function vk($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function ck($){if($===void 0)return!0;switch($){case"session_stop":case"session_complete":case"session_error":case"session_manager_dispose":case"cli_run_shutdown":case"cli_interactive_shutdown":case"cli_interactive_startup_cancelled":case"provider_change":case"acp_shutdown":case"hub_server_stop":case"vscode_webview_dispose":return!0;default:return!1}}function uk($){let W=s0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??W.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??W.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class x4{teamRuntimeEntries=new Map;async build($){let{config:W,hooks:Z,extensions:Q,logger:J,telemetry:j,createSpawnTool:X,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=uk(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,D=R1(),f=[],_=W.teamName?.trim()||SQ(),U=W.sessionId?.trim()||_,R=K.enableSpawnAgent?U4({workspaceRoot:F}):{configs:[],errors:[]},L=R.configs.some((d)=>d.skills!==void 0),q=PQ(B,"rules"),T=PQ(B,"skills"),C=T||L,w=PQ(B,"workflows"),b=PQ(B,"plugins"),P=q||T||w,r=!1,$0=Boolean(V),A0=V,Y8;for(let d of R.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${d.path}: ${d.error.message}`);if(!A0&&(P||L))A0=k$({skills:C?{workspacePath:F,includePluginSkills:b,pluginSkillDirectories:b?$.pluginSkillDirectories:void 0,pluginPaths:W.pluginPaths,cwd:W.cwd}:{workspacePath:F},rules:{workspacePath:W.cwd},workflows:{workspacePath:W.cwd}});if(A0)await A0.start().catch(()=>{});let e$=K.enableTools&&T&&Boolean(A0)&&A0?.hasConfiguredSkills(W.skills)===!0&&xk({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),g0=A0&&P?A0.createExtension({includeRules:q,includeSkills:T,includeWorkflows:w,registerSkillsTool:e$,allowedSkillNames:W.skills}):void 0,$2=g0?[...Q??W.extensions??[],g0]:Q??W.extensions;if(K.enableTools){if(f.push(...bQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let d=await mk(W.logger);f.push(...d.tools),Y8=d.shutdown}}let Y0,G$=K.enableAgentTeams?_X():void 0,L0=G$?.loadRuntime(U),S0=L0?.state,T1=L0?.teammates??[],g=new Map(T1.map((d)=>[d.agentId,d])),z0=W.sessionId||_,I,s=[],y0=!1,V0=M$({providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey??"",baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,maxIterations:W.maxIterations,hooks:Z,extensions:$2,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(R.configs.length>0)f.push(...LX(D4({configProvider:V0,agents:R.configs,createSubAgentTools:(d)=>K.enableTools?Ik(bQ(W.cwd,d.providerId??W.providerId,K.mode,d.modelId??W.modelId,W.toolRoutingRules,A,d.skills!==void 0&&A0?.createSkillsExecutor?A0.createSkillsExecutor(d.skills):void 0,H),d):[],hookErrorMode:W.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(z0))this.teamRuntimeEntries.set(z0,{delegatedAgentConfigProvider:V0});let b5=()=>{if(!K.enableAgentTeams)return;let d=this.teamRuntimeEntries.get(z0)??{delegatedAgentConfigProvider:V0};if(this.teamRuntimeEntries.set(z0,d),Y0=d.runtime,!Y0){if(Y0=new n2({teamName:_,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(B0)=>{if(G(B0),Y0&&G$){if(B0.type==="teammate_spawned"&&B0.teammate?.rolePrompt){let k1={agentId:B0.agentId,rolePrompt:B0.teammate.rolePrompt,modelId:B0.teammate.modelId,maxIterations:B0.teammate.maxIterations};g.set(k1.agentId,k1)}if(B0.type==="teammate_shutdown"&&!ck(B0.reason))g.delete(B0.agentId);G$.handleTeamEvent(U,B0),G$.persistRuntime(U,Y0.exportState(),Array.from(g.values()))}}}),S0)Y0.hydrateState(S0),y0=!0;d.runtime=Y0}if(!r){if(!Y0)return;r=!0;let B0=P8({runtime:Y0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(S0),restoredTeammates:T1,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(k1)=>{s=k1,I?.addTools(k1)},createBaseTools:K.enableTools?()=>bQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:V0});if(y0)Y0.recoverActiveRuns("runtime_recovered");if(B0.restoredFromPersistence)Y?.();f.push(...B0.tools)}return Y0};if(K.enableSpawnAgent&&X){let d=X();f.push({...d,execute:async(B0,k1)=>{return b5(),d.execute(B0,k1)}})}if(K.enableAgentTeams)b5();let V8=LX(f,A),_7=V8.some((d)=>d.name==="submit_and_exit"&&d.lifecycle?.completesRun===!0),S5=K.enableAgentTeams?()=>{let d=this.teamRuntimeEntries.get(z0)?.runtime;if(!d)return;let B0=d.listTasks(),k1=B0.some((K$)=>K$.status==="in_progress"||K$.status==="pending"),PY=d.listRuns({}),U_=PY.some((K$)=>K$.status==="running"||K$.status==="queued");if(k1||U_){let K$=B0.filter((i0)=>i0.status==="in_progress"||i0.status==="pending").map((i0)=>`${i0.id} (${i0.status}): ${i0.title}`).join(", "),bY=PY.filter((i0)=>i0.status==="running"||i0.status==="queued").map((i0)=>`${i0.id} (${i0.status})`).join(", "),L7=[];if(K$)L7.push(`Unfinished tasks: ${K$}`);if(bY)L7.push(`Active runs: ${bY}`);return`[SYSTEM] You still have team obligations. ${L7.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,f_=_7?{requireCompletionTool:!0,...S5?{completionGuard:S5}:{}}:S5?{completionGuard:S5}:void 0;return{tools:V8,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:Y0,teamRestoredFromPersistence:Boolean(S0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(z0)?.delegatedAgentConfigProvider??V0,extensions:$2,completionPolicy:f_,registerLeadAgent:(d)=>{if(I=d,s.length>0)d.addTools(p1(s,[...D]))},shutdown:async(d)=>{if(vk(Y0,d),this.teamRuntimeEntries.delete(z0),await Y8?.(),!$0)A0?.stop()}}}}var pU={};N(pU,{requestDesktopToolApproval:()=>qX});import{mkdir as dk,readFile as lk,unlink as pk,writeFile as rk}from"node:fs/promises";import{join as lU}from"node:path";function ik($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function nk($){return new Promise((W)=>setTimeout(W,$))}async function TX($){try{await pk($)}catch{}}async function qX($,W={}){let Z=W.approvalDir?.trim(),Q=W.sessionId?.trim();if(!Z||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await dk(Z,{recursive:!0});let J=ik(`${$.toolCallId}`),j=lU(Z,`${Q}.request.${J}.json`),X=lU(Z,`${Q}.decision.${J}.json`),Y=W.nowIso??(()=>new Date().toISOString());await rk(j,`${JSON.stringify({requestId:J,sessionId:Q,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
740
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[W,J,Z]),Q.map((j)=>j.run_id)}handleTeamEvent($,W){this.appendTeamEvent($,W.type,W)}}function _X($={}){try{let W=new Q8($);return W.init(),W}catch{let W=new U5({teamDir:$.teamDir});return W.init(),W}}function PQ($,W){return Pk($,W)}function Sk($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function yk($,W){return $.filter((Z)=>Sk(Z.name,W))}function LX($,W){return p1(yk($,W))}var hk={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 kk($){let W=$.trim().toLowerCase();return hk[W]??W}function Ik($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(kk));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function SQ(){return`team-${bk(5)}`}function bQ($,W,Z,Q,J,j,X,Y){let V=s0[l1({mode:Z})],B=N8(W,Q,Z,J??R8);return LX(T2({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function xk($){return bQ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,gk,$.toolExecutors).some((W)=>W.name==="skills")}var gk=async()=>"";async function mk($){let W=Z0();if(!t1({filePath:W}))return{tools:[]};let Z=new I2({clientFactory:X4({settingsPath:W})}),Q;try{Q=await k2(Z,{filePath:W})}catch(Y){await Z.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=Q.filter((Y)=>Y.disabled!==!0),j=await Promise.allSettled(J.map((Y)=>V4({serverName:Y.name,provider:Z}))),X=[];for(let[Y,V]of j.entries())if(V.status==="fulfilled")X.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:X,shutdown:async()=>{await Z.dispose()}}}function vk($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function ck($){if($===void 0)return!0;switch($){case"session_stop":case"session_complete":case"session_error":case"session_manager_dispose":case"cli_run_shutdown":case"cli_interactive_shutdown":case"cli_interactive_startup_cancelled":case"provider_change":case"acp_shutdown":case"hub_server_stop":case"vscode_webview_dispose":return!0;default:return!1}}function uk($){let W=s0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??W.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??W.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class x4{teamRuntimeEntries=new Map;async build($){let{config:W,hooks:Z,extensions:Q,logger:J,telemetry:j,createSpawnTool:X,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=uk(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,D=R1(),f=[],_=W.teamName?.trim()||SQ(),U=W.sessionId?.trim()||_,R=K.enableSpawnAgent?U4({workspaceRoot:F}):{configs:[],errors:[]},L=R.configs.some((d)=>d.skills!==void 0),q=PQ(B,"rules"),T=PQ(B,"skills"),w=T||L,E=PQ(B,"workflows"),b=PQ(B,"plugins"),P=q||T||E,r=!1,$0=Boolean(V),A0=V,Y8;for(let d of R.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${d.path}: ${d.error.message}`);if(!A0&&(P||L))A0=k$({skills:w?{workspacePath:F,includePluginSkills:b,pluginSkillDirectories:b?$.pluginSkillDirectories:void 0,pluginPaths:W.pluginPaths,cwd:W.cwd}:{workspacePath:F},rules:{workspacePath:W.cwd},workflows:{workspacePath:W.cwd}});if(A0)await A0.start().catch(()=>{});let e$=K.enableTools&&T&&Boolean(A0)&&A0?.hasConfiguredSkills(W.skills)===!0&&xk({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),g0=A0&&P?A0.createExtension({includeRules:q,includeSkills:T,includeWorkflows:E,registerSkillsTool:e$,allowedSkillNames:W.skills}):void 0,$2=g0?[...Q??W.extensions??[],g0]:Q??W.extensions;if(K.enableTools){if(f.push(...bQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let d=await mk(W.logger);f.push(...d.tools),Y8=d.shutdown}}let Y0,G$=K.enableAgentTeams?_X():void 0,L0=G$?.loadRuntime(U),S0=L0?.state,T1=L0?.teammates??[],g=new Map(T1.map((d)=>[d.agentId,d])),z0=W.sessionId||_,I,s=[],y0=!1,V0=M$({providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey??"",baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,maxIterations:W.maxIterations,hooks:Z,extensions:$2,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(R.configs.length>0)f.push(...LX(D4({configProvider:V0,agents:R.configs,createSubAgentTools:(d)=>K.enableTools?Ik(bQ(W.cwd,d.providerId??W.providerId,K.mode,d.modelId??W.modelId,W.toolRoutingRules,A,d.skills!==void 0&&A0?.createSkillsExecutor?A0.createSkillsExecutor(d.skills):void 0,H),d):[],hookErrorMode:W.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(z0))this.teamRuntimeEntries.set(z0,{delegatedAgentConfigProvider:V0});let b5=()=>{if(!K.enableAgentTeams)return;let d=this.teamRuntimeEntries.get(z0)??{delegatedAgentConfigProvider:V0};if(this.teamRuntimeEntries.set(z0,d),Y0=d.runtime,!Y0){if(Y0=new n2({teamName:_,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(B0)=>{if(G(B0),Y0&&G$){if(B0.type==="teammate_spawned"&&B0.teammate?.rolePrompt){let k1={agentId:B0.agentId,rolePrompt:B0.teammate.rolePrompt,modelId:B0.teammate.modelId,maxIterations:B0.teammate.maxIterations};g.set(k1.agentId,k1)}if(B0.type==="teammate_shutdown"&&!ck(B0.reason))g.delete(B0.agentId);G$.handleTeamEvent(U,B0),G$.persistRuntime(U,Y0.exportState(),Array.from(g.values()))}}}),S0)Y0.hydrateState(S0),y0=!0;d.runtime=Y0}if(!r){if(!Y0)return;r=!0;let B0=P8({runtime:Y0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(S0),restoredTeammates:T1,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(k1)=>{s=k1,I?.addTools(k1)},createBaseTools:K.enableTools?()=>bQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:V0});if(y0)Y0.recoverActiveRuns("runtime_recovered");if(B0.restoredFromPersistence)Y?.();f.push(...B0.tools)}return Y0};if(K.enableSpawnAgent&&X){let d=X();f.push({...d,execute:async(B0,k1)=>{return b5(),d.execute(B0,k1)}})}if(K.enableAgentTeams)b5();let V8=LX(f,A),_7=V8.some((d)=>d.name==="submit_and_exit"&&d.lifecycle?.completesRun===!0),S5=K.enableAgentTeams?()=>{let d=this.teamRuntimeEntries.get(z0)?.runtime;if(!d)return;let B0=d.listTasks(),k1=B0.some((K$)=>K$.status==="in_progress"||K$.status==="pending"),PY=d.listRuns({}),U_=PY.some((K$)=>K$.status==="running"||K$.status==="queued");if(k1||U_){let K$=B0.filter((i0)=>i0.status==="in_progress"||i0.status==="pending").map((i0)=>`${i0.id} (${i0.status}): ${i0.title}`).join(", "),bY=PY.filter((i0)=>i0.status==="running"||i0.status==="queued").map((i0)=>`${i0.id} (${i0.status})`).join(", "),L7=[];if(K$)L7.push(`Unfinished tasks: ${K$}`);if(bY)L7.push(`Active runs: ${bY}`);return`[SYSTEM] You still have team obligations. ${L7.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,f_=_7?{requireCompletionTool:!0,...S5?{completionGuard:S5}:{}}:S5?{completionGuard:S5}:void 0;return{tools:V8,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:Y0,teamRestoredFromPersistence:Boolean(S0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(z0)?.delegatedAgentConfigProvider??V0,extensions:$2,completionPolicy:f_,registerLeadAgent:(d)=>{if(I=d,s.length>0)d.addTools(p1(s,[...D]))},shutdown:async(d)=>{if(vk(Y0,d),this.teamRuntimeEntries.delete(z0),await Y8?.(),!$0)A0?.stop()}}}}var pU={};N(pU,{requestDesktopToolApproval:()=>qX});import{mkdir as dk,readFile as lk,unlink as pk,writeFile as rk}from"node:fs/promises";import{join as lU}from"node:path";function ik($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function nk($){return new Promise((W)=>setTimeout(W,$))}async function TX($){try{await pk($)}catch{}}async function qX($,W={}){let Z=W.approvalDir?.trim(),Q=W.sessionId?.trim();if(!Z||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await dk(Z,{recursive:!0});let J=ik(`${$.toolCallId}`),j=lU(Z,`${Q}.request.${J}.json`),X=lU(Z,`${Q}.decision.${J}.json`),Y=W.nowIso??(()=>new Date().toISOString());await rk(j,`${JSON.stringify({requestId:J,sessionId:Q,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
741
741
  `,"utf8");let V=W.timeoutMs??300000,B=W.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await lk(X,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([TX(X),TX(j)]),F}catch{}await nk(B)}return await TX(j),{approved:!1,reason:"Tool approval request timed out"}}f1();var jD={};N(jD,{uninstallMarketplaceSkill:()=>vQ,uninstallMarketplacePlugin:()=>cQ,uninstallMarketplaceMcpServerFromSettings:()=>gQ,uninstallMarketplaceEntry:()=>xX,resolveMarketplaceMcpServerName:()=>O5,marketplaceEntryKey:()=>IX,isMarketplaceSkillInstalled:()=>mQ,getMarketplaceSkillCandidates:()=>z5,getGlobalMarketplaceSkillPaths:()=>M5,findInstalledGlobalMarketplaceSkillName:()=>R5});import{spawn as bI}from"node:child_process";import{existsSync as QD,rmSync as SI}from"node:fs";import{homedir as yI,platform as hI}from"node:os";import{dirname as kI,join as ZD}from"node:path";import{resolveClineDir as II,resolveMcpSettingsPath as xI}from"@cline/shared/storage";var iU={};N(iU,{parseMcpInstallArgs:()=>D5,installMcpServer:()=>OX,buildMcpInstallTransport:()=>yQ});function ak($){let W=($??"stdio").trim();if(W==="http"||W==="streamable-http")return"streamableHttp";if(W==="stdio"||W==="sse"||W==="streamableHttp")return W;throw Error(`Unsupported MCP transport "${W}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function ok($){let W;try{W=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(W.protocol!=="http:"&&W.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function sk($){let W=$.indexOf(":");if(W<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Z=$.slice(0,W).trim(),Q=$.slice(W+1).trim();if(!Z||!Q)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Z))throw Error(`Invalid MCP header name "${Z}".`);return[Z,Q]}function tk($){let W=$.indexOf("<");return W>=0&&$.indexOf(">",W+1)>W+1}function rU($){let W=[...$.headers??[]],Z=[],Q=$.transport,J=$.targetArgs??[];for(let j=0;j<J.length;j++){let X=J[j];if($.parseTransport&&X==="--transport"){let Y=J[j+1];if(!Y)throw Error("--transport requires a value");Q=Y,j++;continue}if($.parseTransport&&X?.startsWith("--transport=")){Q=X.slice(12);continue}if(X==="--header"){let Y=J[j+1];if(!Y)throw Error("--header requires a value");W.push(Y),j++;continue}if(X?.startsWith("--header=")){W.push(X.slice(9));continue}Z.push(X)}return{headers:W,targetArgs:Z,transport:Q}}function ek($){if($.length===0)return{warnings:[]};let W={},Z=[];for(let Q of $){let[J,j]=sk(Q);if(W[J]=j,tk(j))Z.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:W,warnings:Z}}function yQ($){let W=$.name.trim();if(!W)throw Error("MCP server name is required");let{headers:Z,targetArgs:Q,transport:J}=rU({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),j=ak(J),{headers:X,warnings:Y}=ek(Z);if(j==="stdio"){if(Z.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=Q;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:W,transport:{type:j,command:B,args:H.length>0?H:void 0},warnings:Y}}if(Q.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=Q[0]?.trim()??"";return ok(V),{name:W,transport:X?{type:j,url:V,headers:X}:{type:j,url:V},warnings:Y}}function D5($){let[W,...Z]=$;if(!W)throw Error("Marketplace MCP install args must start with a server name.");return{name:W,...rU({parseTransport:!0,targetArgs:Z})}}function $I($,W,Z){U1(Z,(Q)=>{let J=Q.mcpServers,j=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};j[$]={transport:W},Q.mcpServers=j})}function OX($){let{name:W,transport:Z,warnings:Q}=yQ($);return $I(W,Z,$.settingsPath??Z0()),{name:W,status:"installed",transport:Z,warnings:Q}}f1();var WD={};N(WD,{uninstallPlugin:()=>T5});import{existsSync as m4,readdirSync as BI,readFileSync as HI,rmdirSync as GI,rmSync as KI,statSync as FI}from"node:fs";import{basename as Y1,dirname as o$,extname as AI,isAbsolute as fI,join as V$,relative as UI,resolve as g4,sep as EX}from"node:path";import{discoverPluginModulePaths as DI,resolvePluginConfigSearchPaths as _I}from"@cline/shared/storage";var sU={};N(sU,{syncPluginMcpServersToSettings:()=>_5,removePluginMcpServersFromSettings:()=>L5,disablePluginMcpServersInSettings:()=>NX});import{existsSync as WI,mkdirSync as ZI,readFileSync as QI,writeFileSync as JI}from"node:fs";import{dirname as aU,isAbsolute as jI,relative as XI,resolve as nU}from"node:path";function J8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function hQ($,W){let Z=XI(nU($),nU(W));return Z===""||!Z.startsWith("..")&&!jI(Z)}function zX($){if(!WI($))return{mcpServers:{}};try{let W=JSON.parse(QI($,"utf8"));if(J8(W))return W}catch(W){throw Error(`Invalid MCP settings at "${$}": ${W instanceof Error?W.message:String(W)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function MX($){if(J8($.mcpServers))return{...$.mcpServers};return{}}function RX($,W,Z){ZI(aU($),{recursive:!0}),JI($,`${JSON.stringify({...W,mcpServers:Z},null,2)}
742
742
  `,"utf8")}function oU($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((W)=>W.trim()).filter((W)=>W.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((W)=>W.trim()).filter((W)=>W.length>0))]}}function IQ($){if(!J8($))return;let W=$.metadata;return J8(W)?W:void 0}function kQ($,W){let Z=IQ($);if(!Z||Z.source!=="plugin")return!1;let Q=typeof Z.pluginName==="string"?Z.pluginName:typeof Z.plugin==="string"?Z.plugin:void 0,J=typeof Z.pluginPath==="string"?Z.pluginPath:void 0;if(W.pluginName&&Q===W.pluginName){if(!W.pluginPath||J===W.pluginPath)return!0}if(J&&W.pluginPath&&(J===W.pluginPath||hQ(W.pluginPath,J)||hQ(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||hQ(j,J)||hQ(J,j)))return!0;return!1}function YI($){let W=J8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:aU($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function VI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await v8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Z=[],Q=[],J=(W.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of W.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Z.push({pluginName:j.name,pluginPath:X});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await j.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:X,pluginName:j.name,message:B instanceof Error?B.message:String(B)});continue}Z.push({pluginName:j.name,pluginPath:X});for(let B of Y)Q.push({pluginName:j.name,pluginPath:X,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Z,servers:Q,failures:J}}finally{await W.shutdown().catch(()=>{})}}async function _5($){let W=$.settingsPath??Z0(),Z={mutations:[],failures:[]},Q;try{Q=await VI($)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}Z.failures.push(...Q.failures);let J;try{J=zX(W)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}let j=MX(J),X=new Map,Y=new Map;for(let B of Q.plugins)X.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=gZ(Q.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(B.name)X.get(H.pluginPath)?.add(B.name);if(!B.registration){Z.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=j[B.registration.name];if(G!==void 0){if(!kQ(G,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[B.registration.name]=YI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:J8(G)?G:void 0}),Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,H]of Object.entries(j)){let G=IQ(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&kQ(H,{pluginPath:K})&&!F.has(B))delete j[B],Z.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:Y.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Z.mutations.some((B)=>B.action!=="skipped"))try{RX(W,J,j)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Z}function NX($){let W=$.settingsPath??Z0(),Z;try{Z=zX(W)}catch{return[]}let Q=MX(Z),J=oU($),j=[];for(let[X,Y]of Object.entries(Q)){if(!J8(Y)||!kQ(Y,J))continue;let V=IQ(Y);Q[X]={...Y,disabled:!0},j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(j.length>0)RX(W,Z,Q);return j}function L5($){let W=$.settingsPath??Z0(),Z;try{Z=zX(W)}catch{return[]}let Q=MX(Z),J=oU($),j=[];for(let[X,Y]of Object.entries(Q)){if(!kQ(Y,J))continue;let V=IQ(Y);delete Q[X],j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(j.length>0)RX(W,Z,Q);return j}var SX="_installed",LI="package",TI=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function wX($){return $.trim().toLowerCase()}function L1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function qI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function CX($){let W=AI($);return W?$.slice(0,-W.length):$}function PX($){if(!m4($))return;try{let W=JSON.parse(HI($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function yX($,W){let Z=UI(W,$);return Z===""||!Z.startsWith("..")&&!fI(Z)}function tU($){let Z=g4($).split(EX),Q=Z.lastIndexOf(SX);if(Q<0)return;let J=Z[Q+1];if(!J)return;let j=TI.get(J)??1,X=Q+2+j;if(Z.length<X)return;let Y=Z.slice(0,X).join(EX)||EX;return m4(Y)?Y:void 0}function xQ($){try{return BI($,{withFileTypes:!0})}catch{return[]}}function OI($){let W=V$($,SX);if(!m4(W))return[];let Z=[];for(let Q of xQ(W)){if(!Q.isDirectory())continue;let J=V$(W,Q.name);if(Q.name==="git"){for(let j of xQ(J)){if(!j.isDirectory())continue;let X=V$(J,j.name);for(let Y of xQ(X))if(Y.isDirectory())Z.push(V$(X,Y.name))}continue}for(let j of xQ(J))if(j.isDirectory())Z.push(V$(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function eU($){try{return DI($)}catch{return[]}}function bX($){let W=eU($),Z=new Set;L1(Z,Y1($)),L1(Z,qI(Y1($))),L1(Z,PX(V$($,"package.json"))),L1(Z,PX(V$($,LI,"package.json")));for(let Q of W)L1(Z,Y1(Q)),L1(Z,CX(Y1(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function zI($,W){let Z=g4($),Q=W.find((X)=>yX(Z,X));if(!Q)return;let J=o$(Z);while(J!==Q&&J!==o$(J)){if(m4(V$(J,"package.json")))return J;J=o$(J)}let j=Y1(Z);if((j==="index.ts"||j==="index.js")&&o$(Z)!==Q)return o$(Z);return Z}function $D($,W){let Z=zI($,W);if(!Z)return;let Q=new Set;return L1(Q,Y1($)),L1(Q,CX(Y1($))),L1(Q,Y1(Z)),L1(Q,CX(Y1(Z))),L1(Q,PX(V$(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function MI($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return _I(W).filter((Z)=>m4(Z))}function RI($){let W=new Map;for(let Z of $){for(let Q of OI(Z))W.set(Q,bX(Q));for(let Q of eU(Z)){let J=tU(Q);if(J){if(!W.has(J))W.set(J,bX(J));continue}let j=$D(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function NI($,W){let Z=wX(W);if(!Z)return!1;if(wX($.installPath)===Z)return!0;return $.names.some((Q)=>wX(Q)===Z)}function EI($,W,Z){let Q=g4($);for(let j of W){if(yX(Q,j.installPath))return j;if(j.entryPaths.some((X)=>g4(X)===Q))return j}let J=tU(Q);if(J)return bX(J);if(m4(Q))return $D(Q,Z);return}function wI($){let W=R0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=g4(J);if(yX(j,$.installPath))return!1;return!$.entryPaths.some((X)=>g4(X)===j)});if(Q.length===Z.length)return;M1({...W,disabledPlugins:Q})}function CI($){let W=o$($);while(W!==o$(W)&&Y1(W)!==SX){try{GI(W)}catch{return}W=o$(W)}}function PI($){return`${$.names[0]??Y1($.installPath)} at ${$.installPath}`}async function T5($){let W=MI($),Z=RI(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=EI(Q,Z,W),!j)throw Error(`No plugin found at ${Q}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let Y=Z.filter((V)=>NI(V,J));if(Y.length===0)throw Error(`No plugin found matching "${J}"`);if(Y.length>1)throw Error(`Multiple plugins match "${J}": ${Y.map(PI).join(", ")}`);j=Y[0]}let X=FI(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(L5({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),KI(j.installPath,{recursive:X.isDirectory(),force:!0}),wI(j),j.installed)CI(j.installPath);return{name:J||j.names[0]||Y1(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var hX=120000,q5=12000,gI=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,mI=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,vI=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,cI=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function kX($){return $.install?.args??[]}function uI(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||yI()}function dI($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function lI($){return dI($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function JD($){return $.split(/\r?\n/).map((W)=>{if(!gI.test(W))return W;return W.replace(mI,"$1[redacted]").replace(vI,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(cI,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
743
743
  `).slice(-q5)}function pI($){let W=JD([$.stdout,$.stderr].filter(Boolean).join(`
@@ -757,7 +757,7 @@ ${V}`:""}`);let B=aI($);if(mQ($))throw Error(`Skill uninstall completed, but ${$
757
757
  `,"utf8"),xg(Z,this.statePath)}appendTaskHistory($){let W={};switch($.type){case"team_task_updated":W=$.task;break;case"team_message":W={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":W={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":W={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":W={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":W={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),hg(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:W})}
758
758
  `,"utf8")}ensureDir(){if(!BY(this.dirPath))kg(this.dirPath,{recursive:!0})}hasPersistableState($){let W=$.exportState();if(this.teammateSpecs.size>0)return!0;if(W.members.some((Z)=>Z.role==="teammate"))return!0;return W.tasks.length>0||W.mailbox.length>0||W.missionLog.length>0}clearPersistedState(){if(BY(this.statePath))gg(this.statePath)}}var iD={};N(iD,{ChatViewStateSchema:()=>GY,ChatSummarySchema:()=>A7,ChatSessionStatusSchema:()=>G7,ChatSessionConfigSchema:()=>H7,ChatMessageSchema:()=>F7,ChatMessageRoleSchema:()=>K7});import{z as k}from"zod";var H7=k.object({workspaceRoot:k.string().min(1),cwd:k.string().optional(),provider:k.string().min(1),model:k.string().min(1),mode:k.enum(["act","plan"]).default("act"),apiKey:k.string(),systemPrompt:k.string().optional(),rules:k.string().optional(),maxIterations:k.number().int().positive().optional(),enableTools:k.boolean(),enableSpawn:k.boolean().optional(),enableTeams:k.boolean().optional(),autoApproveTools:k.boolean().optional(),missionStepInterval:k.number().int().positive().optional(),missionTimeIntervalMs:k.number().int().positive().optional()}),G7=k.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),K7=k.enum(["user","assistant","tool","system","status","error"]),F7=k.object({id:k.string().min(1),sessionId:k.string().nullable(),role:K7,content:k.string(),createdAt:k.number().int().nonnegative(),meta:k.object({stream:k.enum(["stdout","stderr"]).optional(),toolName:k.string().optional(),iteration:k.number().int().nonnegative().optional(),agentId:k.string().optional(),conversationId:k.string().optional(),hookEventName:k.string().optional(),inputTokens:k.number().int().nonnegative().optional(),outputTokens:k.number().int().nonnegative().optional(),checkpoint:k.object({ref:k.string(),createdAt:k.number().int().nonnegative(),runCount:k.number().int().positive(),kind:k.enum(["stash","commit"]).optional()}).optional()}).optional()}),A7=k.object({toolCalls:k.number().int().nonnegative(),tokensIn:k.number().int().nonnegative(),tokensOut:k.number().int().nonnegative()}),GY=k.object({sessionId:k.string().nullable(),status:G7,config:H7,messages:k.array(F7),rawTranscript:k.string(),error:k.string().nullable(),summary:A7});var nD={};N(nD,{CORE_BUILD_VERSION:()=>w5});var w5=k8;import{Agent as gm,createAgentRuntime as mm}from"@cline/agents";var aD={};N(aD,{fetchClineRecommendedModels:()=>FY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>f7});import{getClineEnvironmentConfig as ug}from"@cline/shared";var dg=5000,f7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function lg($){return{recommended:$.recommended.map((W)=>({...W,tags:[...W.tags]})),free:$.free.map((W)=>({...W,tags:[...W.tags]})),clinePass:$.clinePass.map((W)=>({...W,tags:[...W.tags]}))}}function KY($){if(!$||typeof $!=="object")return null;let W=$;if(typeof W.id!=="string"||W.id.length===0)return null;return{id:W.id,name:typeof W.name==="string"&&W.name.length>0?W.name:W.id,description:typeof W.description==="string"?W.description:"",tags:Array.isArray(W.tags)?W.tags.filter((Z)=>typeof Z==="string"):[]}}function pg($){if(!$||typeof $!=="object")return null;let W=$,Z=Array.isArray(W.recommended)?W.recommended:[],Q=Array.isArray(W.free)?W.free:[],J=Array.isArray(W.clinePass)?W.clinePass:[],j=Z.map(KY).filter((V)=>V!==null),X=Q.map(KY).filter((V)=>V!==null),Y=J.map(KY).filter((V)=>V!==null);if(j.length===0&&X.length===0&&Y.length===0)return null;return{recommended:j,free:X,clinePass:Y}}function rg($){let W=$.baseUrl?.trim();if(W)return W;let Z=ug().apiBaseUrl;try{return($.providerSettingsManager??new V1).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function ig($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function FY($={}){try{let W=rg($),Z=$.fetchImpl??fetch,Q=await ig(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??dg);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=pg(J);if(j)return j}catch{}return lg(f7)}var oD={};N(oD,{loadLlmsConfigFromFile:()=>fY,defineLlmsConfig:()=>AY});import{readFile as ng}from"node:fs/promises";import ag from"node:path";function AY($){return $}async function fY($){let W=ag.resolve($),Z=await ng(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let j=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${W}": ${j}`)}return og(Q,W)}function og($,W){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${W}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${W}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${W}": "providers" cannot be empty.`);return $}var Z_={};N(Z_,{createLlmsSdk:()=>DY,DefaultLlmsSdk:()=>C5});import{BUILT_IN_PROVIDER_IDS as eD,createHandler as eg,createHandlerAsync as $m,getProviderCollection as Wm,hasProvider as $_,registerAsyncHandler as Zm,registerHandler as Qm,registerModel as Jm,registerProvider as W_}from"@cline/llms";function sD($){return $?{...$}:{}}function sg($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function tg($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function tD($){let W=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:W,defaultModel:$.collection.provider.defaultModelId,modelCount:W.length}}class UY{providers=new Map;register($){tg($.id,$.models);let W=$.defaultModel??$.models[0];if(!W)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(W))throw Error(`Default model "${W}" is not included in configured models for "${$.id}".`);let Z=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Z?.models??[],...$.models]),defaultModel:W,defaults:{...Z?.defaults??{},...sD($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:sg($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...sD($.settings)}})}registerModel($,W){let Z=this.providers.get($);if(!Z){this.providers.set($,{id:$,models:new Set([W]),defaultModel:W,defaults:{}});return}Z.models.add(W)}createHandlerConfig($){let W=this.require($.providerId),Z=$.modelId??W.defaultModel;if(!W.models.has(Z))throw Error(`Model "${Z}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Z,...W.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,W){return this.providers.get($)?.models.has(W)??!1}require($){let W=this.providers.get($);if(!W)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return W}}class C5{configuredProviders=new UY;constructor($){this.applyConfig($)}createHandler($){return eg(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return $m(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(W_($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Qm($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Zm($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let W=$.exposeModels??Object.keys($.models),Z=$.defaultModel??W[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);W_({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Z,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:W,defaultModel:Z,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){Jm($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...eD]}async getBuiltInProviders(){return(await Promise.all(eD.map((W)=>Wm(W)))).filter((W)=>W!==void 0).map((W)=>tD({collection:W}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,W){return this.configuredProviders.hasModel($,W)}applyConfig($){for(let W of $.providers)this.configuredProviders.registerSelectionConfig(W);for(let W of $.models??[])this.registerModel(W);for(let W of $.customProviders??[])this.registerProvider(W);for(let W of this.configuredProviders.list()){let Z=$_(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&$_(Q);if(!Z&&!J)throw Error(`Provider "${W.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function DY($){return new C5($)}mj();async function jm(){return Promise.resolve().then(() => (NQ(),kU))}function rm(){return new Date().toISOString()}var im="cline",nm="cline-pass";function am($){if(X_($)!=="providers.json")return;let W=LY($);if(X_(W)!=="settings")return;return LY(W)}class V1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??pm(),this.dataDir=$.dataDir??am(this.filePath),this.dataDir||!$.filePath)E5({providerSettingsManager:this,dataDir:this.dataDir});if(bD(this),W7(this.read()),_Y(this.filePath))try{j_(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!_Y(this.filePath))return h$();try{let $=cm(this.filePath,"utf8"),W=JSON.parse($),Z=a8.safeParse(W);if(Z.success){W7(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return W0(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${M0(Q?.accessToken)} clineRefreshTokenHash=${M0(Q?.refreshToken)}`),Z.data}}catch{}return h$()}write($){let W=a8.parse($),Z=LY(this.filePath);if(!_Y(Z))vm(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{lm(Q,`${JSON.stringify(W,null,2)}
759
759
  `,{encoding:"utf8",mode:384}),um(Q,this.filePath)}catch(J){throw dm(Q,{force:!0}),J}try{j_(this.filePath,384)}catch{}W7(W)}saveProviderSettings($,W={}){let Z=n8.parse($),Q=this.read(),J=Z.provider,j=W.setLastUsed!==!1,X=Q.providers[J],Y=W.tokenSource??X?.tokenSource??"manual",V={...Q,providers:{...Q.providers,[J]:{settings:Z,updatedAt:rm(),tokenSource:Y}},lastUsedProvider:j?J:Q.lastUsedProvider};this.write(V);let B=Q.providers.cline?.settings?.auth,H=Z.provider==="cline"?Z.auth:V.providers.cline?.settings?.auth,G=!!B?.accessToken&&!H?.accessToken;return W0(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,W){let Z=$.providers[W]?.settings,J=H0(W)?.storageProviderId;if(!J||J===W)return Z;let j=$.providers[J]?.settings;if(!j)return Z;return n8.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Z??{},provider:W})}getProviderSettings($){let W=this.read();return this.resolveProviderSettings(W,$)}resolveLastUsedProviderId($,W){let Z=$.lastUsedProvider;if(Z===nm&&W.isClinePassEnabled===!1)return im;return Z}getLastUsedProviderSettings($={}){let W=this.read(),Z=this.resolveLastUsedProviderId(W,$);if(!Z)return;return this.resolveProviderSettings(W,Z)}getProviderConfig($,W){let Z=this.getProviderSettings($);if(!Z)return;return e0(Z,W)}getLastUsedProviderConfig($={}){let W=this.getLastUsedProviderSettings($);if(!W)return;return e0(W,$)}async refreshCatalog(){try{await r8({})}catch{}}}T0();f4();function om($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class U7 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class TY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new V1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let W=H0($.providerId);if(!W)return null;return this.resolveWithSingleFlight(W.providerId,W.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,W,Z=!1){let Q=this.refreshInFlight.get(W);if(Q)return Q;let J=this.resolveProviderApiKeyInternal($,W,Z).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(W)});return this.refreshInFlight.set(W,J),J}async resolveProviderApiKeyInternal($,W,Z){let Q=H0($);if(!Q)return null;let J=this.providerSettingsManager.getProviderSettings(W);if(!J)return W0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=W6($,J);if(!j)return W0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;W0(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${M0(j.access)} refreshTokenHash=${M0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw W0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new U7($);let Y=J2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!om(J.auth,Y.auth);if(V)W0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else W0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}import{normalizeUserInput as sm}from"@cline/shared";import{nanoid as tm}from"nanoid";class Y_{list($){return $?B1($):[]}update($,W){if(!$)return{sessionId:W.sessionId,prompts:[],updated:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((V)=>V.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:B1($),updated:!1};let J=$.pendingPrompts[Q];if(!J)return{sessionId:W.sessionId,prompts:B1($),updated:!1};let j=W.prompt===void 0?J.prompt:sm(W.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=W.delivery??J.delivery,Y={...J,prompt:j,mode:W.mode??J.mode,delivery:X};return $.pendingPrompts.splice(Q,1),em($,Y,Q,J.delivery),{sessionId:W.sessionId,prompts:B1($),prompt:D7(Y),updated:!0}}delete($,W){if(!$)return{sessionId:W.sessionId,prompts:[],removed:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((j)=>j.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:B1($),removed:!1};let[J]=$.pendingPrompts.splice(Q,1);return{sessionId:W.sessionId,prompts:B1($),prompt:J?D7(J):void 0,removed:!0}}enqueue($,W){let{prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X}=W,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Z);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Z,mode:Q??V.mode,userImages:j??V.userImages,userFiles:X??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${tm(5)}`,prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return B1($)}consumeSteer($){let W=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(W<0)return{prompts:B1($)};let[Z]=$.pendingPrompts.splice(W,1);return{entry:Z,prompts:B1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:B1($)}}requeueFront($,W){return $.pendingPrompts.unshift(W),B1($)}clear($){return $.pendingPrompts.length=0,[]}}class qY{deps;service=new Y_;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Z=this.service.update(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}delete($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Z=this.service.delete(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}enqueue($,W){let Z=this.deps.getSession($);if(!Z||Z.aborting)return;this.service.enqueue(Z,W),this.emitPrompts(Z),this.scheduleDrain($,Z)}consumeSteer($){let W=this.deps.getSession($);if(!W)return;let{entry:Z}=this.service.consumeSteer(W);if(!Z)return;return this.emitPrompts(W),this.emitSubmitted(W,Z),Z}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:B1($)}})}scheduleDrain($,W){if(W.pendingPrompts.length===0||W.aborting||W.drainingPendingPrompts||!W.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let W=this.deps.getSession($);if(!W)return;if(W.aborting||W.drainingPendingPrompts)return;if(!W.agent.canStartRun())return;let{entry:Z}=this.service.shiftNext(W);if(!Z)return;this.emitPrompts(W),this.emitSubmitted(W,Z),W.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:Z.prompt,...Z.mode?{mode:Z.mode}:{},userImages:Z.userImages,userFiles:Z.userFiles})}catch{Q=!1,this.service.requeueFront(W,Z),this.emitPrompts(W)}finally{if(W.drainingPendingPrompts=!1,Q&&W.pendingPrompts.length>0&&W.status!=="failed"&&W.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,W){let Z=D7(W);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}})}}function D7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function B1($){return $.pendingPrompts.map(D7)}function em($,W,Z,Q){if(W.delivery==="steer")$.pendingPrompts.unshift(W);else if(Q==="steer")$.pendingPrompts.push(W);else $.pendingPrompts.splice(Z,0,W)}T0();class zY{deps;constructor($){this.deps=$}dispatchAgentEvent($,W,Z){let Q=this.deps.getSession($),J={sessionId:$,config:W,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=C3(Z),X=!!Q&&(!j.agentId||j.agentId===OY(Q.agent));P3(J,Z,X?{isPrimaryAgentEvent:!0,agentId:OY(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,W){let Z=this.deps.getSession($);if(Z){if(Lj(Z,W),W.type==="agent_event"){let Q={sessionId:$,config:Z.config,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};P3(Q,W.event,{agentId:W.agentId,teamRole:"teammate",teamAgentId:W.agentId,isPrimaryAgentEvent:!1})}if(W.type==="teammate_spawned"){let Q=i1({agentId:W.teammate.runtimeAgentId??W.agentId,conversationId:W.teammate.conversationId,parentAgentId:W.teammate.parentAgentId,createdByAgentId:OY(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:W.agentId});if(Q)A$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await Tj($,W,this.deps.invokeBackendOptional),Z)qj(Z,$,W,this.deps.emit)}async handlePluginEvent($,W,Z){if(W.name==="plugin_log"){this.handlePluginLog($,W.payload);return}if(W.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Z;if(!V)return;let B=W.payload&&typeof W.payload==="object"?W.payload:void 0;if(!B)return;await V.ingestEvent(B);return}if(W.name!=="steer_message"&&W.name!=="queue_message"&&W.name!=="pending_prompt")return;let Q=W.payload&&typeof W.payload==="object"?W.payload:void 0,J=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,j=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!j)return;let X=W.name==="steer_message"?"steer":W.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:j,delivery:X})}handlePluginLog($,W,Z){let Q=this.deps.getSession($),J=Z??Q?.config.extensionContext?.logger??Q?.config.logger;if(!J||!W||typeof W!=="object")return;let j=W,X=typeof j.message==="string"?j.message:"";if(!X)return;let Y=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(Y.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)Y.pluginName=j.pluginName;if(j.level==="debug"){J.debug(X,Y);return}if(j.level==="error"){if(J.error)J.error(X,Y);else J.log(X,{...Y,severity:"error"});return}J.log(X,Y)}}function OY($){return $.getAgentId()}function MY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:w$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function RY($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function V_($,W,...Z){let Q=RY($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function B_($,W,...Z){let Q=RY($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function H_($,W,...Z){let Q=RY($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}f1();T0();function NY($,W,Z){return{onSubAgentEvent:(Q)=>$.onAgentEvent(Z,W,Q),onSubAgentStart:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime;$.subAgentStarts.set(Q.subAgentId,{startedAt:Date.now(),rootSessionId:Z});let j=i1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)A$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});r4(W.telemetry,{event:"started",ulid:Z,durationMs:0,parentId:Q.parentAgentId,agentId:Q.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Z,Q)},onSubAgentEnd:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime,j=$.subAgentStarts.get(Q.subAgentId),X=j?Date.now()-j.startedAt:0,Y=Q.result?.text?Q.result.text.split(`
760
- `).length:0;r4(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...i1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId})}),$.subAgentStarts.delete(Q.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Z,Q)}}}function EY($,W,Z,Q){let J=NY($,W,Z);return N$({configProvider:{getRuntimeConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,maxIterations:W.maxIterations,hooks:W.hooks,extensions:W.extensions,logger:W.logger,telemetry:W.telemetry},getConnectionConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=W.enableTools?T2({cwd:W.cwd,...s0[l1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(EY($,W,Z,Q));return p1(X)},...J})}import{readFile as $v,stat as Wv}from"node:fs/promises";var Zv=20480000;async function G_($){let W=await Wv($);if(!W.isFile())throw Error("Path is not a file");if(W.size>Zv)throw Error("File is too large to read into context.");let Z=await $v($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var K_=5000;function P5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Hv($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=P5(W.inputTokens),Q=P5(W.outputTokens),J=P5(W.cacheReadTokens),j=P5(W.cacheWriteTokens),X=P5(W.totalCost);if(Z===void 0||Q===void 0||J===void 0||j===void 0||X===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:J,cacheWriteTokens:j,totalCost:X}}function Gv($,W){return{inputTokens:Math.max($.inputTokens,W.inputTokens),outputTokens:Math.max($.outputTokens,W.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,W.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,W.cacheWriteTokens),totalCost:Math.max($.totalCost,W.totalCost)}}function F_($,W){if(!W)return!1;if($.source_message_count!==W.source_message_count)return $.source_message_count<W.source_message_count;return Date.parse($.updated_at)<Date.parse(W.updated_at)}class y1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new dW;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new a$;constructor($){let W=Jv();if(W)Bv(W);let Z=d0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new x4,this.createAgentInstance=$.createAgent??((Q)=>new z$(Q)),this.defaultCapabilities=w0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new V1,this.oauthTokenManager=$.oauthTokenManager??new TY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new qY({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new zY({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,J,j)=>{this.invoke("persistSessionMessages",Q,J,j)},enqueuePendingPrompt:(Q,J)=>this.pendingPromptsController.enqueue(Q,J),invokeBackendOptional:(Q,...J)=>this.invokeOptional(Q,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let W=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!W?.apiKey)return $;return{...$,config:{...$.config,apiKey:W.apiKey}}}async startSession($){let W=$.source??F0.CLI,Z=j0(),Q=$.config.sessionId?.trim()??"",J=Q||Xv(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?h8(X):O0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=wY(V,J),H=wY(B,`${J}.messages.json`),G=wY(B,`${J}.json`),K=w$($.config),F=m0.parse({version:1,session_id:J,source:W,pid:process.pid,started_at:Z,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:K,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),A,D;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let I=await this.invokeOptionalValue("readSessionManifest",J);if(I)F=I,A={manifestPath:G,messagesPath:I.messages_path||H,compactionPath:I.compaction_path,manifest:I},D=await this.invokeOptionalValue("readSessionCompactionState",J)}let _=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,_);let U=w0(this.defaultCapabilities,$.capabilities),R=U?.toolExecutors??this.toolExecutors,L=$.localRuntime,q=L?.extensionContext?.logger??L?.logger,T=L?.extensionContext?.automation,C,w={getSession:(I)=>this.sessions.get(I),subAgentStarts:this.subAgentStarts,onAgentEvent:(I,s,y0)=>this.eventBridge.dispatchAgentEvent(I,s,y0),invokeBackendOptional:(I,...s)=>this.invokeOptional(I,...s)};C=await eG({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(I)=>{if(I.name==="plugin_log"){this.eventBridge.handlePluginLog(J,I.payload,q);return}this.eventBridge.handlePluginEvent(J,I,T)},onTeamEvent:(I)=>{this.eventBridge.handleTeamEvent(J,I),C.config.onTeamEvent?.(I)},createSpawnTool:()=>EY(w,C.config,J,R),createSubAgentLifecycleCallbacks:(I)=>NY(w,I,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(I)=>{await this.persistSessionMetadata(J,()=>I)}});let b=await this.runtimeBuilder.build(C.runtimeBuilderInput),P=C.config,r=C.providerConfig;if(b.teamRuntime&&!P.teamName?.trim())P.teamName=b.teamRuntime.getTeamName();let $0=[...b.tools,...P.extraTools??[]],A0=b.extensions??C.extensions,Y8=j.initialCompactionState,e$,g0=H6(P),$2=Y8??D,Y0=g0&&$2?{...$2,conversation_id:$2.conversation_id?.trim()||J}:void 0,G$=g0?G6({compact:g0,getState:()=>e$?.compactionState,saveState:async(I)=>{let s=e$;if(!s)return;let y0={...I,conversation_id:s.sessionId};try{if(!(await this.persistActiveSessionCompactionState(s,y0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:s.sessionId,sourceMessageCount:y0.source_message_count})}catch(V0){P.logger?.error?.("Failed to persist session compaction state",{sessionId:s.sessionId,error:V0}),t$(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:V0,context:{sessionId:s.sessionId,providerId:P.providerId,modelId:P.modelId}})}}}):void 0,L0={sessionId:J,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,knownModels:r.knownModels,providerConfig:r,thinking:P.thinking,reasoningEffort:P.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:P.thinkingBudgetTokens,maxTokensPerTurn:P.maxTokensPerTurn,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:G$,tools:$0,hooks:C.hooks,extensions:A0,hookErrorMode:P.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:G_,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(I)=>{let s=C.requestToolApproval,y0=this.sessions.get(J);if(y0)await this.markTurnPending(y0);try{if(!s)return{approved:!1,reason:"Tool approval callback is not configured."};return await s(I)}finally{let V0=this.sessions.get(J);if(V0?.status==="pending")await this.markTurnRunning(V0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:b.completionPolicy,consumePendingUserMessage:()=>{let I=this.pendingPromptsController.consumeSteer(J);return I?W5(I.prompt,I.mode??P.mode):void 0},logger:b.logger??P.logger,extensionContext:P.extensionContext,onEvent:(I)=>this.eventBridge.dispatchAgentEvent(J,P,I)};L0.hooks={...L0.hooks,onEvent:async(I)=>{if(await C.hooks?.onEvent?.(I),I.type!=="assistant-message")return;let s=this.sessions.get(J);if(!s)return;let y0=s.agent.getMessages();try{await this.invoke("persistSessionMessages",J,y0,P.systemPrompt)}catch(V0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:V0}),t$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:V0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let S0=this.createAgentInstance(L0);if(L0.onEvent)S0.subscribeEvents(L0.onEvent);b.registerLeadAgent?.(S0);let T1=i1({agentId:S0.getAgentId(),conversationId:S0.getConversationId(),teamId:b.teamRuntime?.getTeamId(),teamName:b.teamRuntime?.getTeamName(),teamRole:b.teamRuntime?"lead":void 0});if(WK(P,J,Q.length>0,K,T1),T1)A$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...T1});if(b.teamRuntime)p5(P.telemetry,{ulid:J,teamId:b.teamRuntime.getTeamId(),teamName:b.teamRuntime.getTeamName(),leadAgentId:S0.getAgentId(),restoredFromPersistence:b.teamRestoredFromPersistence===!0});let g={sessionId:J,config:P,sessionMetadata:j.sessionMetadata,...A?{artifacts:A}:{},source:W,startedAt:A?.manifest.started_at??Z,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Z,pendingPrompt:F.prompt,runtime:b,agent:S0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:Y0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(e$=g,g.compactionState&&!this.isCompactionStateForSession(g.sessionId,g.compactionState,g))g.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:g.sessionId,conversationId:g.compactionState.conversation_id}),g.compactionState=void 0;if(this.sessions.set(J,g),this.emitStatus(J,"running"),X.length>0&&!A){if(await this.ensureSessionPersisted(g),await this.invoke("persistSessionMessages",g.sessionId,X,g.config.systemPrompt),g.compactionState){if(!(await this.persistActiveSessionCompactionState(g,g.compactionState)).updated)g.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(g,"completed",0)}let z0;try{if(j.prompt?.trim())if(z0=await this.executeTurn(g,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!g.interactive)await this.finalizeSingleRun(g,z0.finishReason);else await this.completeInteractiveTurn(g,z0.finishReason)}catch(I){if(g.interactive&&g.aborting)z0=await this.completeAbortedInteractiveTurn(g);else{t$(g.config.telemetry,{component:"core",operation:"session.start",error:I,severity:"error",handled:!1,context:{sessionId:g.sessionId,providerId:g.config.providerId,modelId:g.config.modelId}});try{await this.failSession(g)}catch(s){g.config.logger?.error?.("Session failure cleanup threw",{sessionId:g.sessionId,error:s})}throw I}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:z0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(W)=>this.getSession(W),readMessages:(W)=>this.readSessionMessages(W),buildStartInput:(W,Z)=>{let Q=W.restoredCheckpointMetadata?{...Z.sessionMetadata??{},checkpoint:W.restoredCheckpointMetadata}:Z.sessionMetadata;return{...Z,...Q?{sessionMetadata:Q}:{},initialMessages:W.initialMessages}},startSession:(W)=>this.startSession(W),getStartedSessionId:(W)=>W.sessionId,readRestoredSession:(W)=>this.getSession(W)})}async runTurn($){let W=this.getSessionOrThrow($.sessionId),Z=W.agent.canStartRun(),Q=$.delivery??(W.interactive&&!Z?"queue":void 0);if(W.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(W,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!W.interactive)await this.finalizeSingleRun(W,J.finishReason);else await this.completeInteractiveTurn(W,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(W.interactive&&W.aborting)return await this.completeAbortedInteractiveTurn(W);throw t$(W.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:W.sessionId,providerId:W.config.providerId,modelId:W.config.modelId}}),await this.failSession(W),J}}async getAccumulatedUsage($){let W=rJ(this.usageBySession.get($)),Z=rJ(this.aggregateUsageBySession.get($));return W||Z?{usage:W,aggregateUsage:Z}:void 0}async abort($,W){let Z=this.sessions.get($);if(!Z)return;Z.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Z.aborting=!0,this.pendingPromptsController.clearAborted(Z),Z.agent.abort(W)}async stopSession($){let W=this.sessions.get($);if(!W)return;if(W.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),W.interactive&&!K0(W.status)){await this.releaseSessionRuntime(W,"session_stop");return}if(W.interactive&&W.agent.canStartRun()){await this.shutdownSession(W,{status:this.resolveInteractiveStopStatus(W),exitCode:this.resolveInteractiveStopExitCode(W),shutdownReason:"session_stop",endReason:"stopped"});return}W.aborting=!0,W.agent.abort(Error("session_stop")),await this.shutdownSession(W,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let W=[...this.sessions.values()];if(W.length===0)return;await Promise.allSettled(W.map((Z)=>Z.interactive&&!K0(Z.status)?this.releaseSessionRuntime(Z,$):Z.interactive&&Z.agent.canStartRun()?this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let W=this.sessions.get($);if(W)return MY(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return c6(Q);let J=await this.readManifest(Z);return J?pZ(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(c6),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(MY(J))}return Z.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let W=await this.invoke("deleteSession",$);if(W.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return W.deleted}async updateSession($,W){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:W.prompt,metadata:W.metadata,title:W.title}))?.updated===!0}}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=this.sessions.get(Z),J=Q?void 0:await this.getSession(Z);if(!(Q??J))return{updated:!1};if(Q){let Y=await this.readSessionMessages(Z),V=W.source_message_count>0&&Y.length>=W.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Z,W,Q,void 0,Y))return{updated:!1};Q.agent.restore(Y)}return await this.persistActiveSessionCompactionState(Q,W,B)}if(!await this.canPersistCompactionState(Z,W,void 0,J))return{updated:!1};let X=await this.invokeOptionalValue("readSessionCompactionState",Z);if(F_(W,X))return{updated:!1};return await this.invoke("persistSessionCompactionState",Z,W),{updated:!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=this.sessions.get(W);if(Z)for(;;){let Q=Z.compactionStateWriteQueue;if(!Q)return Z.compactionState;await Q.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",W)}isCompactionStateForSession($,W,Z,Q){let J=W.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let j=Z?.agent.getConversationId()?.trim()||Q?.conversationId?.trim();return j?J===j:!1}async canPersistCompactionState($,W,Z,Q,J){if(!W.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,W,Z,Q))return!1;let j=J??Z?.agent.getMessages()??await this.readSessionMessages($);return j2(W,j)!==void 0}async persistActiveSessionCompactionState($,W,Z){if(!await this.canPersistCompactionState($.sessionId,W,$,void 0,Z))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{if(F_(W,$.compactionState))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,W),$.compactionState=W,{updated:!0}})}async enqueueCompactionStateWrite($,W){let Q=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(W),J=Q.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await Q}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.getRow(W);if(Z?.messagesPath)return c$(Z.messagesPath);let Q=await this.readManifest(W);return c$(Q?.messages_path)}async dispatchHookEvent($){await IF($,{queueSpawnRequest:(W)=>this.invokeOptional("queueSpawnRequest",W),upsertSubagentSessionFromHook:(W)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",W),appendSubagentHookAudit:(W,Z)=>this.invokeOptional("appendSubagentHookAudit",W,Z),applySubagentStatus:(W,Z)=>this.invokeOptional("applySubagentStatus",W,Z)})}subscribe($,W){return this.events.subscribe($,W)}async updateSessionModel($,W){await this.updateSessionConnection($,{modelId:W})}async updateSessionConnection($,W){let Z=f2(W),Q=this.getSessionOrThrow($);if(Z.providerId!==void 0)Q.config.providerId=Z.providerId;if(Z.modelId!==void 0)Q.config.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.config.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.config.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.config.headers=Z.headers;if(Z.providerConfig!==void 0)Q.config.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.config.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.config.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.config.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.config.reasoningEffort=void 0,Q.config.thinkingBudgetTokens=void 0}let J={...Z.providerId!==void 0?{providerId:Z.providerId}:{},...Z.modelId!==void 0?{modelId:Z.modelId}:{},...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{},...Z.providerConfig!==void 0?{providerConfig:Z.providerConfig}:{},...Object.hasOwn(Z,"reasoningEffort")?{reasoningEffort:Z.reasoningEffort??void 0}:{},...Object.hasOwn(Z,"thinking")?{thinking:Z.thinking??void 0}:{},...Object.hasOwn(Z,"thinkingBudgetTokens")?{thinkingBudgetTokens:Z.thinkingBudgetTokens??void 0}:{}};if(Z.thinking===!1||Z.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let j={...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{}};if(Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),Q.agent.updateConnection(Z),Q.runtime.teamRuntime?.updateTeammateConnections(j),Z.providerId||Z.modelId)await this.mutateSessionManifest(Q,(X)=>{if(Z.providerId)X.provider=Z.providerId;if(Z.modelId)X.model=Z.modelId})}async mutateSessionManifest($,W){let Z=$.artifacts;if(!Z)return;let Q=$.sessionId,j=(this.manifestMutationQueues.get(Q)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",Q)??Z.manifest;return W(Y),Z.manifest=Y,await this.invoke("writeSessionManifest",Z.manifestPath,Y),Y}),X=j.then(()=>{return},()=>{return});this.manifestMutationQueues.set(Q,X);try{return await j}finally{if(this.manifestMutationQueues.get(Q)===X)this.manifestMutationQueues.delete(Q)}}handlePluginEvent($,W,Z){return this.eventBridge.handlePluginEvent($,W,Z)}async executeTurn($,W){let Z=await this.prepareTurnInput($,W),Q=Z.prompt.trim(),J=Z?.userImages?.length,j=Z?.userFiles?.length;if(!Q&&!J&&!j)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let X=await this.executeAgentTurn($,Q,Z.userImages,Z.userFiles);while(Oj($,X.finishReason)){let Y=await zj($);if(Y.length===0)break;let V=Mj($,Y);X=await this.executeAgentTurn($,V)}return X}async completeInteractiveTurn($,W){if($5($))return;$.lastInteractiveTurnFinishReason=W,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let W=$.lastInteractiveTurnFinishReason;if(!W)return"cancelled";switch(W){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return W}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let W=new Date,Z=$.agent.getMessages(),Q=O0();return $.persistedMessages=Z,$.started=$.started||Z.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:Z,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:W,endedAt:W,durationMs:0}}async executeAgentTurn($,W,Z,Q){let J=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??O0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=O0(),$.turnUsageByAgent=new Map,m5($.config.telemetry,$.sessionId,$.config.mode),B8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(W,Z,Q):()=>$.agent.run(W,Z,Q),B=await this.runWithAuthRetry($,V,j);$.started=!0;let H=m9(B.messages,B,j);$.persistedMessages=H;let G=d6($.turnUsageByAgent?.values()??[]),K=D0(X,B.usage),F=D0(D0(O0(),B.usage),G),A=D0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw t$($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,W){if($.submitAndExitObserved)return;if(!W.toolCalls.some((Q)=>Q.name===q0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,l4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,W){let Z=w$($.config),Q=Vv(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await z8(Q,Z);ZK($.config.telemetry,J);let j=W5(J.prompt,W.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles),Y=this.resolveAbsoluteFilePaths(Z,J.matchedFiles),V=Array.from(new Set([...X,...Y]));return{prompt:j,userImages:W.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let W=w$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:W,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,W){let Z=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??Z?.artifacts?.manifest,J=W(Q?.metadata);if(!Z?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Z.sessionMetadata=J,Z.artifacts.manifest.metadata=J}async finalizeSingleRun($,W){if($5($))return;let Z=W==="aborted"||$.aborting,Q=W==="error";await this.shutdownSession($,{status:Z?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:W})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,W){if(W.status==="completed"&&!$.submitAndExitObserved)l4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});YQ($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),t$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:W.status,shutdownReason:W.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,W.status,W.exitCode)}catch(J){Q("update_status",J)}try{await $.agent.shutdown(W.shutdownReason)}catch(J){Q("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(W.shutdownReason))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:W.endReason,ts:Date.now()}}),Z.length>0&&W.status==="failed")throw Z[0]}async releaseSessionRuntime($,W){let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),t$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:W,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(W)}catch(J){Q("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(W))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Z.length>0)throw Z[0]}async updateStatus($,W,Z){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,W,Z);if(!Q.updated)return;let J=await this.mutateSessionManifest($,(j)=>{if(j.status=W,K0(W))delete j.ended_at,j.exit_code=null;else j.ended_at=Q.endedAt??j0(),j.exit_code=typeof Z==="number"?Z:null});if(!J)return;$.status=W,$.updatedAt=Q.endedAt??j0(),$.endedAt=K0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!Q2($.config.providerId)||!Yv(Q))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Z),W()}}async syncOAuthCredentials($,W){let Z=null;try{Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:W?.forceRefresh})}catch(Q){if(Q instanceof U7)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!Z?.apiKey||$.config.apiKey===Z.apiKey)return;$.config.apiKey=Z.apiKey,$.agent.updateConnection({apiKey:Z.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Z.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Z.apiKey})}getSessionOrThrow($){let W=this.sessions.get($);if(!W){let Z=new e1($);throw t$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Z,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Z}return W}resolveAbsoluteFilePaths($,W){if(!W||W.length===0)return[];let Z=W.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>jv(Q)?Q:CY($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return i1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let W=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Z=D0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=CY(W),J=`${Z}.messages.json`,j;try{j=Qv($)}catch{return O0()}let X=O0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=CY($,Y);if(V===Q)continue;let B=await c$(V);if(B.length===0)continue;X=D0(X,h8(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=Hv(W.metadata?.aggregateUsage);if(Z)return Gv($,Z);let Q=W.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,W){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:W}})}async emitSessionSnapshot($){let W=await this.getSession($);if(!W)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:w1({session:W,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),K_))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(K_)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return V_(this.sessionService,$,...W)}invokeOptional($,...W){return B_(this.sessionService,$,...W)}invokeOptionalValue($,...W){return H_(this.sessionService,$,...W)}}function Fv($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function Av($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function RQ($={}){let W=new y1({sessionService:new S1(new P1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:Kv(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Av(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Fv(J)}},async abortSession(Z){return await W.abort(Z,Error("hub schedule abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}import{release as fv}from"node:os";import{createClineTelemetryServiceConfig as Uv}from"@cline/shared";T0();B5();var Dv=300000,_v=5000;function A_(){let $=Uv({metadata:{extension_version:w5,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:fv()}}),W=r$($),Z,Q=()=>{try{return Z??=new V1,Z.getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}catch{return}},J,j=()=>{let Y=Q();if(!Y||Y===J)return;J=Y,H1(W.telemetry,{id:Y,provider:"cline"})};j();let X=setInterval(j,Dv);return X.unref?.(),{telemetry:W.telemetry,dispose:async()=>{clearInterval(X);let Y;await Promise.race([(async()=>{await W.flush(),await W.dispose()})(),new Promise((V)=>{Y=setTimeout(V,_v),Y.unref?.()})]),clearTimeout(Y)}}}Tv(process.env.CLINE_VCR);function Ov($){let W=process.cwd(),Z,Q,J;for(let j=0;j<$.length;j+=1){let X=$[j],Y=$[j+1];if(X==="--cwd"&&Y){W=Y,j+=1;continue}if(X==="--host"&&Y){Z=Y,j+=1;continue}if(X==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))Q=V;j+=1;continue}if(X==="--pathname"&&Y)J=Y,j+=1}return{cwd:W,host:Z,port:Q,pathname:J}}async function zv(){let $=Ov(process.argv.slice(2));process.chdir($.cwd);let W=J1({host:$.host,port:$.port,pathname:$.pathname}),Z=A_(),Q;try{Q=await Z8({host:W.host,port:W.port,pathname:W.pathname,owner:qv()==="production"?j1():u0(),telemetry:Z.telemetry,runtimeHandlers:RQ({telemetry:Z.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(Y){throw await Z.dispose().catch(()=>{return}),Y}let J=async()=>{await Q.close(),await Z.dispose().catch(()=>{return}),process.exit(0)},j=!1,X=(Y,V)=>{if(j)return;j=!0;let B=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] ${Y}: ${B}
760
+ `).length:0;r4(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...i1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId})}),$.subAgentStarts.delete(Q.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Z,Q)}}}function EY($,W,Z,Q){let J=NY($,W,Z);return N$({configProvider:{getRuntimeConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,maxIterations:W.maxIterations,hooks:W.hooks,extensions:W.extensions,logger:W.logger,telemetry:W.telemetry},getConnectionConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=W.enableTools?T2({cwd:W.cwd,...s0[l1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(EY($,W,Z,Q));return p1(X)},...J})}import{readFile as $v,stat as Wv}from"node:fs/promises";var Zv=20480000;async function G_($){let W=await Wv($);if(!W.isFile())throw Error("Path is not a file");if(W.size>Zv)throw Error("File is too large to read into context.");let Z=await $v($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var K_=5000;function P5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Hv($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=P5(W.inputTokens),Q=P5(W.outputTokens),J=P5(W.cacheReadTokens),j=P5(W.cacheWriteTokens),X=P5(W.totalCost);if(Z===void 0||Q===void 0||J===void 0||j===void 0||X===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:J,cacheWriteTokens:j,totalCost:X}}function Gv($,W){return{inputTokens:Math.max($.inputTokens,W.inputTokens),outputTokens:Math.max($.outputTokens,W.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,W.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,W.cacheWriteTokens),totalCost:Math.max($.totalCost,W.totalCost)}}function F_($,W){if(!W)return!1;if($.source_message_count!==W.source_message_count)return $.source_message_count<W.source_message_count;return Date.parse($.updated_at)<Date.parse(W.updated_at)}class y1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new dW;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new a$;constructor($){let W=Jv();if(W)Bv(W);let Z=d0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new x4,this.createAgentInstance=$.createAgent??((Q)=>new z$(Q)),this.defaultCapabilities=w0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new V1,this.oauthTokenManager=$.oauthTokenManager??new TY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new qY({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new zY({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,J,j)=>{this.invoke("persistSessionMessages",Q,J,j)},enqueuePendingPrompt:(Q,J)=>this.pendingPromptsController.enqueue(Q,J),invokeBackendOptional:(Q,...J)=>this.invokeOptional(Q,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let W=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!W?.apiKey)return $;return{...$,config:{...$.config,apiKey:W.apiKey}}}async startSession($){let W=$.source??F0.CLI,Z=j0(),Q=$.config.sessionId?.trim()??"",J=Q||Xv(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?h8(X):O0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=wY(V,J),H=wY(B,`${J}.messages.json`),G=wY(B,`${J}.json`),K=w$($.config),F=m0.parse({version:1,session_id:J,source:W,pid:process.pid,started_at:Z,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:K,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),A,D;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let I=await this.invokeOptionalValue("readSessionManifest",J);if(I)F=I,A={manifestPath:G,messagesPath:I.messages_path||H,compactionPath:I.compaction_path,manifest:I},D=await this.invokeOptionalValue("readSessionCompactionState",J)}let _=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,_);let U=w0(this.defaultCapabilities,$.capabilities),R=U?.toolExecutors??this.toolExecutors,L=$.localRuntime,q=L?.extensionContext?.logger??L?.logger,T=L?.extensionContext?.automation,w,E={getSession:(I)=>this.sessions.get(I),subAgentStarts:this.subAgentStarts,onAgentEvent:(I,s,y0)=>this.eventBridge.dispatchAgentEvent(I,s,y0),invokeBackendOptional:(I,...s)=>this.invokeOptional(I,...s)};w=await eG({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(I)=>{if(I.name==="plugin_log"){this.eventBridge.handlePluginLog(J,I.payload,q);return}this.eventBridge.handlePluginEvent(J,I,T)},onTeamEvent:(I)=>{this.eventBridge.handleTeamEvent(J,I),w.config.onTeamEvent?.(I)},createSpawnTool:()=>EY(E,w.config,J,R),createSubAgentLifecycleCallbacks:(I)=>NY(E,I,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(I)=>{await this.persistSessionMetadata(J,()=>I)}});let b=await this.runtimeBuilder.build(w.runtimeBuilderInput),P=w.config,r=w.providerConfig;if(b.teamRuntime&&!P.teamName?.trim())P.teamName=b.teamRuntime.getTeamName();let $0=[...b.tools,...P.extraTools??[]],A0=b.extensions??w.extensions,Y8=j.initialCompactionState,e$,g0=H6(P),$2=Y8??D,Y0=g0&&$2?{...$2,conversation_id:$2.conversation_id?.trim()||J}:void 0,G$=g0?G6({compact:g0,getState:()=>e$?.compactionState,saveState:async(I)=>{let s=e$;if(!s)return;let y0={...I,conversation_id:s.sessionId};try{if(!(await this.persistActiveSessionCompactionState(s,y0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:s.sessionId,sourceMessageCount:y0.source_message_count})}catch(V0){P.logger?.error?.("Failed to persist session compaction state",{sessionId:s.sessionId,error:V0}),t$(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:V0,context:{sessionId:s.sessionId,providerId:P.providerId,modelId:P.modelId}})}}}):void 0,L0={sessionId:J,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,knownModels:r.knownModels,providerConfig:r,thinking:P.thinking,reasoningEffort:P.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:P.thinkingBudgetTokens,maxTokensPerTurn:P.maxTokensPerTurn,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:G$,tools:$0,hooks:w.hooks,extensions:A0,hookErrorMode:P.hookErrorMode,initialMessages:w.effectiveInput.initialMessages,userFileContentLoader:G_,toolPolicies:w.toolPolicies,requestToolApproval:w.requestToolApproval?async(I)=>{let s=w.requestToolApproval,y0=this.sessions.get(J);if(y0)await this.markTurnPending(y0);try{if(!s)return{approved:!1,reason:"Tool approval callback is not configured."};return await s(I)}finally{let V0=this.sessions.get(J);if(V0?.status==="pending")await this.markTurnRunning(V0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:b.completionPolicy,consumePendingUserMessage:()=>{let I=this.pendingPromptsController.consumeSteer(J);return I?W5(I.prompt,I.mode??P.mode):void 0},logger:b.logger??P.logger,extensionContext:P.extensionContext,onEvent:(I)=>this.eventBridge.dispatchAgentEvent(J,P,I)};L0.hooks={...L0.hooks,onEvent:async(I)=>{if(await w.hooks?.onEvent?.(I),I.type!=="assistant-message")return;let s=this.sessions.get(J);if(!s)return;let y0=s.agent.getMessages();try{await this.invoke("persistSessionMessages",J,y0,P.systemPrompt)}catch(V0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:V0}),t$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:V0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let S0=this.createAgentInstance(L0);if(L0.onEvent)S0.subscribeEvents(L0.onEvent);b.registerLeadAgent?.(S0);let T1=i1({agentId:S0.getAgentId(),conversationId:S0.getConversationId(),teamId:b.teamRuntime?.getTeamId(),teamName:b.teamRuntime?.getTeamName(),teamRole:b.teamRuntime?"lead":void 0});if(WK(P,J,Q.length>0,K,T1),T1)A$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...T1});if(b.teamRuntime)p5(P.telemetry,{ulid:J,teamId:b.teamRuntime.getTeamId(),teamName:b.teamRuntime.getTeamName(),leadAgentId:S0.getAgentId(),restoredFromPersistence:b.teamRestoredFromPersistence===!0});let g={sessionId:J,config:P,sessionMetadata:j.sessionMetadata,...A?{artifacts:A}:{},source:W,startedAt:A?.manifest.started_at??Z,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Z,pendingPrompt:F.prompt,runtime:b,agent:S0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:Y0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:w.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(e$=g,g.compactionState&&!this.isCompactionStateForSession(g.sessionId,g.compactionState,g))g.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:g.sessionId,conversationId:g.compactionState.conversation_id}),g.compactionState=void 0;if(this.sessions.set(J,g),this.emitStatus(J,"running"),X.length>0&&!A){if(await this.ensureSessionPersisted(g),await this.invoke("persistSessionMessages",g.sessionId,X,g.config.systemPrompt),g.compactionState){if(!(await this.persistActiveSessionCompactionState(g,g.compactionState)).updated)g.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(g,"completed",0)}let z0;try{if(j.prompt?.trim())if(z0=await this.executeTurn(g,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!g.interactive)await this.finalizeSingleRun(g,z0.finishReason);else await this.completeInteractiveTurn(g,z0.finishReason)}catch(I){if(g.interactive&&g.aborting)z0=await this.completeAbortedInteractiveTurn(g);else{t$(g.config.telemetry,{component:"core",operation:"session.start",error:I,severity:"error",handled:!1,context:{sessionId:g.sessionId,providerId:g.config.providerId,modelId:g.config.modelId}});try{await this.failSession(g)}catch(s){g.config.logger?.error?.("Session failure cleanup threw",{sessionId:g.sessionId,error:s})}throw I}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:z0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(W)=>this.getSession(W),readMessages:(W)=>this.readSessionMessages(W),buildStartInput:(W,Z)=>{let Q=W.restoredCheckpointMetadata?{...Z.sessionMetadata??{},checkpoint:W.restoredCheckpointMetadata}:Z.sessionMetadata;return{...Z,...Q?{sessionMetadata:Q}:{},initialMessages:W.initialMessages}},startSession:(W)=>this.startSession(W),getStartedSessionId:(W)=>W.sessionId,readRestoredSession:(W)=>this.getSession(W)})}async runTurn($){let W=this.getSessionOrThrow($.sessionId),Z=W.agent.canStartRun(),Q=$.delivery??(W.interactive&&!Z?"queue":void 0);if(W.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(W,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!W.interactive)await this.finalizeSingleRun(W,J.finishReason);else await this.completeInteractiveTurn(W,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(W.interactive&&W.aborting)return await this.completeAbortedInteractiveTurn(W);throw t$(W.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:W.sessionId,providerId:W.config.providerId,modelId:W.config.modelId}}),await this.failSession(W),J}}async getAccumulatedUsage($){let W=rJ(this.usageBySession.get($)),Z=rJ(this.aggregateUsageBySession.get($));return W||Z?{usage:W,aggregateUsage:Z}:void 0}async abort($,W){let Z=this.sessions.get($);if(!Z)return;Z.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Z.aborting=!0,this.pendingPromptsController.clearAborted(Z),Z.agent.abort(W)}async stopSession($){let W=this.sessions.get($);if(!W)return;if(W.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),W.interactive&&!K0(W.status)){await this.releaseSessionRuntime(W,"session_stop");return}if(W.interactive&&W.agent.canStartRun()){await this.shutdownSession(W,{status:this.resolveInteractiveStopStatus(W),exitCode:this.resolveInteractiveStopExitCode(W),shutdownReason:"session_stop",endReason:"stopped"});return}W.aborting=!0,W.agent.abort(Error("session_stop")),await this.shutdownSession(W,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let W=[...this.sessions.values()];if(W.length===0)return;await Promise.allSettled(W.map((Z)=>Z.interactive&&!K0(Z.status)?this.releaseSessionRuntime(Z,$):Z.interactive&&Z.agent.canStartRun()?this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let W=this.sessions.get($);if(W)return MY(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return c6(Q);let J=await this.readManifest(Z);return J?pZ(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(c6),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(MY(J))}return Z.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let W=await this.invoke("deleteSession",$);if(W.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return W.deleted}async updateSession($,W){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:W.prompt,metadata:W.metadata,title:W.title}))?.updated===!0}}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=this.sessions.get(Z),J=Q?void 0:await this.getSession(Z);if(!(Q??J))return{updated:!1};if(Q){let Y=await this.readSessionMessages(Z),V=W.source_message_count>0&&Y.length>=W.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Z,W,Q,void 0,Y))return{updated:!1};Q.agent.restore(Y)}return await this.persistActiveSessionCompactionState(Q,W,B)}if(!await this.canPersistCompactionState(Z,W,void 0,J))return{updated:!1};let X=await this.invokeOptionalValue("readSessionCompactionState",Z);if(F_(W,X))return{updated:!1};return await this.invoke("persistSessionCompactionState",Z,W),{updated:!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=this.sessions.get(W);if(Z)for(;;){let Q=Z.compactionStateWriteQueue;if(!Q)return Z.compactionState;await Q.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",W)}isCompactionStateForSession($,W,Z,Q){let J=W.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let j=Z?.agent.getConversationId()?.trim()||Q?.conversationId?.trim();return j?J===j:!1}async canPersistCompactionState($,W,Z,Q,J){if(!W.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,W,Z,Q))return!1;let j=J??Z?.agent.getMessages()??await this.readSessionMessages($);return j2(W,j)!==void 0}async persistActiveSessionCompactionState($,W,Z){if(!await this.canPersistCompactionState($.sessionId,W,$,void 0,Z))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{if(F_(W,$.compactionState))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,W),$.compactionState=W,{updated:!0}})}async enqueueCompactionStateWrite($,W){let Q=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(W),J=Q.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await Q}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.getRow(W);if(Z?.messagesPath)return c$(Z.messagesPath);let Q=await this.readManifest(W);return c$(Q?.messages_path)}async dispatchHookEvent($){await IF($,{queueSpawnRequest:(W)=>this.invokeOptional("queueSpawnRequest",W),upsertSubagentSessionFromHook:(W)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",W),appendSubagentHookAudit:(W,Z)=>this.invokeOptional("appendSubagentHookAudit",W,Z),applySubagentStatus:(W,Z)=>this.invokeOptional("applySubagentStatus",W,Z)})}subscribe($,W){return this.events.subscribe($,W)}async updateSessionModel($,W){await this.updateSessionConnection($,{modelId:W})}async updateSessionConnection($,W){let Z=f2(W),Q=this.getSessionOrThrow($);if(Z.providerId!==void 0)Q.config.providerId=Z.providerId;if(Z.modelId!==void 0)Q.config.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.config.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.config.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.config.headers=Z.headers;if(Z.providerConfig!==void 0)Q.config.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.config.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.config.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.config.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.config.reasoningEffort=void 0,Q.config.thinkingBudgetTokens=void 0}let J={...Z.providerId!==void 0?{providerId:Z.providerId}:{},...Z.modelId!==void 0?{modelId:Z.modelId}:{},...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{},...Z.providerConfig!==void 0?{providerConfig:Z.providerConfig}:{},...Object.hasOwn(Z,"reasoningEffort")?{reasoningEffort:Z.reasoningEffort??void 0}:{},...Object.hasOwn(Z,"thinking")?{thinking:Z.thinking??void 0}:{},...Object.hasOwn(Z,"thinkingBudgetTokens")?{thinkingBudgetTokens:Z.thinkingBudgetTokens??void 0}:{}};if(Z.thinking===!1||Z.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let j={...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{}};if(Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),Q.agent.updateConnection(Z),Q.runtime.teamRuntime?.updateTeammateConnections(j),Z.providerId||Z.modelId)await this.mutateSessionManifest(Q,(X)=>{if(Z.providerId)X.provider=Z.providerId;if(Z.modelId)X.model=Z.modelId})}async mutateSessionManifest($,W){let Z=$.artifacts;if(!Z)return;let Q=$.sessionId,j=(this.manifestMutationQueues.get(Q)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",Q)??Z.manifest;return W(Y),Z.manifest=Y,await this.invoke("writeSessionManifest",Z.manifestPath,Y),Y}),X=j.then(()=>{return},()=>{return});this.manifestMutationQueues.set(Q,X);try{return await j}finally{if(this.manifestMutationQueues.get(Q)===X)this.manifestMutationQueues.delete(Q)}}handlePluginEvent($,W,Z){return this.eventBridge.handlePluginEvent($,W,Z)}async executeTurn($,W){let Z=await this.prepareTurnInput($,W),Q=Z.prompt.trim(),J=Z?.userImages?.length,j=Z?.userFiles?.length;if(!Q&&!J&&!j)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let X=await this.executeAgentTurn($,Q,Z.userImages,Z.userFiles);while(Oj($,X.finishReason)){let Y=await zj($);if(Y.length===0)break;let V=Mj($,Y);X=await this.executeAgentTurn($,V)}return X}async completeInteractiveTurn($,W){if($5($))return;$.lastInteractiveTurnFinishReason=W,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let W=$.lastInteractiveTurnFinishReason;if(!W)return"cancelled";switch(W){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return W}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let W=new Date,Z=$.agent.getMessages(),Q=O0();return $.persistedMessages=Z,$.started=$.started||Z.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:Z,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:W,endedAt:W,durationMs:0}}async executeAgentTurn($,W,Z,Q){let J=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??O0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=O0(),$.turnUsageByAgent=new Map,m5($.config.telemetry,$.sessionId,$.config.mode),B8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(W,Z,Q):()=>$.agent.run(W,Z,Q),B=await this.runWithAuthRetry($,V,j);$.started=!0;let H=m9(B.messages,B,j);$.persistedMessages=H;let G=d6($.turnUsageByAgent?.values()??[]),K=D0(X,B.usage),F=D0(D0(O0(),B.usage),G),A=D0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw t$($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,W){if($.submitAndExitObserved)return;if(!W.toolCalls.some((Q)=>Q.name===q0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,l4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,W){let Z=w$($.config),Q=Vv(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await z8(Q,Z);ZK($.config.telemetry,J);let j=W5(J.prompt,W.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles),Y=this.resolveAbsoluteFilePaths(Z,J.matchedFiles),V=Array.from(new Set([...X,...Y]));return{prompt:j,userImages:W.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let W=w$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:W,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,W){let Z=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??Z?.artifacts?.manifest,J=W(Q?.metadata);if(!Z?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Z.sessionMetadata=J,Z.artifacts.manifest.metadata=J}async finalizeSingleRun($,W){if($5($))return;let Z=W==="aborted"||$.aborting,Q=W==="error";await this.shutdownSession($,{status:Z?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:W})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,W){if(W.status==="completed"&&!$.submitAndExitObserved)l4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});YQ($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),t$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:W.status,shutdownReason:W.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,W.status,W.exitCode)}catch(J){Q("update_status",J)}try{await $.agent.shutdown(W.shutdownReason)}catch(J){Q("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(W.shutdownReason))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:W.endReason,ts:Date.now()}}),Z.length>0&&W.status==="failed")throw Z[0]}async releaseSessionRuntime($,W){let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),t$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:W,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(W)}catch(J){Q("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(W))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Z.length>0)throw Z[0]}async updateStatus($,W,Z){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,W,Z);if(!Q.updated)return;let J=await this.mutateSessionManifest($,(j)=>{if(j.status=W,K0(W))delete j.ended_at,j.exit_code=null;else j.ended_at=Q.endedAt??j0(),j.exit_code=typeof Z==="number"?Z:null});if(!J)return;$.status=W,$.updatedAt=Q.endedAt??j0(),$.endedAt=K0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!Q2($.config.providerId)||!Yv(Q))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Z),W()}}async syncOAuthCredentials($,W){let Z=null;try{Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:W?.forceRefresh})}catch(Q){if(Q instanceof U7)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!Z?.apiKey||$.config.apiKey===Z.apiKey)return;$.config.apiKey=Z.apiKey,$.agent.updateConnection({apiKey:Z.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Z.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Z.apiKey})}getSessionOrThrow($){let W=this.sessions.get($);if(!W){let Z=new e1($);throw t$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Z,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Z}return W}resolveAbsoluteFilePaths($,W){if(!W||W.length===0)return[];let Z=W.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>jv(Q)?Q:CY($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return i1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let W=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Z=D0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=CY(W),J=`${Z}.messages.json`,j;try{j=Qv($)}catch{return O0()}let X=O0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=CY($,Y);if(V===Q)continue;let B=await c$(V);if(B.length===0)continue;X=D0(X,h8(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=Hv(W.metadata?.aggregateUsage);if(Z)return Gv($,Z);let Q=W.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,W){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:W}})}async emitSessionSnapshot($){let W=await this.getSession($);if(!W)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:w1({session:W,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),K_))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(K_)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return V_(this.sessionService,$,...W)}invokeOptional($,...W){return B_(this.sessionService,$,...W)}invokeOptionalValue($,...W){return H_(this.sessionService,$,...W)}}function Fv($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function Av($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function RQ($={}){let W=new y1({sessionService:new S1(new P1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:Kv(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Av(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Fv(J)}},async abortSession(Z){return await W.abort(Z,Error("hub schedule abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}import{release as fv}from"node:os";import{createClineTelemetryServiceConfig as Uv}from"@cline/shared";T0();B5();var Dv=300000,_v=5000;function A_(){let $=Uv({metadata:{extension_version:w5,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:fv()}}),W=r$($),Z,Q=()=>{try{return Z??=new V1,Z.getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}catch{return}},J,j=()=>{let Y=Q();if(!Y||Y===J)return;J=Y,H1(W.telemetry,{id:Y,provider:"cline"})};j();let X=setInterval(j,Dv);return X.unref?.(),{telemetry:W.telemetry,dispose:async()=>{clearInterval(X);let Y;await Promise.race([(async()=>{await W.flush(),await W.dispose()})(),new Promise((V)=>{Y=setTimeout(V,_v),Y.unref?.()})]),clearTimeout(Y)}}}Tv(process.env.CLINE_VCR);function Ov($){let W=process.cwd(),Z,Q,J;for(let j=0;j<$.length;j+=1){let X=$[j],Y=$[j+1];if(X==="--cwd"&&Y){W=Y,j+=1;continue}if(X==="--host"&&Y){Z=Y,j+=1;continue}if(X==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))Q=V;j+=1;continue}if(X==="--pathname"&&Y)J=Y,j+=1}return{cwd:W,host:Z,port:Q,pathname:J}}async function zv(){let $=Ov(process.argv.slice(2));process.chdir($.cwd);let W=J1({host:$.host,port:$.port,pathname:$.pathname}),Z=A_(),Q;try{Q=await Z8({host:W.host,port:W.port,pathname:W.pathname,owner:qv()==="production"?j1():u0(),telemetry:Z.telemetry,runtimeHandlers:RQ({telemetry:Z.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(Y){throw await Z.dispose().catch(()=>{return}),Y}let J=async()=>{await Q.close(),await Z.dispose().catch(()=>{return}),process.exit(0)},j=!1,X=(Y,V)=>{if(j)return;j=!0;let B=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] ${Y}: ${B}
761
761
  `),Q.close().catch((H)=>{let G=H instanceof Error?H.stack||H.message:String(H);process.stderr.write(`[hub-daemon] shutdown after ${Y} failed: ${G}
762
762
  `)}).finally(()=>{Z.dispose().catch(()=>{return}).finally(()=>{process.exit(1)})})};process.on("SIGINT",()=>{J()}),process.on("SIGTERM",()=>{J()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof Lv){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
763
763
  `);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}zv().catch(($)=>{let W=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${W}