@cline/core 0.0.84 → 0.0.85

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.
@@ -254,7 +254,7 @@ Searched ${L} files.`;let z=[`Found ${F.length} result${F.length===1?"":"s"} for
254
254
 
255
255
  ...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
256
256
 
257
- `;function UV($=process.env){return{maxToolResultChars:HV($[Z7.maxToolResultChars]),maxTotalTextBytes:HV($[Z7.maxTotalTextBytes]),minOutdatedRewriteBytes:sA($[Z7.minOutdatedRewriteBytes])}}class J7{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=k6($.maxToolResultChars,mA),this.maxFileContentChars=k6($.maxFileContentChars,uA),this.maxTotalTextBytes=k6($.maxTotalTextBytes,cA),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=k6($.maxAssistantTextChars,pA),this.maxAssistantToolMarkupChars=k6($.maxAssistantToolMarkupChars,dA),this.minOutdatedRewriteBytes=tA($.minOutdatedRewriteBytes,lA)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((X)=>{if(!Array.isArray(X.content)){if(X.role==="user"&&typeof X.content==="string"){let j=WV(X.content);if(j!==X.content)return{...X,content:j}}if(X.role==="assistant"&&typeof X.content==="string"){let j=this.truncateAssistantText(X.content);if(j!==X.content)return{...X,content:j}}return X}let Y=!1,W=X.content.map((j)=>{let V=this.transformBlock(j,X.role);if(V!==j)Y=!0;return V});return Y?{...X,content:W}:X}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let X=WV($.text);if(X!==$.text)return{...$,text:X};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let X=this.truncateAssistantText($.text);return X===$.text?$:{...$,text:X}}if($.type==="file"){let X=y2($.content,this.maxFileContentChars,KV);return X===$.content?$:{...$,content:X}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let X=this.committedOutdatedRewrites.get($.tool_use_id);if(X&&X.size>0){let W=this.getReadLocators($).filter((j)=>X.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(W.length>0)J=this.replaceOutdatedReadContent(J,W)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let X=0;X<J.content.length;X++){let Y=J.content[X];if(Y.type==="file")this.latestFullContentOwnerByPathCache.set(Y.path,`file:${Q}:${X}`);else if(Y.type==="tool_use"){let W=Y.name.toLowerCase();if(this.toolNameByIdCache.set(Y.id,W),this.isReadTool(W)){let j=this.extractLocatorsFromReadToolInput(Y.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(Y.id,j)}}else if(Y.type==="tool_result"){let W=this.resolveToolName(Y);if(!this.isReadTool(W)||Y.is_error===!0)continue;let j=this.getReadLocators(Y);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),Y.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,Y.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let X of $){if(!Array.isArray(X.content))continue;for(let Y of X.content){if(Y.type!=="tool_result"||Y.is_error===!0)continue;let W=this.resolveToolName(Y);if(!this.isReadTool(W))continue;Q.add(Y.tool_use_id);let j=this.committedOutdatedRewrites.get(Y.tool_use_id),V=new Set,K=new Set;for(let G of this.getReadLocators(Y)){let H=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,Y.tool_use_id))continue;if(K.add(H),!j?.has(H))V.add(H)}if(j){for(let G of j)if(!K.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(Y.tool_use_id)}if(V.size===0)continue;let B=Z.get(Y.tool_use_id);if(!B)B=new Set,Z.set(Y.tool_use_id,B);for(let G of V)B.add(G);J+=this.estimateOutdatedReclaimBytes(Y.content,V)}}for(let X of this.committedOutdatedRewrites.keys())if(!Q.has(X))this.committedOutdatedRewrites.delete(X);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[X,Y]of Z){let W=this.committedOutdatedRewrites.get(X);if(!W)W=new Set,this.committedOutdatedRewrites.set(X,W);for(let j of Y)W.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),X=(V)=>{let K;try{K=JSON.parse(V)}catch{return J||Q.length===0?H0(this.truncateMiddle(V)):0}let B=Array.isArray(K)?K:[K],G=0;for(let H of B){let U=this.extractLocatorFromResultEntry(H);if(U&&Z.has(this.toReadLocatorKey(U)))G+=this.providerBoundEntryBytes(H)}return G};if(typeof $==="string")return X($);let Y=new Set(Z),W=0;for(let V of $)if(V.type==="text")W+=this.countOutdatedImageEntries(V.text,Y);let j=0;for(let V of $)if(V.type==="text")j+=X(V.text);else if(V.type==="image"){if(W>0)W-=1,j+=H0(V.data)}else if(V$(V)){let K=this.extractLocatorFromResultEntry(V);if(K&&Z.has(this.toReadLocatorKey(K)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=H0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return H0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,X=!1,Y=()=>{if(J.size===0)return;W(this.createMissingToolResultMessage(J)),J.clear(),X=!0},W=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},X=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(W(this.appendMissingToolResults(j,J)),J.size>0)J.clear(),X=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),K=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},J);if(W(B),J.size>0)J.clear();X=!0}if(K.length>0||V.length===0){if(V.length===0)Y();let B=V.length>0?{...j,content:K}:j;if(W(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,J)}continue}Y(),W(j)}return Y(),X?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${VV} Tool: ${$}.`:VV}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let X of Z.files){let Y=this.extractLocatorFromReadRequest(X);if(Y)Q.push(Y)}if(Array.isArray(Z.file_paths)){for(let X of Z.file_paths)if(typeof X==="string"&&X.length>0)Q.push({path:X,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(V$(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let X=this.extractLocatorFromResultEntry(J);if(X)Q.push(X)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((Y)=>this.toReadLocatorKey(Y))),J=new Set(Z.map((Y)=>Y.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??I$;let X=0;for(let Y of $)if(Y.type==="text")X+=this.countOutdatedImageEntries(Y.text,Q);return $.map((Y)=>{if(Y.type==="file"){if(!J.has(Y.path))return Y;return{...Y,content:I$}}if(Y.type==="image"){if(X===0)return Y;return X-=1,{type:"text",text:I$}}if(V$(Y))return this.replaceOutdatedReadEntry(Y,Q);if(Y.type!=="text")return Y;let W=this.replaceOutdatedInString(Y.text,Q);if(W===null)return{...Y,text:I$};return W===Y.text?Y:{...Y,text:W}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],X=0;for(let Y of J){if(!Y||typeof Y!=="object")continue;let W=Y,j=this.extractLocatorFromResultEntry(W);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(W.result==="Successfully read image"||W.content==="Successfully read image")X+=1}return X}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((X)=>this.replaceOutdatedReadEntry(X,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=I$;else if(typeof J.content==="string")J.content=I$;else J.result=I$;return J}isReadTool($){return!!$&&aA.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(V$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;return X});return Z?Q:$}if($!==null&&typeof $==="object"){if(X7($))return $;let Z=!1,Q={};for(let[J,X]of Object.entries($)){let Y=this.truncateNestedStrings(X);if(Y!==X)Z=!0;Q[J]=Y}return Z?Q:$}return $}truncateMiddle($){return y2($,this.maxToolResultChars,KV)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return y2($,this.maxAssistantToolMarkupChars,nA);return y2($,this.maxAssistantTextChars,rA)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(oA))if(Z+=1,Z>=iA)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((X)=>{if(!Array.isArray(X.content))return{...X};return{...X,content:X.content.map((Y)=>$T(Y))}}),J=this.collectTruncationCandidates(Q);for(let X of J){if(Z<=this.maxTotalTextBytes)break;let Y=X.byteLength;if(Y<=X.minBytes)continue;let W=Z-this.maxTotalTextBytes,j=Math.max(X.minBytes,Y-W),V=eA(X.get(),j,X.makeMarker);X.set(V),Z-=Y-H0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=H0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=H0(J.text);else if(J.type==="thinking")Z+=H0(J.thinking);else if(J.type==="file")Z+=H0(J.content);else if(J.type==="tool_use")Z+=U5(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=H0(J.content);else for(let X of J.content)if(X.type==="text")Z+=H0(X.text);else if(X.type==="file")Z+=H0(X.content);else if(V$(X))Z+=U5(X)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:H0(J.content),minBytes:jV,makeMarker:BV,get:()=>J.content,set:(X)=>{J.content=X}});continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="tool_use"){F5(X.input,Q);continue}if(J.role==="assistant"&&X.type==="text"){Z.push({byteLength:H0(X.text),minBytes:jV,makeMarker:BV,get:()=>X.text,set:(Y)=>{X.text=Y}});continue}if(X.type!=="tool_result")continue;if(typeof X.content==="string"){Z.push({byteLength:H0(X.content),minBytes:y6,makeMarker:I6,get:()=>X.content,set:(Y)=>{X.content=Y}});continue}for(let Y of X.content)if(Y.type==="text")Z.push({byteLength:H0(Y.text),minBytes:y6,makeMarker:I6,get:()=>Y.text,set:(W)=>{Y.text=W}});else if(Y.type==="file")Z.push({byteLength:H0(Y.content),minBytes:y6,makeMarker:I6,get:()=>Y.content,set:(W)=>{Y.content=W}});else if(V$(Y))F5(Y,Z)}}return Z.sort((J,X)=>X.byteLength-J.byteLength),Q.sort((J,X)=>X.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=hA(),J=!1,X=$.map((Y)=>{if(!Array.isArray(Y.content))return Y;let W=!1,j=Y.content.map((V)=>{let K=this.applyMediaBudgetToBlock(V,Z,Q);if(K!==V)W=!0;return K});if(!W)return Y;return J=!0,{...Y,content:j}});return J?X:$}resolveMediaBudget(){return vA(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(Q7($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,X=$.content.map((Y)=>{let W=this.applyMediaBudgetToToolResultEntry(Y,Z,Q);if(W!==Y)J=!0;return W});return J?{...$,content:X}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(Q7($))return this.limitImageContent($,Z,Q);if(V$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(Q7($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,X=$.map((Y)=>{let W=this.limitNestedMedia(Y,Z,Q);if(W!==Y)J=!0;return W});return J?X:$}if($!==null&&typeof $==="object"){let J=!1,X={};for(let[Y,W]of Object.entries($)){let j=this.limitNestedMedia(W,Z,Q);if(j!==W)J=!0;X[Y]=j}return J?X:$}return $}limitImageContent($,Z,Q){if(!FV($))return{type:"text",text:YV};let J=gA($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:YV};return{...$,data:J.base64,mediaType:J.mediaType}}}var GV=String.raw`[\|\uFF5C]`,oA=new RegExp(String.raw`<\s*(?:${GV}\s*)?DSML\s*(?:${GV}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function H0($){return Buffer.byteLength($,"utf8")}function HV($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function sA($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function k6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function tA($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function y2($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),X=Math.max(0,Math.floor((Z-J.length)/2)),Y=Math.max(0,$.length-X*2),W=Q(Y),j=Math.max(0,Math.floor((Z-W.length)/2)),V=$.slice(0,j),K=j>0?$.slice(-j):"";return`${V}${W}${K}`}function eA($,Z,Q){if(H0($)<=Z)return $;let J=0,X=$.length,Y=y2($,0,Q);while(J<=X){let W=J+X>>>1,j=y2($,W,Q);if(H0(j)<=Z)Y=j,J=W+1;else X=W-1}return Y}function $T($){if($.type==="tool_use")return{...$,input:L5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>V$(Z)?L5(Z):{...Z})}}function V$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function Q7($){return $!==null&&typeof $==="object"&&$.type==="image"}function FV($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function X7($){return FV($)}function U5($){if(typeof $==="string")return H0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=U5(Q);return Z}if($!==null&&typeof $==="object"){if(X7($))return 0;let Z=0;for(let Q of Object.values($))Z+=U5(Q);return Z}return 0}function F5($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:H0(Q),minBytes:y6,makeMarker:I6,get:()=>$[J],set:(X)=>{$[J]=X}});else F5(Q,Z)});return}if($!==null&&typeof $==="object"){if(X7($))return;let Q=$;for(let J of Object.keys(Q)){let X=Q[J];if(typeof X==="string")Z.push({byteLength:H0(X),minBytes:y6,makeMarker:I6,get:()=>Q[J],set:(Y)=>{Q[J]=Y}});else F5(X,Z)}}}function L5($){if(Array.isArray($))return $.map(L5);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=L5(J);return Z}return $}function Y7(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class W7{messages=[];conversationId=Y7();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=Y7(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=Y7(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var I2="0.0.84";var x$={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:I2,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"},"./remote/helper-entry":{types:"./dist/remote/remote-helper-entry.d.ts",import:"./dist/remote/remote-helper-entry.js"},"./remote/helper":{types:"./dist/remote/remote-helper.d.ts",import:"./dist/remote/remote-helper.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function DV($){let{agentConfig:Z}=$,Q=ZT(Z),J=QT(Z),X=$.hooks,Y=JT(Z.maxParallelToolCalls);return{distinctId:Z.distinctId,clientName:Z.extensionContext?.client?.name,clientVersion:Z.extensionContext?.client?.version,clineCoreVersion:I2,sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,modelTools:Z.modelTools,tools:$.tools,hooks:X,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:$.completionPolicy===null?void 0:$.completionPolicy??Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:Y,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function ZT($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function QT($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function JT($){if($===void 0)return;return $>=2?"parallel":"sequential"}function x2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function XT(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function YT($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function j7($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(j7);let Z={};for(let Q of Object.keys($).sort())Z[Q]=j7($[Q]);return Z}function WT($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(j7($))}catch{return String($)}}function jT($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var _V={softThreshold:3,hardThreshold:5};class V7{config;state=XT();constructor($){this.config={softThreshold:$?.softThreshold??_V.softThreshold,hardThreshold:$?.hardThreshold??_V.hardThreshold}}inspect($){let Z=WT($.input),Q=jT(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){YT(this.state)}}class K7{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let X={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(X);let Y=await KT(X,this.options.onLimitReached);if(Y.action==="continue"){let W=Y.guidance?.trim();if(W)this.options.appendRecoveryNotice(W,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:W}}return{action:"stop",reason:Y.reason?.trim()||void 0,message:VT({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:Y.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function VT($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function KT($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function BT($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function GT($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function HT($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function UT($){return $.content.find((Z)=>Z.type==="tool-result")}function FT($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function LT($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class B7{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:$.media}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:BT($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,errorClass:$.errorClass,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=GT($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=HT($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input,execution:$.toolCall.execution}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=UT($.message),X=J?.output,Y=LT(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:X,error:Y,durationMs:Q,execution:$.toolCall.execution}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,X=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,Y=this.lastUsage.totalCost??0,j=($.totalCost??0)-Y;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:X===0?void 0:Math.max(0,X),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:FT($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}var PT="session_run_in_progress";class AV extends Error{agentId;code=PT;constructor($){super(`SessionRuntime.shutdown called while a run is in progress${$?` (agentId=${$})`:""}`);this.agentId=$;this.name="SessionRunInProgressError"}}function CT($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function wT($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function fT($,Z){let Q=$.trim(),J=Z.map((X)=>X.trim()).filter(Boolean).join(`
257
+ `;function UV($=process.env){return{maxToolResultChars:HV($[Z7.maxToolResultChars]),maxTotalTextBytes:HV($[Z7.maxTotalTextBytes]),minOutdatedRewriteBytes:sA($[Z7.minOutdatedRewriteBytes])}}class J7{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=k6($.maxToolResultChars,mA),this.maxFileContentChars=k6($.maxFileContentChars,uA),this.maxTotalTextBytes=k6($.maxTotalTextBytes,cA),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=k6($.maxAssistantTextChars,pA),this.maxAssistantToolMarkupChars=k6($.maxAssistantToolMarkupChars,dA),this.minOutdatedRewriteBytes=tA($.minOutdatedRewriteBytes,lA)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((X)=>{if(!Array.isArray(X.content)){if(X.role==="user"&&typeof X.content==="string"){let j=WV(X.content);if(j!==X.content)return{...X,content:j}}if(X.role==="assistant"&&typeof X.content==="string"){let j=this.truncateAssistantText(X.content);if(j!==X.content)return{...X,content:j}}return X}let Y=!1,W=X.content.map((j)=>{let V=this.transformBlock(j,X.role);if(V!==j)Y=!0;return V});return Y?{...X,content:W}:X}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let X=WV($.text);if(X!==$.text)return{...$,text:X};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let X=this.truncateAssistantText($.text);return X===$.text?$:{...$,text:X}}if($.type==="file"){let X=y2($.content,this.maxFileContentChars,KV);return X===$.content?$:{...$,content:X}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let X=this.committedOutdatedRewrites.get($.tool_use_id);if(X&&X.size>0){let W=this.getReadLocators($).filter((j)=>X.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(W.length>0)J=this.replaceOutdatedReadContent(J,W)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let X=0;X<J.content.length;X++){let Y=J.content[X];if(Y.type==="file")this.latestFullContentOwnerByPathCache.set(Y.path,`file:${Q}:${X}`);else if(Y.type==="tool_use"){let W=Y.name.toLowerCase();if(this.toolNameByIdCache.set(Y.id,W),this.isReadTool(W)){let j=this.extractLocatorsFromReadToolInput(Y.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(Y.id,j)}}else if(Y.type==="tool_result"){let W=this.resolveToolName(Y);if(!this.isReadTool(W)||Y.is_error===!0)continue;let j=this.getReadLocators(Y);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),Y.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,Y.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let X of $){if(!Array.isArray(X.content))continue;for(let Y of X.content){if(Y.type!=="tool_result"||Y.is_error===!0)continue;let W=this.resolveToolName(Y);if(!this.isReadTool(W))continue;Q.add(Y.tool_use_id);let j=this.committedOutdatedRewrites.get(Y.tool_use_id),V=new Set,K=new Set;for(let G of this.getReadLocators(Y)){let H=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,Y.tool_use_id))continue;if(K.add(H),!j?.has(H))V.add(H)}if(j){for(let G of j)if(!K.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(Y.tool_use_id)}if(V.size===0)continue;let B=Z.get(Y.tool_use_id);if(!B)B=new Set,Z.set(Y.tool_use_id,B);for(let G of V)B.add(G);J+=this.estimateOutdatedReclaimBytes(Y.content,V)}}for(let X of this.committedOutdatedRewrites.keys())if(!Q.has(X))this.committedOutdatedRewrites.delete(X);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[X,Y]of Z){let W=this.committedOutdatedRewrites.get(X);if(!W)W=new Set,this.committedOutdatedRewrites.set(X,W);for(let j of Y)W.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),X=(V)=>{let K;try{K=JSON.parse(V)}catch{return J||Q.length===0?H0(this.truncateMiddle(V)):0}let B=Array.isArray(K)?K:[K],G=0;for(let H of B){let U=this.extractLocatorFromResultEntry(H);if(U&&Z.has(this.toReadLocatorKey(U)))G+=this.providerBoundEntryBytes(H)}return G};if(typeof $==="string")return X($);let Y=new Set(Z),W=0;for(let V of $)if(V.type==="text")W+=this.countOutdatedImageEntries(V.text,Y);let j=0;for(let V of $)if(V.type==="text")j+=X(V.text);else if(V.type==="image"){if(W>0)W-=1,j+=H0(V.data)}else if(V$(V)){let K=this.extractLocatorFromResultEntry(V);if(K&&Z.has(this.toReadLocatorKey(K)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=H0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return H0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,X=!1,Y=()=>{if(J.size===0)return;W(this.createMissingToolResultMessage(J)),J.clear(),X=!0},W=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},X=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(W(this.appendMissingToolResults(j,J)),J.size>0)J.clear(),X=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),K=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},J);if(W(B),J.size>0)J.clear();X=!0}if(K.length>0||V.length===0){if(V.length===0)Y();let B=V.length>0?{...j,content:K}:j;if(W(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,J)}continue}Y(),W(j)}return Y(),X?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${VV} Tool: ${$}.`:VV}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let X of Z.files){let Y=this.extractLocatorFromReadRequest(X);if(Y)Q.push(Y)}if(Array.isArray(Z.file_paths)){for(let X of Z.file_paths)if(typeof X==="string"&&X.length>0)Q.push({path:X,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(V$(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let X=this.extractLocatorFromResultEntry(J);if(X)Q.push(X)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((Y)=>this.toReadLocatorKey(Y))),J=new Set(Z.map((Y)=>Y.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??I$;let X=0;for(let Y of $)if(Y.type==="text")X+=this.countOutdatedImageEntries(Y.text,Q);return $.map((Y)=>{if(Y.type==="file"){if(!J.has(Y.path))return Y;return{...Y,content:I$}}if(Y.type==="image"){if(X===0)return Y;return X-=1,{type:"text",text:I$}}if(V$(Y))return this.replaceOutdatedReadEntry(Y,Q);if(Y.type!=="text")return Y;let W=this.replaceOutdatedInString(Y.text,Q);if(W===null)return{...Y,text:I$};return W===Y.text?Y:{...Y,text:W}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],X=0;for(let Y of J){if(!Y||typeof Y!=="object")continue;let W=Y,j=this.extractLocatorFromResultEntry(W);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(W.result==="Successfully read image"||W.content==="Successfully read image")X+=1}return X}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((X)=>this.replaceOutdatedReadEntry(X,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=I$;else if(typeof J.content==="string")J.content=I$;else J.result=I$;return J}isReadTool($){return!!$&&aA.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(V$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;return X});return Z?Q:$}if($!==null&&typeof $==="object"){if(X7($))return $;let Z=!1,Q={};for(let[J,X]of Object.entries($)){let Y=this.truncateNestedStrings(X);if(Y!==X)Z=!0;Q[J]=Y}return Z?Q:$}return $}truncateMiddle($){return y2($,this.maxToolResultChars,KV)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return y2($,this.maxAssistantToolMarkupChars,nA);return y2($,this.maxAssistantTextChars,rA)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(oA))if(Z+=1,Z>=iA)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((X)=>{if(!Array.isArray(X.content))return{...X};return{...X,content:X.content.map((Y)=>$T(Y))}}),J=this.collectTruncationCandidates(Q);for(let X of J){if(Z<=this.maxTotalTextBytes)break;let Y=X.byteLength;if(Y<=X.minBytes)continue;let W=Z-this.maxTotalTextBytes,j=Math.max(X.minBytes,Y-W),V=eA(X.get(),j,X.makeMarker);X.set(V),Z-=Y-H0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=H0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=H0(J.text);else if(J.type==="thinking")Z+=H0(J.thinking);else if(J.type==="file")Z+=H0(J.content);else if(J.type==="tool_use")Z+=U5(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=H0(J.content);else for(let X of J.content)if(X.type==="text")Z+=H0(X.text);else if(X.type==="file")Z+=H0(X.content);else if(V$(X))Z+=U5(X)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:H0(J.content),minBytes:jV,makeMarker:BV,get:()=>J.content,set:(X)=>{J.content=X}});continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="tool_use"){F5(X.input,Q);continue}if(J.role==="assistant"&&X.type==="text"){Z.push({byteLength:H0(X.text),minBytes:jV,makeMarker:BV,get:()=>X.text,set:(Y)=>{X.text=Y}});continue}if(X.type!=="tool_result")continue;if(typeof X.content==="string"){Z.push({byteLength:H0(X.content),minBytes:y6,makeMarker:I6,get:()=>X.content,set:(Y)=>{X.content=Y}});continue}for(let Y of X.content)if(Y.type==="text")Z.push({byteLength:H0(Y.text),minBytes:y6,makeMarker:I6,get:()=>Y.text,set:(W)=>{Y.text=W}});else if(Y.type==="file")Z.push({byteLength:H0(Y.content),minBytes:y6,makeMarker:I6,get:()=>Y.content,set:(W)=>{Y.content=W}});else if(V$(Y))F5(Y,Z)}}return Z.sort((J,X)=>X.byteLength-J.byteLength),Q.sort((J,X)=>X.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=hA(),J=!1,X=$.map((Y)=>{if(!Array.isArray(Y.content))return Y;let W=!1,j=Y.content.map((V)=>{let K=this.applyMediaBudgetToBlock(V,Z,Q);if(K!==V)W=!0;return K});if(!W)return Y;return J=!0,{...Y,content:j}});return J?X:$}resolveMediaBudget(){return vA(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(Q7($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,X=$.content.map((Y)=>{let W=this.applyMediaBudgetToToolResultEntry(Y,Z,Q);if(W!==Y)J=!0;return W});return J?{...$,content:X}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(Q7($))return this.limitImageContent($,Z,Q);if(V$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(Q7($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,X=$.map((Y)=>{let W=this.limitNestedMedia(Y,Z,Q);if(W!==Y)J=!0;return W});return J?X:$}if($!==null&&typeof $==="object"){let J=!1,X={};for(let[Y,W]of Object.entries($)){let j=this.limitNestedMedia(W,Z,Q);if(j!==W)J=!0;X[Y]=j}return J?X:$}return $}limitImageContent($,Z,Q){if(!FV($))return{type:"text",text:YV};let J=gA($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:YV};return{...$,data:J.base64,mediaType:J.mediaType}}}var GV=String.raw`[\|\uFF5C]`,oA=new RegExp(String.raw`<\s*(?:${GV}\s*)?DSML\s*(?:${GV}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function H0($){return Buffer.byteLength($,"utf8")}function HV($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function sA($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function k6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function tA($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function y2($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),X=Math.max(0,Math.floor((Z-J.length)/2)),Y=Math.max(0,$.length-X*2),W=Q(Y),j=Math.max(0,Math.floor((Z-W.length)/2)),V=$.slice(0,j),K=j>0?$.slice(-j):"";return`${V}${W}${K}`}function eA($,Z,Q){if(H0($)<=Z)return $;let J=0,X=$.length,Y=y2($,0,Q);while(J<=X){let W=J+X>>>1,j=y2($,W,Q);if(H0(j)<=Z)Y=j,J=W+1;else X=W-1}return Y}function $T($){if($.type==="tool_use")return{...$,input:L5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>V$(Z)?L5(Z):{...Z})}}function V$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function Q7($){return $!==null&&typeof $==="object"&&$.type==="image"}function FV($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function X7($){return FV($)}function U5($){if(typeof $==="string")return H0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=U5(Q);return Z}if($!==null&&typeof $==="object"){if(X7($))return 0;let Z=0;for(let Q of Object.values($))Z+=U5(Q);return Z}return 0}function F5($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:H0(Q),minBytes:y6,makeMarker:I6,get:()=>$[J],set:(X)=>{$[J]=X}});else F5(Q,Z)});return}if($!==null&&typeof $==="object"){if(X7($))return;let Q=$;for(let J of Object.keys(Q)){let X=Q[J];if(typeof X==="string")Z.push({byteLength:H0(X),minBytes:y6,makeMarker:I6,get:()=>Q[J],set:(Y)=>{Q[J]=Y}});else F5(X,Z)}}}function L5($){if(Array.isArray($))return $.map(L5);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=L5(J);return Z}return $}function Y7(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class W7{messages=[];conversationId=Y7();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=Y7(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=Y7(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var I2="0.0.85";var x$={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:I2,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"},"./remote/helper-entry":{types:"./dist/remote/remote-helper-entry.d.ts",import:"./dist/remote/remote-helper-entry.js"},"./remote/helper":{types:"./dist/remote/remote-helper.d.ts",import:"./dist/remote/remote-helper.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function DV($){let{agentConfig:Z}=$,Q=ZT(Z),J=QT(Z),X=$.hooks,Y=JT(Z.maxParallelToolCalls);return{distinctId:Z.distinctId,clientName:Z.extensionContext?.client?.name,clientVersion:Z.extensionContext?.client?.version,clineCoreVersion:I2,sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,modelTools:Z.modelTools,tools:$.tools,hooks:X,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:$.completionPolicy===null?void 0:$.completionPolicy??Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:Y,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function ZT($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function QT($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function JT($){if($===void 0)return;return $>=2?"parallel":"sequential"}function x2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function XT(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function YT($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function j7($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(j7);let Z={};for(let Q of Object.keys($).sort())Z[Q]=j7($[Q]);return Z}function WT($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(j7($))}catch{return String($)}}function jT($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var _V={softThreshold:3,hardThreshold:5};class V7{config;state=XT();constructor($){this.config={softThreshold:$?.softThreshold??_V.softThreshold,hardThreshold:$?.hardThreshold??_V.hardThreshold}}inspect($){let Z=WT($.input),Q=jT(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){YT(this.state)}}class K7{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let X={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(X);let Y=await KT(X,this.options.onLimitReached);if(Y.action==="continue"){let W=Y.guidance?.trim();if(W)this.options.appendRecoveryNotice(W,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:W}}return{action:"stop",reason:Y.reason?.trim()||void 0,message:VT({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:Y.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function VT($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function KT($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function BT($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function GT($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function HT($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function UT($){return $.content.find((Z)=>Z.type==="tool-result")}function FT($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function LT($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class B7{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:$.media}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:BT($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,errorClass:$.errorClass,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=GT($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=HT($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input,execution:$.toolCall.execution}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=UT($.message),X=J?.output,Y=LT(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:X,error:Y,durationMs:Q,execution:$.toolCall.execution}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,X=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,Y=this.lastUsage.totalCost??0,j=($.totalCost??0)-Y;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:X===0?void 0:Math.max(0,X),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:FT($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}var PT="session_run_in_progress";class AV extends Error{agentId;code=PT;constructor($){super(`SessionRuntime.shutdown called while a run is in progress${$?` (agentId=${$})`:""}`);this.agentId=$;this.name="SessionRunInProgressError"}}function CT($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function wT($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function fT($,Z){let Q=$.trim(),J=Z.map((X)=>X.trim()).filter(Boolean).join(`
258
258
 
259
259
  `);if(Q&&J)return`${Q}
260
260
 
@@ -509,7 +509,7 @@ ${j}`:Y.instructions}})}})}}class eG{watcher;ready;stopped=!1;constructor($){thi
509
509
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
510
510
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
511
511
  metadata_json, transcript_path, hook_path, messages_path, updated_at
512
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,K0()])}}function xk($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function hk($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function WU($={}){let Z=async(J)=>J,Q=new f4({sessionService:new y4(new k4),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J,X){let Y=(J.cwd?.trim()||J.workspaceRoot).trim(),W=await Q.startSession({source:P0.CORE,mode:"automation",sessionMetadata:n0(X?.sessionMetadata,{mode:"automation",trigger:J.source}),interactive:!1,config:{providerId:Ik(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Y,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:hk(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,agentPluginPaths:J.agentPluginPaths,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(J,X){let Y=await Q.runTurn({sessionId:J,prompt:X.prompt,userImages:X.attachments?.userImages,userFiles:X.attachments?.userFiles?.map((W)=>W.content)});if(!Y)throw Error("local hub schedule runtime returned no turn result");return{result:xk(Y)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}import{CLINE_HUB_DEV_PORT as vk,CLINE_HUB_PORT as gk,resolveClineBuildEnv as mk}from"@cline/shared";var uk="CLINE_HUB_HOST",ck="CLINE_HUB_PORT",pk="CLINE_HUB_PATHNAME",dk="127.0.0.1",lk=gk,ik="/hub";function jU($){return mk($)==="development"?vk:lk}function ak($={}){return($.env??process.env)[uk]?.trim()||dk}function aQ($={}){let Q=($.env??process.env)[ck]?.trim();if(!Q)return jU($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return jU($);return J}function rk($={}){return($.env??process.env)[pk]?.trim()||ik}function M9($={},Z={}){return{host:$.host??ak(Z),port:$.port??aQ(Z),pathname:$.pathname??rk(Z)}}import{chmodSync as nk,existsSync as ok,mkdirSync as sk}from"node:fs";import{dirname as tk}from"node:path";import{loadSqliteDb as ek}from"@cline/shared/db";var VU=3;class KU extends Error{lockFile;constructor($){super(`Hub instance lock is held by a live Hub: ${$}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=$}}function E9($){return $ instanceof Error&&$.name==="HubLockHeldError"}function BU($){return`${$}.instance.lock`}class Z6{db;lockFile;constructor($,Z){this.lockFile=$,this.db=Z}get held(){return this.db!==void 0}release(){let $=this.db;if(!$)return;this.db=void 0;try{$.exec("ROLLBACK;")}catch{}$.close?.()}static acquire($){let Z=!1,Q;try{sk(tk($),{recursive:!0}),Z=ok($),Q=ek($)}catch{return new Z6($,void 0)}try{Q.exec("PRAGMA busy_timeout = 0;"),Q.exec("BEGIN EXCLUSIVE;")}catch(J){if(Q.close?.(),$y(J))throw new KU($);return new Z6($,void 0)}if(!Z)try{nk($,384)}catch{}return new Z6($,Q)}}function $y($){let Z=$ instanceof Error?$.message:String($),Q=$?.code;return Q==="SQLITE_BUSY"||Q==="SQLITE_LOCKED"||Z.includes("SQLITE_BUSY")||Z.includes("SQLITE_LOCKED")||Z.includes("database is locked")}import{join as _y}from"node:path";import{createHash as Zy,randomBytes as DU}from"node:crypto";import{mkdir as nQ,open as GU,readFile as _U,rename as Qy,rm as R9,writeFile as Jy}from"node:fs/promises";import{dirname as zU,join as oQ}from"node:path";import{isHubProtocolCompatible as Xy}from"@cline/shared";import{resolveClineDataDir as I4,resolveClineDir as U20}from"@cline/shared/storage";var Yy="CLINE_HUB_DISCOVERY_PATH",Wy="CLINE_HUB_BUILD_ID",jy="CLINE_HUB_BUILD_EPOCH_MS",Vy=30000,Ky=15000,HU=100;function By($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Gy($){return Zy("sha256").update($).digest("hex").slice(0,12)}function Hy($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function OU(){return DU(32).toString("hex")}function UU($){return new Promise((Z)=>setTimeout(Z,$))}function Uy($){return`${$}.lock`}async function Fy($){try{let Z=JSON.parse(await _U(oQ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function rQ($){await R9($,{recursive:!0,force:!0}).catch(()=>{return})}function U$(){let $=process.env[Wy]?.trim();if($)return $;return"sdk-v1-0c7290d109800148a2ee6c68832123073f3e04b020ebdfd6a55983a47b314e02".trim()||`source-${String(x$.version)}`}function sQ(){let $=Number(process.env[jy]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1790047513229)?1790047513229:void 0}function P9($,Z=U$()){let Q=Xy($);if(!Q.compatible)return Q;let J=$.buildId?.trim();if(!J)return{compatible:!1,reason:"missing_build"};if(J!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function FU($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function LU($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((J)=>Number(J));if(Q.length===0||Q.some((J)=>!Number.isInteger(J)||J<0))return;return Q}function Ly($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let J=$[Q]??0,X=Z[Q]??0;if(J!==X)return J<X?-1:1}return 0}function qU($,Z){let Q=$.buildId?.trim(),J=Z.buildId?.trim();if(Q&&J&&Q===J)return 0;let X=FU($.buildEpochMs),Y=FU(Z.buildEpochMs);if(X!==void 0&&Y!==void 0&&X!==Y)return X<Y?-1:1;let W=LU($.coreVersion),j=LU(Z.coreVersion);if(W&&j){let V=Ly(W,j);if(V!==0)return V}if(Q&&J&&Q!==J)return Q<J?-1:1;return 0}function NU(){return{buildId:U$(),buildEpochMs:sQ(),coreVersion:String(x$.version)}}function x4($,Z){let Q=Z?.self??NU(),J=P9($,Q.buildId??"");if(J.compatible)return!0;if(J.reason!=="build_mismatch"&&J.reason!=="missing_build")return!1;return qU(Q,$)<=0}function C9($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Gy($)}`,Q=process.env[Yy]?.trim()||oQ(I4(),"locks","hub","owners",`${By(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}async function s1($){try{let Z=JSON.parse(await _U($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function w9($,Z){await tQ($,async()=>{let Q=zU($);await nQ(Q,{recursive:!0});let J=`${$}.${process.pid}.${DU(6).toString("hex")}.tmp`,X;try{X=await GU(J,"wx",384),await X.writeFile(`${JSON.stringify(Z,null,2)}
512
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,K0()])}}function xk($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function hk($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function WU($={}){let Z=async(J)=>J,Q=new f4({sessionService:new y4(new k4),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J,X){let Y=(J.cwd?.trim()||J.workspaceRoot).trim(),W=await Q.startSession({source:P0.CORE,mode:"automation",sessionMetadata:n0(X?.sessionMetadata,{mode:"automation",trigger:J.source}),interactive:!1,config:{providerId:Ik(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Y,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:hk(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,agentPluginPaths:J.agentPluginPaths,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(J,X){let Y=await Q.runTurn({sessionId:J,prompt:X.prompt,userImages:X.attachments?.userImages,userFiles:X.attachments?.userFiles?.map((W)=>W.content)});if(!Y)throw Error("local hub schedule runtime returned no turn result");return{result:xk(Y)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}import{CLINE_HUB_DEV_PORT as vk,CLINE_HUB_PORT as gk,resolveClineBuildEnv as mk}from"@cline/shared";var uk="CLINE_HUB_HOST",ck="CLINE_HUB_PORT",pk="CLINE_HUB_PATHNAME",dk="127.0.0.1",lk=gk,ik="/hub";function jU($){return mk($)==="development"?vk:lk}function ak($={}){return($.env??process.env)[uk]?.trim()||dk}function aQ($={}){let Q=($.env??process.env)[ck]?.trim();if(!Q)return jU($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return jU($);return J}function rk($={}){return($.env??process.env)[pk]?.trim()||ik}function M9($={},Z={}){return{host:$.host??ak(Z),port:$.port??aQ(Z),pathname:$.pathname??rk(Z)}}import{chmodSync as nk,existsSync as ok,mkdirSync as sk}from"node:fs";import{dirname as tk}from"node:path";import{loadSqliteDb as ek}from"@cline/shared/db";var VU=3;class KU extends Error{lockFile;constructor($){super(`Hub instance lock is held by a live Hub: ${$}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=$}}function E9($){return $ instanceof Error&&$.name==="HubLockHeldError"}function BU($){return`${$}.instance.lock`}class Z6{db;lockFile;constructor($,Z){this.lockFile=$,this.db=Z}get held(){return this.db!==void 0}release(){let $=this.db;if(!$)return;this.db=void 0;try{$.exec("ROLLBACK;")}catch{}$.close?.()}static acquire($){let Z=!1,Q;try{sk(tk($),{recursive:!0}),Z=ok($),Q=ek($)}catch{return new Z6($,void 0)}try{Q.exec("PRAGMA busy_timeout = 0;"),Q.exec("BEGIN EXCLUSIVE;")}catch(J){if(Q.close?.(),$y(J))throw new KU($);return new Z6($,void 0)}if(!Z)try{nk($,384)}catch{}return new Z6($,Q)}}function $y($){let Z=$ instanceof Error?$.message:String($),Q=$?.code;return Q==="SQLITE_BUSY"||Q==="SQLITE_LOCKED"||Z.includes("SQLITE_BUSY")||Z.includes("SQLITE_LOCKED")||Z.includes("database is locked")}import{join as _y}from"node:path";import{createHash as Zy,randomBytes as DU}from"node:crypto";import{mkdir as nQ,open as GU,readFile as _U,rename as Qy,rm as R9,writeFile as Jy}from"node:fs/promises";import{dirname as zU,join as oQ}from"node:path";import{isHubProtocolCompatible as Xy}from"@cline/shared";import{resolveClineDataDir as I4,resolveClineDir as U20}from"@cline/shared/storage";var Yy="CLINE_HUB_DISCOVERY_PATH",Wy="CLINE_HUB_BUILD_ID",jy="CLINE_HUB_BUILD_EPOCH_MS",Vy=30000,Ky=15000,HU=100;function By($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Gy($){return Zy("sha256").update($).digest("hex").slice(0,12)}function Hy($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function OU(){return DU(32).toString("hex")}function UU($){return new Promise((Z)=>setTimeout(Z,$))}function Uy($){return`${$}.lock`}async function Fy($){try{let Z=JSON.parse(await _U(oQ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function rQ($){await R9($,{recursive:!0,force:!0}).catch(()=>{return})}function U$(){let $=process.env[Wy]?.trim();if($)return $;return"sdk-v1-7a06925efdddafd91fa32d8c54bdc4f26c316a2e7a7db1f707c69264416f8117".trim()||`source-${String(x$.version)}`}function sQ(){let $=Number(process.env[jy]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1790064761572)?1790064761572:void 0}function P9($,Z=U$()){let Q=Xy($);if(!Q.compatible)return Q;let J=$.buildId?.trim();if(!J)return{compatible:!1,reason:"missing_build"};if(J!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function FU($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function LU($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((J)=>Number(J));if(Q.length===0||Q.some((J)=>!Number.isInteger(J)||J<0))return;return Q}function Ly($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let J=$[Q]??0,X=Z[Q]??0;if(J!==X)return J<X?-1:1}return 0}function qU($,Z){let Q=$.buildId?.trim(),J=Z.buildId?.trim();if(Q&&J&&Q===J)return 0;let X=FU($.buildEpochMs),Y=FU(Z.buildEpochMs);if(X!==void 0&&Y!==void 0&&X!==Y)return X<Y?-1:1;let W=LU($.coreVersion),j=LU(Z.coreVersion);if(W&&j){let V=Ly(W,j);if(V!==0)return V}if(Q&&J&&Q!==J)return Q<J?-1:1;return 0}function NU(){return{buildId:U$(),buildEpochMs:sQ(),coreVersion:String(x$.version)}}function x4($,Z){let Q=Z?.self??NU(),J=P9($,Q.buildId??"");if(J.compatible)return!0;if(J.reason!=="build_mismatch"&&J.reason!=="missing_build")return!1;return qU(Q,$)<=0}function C9($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Gy($)}`,Q=process.env[Yy]?.trim()||oQ(I4(),"locks","hub","owners",`${By(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}async function s1($){try{let Z=JSON.parse(await _U($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function w9($,Z){await tQ($,async()=>{let Q=zU($);await nQ(Q,{recursive:!0});let J=`${$}.${process.pid}.${DU(6).toString("hex")}.tmp`,X;try{X=await GU(J,"wx",384),await X.writeFile(`${JSON.stringify(Z,null,2)}
513
513
  `,{encoding:"utf8"}),await X.sync(),await X.close(),X=void 0,await Qy(J,$);let Y;try{Y=await GU(Q,"r"),await Y.sync()}catch{}finally{await Y?.close().catch(()=>{return})}}catch(Y){throw await X?.close().catch(()=>{return}),await R9(J,{force:!0}).catch(()=>{return}),Y}})}async function s$($){await tQ($,async()=>{await R9($,{force:!0}).catch(()=>{return})})}async function AU($,Z){return await tQ($,async()=>{if((await s1($))?.hubId!==Z)return!1;return await R9($,{force:!0}),!0})}async function TU($,Z,Q){let J=Uy($);await nQ(zU(J),{recursive:!0});let X=Date.now()+Ky;while(!0){try{await nQ(J,{recursive:!1})}catch(Y){if((Y instanceof Error&&"code"in Y?String(Y.code):"")!=="EEXIST")throw Y;let j=await Fy(J);if(!j){if(Date.now()>=X){await rQ(J);continue}await UU(HU);continue}let V=Date.now()-Date.parse(j.acquiredAt);if(!Hy(j.pid)||V>Vy){await rQ(J);continue}if(Date.now()>=X)throw Error(`Timed out waiting for hub ${Z} lock ${J}`);await UU(HU);continue}try{return await Jy(oQ(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
514
514
  `,"utf8"),await Q()}finally{await rQ(J)}}}function tQ($,Z){return TU(`${$}.mutation`,"discovery mutation",Z)}function eQ($,Z){return TU($,"startup",Z)}async function h4($,Z){try{let Q=await fetch(Z?.authToken?Dy($):MU($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((X)=>typeof X==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,buildEpochMs:typeof J.buildEpochMs==="number"?J.buildEpochMs:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function v4($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function MU($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function Dy($){let Z=new URL(MU($));return Z.pathname="/status",Z.toString()}var zy="shared:cline",Oy="CLINE_HUB_DISCOVERY_PATH",qy="hub-production";function t$($=zy){return C9(`${$}@${U$()}`)}function Q6(){return{ownerId:qy,discoveryPath:process.env[Oy]?.trim()||_y(I4(),"locks","hub","production.json")}}function Ny($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
515
515
  `).trim()||void 0}var EU=120,$J="...";function ZJ($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=EU)return Z;let Q=EU-Buffer.byteLength($J,"utf8");if(Q<=0)return $J;let J="";for(let X of Z){if(Buffer.byteLength(J+X,"utf8")>Q)break;J+=X}return`${J}${$J}`}async function RU($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,X=[...await n$(Q)].reverse().find((V)=>V.role==="assistant"),Y=X?Ny(X.content):void 0,W=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():W;return{title:`Task completed (${Z})`,body:ZJ(Y&&Y.length>0?Y:j.length>0?j:W),severity:"info"}}import{resolve as pv}from"node:path";import{CLINE_DEFAULT_MODEL_ID as dv,captureSdkError as n9,createSessionId as KX,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as lv}from"@cline/shared";import{isChatWorkspacePath as iv}from"@cline/shared/storage";function g4($){return!!$&&typeof $==="object"&&!Array.isArray($)}function QJ($){let Z=$?.trim();return Z?Z:void 0}function Ay($,Z){let Q=$?.trim();if(!Q)return Z;let J=Date.parse(Q);if(!Number.isFinite(J))return Z;return new Date(J).toISOString()}function PU($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function CU($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function Ty($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function My($,Z){let Q=$.eventId.trim(),J=$.eventType.trim(),X=$.source.trim(),Y=QJ($.subject),W=QJ($.dedupeKey)??`${J}:${X}:${Y??Q}`;return{eventId:Q,eventType:J,source:X,subject:Y,occurredAt:Ay($.occurredAt,Z),workspaceRoot:QJ($.workspaceRoot),payload:g4($.payload)?$.payload:void 0,attributes:g4($.attributes)?$.attributes:void 0,dedupeKey:W}}function JJ($,Z){if(!Z)return;let Q=Z.split("."),J=$;for(let X of Q){if(!g4(J))return;J=J[X]}return J}function Ey($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},J=JJ(Q,Z);if(J!==void 0)return J;if($.attributes){let X=JJ($.attributes,Z);if(X!==void 0)return X}if($.payload)return JJ($.payload,Z);return}function f9($,Z){if(Array.isArray(Z))return Z.some((Q)=>f9($,Q));if(Array.isArray($))return $.some((Q)=>f9(Q,Z));if(g4(Z)){if(!g4($))return!1;return Object.entries(Z).every(([Q,J])=>f9($[Q],J))}return Object.is($,Z)}function Ry($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,J])=>f9(Ey($,Q),J))}class XJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=My($,Z);try{let J=this.store.eventTransaction(()=>this.materializeEvent(Q,Z));return this.logger?.debug(J.duplicate?"cron.event.duplicate":"cron.event.processed",{eventId:J.event.eventId,eventType:J.event.eventType,source:J.event.source,status:J.event.processingStatus,matchedSpecCount:J.event.matchedSpecCount,queuedRunCount:J.event.queuedRunCount}),J}catch(J){throw this.logger?.error?.("cron.event.failed",{eventId:Q.eventId,eventType:Q.eventType,error:J}),J}}materializeEvent($,Z){let Q=this.store.insertEventLog($,{receivedAtIso:Z});if(!Q.created)return{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};let J=this.store.listEventSpecsForType($.eventType),X=[],Y=[],W=[];for(let K of J){if(!Ry($,K.filters)){X.push({specId:K.specId,externalId:K.externalId,reason:"filter_mismatch",dedupeKey:$.dedupeKey});continue}Y.push(K);let B=this.materializeForSpec(K,$,Q.record.receivedAt);if(B.run)W.push(B.run);else X.push({specId:K.specId,externalId:K.externalId,reason:B.reason,dedupeKey:$.dedupeKey})}let j=Y.length===0?"unmatched":W.length>0?"queued":"suppressed";return this.store.updateEventLogProcessing(Q.record.eventId,{status:j,matchedSpecCount:Y.length,queuedRunCount:W.length,suppressedCount:X.filter((K)=>K.reason!=="filter_mismatch").length}),{event:this.store.getEventLog(Q.record.eventId)??Q.record,duplicate:!1,matchedSpecs:Y,queuedRuns:W,suppressions:X}}materializeForSpec($,Z,Q){let J=Z.dedupeKey??Z.eventId,X=$.debounceSeconds??0;if(X>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:J});if(V){let K=Ty(V.scheduledFor,PU(Q,X)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:K});if(B)return{run:B,reason:"dedupe_window"}}}let Y=$.dedupeWindowSeconds??0;if(Y>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:J,sinceIso:CU(Q,Y)}))return{reason:"dedupe_window"};let W=$.cooldownSeconds??0;if(W>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:CU(Q,W)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:X>0?PU(Q,X):Q}),reason:"dedupe_window"}}}class m4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let J of Z)if(this.materializeOneOff(J))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of Q)try{if(this.materializeSchedule(J))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasConsumedOneOffRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:$.nextRunAt??new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as hy}from"node:path";import{buildClineSystemPrompt as vy}from"@cline/shared";import{nowIso as kU}from"@cline/shared/db";import{mkdirSync as Py,writeFileSync as Cy}from"node:fs";import{isAbsolute as wy,join as fU}from"node:path";import{resolveCronReportsDir as fy,resolveCronSpecsDir as Sy}from"@cline/shared/storage";function F$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function G1($,Z){if(Z===void 0||Z===null)return;return`${$}: ${F$(Z)}`}function SU($){let Z=0;for(let J of $.matchAll(/`+/g))Z=Math.max(Z,J[0].length);let Q="`".repeat(Math.max(3,Z+1));return`${Q}
package/dist/hub/index.js CHANGED
@@ -308,7 +308,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
308
308
  scheduled_for = COALESCE(?, scheduled_for),
309
309
  updated_at = ?
310
310
  WHERE run_id = ? AND claim_token = ?`).run($.releaseAttempt?1:0,$.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z,Q){return(this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ? AND claim_token = ? AND status = 'running'").run(Z,E0(),$,Q).changes??0)===1}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,E0(),$)}}function S8($){return $?new Date($).getTime():void 0}function e_($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function k6($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?y6:$.scheduleExpr??"",timezone:$.triggerKind==="schedule"?$.timezone:void 0,prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:S8($.nextRunAt),lastRunAt:S8($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:e_($)}}function $O($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function PZ($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:S8($.startedAt),endedAt:S8($.completedAt),status:$O($.status),errorMessage:$.error}}class b8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new b6({dbPath:$.dbPath}),this.materializer=new M6({store:this.store}),this.runner=new P6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",specs:$.specs,logger:$.logger,telemetry:$.telemetry,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){let Z=$.cronPattern===y6?$.timezone:$.timezone?.trim()||Intl.DateTimeFormat().resolvedOptions().timeZone;if(this.validateScheduleTiming($.cronPattern,Z,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return k6(this.store.createHubSchedule({...$,timezone:Z}))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?k6(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>k6(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let J=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,X=Z.enabled??Q.enabled,Y=k6(Q),W=Z.cronPattern??Y.cronPattern;if(W.trim()===y6&&typeof Z.timezone==="string"&&Z.timezone.trim())throw Error("timezone is only supported for recurring schedules");if(this.validateScheduleTiming(W,W.trim()===y6?void 0:Z.timezone===null?void 0:Z.timezone??Y.timezone,Z.metadata??Y.metadata,X),X&&!J)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...Z,scheduleId:$});return j?k6(j):void 0}validateScheduleTiming($,Z,Q,J){if($.trim()!==y6){vY($),MZ(Z);return}if(Z?.trim())throw Error("timezone is only supported for recurring schedules");let X=Q?.[t_];if(typeof X!=="number"||!Number.isFinite(X)||J&&X<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return PZ(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),PZ(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((X)=>{let Y=Z??this.store.getSpec(X.specId);if(!Y||Y.source!=="hub-schedule")return;return PZ(X,Y.externalId)}).filter((X)=>{if(!X)return!1;return!$.status||X.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,J=0,X=0,Y;for(let W of Z){if(W.status==="success"||W.status==="completed")Q+=1;if(!Y&&W.status!=="success"&&W.status!=="completed")Y=W;if(W.startedAt&&W.endedAt)X+=W.endedAt-W.startedAt,J+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:J>0?X/J/1000:0,lastFailure:Y}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,J)=>String(Q.nextRunAt).localeCompare(String(J.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:J})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:J}))}}import{realpathSync as wZ,statSync as ZO}from"node:fs";import{isAbsolute as nY,relative as QO,sep as oY}from"node:path";import{ONE_TIME_SCHEDULE_CRON_PATTERN as sY,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as tY}from"@cline/shared";import{z as F0}from"zod";var JO=F0.enum(["create","update","list","get","pause","resume","delete","run_now"]),XO=F0.object({provider_id:F0.string().min(1),model_id:F0.string().min(1).optional()}),S2=F0.object({operation:JO,schedule_id:F0.string().min(1).optional(),schedule_type:F0.enum(["once","recurring"]).optional(),name:F0.string().min(1).optional(),prompt:F0.string().min(1).optional(),run_at:F0.string().datetime({offset:!0}).optional(),cron_pattern:F0.string().min(1).optional(),timezone:F0.string().min(1).nullable().optional().describe("IANA timezone for recurring schedules. Omit unless the user explicitly requests a timezone; new schedules default to the local timezone. Updates preserve the existing timezone when omitted."),enabled:F0.boolean().optional(),mode:F0.enum(["act","plan","yolo"]).optional(),system_prompt:F0.string().nullable().optional(),max_iterations:F0.number().int().positive().nullable().optional(),timeout_seconds:F0.number().int().positive().nullable().optional(),max_parallel:F0.number().int().positive().max(32).optional(),tags:F0.array(F0.string().min(1)).optional(),model_selection:XO.optional(),limit:F0.number().int().positive().max(200).optional()});function C2($,Z,Q,J){if(!eY.has(Z.operation))return;Y$($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.scheduled.${Z.operation}`,success:J,agentId:Q.agentId})}var eY=new Set(["create","update","pause","resume","delete","run_now"]);function f2($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function fZ($,Z){try{let Q=wZ.native($);if(!ZO(Q).isDirectory())throw Error("not a directory");return Q}catch{throw Error(`${Z} does not resolve to an existing safe path`)}}function YO($,Z){try{return wZ.native($)===wZ.native(Z)}catch{return!1}}function $W($,Z,Q){let J=QO($,Z);if(J===".."||J.startsWith(`..${oY}`)||nY(J))throw Error(`${Q} is outside the workspace scope`)}function ZW($,Z,Q){return fZ(nY(Z)?Z:`${$}${oY}${Z}`,Q)}function WO($){let Z=fZ($.workspaceRoot,"workspaceRoot"),Q=$.cwd?ZW(Z,$.cwd,"cwd"):Z;return $W(Z,Q,"cwd"),{...$,workspaceRoot:Z,cwd:Q}}function w2($,Z){if(!$)throw Error("schedule does not exist");if(!YO($.workspaceRoot,Z.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let Q=fZ($.workspaceRoot,"schedule workspaceRoot");if($.cwd){let J=ZW(Q,$.cwd,"schedule cwd");$W(Q,J,"schedule cwd")}}function rY($){if(!$)return;return{providerId:$.provider_id.trim(),modelId:$.model_id?.trim()||void 0}}function CZ($){if(!$)return;return[...new Set($.map((Z)=>Z.trim()).filter(Boolean))]}function QW($){let Z=Date.parse(f2($,"run_at"));if(!Number.isFinite(Z))throw Error("run_at must be an ISO timestamp");if(Z<=Date.now())throw Error("run_at must be in the future");return Z}function jO($){if($.schedule_type==="once"){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:sY,metadata:{[tY]:QW($.run_at)}}}if($.schedule_type==="recurring"){if($.run_at)throw Error("run_at cannot be used with a recurring schedule");return{cronPattern:f2($.cron_pattern,"cron_pattern"),timezone:$.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function VO($){if($.run_at&&$.cron_pattern)throw Error("run_at and cron_pattern cannot be updated together");if($.schedule_type==="once"||$.run_at){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:sY,timezone:null,metadata:{[tY]:QW($.run_at)}}}if($.schedule_type==="recurring"||$.cron_pattern)return{cronPattern:f2($.cron_pattern,"cron_pattern"),timezone:$.timezone===null?null:$.timezone?.trim()||void 0};return{timezone:$.timezone===null?null:$.timezone?.trim()||void 0}}function x6($){return f2($.schedule_id,"schedule_id")}async function SZ($,Z,Q){let J=S2.safeParse(Z);if(!J.success)return{ok:!1,error:{code:"invalid_schedule_input",message:J.error.issues[0]?.message??"Invalid schedule input"}};let X=J.data;try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let Y=await $.resolveSessionDefaults(Q.sessionId);if(!Y?.workspaceRoot.trim())throw Error("tasks could not resolve the current workspace");let W=WO(Y);if(eY.has(X.operation)&&!W.interactive)throw Error("schedule mutations require an interactive user session");switch(X.operation){case"create":{let j=$.schedules.createSchedule({name:f2(X.name,"name"),...jO(X),prompt:f2(X.prompt,"prompt"),workspaceRoot:W.workspaceRoot,cwd:W.cwd,modelSelection:rY(X.model_selection)??W.modelSelection,enabled:X.enabled,mode:X.mode??"yolo",systemPrompt:X.system_prompt??void 0,maxIterations:X.max_iterations??void 0,timeoutSeconds:X.timeout_seconds??void 0,maxParallel:X.max_parallel??1,createdBy:`agent:${Q.agentId}`,tags:CZ(X.tags)});return $.publish?.("schedule.created",{schedule:j},Q.sessionId),C2($,X,Q,!0),{ok:!0,operation:X.operation,schedule:j}}case"update":{let j=x6(X);w2($.schedules.getSchedule(j),W);let V=$.schedules.updateSchedule(j,{scheduleId:j,...VO(X),name:X.name?.trim()||void 0,prompt:X.prompt?.trim()||void 0,modelSelection:rY(X.model_selection),enabled:X.enabled,mode:X.mode,systemPrompt:X.system_prompt,maxIterations:X.max_iterations,timeoutSeconds:X.timeout_seconds,maxParallel:X.max_parallel,tags:CZ(X.tags)});if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),C2($,X,Q,!0),{ok:!0,operation:X.operation,schedule:V}}case"list":{let j=$.schedules.listSchedules({enabled:X.enabled,tags:CZ(X.tags),workspaceRoot:W.workspaceRoot,limit:X.limit??50}).filter((V)=>{try{return w2(V,W),!0}catch{return!1}}).slice(0,X.limit??50);return{ok:!0,operation:X.operation,schedules:j}}case"get":{let j=$.schedules.getSchedule(x6(X));return w2(j,W),{ok:!0,operation:X.operation,schedule:j}}case"pause":case"resume":{let j=x6(X);w2($.schedules.getSchedule(j),W);let V=X.operation==="pause"?$.schedules.pauseSchedule(j):$.schedules.resumeSchedule(j);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),C2($,X,Q,!0),{ok:!0,operation:X.operation,schedule:V}}case"delete":{let j=x6(X);w2($.schedules.getSchedule(j),W);let V=$.schedules.deleteSchedule(j);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.deleted",{deleted:V,scheduleId:j},Q.sessionId),C2($,X,Q,!0),{ok:!0,operation:X.operation,deleted:V}}case"run_now":{let j=x6(X);w2($.schedules.getSchedule(j),W);let V=$.schedules.triggerScheduleNowDetached(j);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.triggered",{execution:V},Q.sessionId),C2($,X,Q,!0),{ok:!0,operation:X.operation,execution:V}}}}catch(Y){return C2($,X,Q,!1),{ok:!1,operation:X.operation,error:{code:"schedule_operation_failed",message:Y instanceof Error?Y.message:String(Y)}}}}import{LangfuseAttributesSpanProcessor as yO}from"@cline/llms";import{markOtlpTraceRelayProvider as xO}from"@cline/shared";import{metrics as IO,trace as hO}from"@opentelemetry/api";import{logs as vO}from"@opentelemetry/api-logs";import{OTLPLogExporter as gO}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as mO}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as uO}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as cO}from"@opentelemetry/resources";import{BatchLogRecordProcessor as pO,ConsoleLogRecordExporter as dO,LoggerProvider as lO}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as iO,MeterProvider as aO,PeriodicExportingMetricReader as qW}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as rO,ConsoleSpanExporter as nO,SimpleSpanProcessor as oO}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as sO}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as tO,ATTR_SERVICE_VERSION as eO}from"@opentelemetry/semantic-conventions";import{mkdirSync as KO,readFileSync as BO,statSync as GO,writeFileSync as UO}from"node:fs";import{dirname as HO}from"node:path";import{CONFIGURABLE_MODEL_TOOL_NAMES as JW}from"@cline/shared";import{resolveGlobalSettingsPath as XW}from"@cline/shared/storage";import{z as I0}from"zod";var bZ=I0.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,I0.array(I0.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,J)=>Q.localeCompare(J));return Z.length>0?Z:void 0}),FO=I0.enum(["basic","agentic"]).catch("agentic"),LO=I0.partialRecord(I0.enum(JW),I0.object({enabled:I0.boolean()}).strip()).optional(),DO=I0.enum(["plan","act"]),kZ=I0.object({telemetryOptOut:I0.boolean().default(!1).catch(!1),autoUpdateEnabled:I0.boolean().default(!0).catch(!0),compactionStrategy:FO.optional(),compactionEnabled:I0.boolean().optional().catch(void 0),planActMode:DO.optional().catch(void 0),toolAutoApprove:I0.boolean().optional().catch(void 0),tuiTheme:I0.string().optional().catch(void 0),disabledTools:bZ.optional(),tools:LO,disabledPlugins:bZ.optional(),disabledAgentPlugins:bZ.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.compactionEnabled!==void 0)Z.compactionEnabled=$.compactionEnabled;if($.planActMode)Z.planActMode=$.planActMode;if($.toolAutoApprove!==void 0)Z.toolAutoApprove=$.toolAutoApprove;if($.tuiTheme?.trim())Z.tuiTheme=$.tuiTheme.trim();if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.tools&&Object.keys($.tools).length>0)Z.tools=$.tools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;if($.disabledAgentPlugins?.length)Z.disabledAgentPlugins=$.disabledAgentPlugins;return Z});function k8(){return kZ.parse({})}var y8;function _O(){y8=void 0}function OO($){if($.disabledTools)Object.freeze($.disabledTools);if($.tools){for(let Z of Object.values($.tools))Object.freeze(Z);Object.freeze($.tools)}if($.disabledPlugins)Object.freeze($.disabledPlugins);if($.disabledAgentPlugins)Object.freeze($.disabledAgentPlugins);return Object.freeze($)}function zO($){let Z;try{Z=BO($,"utf8")}catch{return{value:k8(),loadFailed:!0}}try{let Q=kZ.safeParse(JSON.parse(Z));return Q.success?{value:Q.data,loadFailed:!1}:{value:k8(),loadFailed:!0}}catch{return{value:k8(),loadFailed:!0}}}function YW(){let $=XW(),Z=GO($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,J=Z?.size??0,X=y8;if(X&&X.path===$&&X.mtimeMs===Q&&X.size===J)return X;let Y=Z?zO($):{value:k8(),loadFailed:!1},W=OO(Y.value);return y8={path:$,mtimeMs:Q,size:J,value:W,loadFailed:Y.loadFailed},y8}function J1(){return YW().value}function I6($,Z={}){let Q=XW(),J=J1();KO(HO(Q),{recursive:!0});let X=kZ.parse($);if(!J.telemetryOptOut&&X.telemetryOptOut)$Y(Z.telemetry);UO(Q,`${JSON.stringify(X,null,2)}
311
- `,"utf8"),_O()}function WW(){return J1().telemetryOptOut}function S$($){return new Set($??J1().disabledTools??[])}function jW($){return new Set($??J1().disabledPlugins??[])}function h6($){return new Set($??J1().disabledAgentPlugins??[])}function VW($){return JW.includes($)}function qO(){let $=YW();return{web_search:{enabled:!$.loadFailed},...$.value.tools}}function yZ($){return qO()[$]?.enabled===!0}function NO($,Z){let Q=J1();I6({...Q,tools:{...Q.tools,[$]:{enabled:Z}}})}function KW($){if(VW($)){let X=yZ($);return NO($,!X),X}let Z=J1(),Q=new Set(Z.disabledTools??[]),J=Q.has($);if(J)Q.delete($);else Q.add($);return I6({...Z,disabledTools:[...Q]}),!J}function AO($,Z){let Q=[...new Set($.map((W)=>W.trim()).filter(Boolean))];if(Q.length===0)return;let J=J1(),X=S$(J.disabledTools),Y={...J.tools};for(let W of Q){if(VW(W)){Y[W]={enabled:!Z};continue}if(Z)X.add(W);else X.delete(W)}I6({...J,disabledTools:[...X],tools:Y})}function BW($,Z){return AO([$],Z),Z}function GW($,Z){let Q=$.trim();if(!Q)return;let J=J1(),X=jW(J.disabledPlugins);if(Z)X.add(Q);else X.delete(Q);I6({...J,disabledPlugins:[...X]})}function UW($,Z){let Q=$.trim();if(!Q)return;let J=J1(),X=h6(J.disabledAgentPlugins);if(Z)X.add(Q);else X.delete(Q);I6({...J,disabledAgentPlugins:[...X]})}function HW($,Z){let Q=jW(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J))}function b$($,Z){let Q=S$(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J.name))}function FW($,Z){if(!$||$.length===0)return $;let Q=S$(Z);if(Q.size===0)return $;return $.map((J)=>{if(!J.setup)return J;return{...J,setup:(X,Y)=>J.setup?.({...X,registerTool:(W)=>{if(!Q.has(W.name))X.registerTool(W)}},Y)}})}import{existsSync as TO,mkdirSync as MO,readFileSync as EO,writeFileSync as RO}from"node:fs";import{resolve as PO}from"node:path";import{resolveSessionDataDir as CO}from"@cline/shared/storage";import{nanoid as wO}from"nanoid";import*as fO from"node-machine-id";var SO="machine-id",LW,DW=!1;function _W(){if(!DW)LW=OW(),DW=!0;return LW??zW()}function v6($){let Z=$?.trim();if(Z)return Z;let Q=OW();if(Q)return Q;return zW()}function bO(){let $=fO;return $.machineIdSync??$.default?.machineIdSync}function OW(){try{let $=bO();if(!$)return;return $().trim()||void 0}catch{return}}function zW(){let $=CO(),Z=PO($,SO);try{if(TO(Z)){let J=EO(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${wO()}`;try{MO($,{recursive:!0}),RO(Z,Q,"utf8")}catch{}return Q}class xZ{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,J,X=!1){if(!this.meter||!X&&!this.isEnabled())return;let Y=this.counters.get($);if(!Y)Y=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,Y);Y.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,X=!1){if(!this.meter||!X&&!this.isEnabled())return;let Y=this.histograms.get($);if(!Y)Y=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,Y);Y.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,X=!1){if(!this.meter||!X&&!this.isEnabled())return;let Y=this.buildAttributes(Q),W=JSON.stringify(Y),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(W),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let K=this.meter.createObservableGauge($,J?{description:J}:void 0);K.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,K)}V.set(W,{value:Z,attributes:Y})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,J=0){if(!$)return{};let X={},Y=100,W=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let K=Z?`${Z}.${j}`:j;if(V===null||V===void 0){X[K]=String(V);continue}if(Array.isArray(V)){let B=V.length>Y?V.slice(0,Y):V;try{X[K]=JSON.stringify(B)}catch{X[K]="[UnserializableArray]"}if(V.length>Y)X[`${K}_truncated`]=!0,X[`${K}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){X[K]=V.toISOString();continue}if(V instanceof Error){X[K]=V.message;continue}if(Q.has(V)){X[K]="[Circular]";continue}if(J>=W){X[K]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(X,this.flattenProperties(V,K,Q,J+1));continue}if(kO(V)){X[K]=V;continue}try{X[K]=JSON.stringify(V)}catch{X[K]=String(V)}}return X}}function kO($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class IZ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,J,X){if(!X&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:X===!0})}recordHistogram($,Z,Q,J,X){if(!X&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:X===!0})}recordGauge($,Z,Q,J,X){if(!X&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:X===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class x8{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new IZ({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??_W(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,X=!1){let Y=this.buildAttributes(Q);for(let W of this.adapters)W.recordCounter($,Z,Y,J,X)}recordHistogram($,Z,Q,J,X=!1){let Y=this.buildAttributes(Q);for(let W of this.adapters)W.recordHistogram($,Z,Y,J,X)}recordGauge($,Z,Q,J,X=!1){let Y=this.buildAttributes(Q);for(let W of this.adapters)W.recordGauge($,Z,Y,J,X)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){let Z=typeof $?.distinct_id==="string"&&$.distinct_id.trim()?$.distinct_id.trim():this.distinctId,Q={...this.commonProperties,...this.metadata,...$,...Z?{distinct_id:Z}:{},device_id:this.deviceId};return Object.fromEntries(Object.entries(Q).filter(([,J])=>J!==void 0))}}class NW{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){let Z=typeof $?.distinct_id==="string"&&$.distinct_id.trim()?$.distinct_id.trim():this.distinctId,Q={...this.commonProperties,...this.metadata,...$,...Z?{distinct_id:Z}:{}};return Object.fromEntries(Object.entries(Q).filter(([,J])=>J!==void 0))}}class AW{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=cO({[tO]:$.serviceName??"cline",...$.serviceVersion?{[eO]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)IO.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)vO.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return hO.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new xZ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new x8({...$,adapters:[Z],distinctId:v6($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=hZ(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),X=Z.map((Y)=>Xz(Y,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((Y)=>Y!==null);if(X.length===0)return null;return new aO({resource:$,readers:X})}createTracerProvider($){let Z=hZ(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,X=[],Y=!1;for(let j of Z){let V=Jz(j,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(V){if(X.push(V),j!=="console")Y=!0}}if(X.length===0)return null;let W=new sO({resource:$,spanProcessors:Y?[new yO,...X]:X});if(Y)xO(W);return W}createLoggerProvider($){let Z=hZ(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let X=Qz(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!X)return null;return new pO(X,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new lO({resource:$,processors:Q})}}function $z($){let Z=new AW($),Q=Z.createTelemetryService($),J=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)J();return{provider:Z,telemetry:Q,emitProviderCreated:J}}function TW($){if(WW())return{telemetry:new NW($)};if($.enabled!==!0)return{telemetry:new x8({...$,distinctId:v6($.distinctId)})};return $z($)}function Zz($){let{telemetry:Z,provider:Q,emitProviderCreated:J}=TW($);return{telemetry:Z,provider:Q,flush:async()=>{let W=Q;if(W&&typeof W.forceFlush==="function")try{await W.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&J?{emitProviderCreated:J}:{}}}function hZ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function Qz($,Z){if($==="console")return new dO;if(!Z.endpoint)return null;let Q=vZ(Z.endpoint,"/v1/logs");return new gO({url:Q,headers:Z.headers})}function Jz($,Z){if($==="console")return new oO(new nO);if(!Z.endpoint)return null;let Q=vZ(Z.endpoint,"/v1/traces");return new rO(new uO({url:Q,headers:Z.headers}))}function Xz($,Z){if($==="console")return new qW({exporter:new iO,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=vZ(Z.endpoint,"/v1/metrics");return new qW({exporter:new mO({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function vZ($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}import{createTool as Kz,zodToJsonSchema as Bz}from"@cline/shared";import{z as w1}from"zod";import{resolve as MW}from"node:path";import{z as o}from"zod";var EW=o.enum(["suggestion","follow-up","todo","handoff","idea","reminder"]),Yz=o.enum(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),RW=o.union([o.literal(0),o.literal(1),o.literal(2),o.literal(3),o.literal(4),o.literal(5)]),Wz=o.object({provider_id:o.string().min(1),model_id:o.string().min(1).optional()}),I8=o.object({operation:o.enum(["create","update","list","get"]),task_id:o.string().min(1).optional(),expected_revision:o.number().int().positive().optional(),type:EW.optional(),title:o.string().min(1).optional(),description:o.string().nullable().optional(),instructions:o.string().min(1).optional(),scope:o.enum(["workspace","global"]).optional(),workspace_root:o.string().min(1).nullable().optional(),cwd:o.string().min(1).nullable().optional(),resource_paths:o.array(o.string().min(1)).optional(),priority:RW.optional(),assignee:o.string().min(1).nullable().optional(),model_selection:Wz.nullable().optional(),mode:o.enum(["act","plan","yolo"]).nullable().optional(),system_prompt:o.string().nullable().optional(),max_iterations:o.number().int().positive().nullable().optional(),timeout_seconds:o.number().int().positive().nullable().optional(),available_at:o.string().datetime().optional(),expires_at:o.string().datetime().optional(),automation_eligible:o.boolean().optional(),statuses:o.array(Yz).optional(),types:o.array(EW).optional(),priorities:o.array(RW).optional(),limit:o.number().int().positive().max(500).optional()}),jz=new Set(["create","update"]);function gZ($,Z,Q,J){if(!jz.has(Z.operation))return;Y$($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.todo.${Z.operation}`,success:J,agentId:Q.agentId})}function b2($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function PW($){if($===void 0||$===null)return $;return{providerId:$.provider_id,modelId:$.model_id}}function wW($,Z){return MW($)===MW(Z)}function CW($,Z){if(!$)throw Error("task does not exist");if(Z.workspaceRoot){if($.scope!=="workspace"||!$.workspaceRoot||!wW($.workspaceRoot,Z.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if($.scope!=="global")throw Error("task is outside this session's global scope")}function Vz($,Z){let Q=Z.workspaceRoot?"workspace":"global";if($.scope&&$.scope!==Q)throw Error(`this session can only manage ${Q} tasks`);if($.workspace_root!==void 0){if(!Z.workspaceRoot||$.workspace_root===null||!wW($.workspace_root,Z.workspaceRoot))throw Error(`this session can only manage ${Q} tasks`)}return Q}async function fW($,Z,Q){let J=I8.safeParse(Z);if(!J.success)return{ok:!1,error:{code:"invalid_task_input",message:J.error.issues[0]?.message??"Invalid task input"}};let X=J.data,Y={kind:"agent",id:Q.agentId,agentId:Q.agentId,sessionId:Q.sessionId};try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let W=await $.resolveSessionDefaults(Q.sessionId);if(!W)throw Error("tasks could not resolve the current session");let j=Vz(X,W);switch(X.operation){case"create":{let V={type:b2(X.type,"type"),title:b2(X.title,"title"),description:X.description??void 0,instructions:b2(X.instructions,"instructions"),scope:j,workspaceRoot:W.workspaceRoot,cwd:j==="workspace"?(X.cwd??W.cwd)?.trim()||void 0:void 0,resourcePaths:X.resource_paths,priority:X.priority,assignee:X.assignee??void 0,modelSelection:PW(X.model_selection)??W.modelSelection,mode:X.mode??void 0,systemPrompt:X.system_prompt??void 0,maxIterations:X.max_iterations??void 0,timeoutSeconds:X.timeout_seconds??void 0,availableAt:X.available_at,expiresAt:b2(X.expires_at,"expires_at"),automationEligible:X.automation_eligible,createdBy:Y,originSessionId:Q.sessionId,originTaskId:W.originTaskId},K={ok:!0,operation:X.operation,task:await $.manager.createTask(V)};return gZ($,X,Q,!0),K}case"update":{let V=b2(X.task_id,"task_id");if(CW(await $.manager.getTask(V),W),!X.expected_revision)throw Error("expected_revision is required for update");let K={ok:!0,operation:X.operation,task:await $.manager.updateTask({taskId:V,expectedRevision:X.expected_revision,type:X.type,title:X.title,description:X.description,instructions:X.instructions,scope:j,workspaceRoot:W.workspaceRoot??null,cwd:X.cwd,resourcePaths:X.resource_paths,priority:X.priority,assignee:X.assignee,modelSelection:PW(X.model_selection),mode:X.mode,systemPrompt:X.system_prompt,maxIterations:X.max_iterations,timeoutSeconds:X.timeout_seconds,availableAt:X.available_at,expiresAt:X.expires_at,automationEligible:X.automation_eligible,updatedBy:Y})};return gZ($,X,Q,!0),K}case"list":{let V={statuses:X.statuses,types:X.types,scope:j,workspaceRoot:W.workspaceRoot,priorities:X.priorities,automationEligible:X.automation_eligible,limit:X.limit};return{ok:!0,operation:X.operation,tasks:await $.manager.listTasks(V)}}case"get":{let V=await $.manager.getTask(b2(X.task_id,"task_id"));return CW(V,W),{ok:!0,operation:X.operation,task:V}}}}catch(W){return gZ($,X,Q,!1),{ok:!1,operation:X.operation,error:{code:"task_operation_failed",message:W instanceof Error?W.message:String(W)}}}}var g6="tasks",SW='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Scheduled sessions run in the user\'s schedules home workspace, not this conversation\'s folder. Include absolute paths in the scheduled `prompt` for any project files or repositories the work must touch.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',Gz="# Tasks\n\nUse the `tasks` tool only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. Always pass `kind: \"scheduled\"`.\n\n- One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- Never create a schedule proactively. Check existing schedules before creating a likely duplicate.\n- Make the scheduled `prompt` self-contained because it runs in a new unattended session in the user's schedules home workspace, not this conversation's folder. Include the goal, constraints, expected output, and absolute paths for any project files or repositories the work must touch.\n- Only update, pause, resume, delete, or run a schedule immediately when the user asks for that action.",Uz=I8.extend({kind:w1.literal("todo")}).strict(),bW=S2.extend({kind:w1.literal("scheduled")}).strict(),kW=w1.discriminatedUnion("kind",[Uz,bW]),Hz=w1.discriminatedUnion("kind",[bW]),yW=["create","update","list","get","pause","resume","delete","run_now"],Fz=w1.object({...S2.shape,...I8.shape,kind:w1.enum(["todo","scheduled"]),operation:w1.enum(yW)}).strict(),Lz=w1.object({...S2.shape,kind:w1.enum(["scheduled"]),operation:w1.enum(yW)}).strict();function mZ($){let Z=$.todo;return Kz({name:g6,description:Z?'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.':'Create and manage explicitly requested scheduled agent work with kind "scheduled". One-time schedules use a future ISO 8601 run_at; recurring schedules use a five-field cron_pattern.',inputSchema:Bz(Z?Fz:Lz),retryable:!1,maxRetries:0,execute:async(Q,J)=>{let X=(Z?kW:Hz).safeParse(Q);if(!X.success)return{ok:!1,kind:typeof Q==="object"&&Q!==null&&"kind"in Q&&(Q.kind==="todo"||Q.kind==="scheduled")?Q.kind:void 0,error:{code:"invalid_tasks_input",message:X.error.issues[0]?.message??"Invalid tasks input"}};if(X.data.kind==="todo"){if(!Z)return{ok:!1,kind:"todo",error:{code:"invalid_tasks_input",message:'kind "todo" is not available in this session'}};return{kind:"todo",...await fW(Z,X.data,J)}}return{kind:"scheduled",...await SZ($.scheduled,X.data,J)}}})}function uZ($){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:(Z)=>{Z.registerRule({id:"hub:task-guidance",content:$?.todoEnabled===!1?Gz:SW,whenToolAvailable:g6})}}}import{createSessionId as Pq,isHubProtocolCompatible as Cq,resolveClineBuildEnv as wq,resolveHubCommandTimeoutMs as fq}from"@cline/shared";import Sq from"ws";var h8="session_not_found";class k2 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function v8($){return $ instanceof k2||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}import{spawn as rz}from"node:child_process";import{closeSync as nz,mkdirSync as oz,openSync as sz,readFileSync as tz,unlinkSync as ez}from"node:fs";import{basename as $q,dirname as Zq,join as Qq}from"node:path";import{fileURLToPath as Jq}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as Xq,isHubDaemonProcess as tW,resolveClineBuildEnv as eW,withResolvedClineBuildEnv as Yq}from"@cline/shared";import{createHash as Dz,randomBytes as uW}from"node:crypto";import{existsSync as _z}from"node:fs";import{mkdir as pZ,open as IW,readFile as cW,rename as Oz,rm as m8,writeFile as zz}from"node:fs/promises";import{dirname as pW,join as dZ}from"node:path";import{isHubProtocolCompatible as qz}from"@cline/shared";import{resolveClineDataDir as m6,resolveClineDir as gc}from"@cline/shared/storage";var g8="0.0.84";var k$={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:g8,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"},"./remote/helper-entry":{types:"./dist/remote/remote-helper-entry.d.ts",import:"./dist/remote/remote-helper-entry.js"},"./remote/helper":{types:"./dist/remote/remote-helper.d.ts",import:"./dist/remote/remote-helper.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var Nz="CLINE_HUB_DISCOVERY_PATH",Az="CLINE_HUB_BUILD_ID",Tz="CLINE_HUB_BUILD_EPOCH_MS",Mz=30000,Ez=15000,hW=100;function Rz($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Pz($){return Dz("sha256").update($).digest("hex").slice(0,12)}function Cz($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function dW(){return uW(32).toString("hex")}function vW($){return new Promise((Z)=>setTimeout(Z,$))}function wz($){return`${$}.lock`}async function fz($){try{let Z=JSON.parse(await cW(dZ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function cZ($){await m8($,{recursive:!0,force:!0}).catch(()=>{return})}function f1(){let $=process.env[Az]?.trim();if($)return $;return"sdk-v1-0c7290d109800148a2ee6c68832123073f3e04b020ebdfd6a55983a47b314e02".trim()||`source-${String(k$.version)}`}function lZ(){let $=Number(process.env[Tz]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1790047513229)?1790047513229:void 0}function y$($,Z=f1()){let Q=qz($);if(!Q.compatible)return Q;let J=$.buildId?.trim();if(!J)return{compatible:!1,reason:"missing_build"};if(J!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function gW($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function mW($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((J)=>Number(J));if(Q.length===0||Q.some((J)=>!Number.isInteger(J)||J<0))return;return Q}function Sz($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let J=$[Q]??0,X=Z[Q]??0;if(J!==X)return J<X?-1:1}return 0}function u6($,Z){let Q=$.buildId?.trim(),J=Z.buildId?.trim();if(Q&&J&&Q===J)return 0;let X=gW($.buildEpochMs),Y=gW(Z.buildEpochMs);if(X!==void 0&&Y!==void 0&&X!==Y)return X<Y?-1:1;let W=mW($.coreVersion),j=mW(Z.coreVersion);if(W&&j){let V=Sz(W,j);if(V!==0)return V}if(Q&&J&&Q!==J)return Q<J?-1:1;return 0}function c6(){return{buildId:f1(),buildEpochMs:lZ(),coreVersion:String(k$.version)}}function y2($,Z){let Q=Z?.self??c6(),J=y$($,Q.buildId??"");if(J.compatible)return!0;if(J.reason!=="build_mismatch"&&J.reason!=="missing_build")return!1;return u6(Q,$)<=0}function x$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Pz($)}`,Q=process.env[Nz]?.trim()||dZ(m6(),"locks","hub","owners",`${Rz(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function uc($=`hub-${Date.now().toString(36)}`){return x$($)}async function R0($){try{let Z=JSON.parse(await cW($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function u8($,Z){await iZ($,async()=>{let Q=pW($);await pZ(Q,{recursive:!0});let J=`${$}.${process.pid}.${uW(6).toString("hex")}.tmp`,X;try{X=await IW(J,"wx",384),await X.writeFile(`${JSON.stringify(Z,null,2)}
311
+ `,"utf8"),_O()}function WW(){return J1().telemetryOptOut}function S$($){return new Set($??J1().disabledTools??[])}function jW($){return new Set($??J1().disabledPlugins??[])}function h6($){return new Set($??J1().disabledAgentPlugins??[])}function VW($){return JW.includes($)}function qO(){let $=YW();return{web_search:{enabled:!$.loadFailed},...$.value.tools}}function yZ($){return qO()[$]?.enabled===!0}function NO($,Z){let Q=J1();I6({...Q,tools:{...Q.tools,[$]:{enabled:Z}}})}function KW($){if(VW($)){let X=yZ($);return NO($,!X),X}let Z=J1(),Q=new Set(Z.disabledTools??[]),J=Q.has($);if(J)Q.delete($);else Q.add($);return I6({...Z,disabledTools:[...Q]}),!J}function AO($,Z){let Q=[...new Set($.map((W)=>W.trim()).filter(Boolean))];if(Q.length===0)return;let J=J1(),X=S$(J.disabledTools),Y={...J.tools};for(let W of Q){if(VW(W)){Y[W]={enabled:!Z};continue}if(Z)X.add(W);else X.delete(W)}I6({...J,disabledTools:[...X],tools:Y})}function BW($,Z){return AO([$],Z),Z}function GW($,Z){let Q=$.trim();if(!Q)return;let J=J1(),X=jW(J.disabledPlugins);if(Z)X.add(Q);else X.delete(Q);I6({...J,disabledPlugins:[...X]})}function UW($,Z){let Q=$.trim();if(!Q)return;let J=J1(),X=h6(J.disabledAgentPlugins);if(Z)X.add(Q);else X.delete(Q);I6({...J,disabledAgentPlugins:[...X]})}function HW($,Z){let Q=jW(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J))}function b$($,Z){let Q=S$(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J.name))}function FW($,Z){if(!$||$.length===0)return $;let Q=S$(Z);if(Q.size===0)return $;return $.map((J)=>{if(!J.setup)return J;return{...J,setup:(X,Y)=>J.setup?.({...X,registerTool:(W)=>{if(!Q.has(W.name))X.registerTool(W)}},Y)}})}import{existsSync as TO,mkdirSync as MO,readFileSync as EO,writeFileSync as RO}from"node:fs";import{resolve as PO}from"node:path";import{resolveSessionDataDir as CO}from"@cline/shared/storage";import{nanoid as wO}from"nanoid";import*as fO from"node-machine-id";var SO="machine-id",LW,DW=!1;function _W(){if(!DW)LW=OW(),DW=!0;return LW??zW()}function v6($){let Z=$?.trim();if(Z)return Z;let Q=OW();if(Q)return Q;return zW()}function bO(){let $=fO;return $.machineIdSync??$.default?.machineIdSync}function OW(){try{let $=bO();if(!$)return;return $().trim()||void 0}catch{return}}function zW(){let $=CO(),Z=PO($,SO);try{if(TO(Z)){let J=EO(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${wO()}`;try{MO($,{recursive:!0}),RO(Z,Q,"utf8")}catch{}return Q}class xZ{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,J,X=!1){if(!this.meter||!X&&!this.isEnabled())return;let Y=this.counters.get($);if(!Y)Y=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,Y);Y.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,X=!1){if(!this.meter||!X&&!this.isEnabled())return;let Y=this.histograms.get($);if(!Y)Y=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,Y);Y.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,X=!1){if(!this.meter||!X&&!this.isEnabled())return;let Y=this.buildAttributes(Q),W=JSON.stringify(Y),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(W),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let K=this.meter.createObservableGauge($,J?{description:J}:void 0);K.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,K)}V.set(W,{value:Z,attributes:Y})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,J=0){if(!$)return{};let X={},Y=100,W=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let K=Z?`${Z}.${j}`:j;if(V===null||V===void 0){X[K]=String(V);continue}if(Array.isArray(V)){let B=V.length>Y?V.slice(0,Y):V;try{X[K]=JSON.stringify(B)}catch{X[K]="[UnserializableArray]"}if(V.length>Y)X[`${K}_truncated`]=!0,X[`${K}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){X[K]=V.toISOString();continue}if(V instanceof Error){X[K]=V.message;continue}if(Q.has(V)){X[K]="[Circular]";continue}if(J>=W){X[K]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(X,this.flattenProperties(V,K,Q,J+1));continue}if(kO(V)){X[K]=V;continue}try{X[K]=JSON.stringify(V)}catch{X[K]=String(V)}}return X}}function kO($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class IZ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,J,X){if(!X&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:X===!0})}recordHistogram($,Z,Q,J,X){if(!X&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:X===!0})}recordGauge($,Z,Q,J,X){if(!X&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:X===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class x8{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new IZ({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??_W(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,X=!1){let Y=this.buildAttributes(Q);for(let W of this.adapters)W.recordCounter($,Z,Y,J,X)}recordHistogram($,Z,Q,J,X=!1){let Y=this.buildAttributes(Q);for(let W of this.adapters)W.recordHistogram($,Z,Y,J,X)}recordGauge($,Z,Q,J,X=!1){let Y=this.buildAttributes(Q);for(let W of this.adapters)W.recordGauge($,Z,Y,J,X)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){let Z=typeof $?.distinct_id==="string"&&$.distinct_id.trim()?$.distinct_id.trim():this.distinctId,Q={...this.commonProperties,...this.metadata,...$,...Z?{distinct_id:Z}:{},device_id:this.deviceId};return Object.fromEntries(Object.entries(Q).filter(([,J])=>J!==void 0))}}class NW{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){let Z=typeof $?.distinct_id==="string"&&$.distinct_id.trim()?$.distinct_id.trim():this.distinctId,Q={...this.commonProperties,...this.metadata,...$,...Z?{distinct_id:Z}:{}};return Object.fromEntries(Object.entries(Q).filter(([,J])=>J!==void 0))}}class AW{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=cO({[tO]:$.serviceName??"cline",...$.serviceVersion?{[eO]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)IO.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)vO.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return hO.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new xZ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new x8({...$,adapters:[Z],distinctId:v6($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=hZ(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),X=Z.map((Y)=>Xz(Y,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((Y)=>Y!==null);if(X.length===0)return null;return new aO({resource:$,readers:X})}createTracerProvider($){let Z=hZ(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,X=[],Y=!1;for(let j of Z){let V=Jz(j,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(V){if(X.push(V),j!=="console")Y=!0}}if(X.length===0)return null;let W=new sO({resource:$,spanProcessors:Y?[new yO,...X]:X});if(Y)xO(W);return W}createLoggerProvider($){let Z=hZ(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let X=Qz(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!X)return null;return new pO(X,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new lO({resource:$,processors:Q})}}function $z($){let Z=new AW($),Q=Z.createTelemetryService($),J=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)J();return{provider:Z,telemetry:Q,emitProviderCreated:J}}function TW($){if(WW())return{telemetry:new NW($)};if($.enabled!==!0)return{telemetry:new x8({...$,distinctId:v6($.distinctId)})};return $z($)}function Zz($){let{telemetry:Z,provider:Q,emitProviderCreated:J}=TW($);return{telemetry:Z,provider:Q,flush:async()=>{let W=Q;if(W&&typeof W.forceFlush==="function")try{await W.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&J?{emitProviderCreated:J}:{}}}function hZ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function Qz($,Z){if($==="console")return new dO;if(!Z.endpoint)return null;let Q=vZ(Z.endpoint,"/v1/logs");return new gO({url:Q,headers:Z.headers})}function Jz($,Z){if($==="console")return new oO(new nO);if(!Z.endpoint)return null;let Q=vZ(Z.endpoint,"/v1/traces");return new rO(new uO({url:Q,headers:Z.headers}))}function Xz($,Z){if($==="console")return new qW({exporter:new iO,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=vZ(Z.endpoint,"/v1/metrics");return new qW({exporter:new mO({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function vZ($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}import{createTool as Kz,zodToJsonSchema as Bz}from"@cline/shared";import{z as w1}from"zod";import{resolve as MW}from"node:path";import{z as o}from"zod";var EW=o.enum(["suggestion","follow-up","todo","handoff","idea","reminder"]),Yz=o.enum(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),RW=o.union([o.literal(0),o.literal(1),o.literal(2),o.literal(3),o.literal(4),o.literal(5)]),Wz=o.object({provider_id:o.string().min(1),model_id:o.string().min(1).optional()}),I8=o.object({operation:o.enum(["create","update","list","get"]),task_id:o.string().min(1).optional(),expected_revision:o.number().int().positive().optional(),type:EW.optional(),title:o.string().min(1).optional(),description:o.string().nullable().optional(),instructions:o.string().min(1).optional(),scope:o.enum(["workspace","global"]).optional(),workspace_root:o.string().min(1).nullable().optional(),cwd:o.string().min(1).nullable().optional(),resource_paths:o.array(o.string().min(1)).optional(),priority:RW.optional(),assignee:o.string().min(1).nullable().optional(),model_selection:Wz.nullable().optional(),mode:o.enum(["act","plan","yolo"]).nullable().optional(),system_prompt:o.string().nullable().optional(),max_iterations:o.number().int().positive().nullable().optional(),timeout_seconds:o.number().int().positive().nullable().optional(),available_at:o.string().datetime().optional(),expires_at:o.string().datetime().optional(),automation_eligible:o.boolean().optional(),statuses:o.array(Yz).optional(),types:o.array(EW).optional(),priorities:o.array(RW).optional(),limit:o.number().int().positive().max(500).optional()}),jz=new Set(["create","update"]);function gZ($,Z,Q,J){if(!jz.has(Z.operation))return;Y$($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.todo.${Z.operation}`,success:J,agentId:Q.agentId})}function b2($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function PW($){if($===void 0||$===null)return $;return{providerId:$.provider_id,modelId:$.model_id}}function wW($,Z){return MW($)===MW(Z)}function CW($,Z){if(!$)throw Error("task does not exist");if(Z.workspaceRoot){if($.scope!=="workspace"||!$.workspaceRoot||!wW($.workspaceRoot,Z.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if($.scope!=="global")throw Error("task is outside this session's global scope")}function Vz($,Z){let Q=Z.workspaceRoot?"workspace":"global";if($.scope&&$.scope!==Q)throw Error(`this session can only manage ${Q} tasks`);if($.workspace_root!==void 0){if(!Z.workspaceRoot||$.workspace_root===null||!wW($.workspace_root,Z.workspaceRoot))throw Error(`this session can only manage ${Q} tasks`)}return Q}async function fW($,Z,Q){let J=I8.safeParse(Z);if(!J.success)return{ok:!1,error:{code:"invalid_task_input",message:J.error.issues[0]?.message??"Invalid task input"}};let X=J.data,Y={kind:"agent",id:Q.agentId,agentId:Q.agentId,sessionId:Q.sessionId};try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let W=await $.resolveSessionDefaults(Q.sessionId);if(!W)throw Error("tasks could not resolve the current session");let j=Vz(X,W);switch(X.operation){case"create":{let V={type:b2(X.type,"type"),title:b2(X.title,"title"),description:X.description??void 0,instructions:b2(X.instructions,"instructions"),scope:j,workspaceRoot:W.workspaceRoot,cwd:j==="workspace"?(X.cwd??W.cwd)?.trim()||void 0:void 0,resourcePaths:X.resource_paths,priority:X.priority,assignee:X.assignee??void 0,modelSelection:PW(X.model_selection)??W.modelSelection,mode:X.mode??void 0,systemPrompt:X.system_prompt??void 0,maxIterations:X.max_iterations??void 0,timeoutSeconds:X.timeout_seconds??void 0,availableAt:X.available_at,expiresAt:b2(X.expires_at,"expires_at"),automationEligible:X.automation_eligible,createdBy:Y,originSessionId:Q.sessionId,originTaskId:W.originTaskId},K={ok:!0,operation:X.operation,task:await $.manager.createTask(V)};return gZ($,X,Q,!0),K}case"update":{let V=b2(X.task_id,"task_id");if(CW(await $.manager.getTask(V),W),!X.expected_revision)throw Error("expected_revision is required for update");let K={ok:!0,operation:X.operation,task:await $.manager.updateTask({taskId:V,expectedRevision:X.expected_revision,type:X.type,title:X.title,description:X.description,instructions:X.instructions,scope:j,workspaceRoot:W.workspaceRoot??null,cwd:X.cwd,resourcePaths:X.resource_paths,priority:X.priority,assignee:X.assignee,modelSelection:PW(X.model_selection),mode:X.mode,systemPrompt:X.system_prompt,maxIterations:X.max_iterations,timeoutSeconds:X.timeout_seconds,availableAt:X.available_at,expiresAt:X.expires_at,automationEligible:X.automation_eligible,updatedBy:Y})};return gZ($,X,Q,!0),K}case"list":{let V={statuses:X.statuses,types:X.types,scope:j,workspaceRoot:W.workspaceRoot,priorities:X.priorities,automationEligible:X.automation_eligible,limit:X.limit};return{ok:!0,operation:X.operation,tasks:await $.manager.listTasks(V)}}case"get":{let V=await $.manager.getTask(b2(X.task_id,"task_id"));return CW(V,W),{ok:!0,operation:X.operation,task:V}}}}catch(W){return gZ($,X,Q,!1),{ok:!1,operation:X.operation,error:{code:"task_operation_failed",message:W instanceof Error?W.message:String(W)}}}}var g6="tasks",SW='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Scheduled sessions run in the user\'s schedules home workspace, not this conversation\'s folder. Include absolute paths in the scheduled `prompt` for any project files or repositories the work must touch.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',Gz="# Tasks\n\nUse the `tasks` tool only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. Always pass `kind: \"scheduled\"`.\n\n- One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- Never create a schedule proactively. Check existing schedules before creating a likely duplicate.\n- Make the scheduled `prompt` self-contained because it runs in a new unattended session in the user's schedules home workspace, not this conversation's folder. Include the goal, constraints, expected output, and absolute paths for any project files or repositories the work must touch.\n- Only update, pause, resume, delete, or run a schedule immediately when the user asks for that action.",Uz=I8.extend({kind:w1.literal("todo")}).strict(),bW=S2.extend({kind:w1.literal("scheduled")}).strict(),kW=w1.discriminatedUnion("kind",[Uz,bW]),Hz=w1.discriminatedUnion("kind",[bW]),yW=["create","update","list","get","pause","resume","delete","run_now"],Fz=w1.object({...S2.shape,...I8.shape,kind:w1.enum(["todo","scheduled"]),operation:w1.enum(yW)}).strict(),Lz=w1.object({...S2.shape,kind:w1.enum(["scheduled"]),operation:w1.enum(yW)}).strict();function mZ($){let Z=$.todo;return Kz({name:g6,description:Z?'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.':'Create and manage explicitly requested scheduled agent work with kind "scheduled". One-time schedules use a future ISO 8601 run_at; recurring schedules use a five-field cron_pattern.',inputSchema:Bz(Z?Fz:Lz),retryable:!1,maxRetries:0,execute:async(Q,J)=>{let X=(Z?kW:Hz).safeParse(Q);if(!X.success)return{ok:!1,kind:typeof Q==="object"&&Q!==null&&"kind"in Q&&(Q.kind==="todo"||Q.kind==="scheduled")?Q.kind:void 0,error:{code:"invalid_tasks_input",message:X.error.issues[0]?.message??"Invalid tasks input"}};if(X.data.kind==="todo"){if(!Z)return{ok:!1,kind:"todo",error:{code:"invalid_tasks_input",message:'kind "todo" is not available in this session'}};return{kind:"todo",...await fW(Z,X.data,J)}}return{kind:"scheduled",...await SZ($.scheduled,X.data,J)}}})}function uZ($){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:(Z)=>{Z.registerRule({id:"hub:task-guidance",content:$?.todoEnabled===!1?Gz:SW,whenToolAvailable:g6})}}}import{createSessionId as Pq,isHubProtocolCompatible as Cq,resolveClineBuildEnv as wq,resolveHubCommandTimeoutMs as fq}from"@cline/shared";import Sq from"ws";var h8="session_not_found";class k2 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function v8($){return $ instanceof k2||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}import{spawn as rz}from"node:child_process";import{closeSync as nz,mkdirSync as oz,openSync as sz,readFileSync as tz,unlinkSync as ez}from"node:fs";import{basename as $q,dirname as Zq,join as Qq}from"node:path";import{fileURLToPath as Jq}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as Xq,isHubDaemonProcess as tW,resolveClineBuildEnv as eW,withResolvedClineBuildEnv as Yq}from"@cline/shared";import{createHash as Dz,randomBytes as uW}from"node:crypto";import{existsSync as _z}from"node:fs";import{mkdir as pZ,open as IW,readFile as cW,rename as Oz,rm as m8,writeFile as zz}from"node:fs/promises";import{dirname as pW,join as dZ}from"node:path";import{isHubProtocolCompatible as qz}from"@cline/shared";import{resolveClineDataDir as m6,resolveClineDir as gc}from"@cline/shared/storage";var g8="0.0.85";var k$={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:g8,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"},"./remote/helper-entry":{types:"./dist/remote/remote-helper-entry.d.ts",import:"./dist/remote/remote-helper-entry.js"},"./remote/helper":{types:"./dist/remote/remote-helper.d.ts",import:"./dist/remote/remote-helper.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var Nz="CLINE_HUB_DISCOVERY_PATH",Az="CLINE_HUB_BUILD_ID",Tz="CLINE_HUB_BUILD_EPOCH_MS",Mz=30000,Ez=15000,hW=100;function Rz($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Pz($){return Dz("sha256").update($).digest("hex").slice(0,12)}function Cz($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function dW(){return uW(32).toString("hex")}function vW($){return new Promise((Z)=>setTimeout(Z,$))}function wz($){return`${$}.lock`}async function fz($){try{let Z=JSON.parse(await cW(dZ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function cZ($){await m8($,{recursive:!0,force:!0}).catch(()=>{return})}function f1(){let $=process.env[Az]?.trim();if($)return $;return"sdk-v1-7a06925efdddafd91fa32d8c54bdc4f26c316a2e7a7db1f707c69264416f8117".trim()||`source-${String(k$.version)}`}function lZ(){let $=Number(process.env[Tz]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1790064761572)?1790064761572:void 0}function y$($,Z=f1()){let Q=qz($);if(!Q.compatible)return Q;let J=$.buildId?.trim();if(!J)return{compatible:!1,reason:"missing_build"};if(J!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function gW($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function mW($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((J)=>Number(J));if(Q.length===0||Q.some((J)=>!Number.isInteger(J)||J<0))return;return Q}function Sz($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let J=$[Q]??0,X=Z[Q]??0;if(J!==X)return J<X?-1:1}return 0}function u6($,Z){let Q=$.buildId?.trim(),J=Z.buildId?.trim();if(Q&&J&&Q===J)return 0;let X=gW($.buildEpochMs),Y=gW(Z.buildEpochMs);if(X!==void 0&&Y!==void 0&&X!==Y)return X<Y?-1:1;let W=mW($.coreVersion),j=mW(Z.coreVersion);if(W&&j){let V=Sz(W,j);if(V!==0)return V}if(Q&&J&&Q!==J)return Q<J?-1:1;return 0}function c6(){return{buildId:f1(),buildEpochMs:lZ(),coreVersion:String(k$.version)}}function y2($,Z){let Q=Z?.self??c6(),J=y$($,Q.buildId??"");if(J.compatible)return!0;if(J.reason!=="build_mismatch"&&J.reason!=="missing_build")return!1;return u6(Q,$)<=0}function x$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Pz($)}`,Q=process.env[Nz]?.trim()||dZ(m6(),"locks","hub","owners",`${Rz(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function uc($=`hub-${Date.now().toString(36)}`){return x$($)}async function R0($){try{let Z=JSON.parse(await cW($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function u8($,Z){await iZ($,async()=>{let Q=pW($);await pZ(Q,{recursive:!0});let J=`${$}.${process.pid}.${uW(6).toString("hex")}.tmp`,X;try{X=await IW(J,"wx",384),await X.writeFile(`${JSON.stringify(Z,null,2)}
312
312
  `,{encoding:"utf8"}),await X.sync(),await X.close(),X=void 0,await Oz(J,$);let Y;try{Y=await IW(Q,"r"),await Y.sync()}catch{}finally{await Y?.close().catch(()=>{return})}}catch(Y){throw await X?.close().catch(()=>{return}),await m8(J,{force:!0}).catch(()=>{return}),Y}})}async function d1($){await iZ($,async()=>{await m8($,{force:!0}).catch(()=>{return})})}async function lW($,Z){return await iZ($,async()=>{if((await R0($))?.hubId!==Z)return!1;return await m8($,{force:!0}),!0})}async function iW($,Z,Q){let J=wz($);await pZ(pW(J),{recursive:!0});let X=Date.now()+Ez;while(!0){try{await pZ(J,{recursive:!1})}catch(Y){if((Y instanceof Error&&"code"in Y?String(Y.code):"")!=="EEXIST")throw Y;let j=await fz(J);if(!j){if(Date.now()>=X){await cZ(J);continue}await vW(hW);continue}let V=Date.now()-Date.parse(j.acquiredAt);if(!Cz(j.pid)||V>Mz){await cZ(J);continue}if(Date.now()>=X)throw Error(`Timed out waiting for hub ${Z} lock ${J}`);await vW(hW);continue}try{return await zz(dZ(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
313
313
  `,"utf8"),await Q()}finally{await cZ(J)}}}function iZ($,Z){return iW(`${$}.mutation`,"discovery mutation",Z)}function c8($,Z){return iW($,"startup",Z)}async function l1($,Z){try{let Q=await fetch(Z?.authToken?bz($):aW($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((X)=>typeof X==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,buildEpochMs:typeof J.buildEpochMs==="number"?J.buildEpochMs:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function i1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function aW($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function bz($){let Z=new URL(aW($));return Z.pathname="/status",Z.toString()}function cc($){return _z($)}import{CLINE_HUB_DEV_PORT as kz,CLINE_HUB_PORT as yz,resolveClineBuildEnv as xz}from"@cline/shared";var Iz="CLINE_HUB_HOST",hz="CLINE_HUB_PORT",vz="CLINE_HUB_PATHNAME",gz="127.0.0.1",mz=yz,uz="/hub";function rW($){return xz($)==="development"?kz:mz}function cz($={}){return($.env??process.env)[Iz]?.trim()||gz}function p8($={}){let Q=($.env??process.env)[hz]?.trim();if(!Q)return rW($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return rW($);return J}function pz($={}){return($.env??process.env)[vz]?.trim()||uz}function I$($={},Z={}){return{host:$.host??cz(Z),port:$.port??p8(Z),pathname:$.pathname??pz(Z)}}import{join as dz}from"node:path";var lz="shared:cline",iz="CLINE_HUB_DISCOVERY_PATH",az="hub-production";function nc($){let Z=P$($.trim());return x$(`workspace:${Z||$.trim()}`)}function _1($=lz){return x$(`${$}@${f1()}`)}function S1(){return{ownerId:az,discoveryPath:process.env[iz]?.trim()||dz(m6(),"locks","hub","production.json")}}var Wq=8000,jq=200,nW=3000,Vq=100,Kq=[100,250,500,1000,2000],Bq="--cline-hub-daemon",Gq=3,Uq=60000,nZ=new Map,Wp={resetRetireAttempts(){nZ.clear()}};function Hq($,Z=Date.now()){let Q=nZ.get($);if(!Q||Z-Q.windowStartedAt>Uq)return nZ.set($,{count:1,windowStartedAt:Z}),!0;return Q.count+=1,Q.count<=Gq}function Fq($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function Lq(){try{let $=Qq(m6(),"logs","hub-daemon.log");return oz(Zq($),{recursive:!0}),{fd:sz($,"a"),logPath:$}}catch{return}}function $j(){return eW()==="production"?S1():_1()}function p6($){return y2($)}function Dq($){try{let Z=JSON.parse(tz(`${$}.superseded`,"utf8"));return{url:typeof Z.url==="string"?Z.url:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0}}catch{return}}function aZ($){try{ez(`${$}.superseded`)}catch{}}function oW($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function x2($,Z){try{return await l1($,{authToken:Z})}catch{return}}async function sW($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await x2($))?.url)return!0;await new Promise((X)=>setTimeout(X,Vq))}return!1}async function I2($,Z){if(!Hq($.url))return!1;await h$($.url,$.authToken,"retired by newer install").catch(()=>!1),await sZ($.url,$.authToken).catch(()=>!1);let Q=await sW($.url,nW);if(!Q&&$.pid&&_q($.pid)){try{process.kill($.pid,"SIGTERM")}catch{}Q=await sW($.url,nW)}if(Q)await d1(Z).catch(()=>{return});return Q}function _q($){try{return process.kill($,0),!0}catch(Z){return Z?.code==="EPERM"}}async function oZ($){try{return(await v2($.url,$.authToken)).activeSessionCount>0}catch{return!1}}async function rZ($,Z){if(p6($))return"reusable";let Q=await h$($.url,$.authToken,"retired by newer install").catch(()=>!1);if(await oZ($)){if(Q)await h$($.url,$.authToken,"hub retirement deferred",{off:!0}).catch(()=>!1);return"deferred_busy"}let J=await I2($,Z);if(!J&&Q)await h$($.url,$.authToken,"hub retirement failed",{off:!0}).catch(()=>!1);return J?"retired":"failed"}async function Oq($){if(eW()!=="production")return;let Z=_1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await R0(Z.discoveryPath);if(Q?.url)await I2(Q,Z.discoveryPath);else await d1(Z.discoveryPath).catch(()=>{return})}function zq(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return Jq(new URL(`./entry.${$}`,import.meta.url))}function qq($,Z){let Q=zq(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let X=$q(J).toLowerCase().includes("bun"),Y=Q.startsWith("/$bunfs/"),W=X&&Q.toLowerCase().endsWith(".ts"),j=Y?[Bq]:[...W?["--conditions=development"]:[],Q];return{launcher:J,args:[...j,"--cwd",$,...Fq(Z),...Z.manageConnectors===!1?["--no-connectors"]:[]],cwd:$,env:{...Yq(process.env),CLINE_NO_INTERACTIVE:"1",[Xq]:"1"}}}function Nq($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function Aq($,Z={}){if(tW())return;let Q=qq($,Z),J=Lq();try{rz(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)nz(J.fd)}}async function Tq($,Z={}){for(let Q=0;;Q++)try{Aq($,Z);return}catch(J){let X=Kq[Q];if(!Nq(J)||X===void 0)throw J;await new Promise((Y)=>setTimeout(Y,X))}}function jp($,Z={}){if(tW())return;d6($,Z).catch(()=>{})}async function Mq($,Z,Q={}){let J=Q.host!==void 0||Q.port!==void 0||Q.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),X=I$(Q),Y=i1(X.host,X.port,X.pathname),W=(F)=>{if(!J)h2(F.url,F.authToken);return F};await Oq($).catch(()=>{return});let j=await R0($.discoveryPath),V=j?.url?void 0:Dq($.discoveryPath),K=!1;if(j?.url){let F=j.authToken;if(!F)K=!0,await I2(j,$.discoveryPath);else{let L=await x2(j.url,F);if(L?.url&&p6(L)&&await X1(L.url,{authToken:F}))return aZ($.discoveryPath),W({url:L.url,authToken:F});if(L?.url){if(await rZ({...L,authToken:F},$.discoveryPath)==="deferred_busy"&&await X1(L.url,{authToken:F}))return W({url:L.url,authToken:F})}else await d1($.discoveryPath).catch(()=>{return})}}let B=await x2(Y);if(B?.url){let F=oW(B,j??V,Y);if(p6(B)){let D=[B.authToken,j?.authToken,V?.authToken].filter((_)=>typeof _==="string"&&_.trim().length>0);for(let _ of D){if(!await X1(B.url,{authToken:_}))continue;let z={hubId:B.hubId??`repaired-${B.port}`,protocolVersion:B.protocolVersion,minClientProtocolVersion:B.minClientProtocolVersion,maxClientProtocolVersion:B.maxClientProtocolVersion,capabilities:B.capabilities,coreVersion:B.coreVersion,buildId:B.buildId,authToken:_,host:B.host,port:B.port,url:B.url,pid:B.pid??j?.pid??V?.pid,startedAt:B.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await u8($.discoveryPath,z)}catch{}return aZ($.discoveryPath),W({url:B.url,authToken:_})}throw Error(`A compatible Cline Hub is already running at ${Y}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${K?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`)}let L=await rZ(F,$.discoveryPath);if(L==="deferred_busy"){for(let D of[F.authToken,j?.authToken].filter((O)=>typeof O==="string"&&O.trim().length>0))if(await X1(B.url,{authToken:D}))return W({url:B.url,authToken:D});if(Q.allowPortFallback!==!0&&X.port!==0)throw Error(`An older Cline Hub is running at ${Y} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(L==="failed"&&Q.allowPortFallback!==!0&&X.port!==0)throw Error(`An incompatible Cline Hub is already running at ${Y} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let U=Q.allowPortFallback===!0&&X.port!==0?{...X,port:0}:X;await Tq(Z,{...U,manageConnectors:Q.manageConnectors});let H=Date.now()+Wq;while(Date.now()<H){let F=await R0($.discoveryPath);if(F?.url&&F.authToken){let D=await x2(F.url,F.authToken);if(D?.url&&p6(D)&&await X1(D.url,{authToken:F.authToken}))return aZ($.discoveryPath),W({url:D.url,authToken:F.authToken})}let L=await x2(Y);if(L?.url&&!p6(L)){let D=oW(L,F??V,Y),O=await rZ(D,$.discoveryPath);if(O==="deferred_busy"&&F?.authToken&&await X1(L.url,{authToken:F.authToken}))return W({url:L.url,authToken:F.authToken});if(O==="failed"&&Q.allowPortFallback!==!0&&X.port!==0)throw Error(`An incompatible Cline Hub is still running at ${Y} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,jq))}throw Error("Timed out waiting for detached hub startup.")}async function d6($,Z={}){let Q=$j();return await c8(Q.discoveryPath,async()=>Mq(Q,$,Z))}var Eq=5000,Rq=500;async function Vp($={}){let Z=$j(),Q=$.workspaceRoot??process.cwd(),J=await R0(Z.discoveryPath),X=J?.url?await x2(J.url,J.authToken):void 0;if(!X?.url)return{outcome:"started",...await d6(Q)};let Y={...X,authToken:X.authToken??J?.authToken,pid:X.pid??J?.pid};if(y$(X).compatible)return{outcome:"already_current",url:X.url,authToken:Y.authToken};if(u6(c6(),X)<=0)return{outcome:"hub_not_older",url:X.url,authToken:Y.authToken};if(!await h$(Y.url,Y.authToken,$.reason??"hub upgrade requested").catch(()=>!1))throw Error(`The running Cline Hub at ${Y.url} did not accept a drain request, so it was not replaced. It is replaced automatically once idle when a Cline client next starts, or run 'cline doctor fix' to stop it now.`);let j=async()=>{await h$(Y.url,Y.authToken,"hub upgrade aborted",{off:!0}).catch(()=>!1)},V=Date.now()+($.waitForIdleMs??Eq),K;for(;;){try{if(K=(await v2(Y.url,Y.authToken)).activeSessionCount,K===0)break}catch{}if(Date.now()>=V)break;await new Promise((U)=>setTimeout(U,Rq))}if(K!==0&&$.force!==!0)return await j(),{outcome:"still_busy",url:Y.url,authToken:Y.authToken,...K!==void 0?{activeSessionCount:K}:{}};if(!await I2(Y,Z.discoveryPath))throw await j(),Error(`The running Cline Hub at ${Y.url} could not be stopped. Run 'cline doctor fix' to stop stale hub daemons, then try again.`);return{outcome:"replaced",...await d6(Q),activeSessionCount:K??0}}function J7(){return wq()==="production"?S1():_1()}function bq(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function Xj($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return Xj($.data);return String($)}function kq($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function Zj($){let Z=$,Q=kq(Z.reason);return new S0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:eZ,{closeCode:Z.code,closeReason:Q||void 0})}function Qj($,Z){if($ instanceof S0)return $;if($ instanceof Error)return new S0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new S0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new S0("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new S0("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var tZ="*",d8=8000,yq="cline-hub-auth.",Yj=new Map,Wj=new Set,xq=3000,Iq=3000,hq=100,eZ="Hub connection closed",vq=250,gq=5000,Jj=0.5;class S0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function mq($){return $ instanceof S0}class l8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function Dp($,Z){return $ instanceof l8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function X7($,Z={}){let Q=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Q)return Q;if(Z.skipRegistry)return;let J=Y7($.toString());return J?Yj.get(J):void 0}function uq($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function Y7($){if(!uq($))return;let Z=new URL(i8($));return Z.search="",Z.hash="",Z.toString()}function $7($){let Z=Y7($);return!!Z&&Wj.has(Z)}function h2($,Z){let Q=Y7($);if(Q){if(Wj.add(Q),Z?.trim())Yj.set(Q,Z)}return $}class v${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;connectGeneration=0;lastCloseError=new S0("hub_connection_closed",eZ);sawSocketClose=!1;registered=!1;capabilities;constructor($){this.options=$;if($.authToken?.trim()&&$.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url,this.capabilities=[...$.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities($){if(this.capabilities=$.map((Z)=>({...Z})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.connectPromise)return this.connectPromise;if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||X7($,{skipRegistry:Boolean(this.options.resolveConnectionHeaders)});if($.hash="",Z&&this.options.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");let Q=++this.connectGeneration,J=this.openSocket($,Z,Q),X;this.connectPromise=J.then(async(W)=>{if(X=W,await this.commandOnce("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",capabilities:this.capabilities,workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}},void 0,void 0,!1),Q!==this.connectGeneration||this.closedByClient){try{W.close()}catch{}throw this.lastCloseError}this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0});let Y=this.connectPromise;try{await Y}catch(W){if(this.connectPromise===Y)this.connectPromise=void 0;if(X&&this.socket===X){this.lastCloseError=Qj(W,$),this.registered=!1,this.sawSocketClose=!1,this.socket=void 0;try{X.close()}catch{}}if(!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect();throw W}}async openSocket($,Z,Q){let J=this.options.resolveConnectionHeaders,X;if(J){let V;try{X=await Promise.race([Promise.resolve().then(()=>J()),new Promise((K,B)=>{V=setTimeout(()=>{B(new S0("hub_connect_timeout",`Timed out resolving hub connection headers after ${d8}ms`))},d8)})])}catch(K){let B=K instanceof S0?K:new S0("hub_connect_failed",K instanceof Error?K.message:String(K));if(Q===this.connectGeneration)this.lastCloseError=B;throw B}finally{clearTimeout(V)}}if(Q!==this.connectGeneration||this.closedByClient)throw this.lastCloseError;if(X&&Object.keys(X).some((V)=>V.toLowerCase()==="sec-websocket-protocol")){let V=new S0("hub_connect_failed","Hub connection headers cannot set Sec-WebSocket-Protocol.");if(Q===this.connectGeneration)this.lastCloseError=V;throw V}let Y=X?new Sq($.toString(),{headers:{...X}}):new(bq())($.toString(),Z?[`${yq}${Z}`]:void 0);this.socket=Y;let W=!1,j=new Promise((V,K)=>{let B=!1,G=setTimeout(()=>{if(B)return;B=!0,W=!0;let U=new S0("hub_connect_timeout",`Timed out connecting to hub after ${d8}ms`);if(this.socket===Y)this.lastCloseError=U,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Y.close()}catch{}K(U)},d8);Y.addEventListener("open",()=>{if(B)return;B=!0,clearTimeout(G),V()}),Y.addEventListener("error",(U)=>{if(B)return;B=!0,clearTimeout(G);let H=Qj(U,$);if(this.socket===Y)this.lastCloseError=H,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;K(H)}),Y.addEventListener("close",(U)=>{if(B)return;B=!0,clearTimeout(G);let H=W?this.lastCloseError:Zj(U);if(this.socket===Y){if(!W)this.lastCloseError=H,this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0}K(H)})});return Y.addEventListener("message",(V)=>{this.handleFrame(JSON.parse(Xj(V)))}),Y.addEventListener("close",(V)=>{if(this.socket!==Y)return;if(!W)this.lastCloseError=Zj(V),this.sawSocketClose=!0;this.registered=!1;for(let K of this.pendingReplies.values())K.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await j,Y}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let X=0,Y=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(W){if(!Y||X>=1||!await this.recoverLocalHubTransport(W))throw W;X+=1}}async commandOnce($,Z,Q,J,X=!0){if(X)await this.connect();J?.beforeDispatch?.();let Y=Pq("hubreq_"),W=fq($,J?.timeoutMs),j=new Promise((K,B)=>{let G=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Y))return;B(new l8($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${Y}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(Y,{resolve:(U)=>{if(G)clearTimeout(G);K(U)},reject:(U)=>{if(G)clearTimeout(G);B(U)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Y,clientId:this.clientId,sessionId:Q,timeoutMs:W,payload:Z}})}catch(K){throw this.pendingReplies.delete(Y),K}let V=await j;if(!V.ok){if(V.error?.code===h8){let K=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k2(K,V.error.message)}throw new l8($,V.error?.code,V.error?.message??`Hub command ${$} failed`)}return V}async recoverLocalHubTransport($){if(!$7(this.currentUrl)||!mq($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await Q7({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(vq*2**this.reconnectAttempt,gq),Z=Math.round($*(1-Jj)+Math.random()*$*Jj);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!$7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await Q7({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.connectGeneration+=1,this.clearReconnectTimer(),this.registered=!1,$)this.lastCloseError=new S0("hub_connection_closed",eZ);for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,!$)return;this.sawSocketClose=!1,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new S0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){let Q=$==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(Z)):void 0;this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{},...Q!==void 0?{sinceSequence:Q}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??tZ}subscriptionSessionIdFromKey($){return $===tZ?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":{let Z=$.envelope.sequence;if(typeof Z==="number"){let Q=$.envelope.sessionId?.trim();for(let J of[tZ,Q]){if(!J||!this.subscriptionCounts.has(J))continue;let X=this.lastEventSequenceByKey.get(J)??0;if(Z>X)this.lastEventSequenceByKey.set(J,Z)}}for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==$.envelope.sessionId?.trim())continue;Q.listener($.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function i8($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function X1($,Z){let Q=new v$({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function Z7($,Z){let Q=i8($),J=await l1(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(Z?.requireCurrentBuild){let X=f1(),Y=y$(J,X);if(!Y.compatible&&!y2(J))return{status:Y.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:Q}}else if(!Cq(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await X1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function cq($){let Z=Date.now()+Iq;while(Date.now()<Z){if(!(await l1($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,hq))}return!1}function pq($,Z){try{return i8($)===i8(Z)}catch{return!1}}function jj($){let Z=$&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[],Q=0,J=new Set;for(let X of Z){if(!X||typeof X!=="object")continue;let Y=X.participants;if(!Array.isArray(Y)||Y.length===0)continue;Q+=1;for(let W of Y){let j=W&&typeof W==="object"?W.clientId:void 0;if(typeof j==="string"&&j.trim())J.add(j)}}return{activeSessionCount:Q,participantClientCount:J.size}}function _p($){return jj($).activeSessionCount>0}async function v2($,Z,Q){let J=new v$({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let X=await J.command("session.list",{limit:500},void 0,{timeoutMs:xq});return jj(X.payload)}finally{await J.dispose().catch(()=>{return})}}async function Vj($,Z,Q){try{return(await v2($,Z,Q)).activeSessionCount===0}catch{return!1}}async function dq($,Z){let Q=`${$.discoveryPath}.superseded`,J=await R0(Q);if(!J?.url||!J.authToken)return;let X=await Z7(J.url,{authToken:J.authToken});if(X.status!=="compatible")return;if(await Vj(X.url,J.authToken,Z))return;return h2(X.url,J.authToken)}async function lq($={}){if($.endpoint?.trim()){let X=await Z7($.endpoint);return X.status==="compatible"?X.url:void 0}let Z=J7(),Q=await R0(Z.discoveryPath);if(!Q?.url)return await dq(Z,$);let J=await Z7(Q.url,{authToken:Q.authToken,requireCurrentBuild:!0});if(J.status==="compatible")return h2(J.url,Q.authToken);if(J.status==="protocol_mismatch")await d1(Z.discoveryPath).catch(()=>{return});return}async function Q7($={}){let Z=await lq($);if(Z&&await X1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;try{return(await d6($.workspaceRoot??process.cwd())).url}catch{return}}async function h$($,Z,Q,J){let X=new URL($),Y=Z?.trim()||X7(X);if(X.protocol==="ws:")X.protocol="http:";else if(X.protocol==="wss:")X.protocol="https:";if(X.pathname="/drain",X.hash="",Q)X.searchParams.set("reason",Q);if(J?.off)X.searchParams.set("off","1");return(await fetch(X,{method:"POST",headers:Y?{authorization:`Bearer ${Y}`}:void 0})).ok}async function sZ($,Z){let Q=new URL($),J=Z?.trim()||X7(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function iq($=J7()){let Z=await R0($.discoveryPath);if(!Z?.url)return!1;try{if(await sZ(Z.url,Z.authToken))return!0}catch{}return!1}async function Op($){if(!$7($.url))return;let Z=J7(),Q=await R0(Z.discoveryPath);if(!Q?.url||!pq(Q.url,$.url))return;if(!await Vj(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await iq())return;if(!await cq(Q.url))return;return await d1(Z.discoveryPath).catch(()=>{return}),await Q7({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as aq}from"@cline/shared";function rq($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var nq="cline-hub-auth.";function oq($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function sq($,Z){let Q=new URL($),J=new URL(Z);return Q.search="",Q.hash="",J.search="",J.hash="",Q.toString()===J.toString()}function Kj(){return aq()==="production"?S1():_1()}async function tq($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=Kj(),J=await R0(Q.discoveryPath);if(J?.url&&sq($.toString(),J.url))return J.authToken;return}async function eq($={}){let Z=I$($);if(!oq($)){let Q=Kj(),J=await R0(Q.discoveryPath);if(J?.url)return J.url}return i1(Z.host,Z.port,Z.pathname)}async function Bj($){return await new Promise((Z,Q)=>{(async()=>{let J=new URL($),X=await tq(J);J.hash="";let Y=new WebSocket(J.toString(),X?[`${nq}${X}`]:void 0),W=new Map,j=0;Y.addEventListener("open",()=>{Z({send(V){let K=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{W.set(K,{resolve:B,reject:G});let U={kind:"command",envelope:{...V,requestId:K}};Y.send(JSON.stringify(U))})},close(){Y.close()}})}),Y.addEventListener("message",(V)=>{let K=JSON.parse(String(V.data));if(K.kind==="reply"&&K.envelope.requestId){let B=W.get(K.envelope.requestId);if(B)W.delete(K.envelope.requestId),B.resolve(K.envelope)}}),Y.addEventListener("close",()=>{for(let V of W.values())V.reject(Error("Hub connection closed"));W.clear()}),Y.addEventListener("error",(V)=>{Q(rq(V,$))})})().catch(Q)})}async function Mp($){try{return(await Bj($)).close(),!0}catch{return!1}}async function Ep($,Z){let Q=await eq($),J=await Bj(Q);try{return await J.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{J.close()}}import{existsSync as $N}from"node:fs";import{isHubDaemonProcess as ZN,resolveClineBuildEnv as QN}from"@cline/shared";var JN=1e4,XN="CLINE_HUB_BUILD_WATCH_INTERVAL_MS";function YN(){let $=Number(process.env[XN]);return Number.isFinite($)&&$>0?$:JN}async function WN($,Z){try{let Q=await v2($.url,Z);return{...$,activeSessionCount:Q.activeSessionCount,participantClientCount:Q.participantClientCount}}catch{return $}}function jN(){return QN()==="production"?S1():_1()}function VN($){try{return $N(`${$}.lock`)}catch{return!1}}async function KN(){let $=jN();if(VN($.discoveryPath))return;let Z=await R0($.discoveryPath).catch(()=>{return});if(!Z?.url)return;let Q=await l1(Z.url).catch(()=>{return});if(!Q?.url)return;let J=f1(),X=y$(Q,J);if(X.compatible)return;let Y=(j)=>({url:Q.url,reason:j,hubBuildId:Q.buildId,hubCoreVersion:Q.coreVersion,expectedBuildId:J});if(X.reason==="unsupported_protocol")return Y("unsupported_protocol");let W=c6();if(W.coreVersion&&Q.coreVersion&&W.coreVersion===Q.coreVersion)return;if(u6(W,Q)>0)return await WN(Y("outdated_hub"),Z.authToken);return Y("build_mismatch")}function bp($){if(ZN()||process.env.CLINE_HUB_PORT?.trim())return()=>{};let Z=$.intervalMs??YN(),Q,J,X=!1,Y=setInterval(()=>{if(X)return;X=!0,KN().then((W)=>{if(!W){Q=void 0,J=void 0;return}let j=`${W.reason}:${W.hubBuildId??""}`;if(j===Q)return;if(W.reason==="outdated_hub"&&J!==j){J=j;return}J=void 0,Q=j,$.onMismatch(W)}).catch(()=>{return}).finally(()=>{X=!1})},Z);return Y.unref?.(),()=>{clearInterval(Y)}}function W7($){return $?JSON.parse(JSON.stringify($)):{}}function a8($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?W7(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,status:typeof Z.status==="string"?Z.status:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function Gj($,Z){return $.error?.message??`hub command failed: ${Z}`}function BN($){let Z=W7($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let J=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof J?.message==="string"&&J.message.trim())return{...Z,error:J.message.trim()};return Z}function Uj($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function GN($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function UN($){let Z=W7($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||Uj(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||Uj(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"assistant.media":return{sessionId:Q,eventType:"runtime.chat.media",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.updated":return{sessionId:Q,eventType:"runtime.chat.tool_call_update",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:BN($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class HN{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new v$({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}async taskCommand($,Z){return await this.ensureMetadataApplied(),(await this.client.command($,Z)).payload??{}}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,agentPluginPaths:$.agentPluginPaths,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=a8(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(v8(Q))return;throw Q}return a8(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(Gj(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let J=$.config,X=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.workspaceRoot,cwd:J.cwd,sessionConfig:{providerId:J.provider,modelId:J.model,apiKey:J.apiKey,cwd:J.cwd??J.workspaceRoot,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:J.mode??"act",rules:J.rules,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,agentPluginPaths:J.agentPluginPaths,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},metadata:{source:J.source??"cli",provider:J.provider,model:J.model,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,prompt:void 0,interactive:J.interactive!==!1},runtimeOptions:{mode:J.mode,systemPrompt:J.systemPrompt,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,autoApproveTools:J.autoApproveTools,configExtensions:J.configExtensions},modelSelection:{provider:J.provider,model:J.model,apiKey:J.apiKey},toolPolicies:J.toolPolicies}:{}},Z);if(!X.ok)throw Error(Gj(X,"session.restore"));let Y=a8(X.payload);if(Q&&!Y?.sessionId)throw Error("hub checkpoint restore returned no session id");let W=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,j=GN(X.payload);return{sessionId:Y?.sessionId,startResult:Y?.sessionId?{sessionId:Y.sessionId,manifestPath:"",messagesPath:Y.messagesPath??""}:void 0,...W?{messages:W}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((J)=>a8({session:J})).filter((J)=>Boolean(J?.sessionId))}async searchSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.search",$);return Array.isArray(Z.payload?.hits)?Z.payload.hits:[]}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((X)=>X.trim()).filter(Boolean)),J=this.client.subscribe((X)=>{let Y=UN(X);if(!Y)return;if(Q.size>0&&!Q.has(Y.sessionId))return;Z.onEvent?.(Y)});return this.ensureMetadataApplied().catch((X)=>{Z.onError?.(X instanceof Error?X:Error(String(X)))}),J}streamTeamProgress($,Z){let Q=this.client.subscribe((J)=>{if(J.event!=="team.progress"||!J.payload)return;Z.onProjection?.(J.payload)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}async createTask($){return(await this.taskCommand("task.create",$)).task}async listTasks($={}){let Z=await this.taskCommand("task.list",$);return Array.isArray(Z.tasks)?Z.tasks:[]}async getTask($){return(await this.taskCommand("task.get",{taskId:$})).task}async updateTask($){return(await this.taskCommand("task.update",$)).task}async approveTask($,Z){return(await this.taskCommand("task.approve",{taskId:$,expectedRevision:Z})).task}async cancelTask($,Z,Q){return(await this.taskCommand("task.cancel",{taskId:$,reason:Q,expectedRevision:Z})).task}async runTask($,Z){return await this.taskCommand("task.run",{taskId:$,expectedRevision:Z})}async getTaskAutomation(){return(await this.taskCommand("task.automation.get",{})).policy}async setTaskAutomation($){return(await this.taskCommand("task.automation.set",{policy:$})).policy}}class FN{client;constructor($){this.client=new v$({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}async searchSessions($){let Z=await this.client.command("session.search",$);return Array.isArray(Z.payload?.hits)?Z.payload.hits:[]}async toggleSetting($){let Z=await this.client.command("settings.toggle",$);if(!Z.ok)throw Error(Z.error?.message??"settings.toggle failed");return Z.payload}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as yI}from"@cline/llms";import{readdirSync as ex}from"node:fs";import{homedir as $I}from"node:os";import{isAbsolute as ZI,join as fJ,resolve as SJ}from"node:path";import{captureSdkError as U1,createSessionId as QI,isLikelyAuthError as JI,normalizeUserInput as XI}from"@cline/shared";import{setHomeDirIfUnset as YI}from"@cline/shared/storage";import{decodeJwtPayload as KA,getClineEnvironmentConfig as yj}from"@cline/shared";import{decodeJwtPayload as NN,getClineEnvironmentConfig as AN}from"@cline/shared";import{createHash as LN}from"node:crypto";var DN;function r0($){if(typeof $!=="string"||$.length===0)return"unset";return LN("sha256").update($).digest("hex").slice(0,8)}function j0($){try{DN?.debug($)}catch{}}function _N(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function g$($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",J=$.timeoutMs??300000,X=$.successHtml??ON,Y=_N(),W=!1,j=null,V=null,K=null,B=(H)=>{if(W)return;W=!0,Y.resolve(H)},G=()=>{if(j)clearTimeout(j),j=null;let H=K;if(K=null,V)V.close(),V.closeAllConnections?.(),V=null;if(H!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:H})).catch(()=>{})},U=async()=>{return j=setTimeout(()=>{G(),B(null)},J),Y.promise};for(let H of $.ports){let F=Z.createServer((D,O)=>{try{let _=new URL(D.url||"",`http://${Q}:${H}`);if(_.pathname!==$.callbackPath){O.statusCode=404,O.end("Not found");return}let z={url:_,code:_.searchParams.get("code")??void 0,state:_.searchParams.get("state")??void 0,provider:_.searchParams.get("provider")??void 0,error:_.searchParams.get("error")??void 0};if(z.error){O.statusCode=400,O.end(`Authentication failed: ${z.error}`),G(),B(z);return}if(!z.code){O.statusCode=400,O.end("Missing authorization code");return}if($.expectedState&&z.state!==$.expectedState){O.statusCode=400,O.end("State mismatch");return}O.statusCode=200,O.setHeader("Content-Type","text/html; charset=utf-8"),O.end(X),G(),B(z)}catch{O.statusCode=500,O.end("Internal error")}}),L=await new Promise((D)=>{let O=(_)=>{F.off("error",O),D({bound:!1,error:_})};F.once("error",O),F.listen(H,Q,()=>{F.off("error",O),V=F,D({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){K=H;let D=`http://${Q}:${H}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:H,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:U,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var ON=`<!DOCTYPE html>
314
314
  <html lang="en">