@cline/core 0.0.89-nightly.1790908300 → 0.0.90

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.
@@ -253,7 +253,7 @@ Searched ${f} files.`;let S=[`Found ${g.length} result${g.length===1?"":"s"} for
253
253
 
254
254
  ...[assistant text truncated: omitted ${e} chars due to repeated tool-call markup]...
255
255
 
256
- `;function bS(e=process.env){return{maxToolResultChars:SS(e[iu.maxToolResultChars]),maxTotalTextBytes:SS(e[iu.maxTotalTextBytes]),minOutdatedRewriteBytes:nO(e[iu.minOutdatedRewriteBytes])}}class cu{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(e={}){this.getToolResultRecovery=e.getToolResultRecovery,this.maxToolResultChars=Uo(e.maxToolResultChars,du),this.maxFileContentChars=Uo(e.maxFileContentChars,KM),this.maxTotalTextBytes=Uo(e.maxTotalTextBytes,GM),this.mediaBudget=e.mediaBudget??{},this.maxAssistantTextChars=Uo(e.maxAssistantTextChars,VM),this.maxAssistantToolMarkupChars=Uo(e.maxAssistantToolMarkupChars,XM),this.minOutdatedRewriteBytes=rO(e.minOutdatedRewriteBytes,JM)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(e){this.recoveryNoticeBytes=0,this.reindex(e),this.commitOutdatedRewrites(e);let n=this.addMissingToolResults(e).map((o)=>{if(!Array.isArray(o.content)){if(o.role==="user"&&typeof o.content==="string"){let a=pS(o.content);if(a!==o.content)return{...o,content:a}}if(o.role==="assistant"&&typeof o.content==="string"){let a=this.truncateAssistantText(o.content);if(a!==o.content)return{...o,content:a}}return o}let s=!1,i=o.content.map((a)=>{let d=this.transformBlock(a,o.role);if(d!==a)s=!0;return d});return s?{...o,content:i}:o}),r=this.applyMediaBudget(n);return this.truncateToTotalTextBudget(r)}transformBlock(e,t){if(t==="user"&&e.type==="text"&&typeof e.text==="string"){let s=pS(e.text);if(s!==e.text)return{...e,text:s};return e}if(t==="assistant"&&e.type==="text"&&typeof e.text==="string"){let s=this.truncateAssistantText(e.text);return s===e.text?e:{...e,text:s}}if(e.type==="file"){let s=Fo(e.content,this.maxFileContentChars,fS);return s===e.content?e:{...e,content:s}}if(e.type!=="tool_result")return e;let n=this.resolveToolName(e),r=this.getToolResultRecovery?.({...e,name:n??e.name});if(r){let{text:s,images:i}=da(e.content);if(typeof s==="string"&&s.length>this.maxToolResultChars){let a=[{type:"text",text:this.truncateMiddle(s)},...i];if(r.uri){let d={type:"text",text:`Full result is temporarily saved to ${r.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},c=me(d.text);if(this.recoveryNoticeBytes+c<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=c,this.recoveryNotices.add(d),a.push(d)}return{...e,content:a}}}let o=e.content;if(this.isReadTool(n)&&e.is_error!==!0){let s=this.committedOutdatedRewrites.get(e.tool_use_id);if(s&&s.size>0){let a=this.getReadLocators(e).filter((d)=>s.has(this.toReadLocatorKey(d))&&this.isOutdatedReadLocator(d,e.tool_use_id));if(a.length>0)o=this.replaceOutdatedReadContent(o,a)}}return o=this.truncateToolResultContent(o),o===e.content?e:{...e,content:o}}reindex(e){let t=this.indexedMessageCount===0||e.length>=this.indexedMessageCount&&e[this.indexedMessageCount-1]===this.indexedTailRef;if(e.length<this.indexedMessageCount||!t)this.resetIndexes();for(let n=this.indexedMessageCount;n<e.length;n++){let r=e[n];if(!Array.isArray(r.content))continue;for(let o=0;o<r.content.length;o++){let s=r.content[o];if(s.type==="file")this.latestFullContentOwnerByPathCache.set(s.path,`file:${n}:${o}`);else if(s.type==="tool_use"){let i=s.name.toLowerCase();if(this.toolNameByIdCache.set(s.id,i),this.isReadTool(i)){let a=this.extractLocatorsFromReadToolInput(s.input);if(a.length>0)this.readLocatorsByToolUseIdCache.set(s.id,a)}}else if(s.type==="tool_result"){let i=this.resolveToolName(s);if(!this.isReadTool(i)||s.is_error===!0)continue;let a=this.getReadLocators(s);for(let d of a)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(d),s.tool_use_id),this.isFullFileRead(d))this.latestFullContentOwnerByPathCache.set(d.path,s.tool_use_id)}}}this.indexedMessageCount=e.length,this.indexedTailRef=e.length>0?e[e.length-1]:void 0}commitOutdatedRewrites(e){let t=new Map,n=new Set,r=0;for(let o of e){if(!Array.isArray(o.content))continue;for(let s of o.content){if(s.type!=="tool_result"||s.is_error===!0)continue;let i=this.resolveToolName(s);if(!this.isReadTool(i))continue;n.add(s.tool_use_id);let a=this.committedOutdatedRewrites.get(s.tool_use_id),d=new Set,c=new Set;for(let u of this.getReadLocators(s)){let p=this.toReadLocatorKey(u);if(!this.isOutdatedReadLocator(u,s.tool_use_id))continue;if(c.add(p),!a?.has(p))d.add(p)}if(a){for(let u of a)if(!c.has(u))a.delete(u);if(a.size===0)this.committedOutdatedRewrites.delete(s.tool_use_id)}if(d.size===0)continue;let l=t.get(s.tool_use_id);if(!l)l=new Set,t.set(s.tool_use_id,l);for(let u of d)l.add(u);r+=this.estimateOutdatedReclaimBytes(s.content,d)}}for(let o of this.committedOutdatedRewrites.keys())if(!n.has(o))this.committedOutdatedRewrites.delete(o);if(t.size===0||r<this.minOutdatedRewriteBytes)return;for(let[o,s]of t){let i=this.committedOutdatedRewrites.get(o);if(!i)i=new Set,this.committedOutdatedRewrites.set(o,i);for(let a of s)i.add(a)}}estimateOutdatedReclaimBytes(e,t){let n=this.extractReadLocatorsFromToolResultContent(e),r=n.length>0&&n.every((d)=>t.has(this.toReadLocatorKey(d))),o=(d)=>{let c;try{c=JSON.parse(d)}catch{return r||n.length===0?me(this.truncateMiddle(d)):0}let l=Array.isArray(c)?c:[c],u=0;for(let p of l){let m=this.extractLocatorFromResultEntry(p);if(m&&t.has(this.toReadLocatorKey(m)))u+=this.providerBoundEntryBytes(p)}return u};if(typeof e==="string")return o(e);let s=new Set(t),i=0;for(let d of e)if(d.type==="text")i+=this.countOutdatedImageEntries(d.text,s);let a=0;for(let d of e)if(d.type==="text")a+=o(d.text);else if(d.type==="image"){if(i>0)i-=1,a+=me(d.data)}else if(mn(d)){let c=this.extractLocatorFromResultEntry(d);if(c&&t.has(this.toReadLocatorKey(c)))a+=this.providerBoundEntryBytes(d)}else if(d.type==="file"){if(t.has(this.toReadLocatorKey({path:d.path,startLine:null,endLine:null})))a+=me(this.truncateMiddle(d.content))}return a}providerBoundEntryBytes(e){let t=this.truncateNestedStrings(e);return me(JSON.stringify(t))}addMissingToolResults(e){let t=this.collectToolResultIds(e),n=[],r=new Map,o=!1,s=()=>{if(r.size===0)return;i(this.createMissingToolResultMessage(r)),r.clear(),o=!0},i=(a)=>{let d=n.at(-1);if(this.shouldMergeUserAfterToolResults(d,a)){n[n.length-1]={...d,content:[...d.content,...this.contentBlocksForUserMerge(a.content)]},o=!0;return}n.push(a)};for(let a of e){if(this.isToolResultOnlyMessage(a)){if(i(this.appendMissingToolResults(a,r)),r.size>0)r.clear(),o=!0;continue}if(Array.isArray(a.content)){let d=a.content.filter((l)=>l.type==="tool_result"),c=a.content.filter((l)=>l.type!=="tool_result");if(d.length>0){let l=this.appendMissingToolResults({...a,role:"user",content:d},r);if(i(l),r.size>0)r.clear();o=!0}if(c.length>0||d.length===0){if(d.length===0)s();let l=d.length>0?{...a,content:c}:a;if(i(l),l.role==="assistant")this.trackMissingToolCalls(l,t,r)}continue}s(),i(a)}return s(),o?n:e}appendMissingToolResults(e,t){if(t.size===0||!Array.isArray(e.content))return e;return{...e,role:"user",content:[...e.content,...this.createMissingToolResultBlocks(t)]}}shouldMergeUserAfterToolResults(e,t){return e?.role==="user"&&t.role==="user"&&this.isToolResultOnlyMessage(e)&&this.contentBlocksForUserMerge(t.content).length>0}contentBlocksForUserMerge(e){return typeof e==="string"?e.length>0?[{type:"text",text:e}]:[]:e}collectToolResultIds(e){let t=new Set;for(let n of e){if(!Array.isArray(n.content))continue;for(let r of n.content)if(r.type==="tool_result")t.add(r.tool_use_id)}return t}isToolResultOnlyMessage(e){return e.role==="user"&&Array.isArray(e.content)&&e.content.length>0&&e.content.every((t)=>t.type==="tool_result")}trackMissingToolCalls(e,t,n){if(!Array.isArray(e.content))return;for(let r of e.content){if(r.type!=="tool_use"||t.has(r.id))continue;n.set(r.id,r.name)}}createMissingToolResultMessage(e){return{role:"user",content:this.createMissingToolResultBlocks(e)}}createMissingToolResultBlocks(e){return Array.from(e,([t,n])=>({type:"tool_result",tool_use_id:t,name:n,content:[{type:"text",text:this.formatMissingToolResultText(n)}],is_error:!0}))}formatMissingToolResultText(e){return e?`${gS} Tool: ${e}.`:gS}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(e){let t=e,n=this.readResultLocatorCache.get(t);if(n===void 0)n=this.extractReadLocatorsFromToolResultContent(e.content),this.readResultLocatorCache.set(t,n);if(n.length>0)return n;return this.readLocatorsByToolUseIdCache.get(e.tool_use_id)??[]}extractLocatorsFromReadToolInput(e){if(!e||typeof e!=="object")return[];let t=e,n=[],r=this.extractLocatorFromReadRequest(t);if(r)n.push(r);if(Array.isArray(t.files))for(let o of t.files){let s=this.extractLocatorFromReadRequest(o);if(s)n.push(s)}if(Array.isArray(t.file_paths)){for(let o of t.file_paths)if(typeof o==="string"&&o.length>0)n.push({path:o,startLine:null,endLine:null})}return this.dedupeReadLocators(n)}extractReadLocatorsFromToolResultContent(e){if(typeof e==="string")return this.tryParseReadLocators(e);let t=[];for(let n of e){if(n.type==="text"){t.push(...this.tryParseReadLocators(n.text));continue}if(mn(n)){let r=this.extractLocatorFromResultEntry(n);if(r)t.push(r)}}return this.dedupeReadLocators(t)}tryParseReadLocators(e){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(e))}catch{return[]}}extractLocatorsFromParsedReadResult(e){if(Array.isArray(e)){let n=[];for(let r of e){let o=this.extractLocatorFromResultEntry(r);if(o)n.push(o)}return this.dedupeReadLocators(n)}let t=this.extractLocatorFromResultEntry(e);return t?[t]:[]}extractLocatorFromReadRequest(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(!n)return;return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)}}extractLocatorFromResultEntry(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(n)return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)};if(typeof t.query==="string"&&t.query.length>0)return this.parseReadQuery(t.query);return}extractPath(e){let t=[e.path,e.file_path,e.filePath];for(let n of t)if(typeof n==="string"&&n.length>0)return n;return}extractLineNumber(e){return typeof e==="number"&&Number.isInteger(e)?e:null}parseReadQuery(e){let t=/^(.*):(\d+)-(EOF|\d+)$/.exec(e);if(!t)return{path:e,startLine:null,endLine:null};return{path:t[1],startLine:Number(t[2]),endLine:t[3]==="EOF"?null:Number(t[3])}}dedupeReadLocators(e){let t=new Map;for(let n of e)t.set(this.toReadLocatorKey(n),n);return Array.from(t.values())}toReadLocatorKey(e){if(this.isFullFileRead(e))return e.path;return`${e.path}:${e.startLine??1}-${e.endLine??"EOF"}`}isFullFileRead(e){return e.startLine==null&&e.endLine==null}isOutdatedReadLocator(e,t){let n=this.latestFullContentOwnerByPathCache.get(e.path);if(n&&n!==t)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(e))!==t}replaceOutdatedReadContent(e,t){let n=new Set(t.map((s)=>this.toReadLocatorKey(s))),r=new Set(t.map((s)=>s.path));if(typeof e==="string")return this.replaceOutdatedInString(e,n)??Hn;let o=0;for(let s of e)if(s.type==="text")o+=this.countOutdatedImageEntries(s.text,n);return e.map((s)=>{if(s.type==="file"){if(!r.has(s.path))return s;return{...s,content:Hn}}if(s.type==="image"){if(o===0)return s;return o-=1,{type:"text",text:Hn}}if(mn(s))return this.replaceOutdatedReadEntry(s,n);if(s.type!=="text")return s;let i=this.replaceOutdatedInString(s.text,n);if(i===null)return{...s,text:Hn};return i===s.text?s:{...s,text:i}})}countOutdatedImageEntries(e,t){let n;try{n=JSON.parse(e)}catch{return 0}let r=Array.isArray(n)?n:[n],o=0;for(let s of r){if(!s||typeof s!=="object")continue;let i=s,a=this.extractLocatorFromResultEntry(i);if(!a)continue;if(!t.has(this.toReadLocatorKey(a)))continue;if(i.result==="Successfully read image"||i.content==="Successfully read image")o+=1}return o}replaceOutdatedInString(e,t){let n;try{n=JSON.parse(e)}catch{return null}let r=Array.isArray(n)?n.map((o)=>this.replaceOutdatedReadEntry(o,t)):this.replaceOutdatedReadEntry(n,t);return JSON.stringify(r)}replaceOutdatedReadEntry(e,t){if(!e||typeof e!=="object")return e;let n=this.extractLocatorFromResultEntry(e);if(!n||!t.has(this.toReadLocatorKey(n)))return e;let r={...e};if(typeof r.result==="string")r.result=Hn;else if(typeof r.content==="string")r.content=Hn;else r.result=Hn;return r}isReadTool(e){return!!e&&QM.has(e)}resolveToolName(e){let t=this.toolNameByIdCache.get(e.tool_use_id);if(t!==void 0)return t;return typeof e.name==="string"&&e.name.length>0?e.name.toLowerCase():void 0}truncateToolResultContent(e){if(typeof e==="string")return this.truncateMiddle(e);return e.map((t)=>{if(this.recoveryNotices.has(t))return t;if(t.type==="file"){let n=this.truncateMiddle(t.content);return n===t.content?t:{...t,content:n}}if(t.type==="text"){let n=this.truncateMiddle(t.text);return n===t.text?t:{...t,text:n}}if(mn(t))return this.truncateNestedStrings(t);return t})}truncateNestedStrings(e){if(typeof e==="string")return this.truncateMiddle(e);if(Array.isArray(e)){let t=!1,n=e.map((r)=>{let o=this.truncateNestedStrings(r);if(o!==r)t=!0;return o});return t?n:e}if(e!==null&&typeof e==="object"){if(uu(e))return e;let t=!1,n={};for(let[r,o]of Object.entries(e)){let s=this.truncateNestedStrings(o);if(s!==o)t=!0;n[r]=s}return t?n:e}return e}truncateMiddle(e){return Fo(e,this.maxToolResultChars,fS)}truncateAssistantText(e){if(this.hasRepeatedToolCallMarkup(e))return Fo(e,this.maxAssistantToolMarkupChars,eO);return Fo(e,this.maxAssistantTextChars,ZM)}hasRepeatedToolCallMarkup(e){if(e.length<=this.maxAssistantToolMarkupChars)return!1;let t=0;for(let n of e.matchAll(tO))if(t+=1,t>=YM)return!0;return!1}truncateToTotalTextBudget(e){let t=this.countMessageTextBytes(e);if(t<=this.maxTotalTextBytes)return e;let n=e.map((s)=>{if(!Array.isArray(s.content))return{...s};return{...s,content:s.content.map((i)=>{let a=sO(i);if(i.type==="tool_result"&&a.type==="tool_result"&&Array.isArray(i.content)&&Array.isArray(a.content))i.content.forEach((d,c)=>{if(this.recoveryNotices.has(d))this.recoveryNotices.add(a.content[c])});return a})}}),r=this.collectTruncationCandidates(n),o=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,r.length)));for(let s of r){if(t<=this.maxTotalTextBytes)break;let i=s.byteLength,a=Math.min(s.minBytes,o);if(i<=a)continue;let d=t-this.maxTotalTextBytes,c=Math.max(a,i-d),l=oO(s.get(),c,s.makeMarker);s.set(l),t-=i-me(l)}return n}countMessageTextBytes(e){let t=0;for(let n of e){if(typeof n.content==="string"){t+=me(n.content);continue}for(let r of n.content)if(r.type==="text")t+=me(r.text);else if(r.type==="thinking")t+=me(r.thinking);else if(r.type==="file")t+=me(r.content);else if(r.type==="tool_use")t+=va(r.input);else if(r.type==="tool_result"){if(typeof r.content==="string")t+=me(r.content);else for(let o of r.content)if(o.type==="text")t+=me(o.text);else if(o.type==="file")t+=me(o.content);else if(mn(o))t+=va(o)}}return t}collectTruncationCandidates(e){let t=[],n=[];for(let r of e){if(r.role==="assistant"&&typeof r.content==="string"){t.push({byteLength:me(r.content),minBytes:mS,makeMarker:hS,get:()=>r.content,set:(o)=>{r.content=o}});continue}if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){Ta(o.input,n);continue}if(r.role==="assistant"&&o.type==="text"){t.push({byteLength:me(o.text),minBytes:mS,makeMarker:hS,get:()=>o.text,set:(s)=>{o.text=s}});continue}if(o.type!=="tool_result")continue;if(typeof o.content==="string"){t.push({byteLength:me(o.content),minBytes:Ho,makeMarker:Bo,get:()=>o.content,set:(s)=>{o.content=s}});continue}for(let s of o.content){if(this.recoveryNotices.has(s))continue;if(s.type==="text")t.push({byteLength:me(s.text),minBytes:Ho,makeMarker:Bo,get:()=>s.text,set:(i)=>{s.text=i}});else if(s.type==="file")t.push({byteLength:me(s.content),minBytes:Ho,makeMarker:Bo,get:()=>s.content,set:(i)=>{s.content=i}});else if(mn(s))Ta(s,t)}}}return t.sort((r,o)=>o.byteLength-r.byteLength),n.sort((r,o)=>o.byteLength-r.byteLength),[...t,...n]}applyMediaBudget(e){let t=this.resolveMediaBudget();if(t.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&t.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&t.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return e;let n=jM(),r=!1,o=e.map((s)=>{if(!Array.isArray(s.content))return s;let i=!1,a=s.content.map((d)=>{let c=this.applyMediaBudgetToBlock(d,t,n);if(c!==d)i=!0;return c});if(!i)return s;return r=!0,{...s,content:a}});return r?o:e}resolveMediaBudget(){return qM(this.mediaBudget)}applyMediaBudgetToBlock(e,t,n){if(au(e))return this.limitImageContent(e,t,n);if(e.type!=="tool_result"||typeof e.content==="string")return e;let r=!1,o=e.content.map((s)=>{let i=this.applyMediaBudgetToToolResultEntry(s,t,n);if(i!==s)r=!0;return i});return r?{...e,content:o}:e}applyMediaBudgetToToolResultEntry(e,t,n){if(au(e))return this.limitImageContent(e,t,n);if(mn(e))return this.limitNestedMedia(e,t,n);return e}limitNestedMedia(e,t,n){if(au(e)){let r=this.limitImageContent(e,t,n);return r.type==="text"?r.text:r}if(Array.isArray(e)){let r=!1,o=e.map((s)=>{let i=this.limitNestedMedia(s,t,n);if(i!==s)r=!0;return i});return r?o:e}if(e!==null&&typeof e==="object"){let r=!1,o={};for(let[s,i]of Object.entries(e)){let a=this.limitNestedMedia(i,t,n);if(a!==i)r=!0;o[s]=a}return r?o:e}return e}limitImageContent(e,t,n){if(!vS(e))return{type:"text",text:lS};let r=zM(e.mediaType,e.data,{maxImageEncodedBytes:t.maxImageEncodedBytes,maxImageDecodedBytes:t.maxImageDecodedBytes,maxTotalMediaBytes:t.maxTotalMediaBytes},n);if(!r.ok)return{type:"text",text:lS};return{...e,data:r.base64,mediaType:r.mediaType}}}var yS=String.raw`[\|\uFF5C]`,tO=new RegExp(String.raw`<\s*(?:${yS}\s*)?DSML\s*(?:${yS}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function me(e){return Buffer.byteLength(e,"utf8")}function SS(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function nO(e){if(e===void 0)return;let t=e.trim().toLowerCase();if(t==="infinity"||t==="disable")return Number.POSITIVE_INFINITY;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:void 0}function Uo(e,t){return typeof e==="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t}function rO(e,t){if(typeof e!=="number"||Number.isNaN(e)||e<0)return t;return Number.isFinite(e)?Math.floor(e):e}function Fo(e,t,n){if(e.length<=t)return e;let r=n(e.length-t),o=Math.max(0,Math.floor((t-r.length)/2)),s=Math.max(0,e.length-o*2),i=n(s),a=Math.max(0,Math.floor((t-i.length)/2)),d=e.slice(0,a),c=a>0?e.slice(-a):"";return`${d}${i}${c}`}function oO(e,t,n){if(me(e)<=t)return e;let r=0,o=e.length,s="";while(r<=o){let i=r+o>>>1,a=Fo(e,i,n);if(me(a)<=t)s=a,r=i+1;else o=i-1}return s}function sO(e){if(e.type==="tool_use")return{...e,input:wa(e.input)};if(e.type!=="tool_result"||typeof e.content==="string")return{...e};return{...e,content:e.content.map((t)=>mn(t)?wa(t):{...t})}}function mn(e){if(e===null||typeof e!=="object")return!1;let t=e.type;return t!=="text"&&t!=="image"&&t!=="file"}function au(e){return e!==null&&typeof e==="object"&&e.type==="image"}function vS(e){return e!==null&&typeof e==="object"&&e.type==="image"&&typeof e.data==="string"&&typeof e.mediaType==="string"}function uu(e){return vS(e)}function va(e){if(typeof e==="string")return me(e);if(Array.isArray(e)){let t=0;for(let n of e)t+=va(n);return t}if(e!==null&&typeof e==="object"){if(uu(e))return 0;let t=0;for(let n of Object.values(e))t+=va(n);return t}return 0}function Ta(e,t){if(Array.isArray(e)){e.forEach((n,r)=>{if(typeof n==="string")t.push({byteLength:me(n),minBytes:Ho,makeMarker:Bo,get:()=>e[r],set:(o)=>{e[r]=o}});else Ta(n,t)});return}if(e!==null&&typeof e==="object"){if(uu(e))return;let n=e;for(let r of Object.keys(n)){let o=n[r];if(typeof o==="string")t.push({byteLength:me(o),minBytes:Ho,makeMarker:Bo,get:()=>n[r],set:(s)=>{n[r]=s}});else Ta(o,t)}}}function wa(e){if(Array.isArray(e))return e.map(wa);if(e!==null&&typeof e==="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=wa(r);return t}return e}function lu(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class pu{messages=[];conversationId=lu();sessionStarted=!1;constructor(e){if((e?.length??0)>0)this.restore(e??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(e){this.messages.push(e)}appendMessages(e){if(e.length===0)return;this.messages.push(...e)}replaceMessages(e){let t=new Map(e.map((o,s)=>[o.id,s])),n=new Map,r=-1;for(let o of this.messages){let s=o.id?t.get(o.id):void 0;if(s!==void 0)r=s;else if(o.metadata?.displayOnly===!0){let i=n.get(r)??[];i.push(o),n.set(r,i)}}this.messages=[...n.get(-1)??[]];for(let[o,s]of e.entries())this.messages.push(s,...n.get(o)??[])}resetForRun(){this.messages=[],this.conversationId=lu(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=lu(),this.sessionStarted=!1}restore(e){this.messages=[...e],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var Nr="0.0.89-nightly.1790908300";var Dr={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Nr,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"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.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 wS(e){let{agentConfig:t}=e,n=iO(t),r=aO(t),o=e.hooks,s=dO(t.maxParallelToolCalls);return{distinctId:t.distinctId,clientName:t.extensionContext?.client?.name,clientVersion:t.extensionContext?.client?.version,clineCoreVersion:Nr,sessionId:e.sessionId??t.sessionId,agentId:e.agentId,conversationId:e.conversationId,parentAgentId:e.parentAgentId,agentRole:e.agentRole,systemPrompt:e.systemPrompt??t.systemPrompt,messageModelInfo:r,model:e.model,modelOptions:n,modelTools:t.modelTools,tools:e.tools,hooks:o,prepareTurn:e.prepareTurn,consumePendingUserMessage:t.consumePendingUserMessage,plugins:e.plugins,logger:e.logger??t.logger,telemetry:e.telemetry??t.telemetry,initialMessages:e.initialMessages,completionPolicy:e.completionPolicy===null?void 0:e.completionPolicy??t.completionPolicy,maxIterations:t.maxIterations,toolExecution:s,toolPolicies:t.toolPolicies,toolContextMetadata:e.toolContextMetadata,requestToolApproval:t.requestToolApproval}}function iO(e){let t={};if(e.thinking!==void 0)t.thinking=e.thinking;if(e.reasoningEffort!==void 0)t.reasoningEffort=e.reasoningEffort;if(e.thinkingBudgetTokens!==void 0)t.thinkingBudgetTokens=e.thinkingBudgetTokens;if(e.maxTokensPerTurn!==void 0)t.maxTokensPerTurn=e.maxTokensPerTurn;if(e.temperature!==void 0)t.temperature=e.temperature;if(e.apiTimeoutMs!==void 0)t.apiTimeoutMs=e.apiTimeoutMs;return Object.keys(t).length>0?t:void 0}function aO(e){let t=e.providerConfig?.family;return{id:e.modelId,provider:e.providerId,family:t}}function dO(e){if(e===void 0)return;return e>=2?"parallel":"sequential"}function Ur(e){let t={...e},n=Object.hasOwn(e,"thinking"),r=Object.hasOwn(e,"thinkingBudgetTokens");if(e.thinking===!1||e.thinking===null)return t.reasoningEffort=void 0,t.thinkingBudgetTokens=void 0,t;if(!n&&r&&typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0;return t}function cO(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function uO(e){e.lastToolName="",e.lastToolSignature="",e.consecutiveIdenticalCount=0}function mu(e){if(e==null||typeof e!=="object")return e;if(Array.isArray(e))return e.map(mu);let t={};for(let n of Object.keys(e).sort())t[n]=mu(e[n]);return t}function lO(e){if(e==null)return"null";if(typeof e==="string")return e;if(typeof e!=="object")return String(e);try{return JSON.stringify(mu(e))}catch{return String(e)}}function pO(e,t,n,r){if(t===e.lastToolName&&n===e.lastToolSignature)e.consecutiveIdenticalCount++;else e.consecutiveIdenticalCount=1;return e.lastToolName=t,e.lastToolSignature=n,{softWarning:e.consecutiveIdenticalCount===r.softThreshold,hardEscalation:e.consecutiveIdenticalCount>=r.hardThreshold}}var kS={softThreshold:3,hardThreshold:5};class gu{config;state=cO();constructor(e){this.config={softThreshold:e?.softThreshold??kS.softThreshold,hardThreshold:e?.hardThreshold??kS.hardThreshold}}inspect(e){let t=lO(e.input),n=pO(this.state,e.name,t,this.config);if(n.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; stopping to avoid a loop.`};if(n.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){uO(this.state)}}class fu{consecutiveMistakes=0;options;constructor(e){this.options=e}async record(e){let t=this.options.maxConsecutiveMistakes,n=e.forceAtLimit&&t?t:this.consecutiveMistakes+1;this.consecutiveMistakes=n;let r=e.details?.trim()||`consecutive mistake (${e.reason})`;if(this.options.emit({type:"error",error:Error(r),recoverable:!0,iteration:e.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:e.iteration,reason:e.reason,details:e.details,consecutiveMistakes:n,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!t||n<t)return{action:"continue"};let o={iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details};this.options.onLimitTelemetry?.(o);let s=await gO(o,this.options.onLimitReached);if(s.action==="continue"){let i=s.guidance?.trim();if(i)this.options.appendRecoveryNotice(i,e.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:i}}return{action:"stop",reason:s.reason?.trim()||void 0,message:mO({iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details,stopReason:s.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function mO(e){let t=[`Stopped after ${e.consecutiveMistakes}/${e.maxConsecutiveMistakes} consecutive mistakes (${e.reason}) at iteration ${e.iteration}.`],n=e.details?.trim();if(n)t.push(`Error: ${n}`);let r=e.stopReason?.trim();if(r)t.push(`Decision: ${r}`);return t.push("Session state was preserved. Send a new prompt to resume from the latest state."),t.join(" ")}async function gO(e,t){if(!t)return{action:"stop",reason:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`};try{return await t(e)}catch(n){return{action:"stop",reason:n instanceof Error?n.message:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`}}}function fO(e){switch(e){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return e;default:return}}function hO(e){let t=e.content.filter((n)=>n.type==="text");if(t.length===0)return;return t.map((n)=>n.text).join("")}function yO(e){let t=e.content.filter((n)=>n.type==="reasoning");if(t.length===0)return;return{reasoning:t.map((n)=>n.text).join(""),redacted:t.some((n)=>n.redacted===!0)}}function SO(e){return e.content.find((t)=>t.type==="tool-result")}function bO(e){switch(e){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function vO(e){if(!e||e.isError!==!0)return;if(typeof e.output==="string")return e.output;if(e.output instanceof Error)return e.output.message;try{return JSON.stringify(e.output)}catch{return String(e.output)}}class hu{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(e){switch(e.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:e.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:e.iteration,hadToolCalls:e.toolCallCount>0,toolCallCount:e.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:e.text,accumulated:e.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:e.text,redacted:e.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:e.media}];case"assistant-message":return this.translateAssistantMessage(e.message);case"tool-started":return this.translateToolStarted(e);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,update:e.update}];case"tool-finished":return this.translateToolFinished(e);case"usage-updated":return this.translateUsage(e.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:e.message,reason:fO(e.metadata?.reason),metadata:e.metadata}];case"run-finished":return this.translateRunFinished(e.result);case"run-failed":return[{type:"error",error:e.error,errorClass:e.errorClass,recoverable:!1,iteration:e.snapshot.iteration}];default:return e}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(e){let t=[],n=hO(e);if(n!==void 0)t.push({type:"content_end",contentType:"text",text:n});let r=yO(e);if(r!==void 0)t.push({type:"content_end",contentType:"reasoning",reasoning:r.reasoning});return t}translateToolStarted(e){return this.toolStartedAt.set(e.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,execution:e.toolCall.execution}]}translateToolFinished(e){let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=t===void 0?void 0:Date.now()-t;this.toolStartedAt.delete(e.toolCall.toolCallId);let r=SO(e.message),o=r?.output,s=vO(r);return[{type:"content_end",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,output:o,error:s,durationMs:n,execution:e.toolCall.execution}]}translateUsage(e){let t=e.inputTokens-this.lastUsage.inputTokens,n=e.outputTokens-this.lastUsage.outputTokens,r=e.cacheReadTokens-this.lastUsage.cacheReadTokens,o=e.cacheWriteTokens-this.lastUsage.cacheWriteTokens,s=this.lastUsage.totalCost??0,a=(e.totalCost??0)-s,d=this.lastUsage.reasoningTokenCount??0,l=(e.reasoningTokenCount??0)-d;return this.lastUsage={inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,totalCost:e.totalCost,reasoningTokenCount:e.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,t),outputTokens:Math.max(0,n),cacheReadTokens:r===0?void 0:Math.max(0,r),cacheWriteTokens:o===0?void 0:Math.max(0,o),cost:a===0?void 0:a,reasoningTokenCount:l===0?void 0:Math.max(0,l),totalInputTokens:e.inputTokens,totalOutputTokens:e.outputTokens,totalCacheReadTokens:e.cacheReadTokens===0?void 0:e.cacheReadTokens,totalCacheWriteTokens:e.cacheWriteTokens===0?void 0:e.cacheWriteTokens,totalCost:e.totalCost}]}translateRunFinished(e){let t={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens===0?void 0:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens===0?void 0:e.usage.cacheWriteTokens,totalCost:e.usage.totalCost};return[{type:"done",reason:bO(e.status),text:e.outputText,iterations:e.iterations,usage:t}]}}var xO="session_run_in_progress";class ES extends Error{agentId;code=xO;constructor(e){super(`SessionRuntime.shutdown called while a run is in progress${e?` (agentId=${e})`:""}`);this.agentId=e;this.name="SessionRunInProgressError"}}function MO(e){if(typeof e==="string")return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}async function OO(e){let n=(typeof e.content==="function"?await e.content():e.content).trim();return n.length>0?n:void 0}function LO(e,t){let n=e.trim(),r=t.map((o)=>o.trim()).filter(Boolean).join(`
256
+ `;function bS(e=process.env){return{maxToolResultChars:SS(e[iu.maxToolResultChars]),maxTotalTextBytes:SS(e[iu.maxTotalTextBytes]),minOutdatedRewriteBytes:nO(e[iu.minOutdatedRewriteBytes])}}class cu{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(e={}){this.getToolResultRecovery=e.getToolResultRecovery,this.maxToolResultChars=Uo(e.maxToolResultChars,du),this.maxFileContentChars=Uo(e.maxFileContentChars,KM),this.maxTotalTextBytes=Uo(e.maxTotalTextBytes,GM),this.mediaBudget=e.mediaBudget??{},this.maxAssistantTextChars=Uo(e.maxAssistantTextChars,VM),this.maxAssistantToolMarkupChars=Uo(e.maxAssistantToolMarkupChars,XM),this.minOutdatedRewriteBytes=rO(e.minOutdatedRewriteBytes,JM)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(e){this.recoveryNoticeBytes=0,this.reindex(e),this.commitOutdatedRewrites(e);let n=this.addMissingToolResults(e).map((o)=>{if(!Array.isArray(o.content)){if(o.role==="user"&&typeof o.content==="string"){let a=pS(o.content);if(a!==o.content)return{...o,content:a}}if(o.role==="assistant"&&typeof o.content==="string"){let a=this.truncateAssistantText(o.content);if(a!==o.content)return{...o,content:a}}return o}let s=!1,i=o.content.map((a)=>{let d=this.transformBlock(a,o.role);if(d!==a)s=!0;return d});return s?{...o,content:i}:o}),r=this.applyMediaBudget(n);return this.truncateToTotalTextBudget(r)}transformBlock(e,t){if(t==="user"&&e.type==="text"&&typeof e.text==="string"){let s=pS(e.text);if(s!==e.text)return{...e,text:s};return e}if(t==="assistant"&&e.type==="text"&&typeof e.text==="string"){let s=this.truncateAssistantText(e.text);return s===e.text?e:{...e,text:s}}if(e.type==="file"){let s=Fo(e.content,this.maxFileContentChars,fS);return s===e.content?e:{...e,content:s}}if(e.type!=="tool_result")return e;let n=this.resolveToolName(e),r=this.getToolResultRecovery?.({...e,name:n??e.name});if(r){let{text:s,images:i}=da(e.content);if(typeof s==="string"&&s.length>this.maxToolResultChars){let a=[{type:"text",text:this.truncateMiddle(s)},...i];if(r.uri){let d={type:"text",text:`Full result is temporarily saved to ${r.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},c=me(d.text);if(this.recoveryNoticeBytes+c<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=c,this.recoveryNotices.add(d),a.push(d)}return{...e,content:a}}}let o=e.content;if(this.isReadTool(n)&&e.is_error!==!0){let s=this.committedOutdatedRewrites.get(e.tool_use_id);if(s&&s.size>0){let a=this.getReadLocators(e).filter((d)=>s.has(this.toReadLocatorKey(d))&&this.isOutdatedReadLocator(d,e.tool_use_id));if(a.length>0)o=this.replaceOutdatedReadContent(o,a)}}return o=this.truncateToolResultContent(o),o===e.content?e:{...e,content:o}}reindex(e){let t=this.indexedMessageCount===0||e.length>=this.indexedMessageCount&&e[this.indexedMessageCount-1]===this.indexedTailRef;if(e.length<this.indexedMessageCount||!t)this.resetIndexes();for(let n=this.indexedMessageCount;n<e.length;n++){let r=e[n];if(!Array.isArray(r.content))continue;for(let o=0;o<r.content.length;o++){let s=r.content[o];if(s.type==="file")this.latestFullContentOwnerByPathCache.set(s.path,`file:${n}:${o}`);else if(s.type==="tool_use"){let i=s.name.toLowerCase();if(this.toolNameByIdCache.set(s.id,i),this.isReadTool(i)){let a=this.extractLocatorsFromReadToolInput(s.input);if(a.length>0)this.readLocatorsByToolUseIdCache.set(s.id,a)}}else if(s.type==="tool_result"){let i=this.resolveToolName(s);if(!this.isReadTool(i)||s.is_error===!0)continue;let a=this.getReadLocators(s);for(let d of a)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(d),s.tool_use_id),this.isFullFileRead(d))this.latestFullContentOwnerByPathCache.set(d.path,s.tool_use_id)}}}this.indexedMessageCount=e.length,this.indexedTailRef=e.length>0?e[e.length-1]:void 0}commitOutdatedRewrites(e){let t=new Map,n=new Set,r=0;for(let o of e){if(!Array.isArray(o.content))continue;for(let s of o.content){if(s.type!=="tool_result"||s.is_error===!0)continue;let i=this.resolveToolName(s);if(!this.isReadTool(i))continue;n.add(s.tool_use_id);let a=this.committedOutdatedRewrites.get(s.tool_use_id),d=new Set,c=new Set;for(let u of this.getReadLocators(s)){let p=this.toReadLocatorKey(u);if(!this.isOutdatedReadLocator(u,s.tool_use_id))continue;if(c.add(p),!a?.has(p))d.add(p)}if(a){for(let u of a)if(!c.has(u))a.delete(u);if(a.size===0)this.committedOutdatedRewrites.delete(s.tool_use_id)}if(d.size===0)continue;let l=t.get(s.tool_use_id);if(!l)l=new Set,t.set(s.tool_use_id,l);for(let u of d)l.add(u);r+=this.estimateOutdatedReclaimBytes(s.content,d)}}for(let o of this.committedOutdatedRewrites.keys())if(!n.has(o))this.committedOutdatedRewrites.delete(o);if(t.size===0||r<this.minOutdatedRewriteBytes)return;for(let[o,s]of t){let i=this.committedOutdatedRewrites.get(o);if(!i)i=new Set,this.committedOutdatedRewrites.set(o,i);for(let a of s)i.add(a)}}estimateOutdatedReclaimBytes(e,t){let n=this.extractReadLocatorsFromToolResultContent(e),r=n.length>0&&n.every((d)=>t.has(this.toReadLocatorKey(d))),o=(d)=>{let c;try{c=JSON.parse(d)}catch{return r||n.length===0?me(this.truncateMiddle(d)):0}let l=Array.isArray(c)?c:[c],u=0;for(let p of l){let m=this.extractLocatorFromResultEntry(p);if(m&&t.has(this.toReadLocatorKey(m)))u+=this.providerBoundEntryBytes(p)}return u};if(typeof e==="string")return o(e);let s=new Set(t),i=0;for(let d of e)if(d.type==="text")i+=this.countOutdatedImageEntries(d.text,s);let a=0;for(let d of e)if(d.type==="text")a+=o(d.text);else if(d.type==="image"){if(i>0)i-=1,a+=me(d.data)}else if(mn(d)){let c=this.extractLocatorFromResultEntry(d);if(c&&t.has(this.toReadLocatorKey(c)))a+=this.providerBoundEntryBytes(d)}else if(d.type==="file"){if(t.has(this.toReadLocatorKey({path:d.path,startLine:null,endLine:null})))a+=me(this.truncateMiddle(d.content))}return a}providerBoundEntryBytes(e){let t=this.truncateNestedStrings(e);return me(JSON.stringify(t))}addMissingToolResults(e){let t=this.collectToolResultIds(e),n=[],r=new Map,o=!1,s=()=>{if(r.size===0)return;i(this.createMissingToolResultMessage(r)),r.clear(),o=!0},i=(a)=>{let d=n.at(-1);if(this.shouldMergeUserAfterToolResults(d,a)){n[n.length-1]={...d,content:[...d.content,...this.contentBlocksForUserMerge(a.content)]},o=!0;return}n.push(a)};for(let a of e){if(this.isToolResultOnlyMessage(a)){if(i(this.appendMissingToolResults(a,r)),r.size>0)r.clear(),o=!0;continue}if(Array.isArray(a.content)){let d=a.content.filter((l)=>l.type==="tool_result"),c=a.content.filter((l)=>l.type!=="tool_result");if(d.length>0){let l=this.appendMissingToolResults({...a,role:"user",content:d},r);if(i(l),r.size>0)r.clear();o=!0}if(c.length>0||d.length===0){if(d.length===0)s();let l=d.length>0?{...a,content:c}:a;if(i(l),l.role==="assistant")this.trackMissingToolCalls(l,t,r)}continue}s(),i(a)}return s(),o?n:e}appendMissingToolResults(e,t){if(t.size===0||!Array.isArray(e.content))return e;return{...e,role:"user",content:[...e.content,...this.createMissingToolResultBlocks(t)]}}shouldMergeUserAfterToolResults(e,t){return e?.role==="user"&&t.role==="user"&&this.isToolResultOnlyMessage(e)&&this.contentBlocksForUserMerge(t.content).length>0}contentBlocksForUserMerge(e){return typeof e==="string"?e.length>0?[{type:"text",text:e}]:[]:e}collectToolResultIds(e){let t=new Set;for(let n of e){if(!Array.isArray(n.content))continue;for(let r of n.content)if(r.type==="tool_result")t.add(r.tool_use_id)}return t}isToolResultOnlyMessage(e){return e.role==="user"&&Array.isArray(e.content)&&e.content.length>0&&e.content.every((t)=>t.type==="tool_result")}trackMissingToolCalls(e,t,n){if(!Array.isArray(e.content))return;for(let r of e.content){if(r.type!=="tool_use"||t.has(r.id))continue;n.set(r.id,r.name)}}createMissingToolResultMessage(e){return{role:"user",content:this.createMissingToolResultBlocks(e)}}createMissingToolResultBlocks(e){return Array.from(e,([t,n])=>({type:"tool_result",tool_use_id:t,name:n,content:[{type:"text",text:this.formatMissingToolResultText(n)}],is_error:!0}))}formatMissingToolResultText(e){return e?`${gS} Tool: ${e}.`:gS}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(e){let t=e,n=this.readResultLocatorCache.get(t);if(n===void 0)n=this.extractReadLocatorsFromToolResultContent(e.content),this.readResultLocatorCache.set(t,n);if(n.length>0)return n;return this.readLocatorsByToolUseIdCache.get(e.tool_use_id)??[]}extractLocatorsFromReadToolInput(e){if(!e||typeof e!=="object")return[];let t=e,n=[],r=this.extractLocatorFromReadRequest(t);if(r)n.push(r);if(Array.isArray(t.files))for(let o of t.files){let s=this.extractLocatorFromReadRequest(o);if(s)n.push(s)}if(Array.isArray(t.file_paths)){for(let o of t.file_paths)if(typeof o==="string"&&o.length>0)n.push({path:o,startLine:null,endLine:null})}return this.dedupeReadLocators(n)}extractReadLocatorsFromToolResultContent(e){if(typeof e==="string")return this.tryParseReadLocators(e);let t=[];for(let n of e){if(n.type==="text"){t.push(...this.tryParseReadLocators(n.text));continue}if(mn(n)){let r=this.extractLocatorFromResultEntry(n);if(r)t.push(r)}}return this.dedupeReadLocators(t)}tryParseReadLocators(e){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(e))}catch{return[]}}extractLocatorsFromParsedReadResult(e){if(Array.isArray(e)){let n=[];for(let r of e){let o=this.extractLocatorFromResultEntry(r);if(o)n.push(o)}return this.dedupeReadLocators(n)}let t=this.extractLocatorFromResultEntry(e);return t?[t]:[]}extractLocatorFromReadRequest(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(!n)return;return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)}}extractLocatorFromResultEntry(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(n)return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)};if(typeof t.query==="string"&&t.query.length>0)return this.parseReadQuery(t.query);return}extractPath(e){let t=[e.path,e.file_path,e.filePath];for(let n of t)if(typeof n==="string"&&n.length>0)return n;return}extractLineNumber(e){return typeof e==="number"&&Number.isInteger(e)?e:null}parseReadQuery(e){let t=/^(.*):(\d+)-(EOF|\d+)$/.exec(e);if(!t)return{path:e,startLine:null,endLine:null};return{path:t[1],startLine:Number(t[2]),endLine:t[3]==="EOF"?null:Number(t[3])}}dedupeReadLocators(e){let t=new Map;for(let n of e)t.set(this.toReadLocatorKey(n),n);return Array.from(t.values())}toReadLocatorKey(e){if(this.isFullFileRead(e))return e.path;return`${e.path}:${e.startLine??1}-${e.endLine??"EOF"}`}isFullFileRead(e){return e.startLine==null&&e.endLine==null}isOutdatedReadLocator(e,t){let n=this.latestFullContentOwnerByPathCache.get(e.path);if(n&&n!==t)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(e))!==t}replaceOutdatedReadContent(e,t){let n=new Set(t.map((s)=>this.toReadLocatorKey(s))),r=new Set(t.map((s)=>s.path));if(typeof e==="string")return this.replaceOutdatedInString(e,n)??Hn;let o=0;for(let s of e)if(s.type==="text")o+=this.countOutdatedImageEntries(s.text,n);return e.map((s)=>{if(s.type==="file"){if(!r.has(s.path))return s;return{...s,content:Hn}}if(s.type==="image"){if(o===0)return s;return o-=1,{type:"text",text:Hn}}if(mn(s))return this.replaceOutdatedReadEntry(s,n);if(s.type!=="text")return s;let i=this.replaceOutdatedInString(s.text,n);if(i===null)return{...s,text:Hn};return i===s.text?s:{...s,text:i}})}countOutdatedImageEntries(e,t){let n;try{n=JSON.parse(e)}catch{return 0}let r=Array.isArray(n)?n:[n],o=0;for(let s of r){if(!s||typeof s!=="object")continue;let i=s,a=this.extractLocatorFromResultEntry(i);if(!a)continue;if(!t.has(this.toReadLocatorKey(a)))continue;if(i.result==="Successfully read image"||i.content==="Successfully read image")o+=1}return o}replaceOutdatedInString(e,t){let n;try{n=JSON.parse(e)}catch{return null}let r=Array.isArray(n)?n.map((o)=>this.replaceOutdatedReadEntry(o,t)):this.replaceOutdatedReadEntry(n,t);return JSON.stringify(r)}replaceOutdatedReadEntry(e,t){if(!e||typeof e!=="object")return e;let n=this.extractLocatorFromResultEntry(e);if(!n||!t.has(this.toReadLocatorKey(n)))return e;let r={...e};if(typeof r.result==="string")r.result=Hn;else if(typeof r.content==="string")r.content=Hn;else r.result=Hn;return r}isReadTool(e){return!!e&&QM.has(e)}resolveToolName(e){let t=this.toolNameByIdCache.get(e.tool_use_id);if(t!==void 0)return t;return typeof e.name==="string"&&e.name.length>0?e.name.toLowerCase():void 0}truncateToolResultContent(e){if(typeof e==="string")return this.truncateMiddle(e);return e.map((t)=>{if(this.recoveryNotices.has(t))return t;if(t.type==="file"){let n=this.truncateMiddle(t.content);return n===t.content?t:{...t,content:n}}if(t.type==="text"){let n=this.truncateMiddle(t.text);return n===t.text?t:{...t,text:n}}if(mn(t))return this.truncateNestedStrings(t);return t})}truncateNestedStrings(e){if(typeof e==="string")return this.truncateMiddle(e);if(Array.isArray(e)){let t=!1,n=e.map((r)=>{let o=this.truncateNestedStrings(r);if(o!==r)t=!0;return o});return t?n:e}if(e!==null&&typeof e==="object"){if(uu(e))return e;let t=!1,n={};for(let[r,o]of Object.entries(e)){let s=this.truncateNestedStrings(o);if(s!==o)t=!0;n[r]=s}return t?n:e}return e}truncateMiddle(e){return Fo(e,this.maxToolResultChars,fS)}truncateAssistantText(e){if(this.hasRepeatedToolCallMarkup(e))return Fo(e,this.maxAssistantToolMarkupChars,eO);return Fo(e,this.maxAssistantTextChars,ZM)}hasRepeatedToolCallMarkup(e){if(e.length<=this.maxAssistantToolMarkupChars)return!1;let t=0;for(let n of e.matchAll(tO))if(t+=1,t>=YM)return!0;return!1}truncateToTotalTextBudget(e){let t=this.countMessageTextBytes(e);if(t<=this.maxTotalTextBytes)return e;let n=e.map((s)=>{if(!Array.isArray(s.content))return{...s};return{...s,content:s.content.map((i)=>{let a=sO(i);if(i.type==="tool_result"&&a.type==="tool_result"&&Array.isArray(i.content)&&Array.isArray(a.content))i.content.forEach((d,c)=>{if(this.recoveryNotices.has(d))this.recoveryNotices.add(a.content[c])});return a})}}),r=this.collectTruncationCandidates(n),o=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,r.length)));for(let s of r){if(t<=this.maxTotalTextBytes)break;let i=s.byteLength,a=Math.min(s.minBytes,o);if(i<=a)continue;let d=t-this.maxTotalTextBytes,c=Math.max(a,i-d),l=oO(s.get(),c,s.makeMarker);s.set(l),t-=i-me(l)}return n}countMessageTextBytes(e){let t=0;for(let n of e){if(typeof n.content==="string"){t+=me(n.content);continue}for(let r of n.content)if(r.type==="text")t+=me(r.text);else if(r.type==="thinking")t+=me(r.thinking);else if(r.type==="file")t+=me(r.content);else if(r.type==="tool_use")t+=va(r.input);else if(r.type==="tool_result"){if(typeof r.content==="string")t+=me(r.content);else for(let o of r.content)if(o.type==="text")t+=me(o.text);else if(o.type==="file")t+=me(o.content);else if(mn(o))t+=va(o)}}return t}collectTruncationCandidates(e){let t=[],n=[];for(let r of e){if(r.role==="assistant"&&typeof r.content==="string"){t.push({byteLength:me(r.content),minBytes:mS,makeMarker:hS,get:()=>r.content,set:(o)=>{r.content=o}});continue}if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){Ta(o.input,n);continue}if(r.role==="assistant"&&o.type==="text"){t.push({byteLength:me(o.text),minBytes:mS,makeMarker:hS,get:()=>o.text,set:(s)=>{o.text=s}});continue}if(o.type!=="tool_result")continue;if(typeof o.content==="string"){t.push({byteLength:me(o.content),minBytes:Ho,makeMarker:Bo,get:()=>o.content,set:(s)=>{o.content=s}});continue}for(let s of o.content){if(this.recoveryNotices.has(s))continue;if(s.type==="text")t.push({byteLength:me(s.text),minBytes:Ho,makeMarker:Bo,get:()=>s.text,set:(i)=>{s.text=i}});else if(s.type==="file")t.push({byteLength:me(s.content),minBytes:Ho,makeMarker:Bo,get:()=>s.content,set:(i)=>{s.content=i}});else if(mn(s))Ta(s,t)}}}return t.sort((r,o)=>o.byteLength-r.byteLength),n.sort((r,o)=>o.byteLength-r.byteLength),[...t,...n]}applyMediaBudget(e){let t=this.resolveMediaBudget();if(t.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&t.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&t.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return e;let n=jM(),r=!1,o=e.map((s)=>{if(!Array.isArray(s.content))return s;let i=!1,a=s.content.map((d)=>{let c=this.applyMediaBudgetToBlock(d,t,n);if(c!==d)i=!0;return c});if(!i)return s;return r=!0,{...s,content:a}});return r?o:e}resolveMediaBudget(){return qM(this.mediaBudget)}applyMediaBudgetToBlock(e,t,n){if(au(e))return this.limitImageContent(e,t,n);if(e.type!=="tool_result"||typeof e.content==="string")return e;let r=!1,o=e.content.map((s)=>{let i=this.applyMediaBudgetToToolResultEntry(s,t,n);if(i!==s)r=!0;return i});return r?{...e,content:o}:e}applyMediaBudgetToToolResultEntry(e,t,n){if(au(e))return this.limitImageContent(e,t,n);if(mn(e))return this.limitNestedMedia(e,t,n);return e}limitNestedMedia(e,t,n){if(au(e)){let r=this.limitImageContent(e,t,n);return r.type==="text"?r.text:r}if(Array.isArray(e)){let r=!1,o=e.map((s)=>{let i=this.limitNestedMedia(s,t,n);if(i!==s)r=!0;return i});return r?o:e}if(e!==null&&typeof e==="object"){let r=!1,o={};for(let[s,i]of Object.entries(e)){let a=this.limitNestedMedia(i,t,n);if(a!==i)r=!0;o[s]=a}return r?o:e}return e}limitImageContent(e,t,n){if(!vS(e))return{type:"text",text:lS};let r=zM(e.mediaType,e.data,{maxImageEncodedBytes:t.maxImageEncodedBytes,maxImageDecodedBytes:t.maxImageDecodedBytes,maxTotalMediaBytes:t.maxTotalMediaBytes},n);if(!r.ok)return{type:"text",text:lS};return{...e,data:r.base64,mediaType:r.mediaType}}}var yS=String.raw`[\|\uFF5C]`,tO=new RegExp(String.raw`<\s*(?:${yS}\s*)?DSML\s*(?:${yS}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function me(e){return Buffer.byteLength(e,"utf8")}function SS(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function nO(e){if(e===void 0)return;let t=e.trim().toLowerCase();if(t==="infinity"||t==="disable")return Number.POSITIVE_INFINITY;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:void 0}function Uo(e,t){return typeof e==="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t}function rO(e,t){if(typeof e!=="number"||Number.isNaN(e)||e<0)return t;return Number.isFinite(e)?Math.floor(e):e}function Fo(e,t,n){if(e.length<=t)return e;let r=n(e.length-t),o=Math.max(0,Math.floor((t-r.length)/2)),s=Math.max(0,e.length-o*2),i=n(s),a=Math.max(0,Math.floor((t-i.length)/2)),d=e.slice(0,a),c=a>0?e.slice(-a):"";return`${d}${i}${c}`}function oO(e,t,n){if(me(e)<=t)return e;let r=0,o=e.length,s="";while(r<=o){let i=r+o>>>1,a=Fo(e,i,n);if(me(a)<=t)s=a,r=i+1;else o=i-1}return s}function sO(e){if(e.type==="tool_use")return{...e,input:wa(e.input)};if(e.type!=="tool_result"||typeof e.content==="string")return{...e};return{...e,content:e.content.map((t)=>mn(t)?wa(t):{...t})}}function mn(e){if(e===null||typeof e!=="object")return!1;let t=e.type;return t!=="text"&&t!=="image"&&t!=="file"}function au(e){return e!==null&&typeof e==="object"&&e.type==="image"}function vS(e){return e!==null&&typeof e==="object"&&e.type==="image"&&typeof e.data==="string"&&typeof e.mediaType==="string"}function uu(e){return vS(e)}function va(e){if(typeof e==="string")return me(e);if(Array.isArray(e)){let t=0;for(let n of e)t+=va(n);return t}if(e!==null&&typeof e==="object"){if(uu(e))return 0;let t=0;for(let n of Object.values(e))t+=va(n);return t}return 0}function Ta(e,t){if(Array.isArray(e)){e.forEach((n,r)=>{if(typeof n==="string")t.push({byteLength:me(n),minBytes:Ho,makeMarker:Bo,get:()=>e[r],set:(o)=>{e[r]=o}});else Ta(n,t)});return}if(e!==null&&typeof e==="object"){if(uu(e))return;let n=e;for(let r of Object.keys(n)){let o=n[r];if(typeof o==="string")t.push({byteLength:me(o),minBytes:Ho,makeMarker:Bo,get:()=>n[r],set:(s)=>{n[r]=s}});else Ta(o,t)}}}function wa(e){if(Array.isArray(e))return e.map(wa);if(e!==null&&typeof e==="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=wa(r);return t}return e}function lu(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class pu{messages=[];conversationId=lu();sessionStarted=!1;constructor(e){if((e?.length??0)>0)this.restore(e??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(e){this.messages.push(e)}appendMessages(e){if(e.length===0)return;this.messages.push(...e)}replaceMessages(e){let t=new Map(e.map((o,s)=>[o.id,s])),n=new Map,r=-1;for(let o of this.messages){let s=o.id?t.get(o.id):void 0;if(s!==void 0)r=s;else if(o.metadata?.displayOnly===!0){let i=n.get(r)??[];i.push(o),n.set(r,i)}}this.messages=[...n.get(-1)??[]];for(let[o,s]of e.entries())this.messages.push(s,...n.get(o)??[])}resetForRun(){this.messages=[],this.conversationId=lu(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=lu(),this.sessionStarted=!1}restore(e){this.messages=[...e],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var Nr="0.0.90";var Dr={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Nr,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"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.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 wS(e){let{agentConfig:t}=e,n=iO(t),r=aO(t),o=e.hooks,s=dO(t.maxParallelToolCalls);return{distinctId:t.distinctId,clientName:t.extensionContext?.client?.name,clientVersion:t.extensionContext?.client?.version,clineCoreVersion:Nr,sessionId:e.sessionId??t.sessionId,agentId:e.agentId,conversationId:e.conversationId,parentAgentId:e.parentAgentId,agentRole:e.agentRole,systemPrompt:e.systemPrompt??t.systemPrompt,messageModelInfo:r,model:e.model,modelOptions:n,modelTools:t.modelTools,tools:e.tools,hooks:o,prepareTurn:e.prepareTurn,consumePendingUserMessage:t.consumePendingUserMessage,plugins:e.plugins,logger:e.logger??t.logger,telemetry:e.telemetry??t.telemetry,initialMessages:e.initialMessages,completionPolicy:e.completionPolicy===null?void 0:e.completionPolicy??t.completionPolicy,maxIterations:t.maxIterations,toolExecution:s,toolPolicies:t.toolPolicies,toolContextMetadata:e.toolContextMetadata,requestToolApproval:t.requestToolApproval}}function iO(e){let t={};if(e.thinking!==void 0)t.thinking=e.thinking;if(e.reasoningEffort!==void 0)t.reasoningEffort=e.reasoningEffort;if(e.thinkingBudgetTokens!==void 0)t.thinkingBudgetTokens=e.thinkingBudgetTokens;if(e.maxTokensPerTurn!==void 0)t.maxTokensPerTurn=e.maxTokensPerTurn;if(e.temperature!==void 0)t.temperature=e.temperature;if(e.apiTimeoutMs!==void 0)t.apiTimeoutMs=e.apiTimeoutMs;return Object.keys(t).length>0?t:void 0}function aO(e){let t=e.providerConfig?.family;return{id:e.modelId,provider:e.providerId,family:t}}function dO(e){if(e===void 0)return;return e>=2?"parallel":"sequential"}function Ur(e){let t={...e},n=Object.hasOwn(e,"thinking"),r=Object.hasOwn(e,"thinkingBudgetTokens");if(e.thinking===!1||e.thinking===null)return t.reasoningEffort=void 0,t.thinkingBudgetTokens=void 0,t;if(!n&&r&&typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0;return t}function cO(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function uO(e){e.lastToolName="",e.lastToolSignature="",e.consecutiveIdenticalCount=0}function mu(e){if(e==null||typeof e!=="object")return e;if(Array.isArray(e))return e.map(mu);let t={};for(let n of Object.keys(e).sort())t[n]=mu(e[n]);return t}function lO(e){if(e==null)return"null";if(typeof e==="string")return e;if(typeof e!=="object")return String(e);try{return JSON.stringify(mu(e))}catch{return String(e)}}function pO(e,t,n,r){if(t===e.lastToolName&&n===e.lastToolSignature)e.consecutiveIdenticalCount++;else e.consecutiveIdenticalCount=1;return e.lastToolName=t,e.lastToolSignature=n,{softWarning:e.consecutiveIdenticalCount===r.softThreshold,hardEscalation:e.consecutiveIdenticalCount>=r.hardThreshold}}var kS={softThreshold:3,hardThreshold:5};class gu{config;state=cO();constructor(e){this.config={softThreshold:e?.softThreshold??kS.softThreshold,hardThreshold:e?.hardThreshold??kS.hardThreshold}}inspect(e){let t=lO(e.input),n=pO(this.state,e.name,t,this.config);if(n.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; stopping to avoid a loop.`};if(n.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){uO(this.state)}}class fu{consecutiveMistakes=0;options;constructor(e){this.options=e}async record(e){let t=this.options.maxConsecutiveMistakes,n=e.forceAtLimit&&t?t:this.consecutiveMistakes+1;this.consecutiveMistakes=n;let r=e.details?.trim()||`consecutive mistake (${e.reason})`;if(this.options.emit({type:"error",error:Error(r),recoverable:!0,iteration:e.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:e.iteration,reason:e.reason,details:e.details,consecutiveMistakes:n,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!t||n<t)return{action:"continue"};let o={iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details};this.options.onLimitTelemetry?.(o);let s=await gO(o,this.options.onLimitReached);if(s.action==="continue"){let i=s.guidance?.trim();if(i)this.options.appendRecoveryNotice(i,e.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:i}}return{action:"stop",reason:s.reason?.trim()||void 0,message:mO({iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details,stopReason:s.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function mO(e){let t=[`Stopped after ${e.consecutiveMistakes}/${e.maxConsecutiveMistakes} consecutive mistakes (${e.reason}) at iteration ${e.iteration}.`],n=e.details?.trim();if(n)t.push(`Error: ${n}`);let r=e.stopReason?.trim();if(r)t.push(`Decision: ${r}`);return t.push("Session state was preserved. Send a new prompt to resume from the latest state."),t.join(" ")}async function gO(e,t){if(!t)return{action:"stop",reason:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`};try{return await t(e)}catch(n){return{action:"stop",reason:n instanceof Error?n.message:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`}}}function fO(e){switch(e){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return e;default:return}}function hO(e){let t=e.content.filter((n)=>n.type==="text");if(t.length===0)return;return t.map((n)=>n.text).join("")}function yO(e){let t=e.content.filter((n)=>n.type==="reasoning");if(t.length===0)return;return{reasoning:t.map((n)=>n.text).join(""),redacted:t.some((n)=>n.redacted===!0)}}function SO(e){return e.content.find((t)=>t.type==="tool-result")}function bO(e){switch(e){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function vO(e){if(!e||e.isError!==!0)return;if(typeof e.output==="string")return e.output;if(e.output instanceof Error)return e.output.message;try{return JSON.stringify(e.output)}catch{return String(e.output)}}class hu{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(e){switch(e.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:e.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:e.iteration,hadToolCalls:e.toolCallCount>0,toolCallCount:e.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:e.text,accumulated:e.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:e.text,redacted:e.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:e.media}];case"assistant-message":return this.translateAssistantMessage(e.message);case"tool-started":return this.translateToolStarted(e);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,update:e.update}];case"tool-finished":return this.translateToolFinished(e);case"usage-updated":return this.translateUsage(e.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:e.message,reason:fO(e.metadata?.reason),metadata:e.metadata}];case"run-finished":return this.translateRunFinished(e.result);case"run-failed":return[{type:"error",error:e.error,errorClass:e.errorClass,recoverable:!1,iteration:e.snapshot.iteration}];default:return e}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(e){let t=[],n=hO(e);if(n!==void 0)t.push({type:"content_end",contentType:"text",text:n});let r=yO(e);if(r!==void 0)t.push({type:"content_end",contentType:"reasoning",reasoning:r.reasoning});return t}translateToolStarted(e){return this.toolStartedAt.set(e.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,execution:e.toolCall.execution}]}translateToolFinished(e){let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=t===void 0?void 0:Date.now()-t;this.toolStartedAt.delete(e.toolCall.toolCallId);let r=SO(e.message),o=r?.output,s=vO(r);return[{type:"content_end",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,output:o,error:s,durationMs:n,execution:e.toolCall.execution}]}translateUsage(e){let t=e.inputTokens-this.lastUsage.inputTokens,n=e.outputTokens-this.lastUsage.outputTokens,r=e.cacheReadTokens-this.lastUsage.cacheReadTokens,o=e.cacheWriteTokens-this.lastUsage.cacheWriteTokens,s=this.lastUsage.totalCost??0,a=(e.totalCost??0)-s,d=this.lastUsage.reasoningTokenCount??0,l=(e.reasoningTokenCount??0)-d;return this.lastUsage={inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,totalCost:e.totalCost,reasoningTokenCount:e.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,t),outputTokens:Math.max(0,n),cacheReadTokens:r===0?void 0:Math.max(0,r),cacheWriteTokens:o===0?void 0:Math.max(0,o),cost:a===0?void 0:a,reasoningTokenCount:l===0?void 0:Math.max(0,l),totalInputTokens:e.inputTokens,totalOutputTokens:e.outputTokens,totalCacheReadTokens:e.cacheReadTokens===0?void 0:e.cacheReadTokens,totalCacheWriteTokens:e.cacheWriteTokens===0?void 0:e.cacheWriteTokens,totalCost:e.totalCost}]}translateRunFinished(e){let t={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens===0?void 0:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens===0?void 0:e.usage.cacheWriteTokens,totalCost:e.usage.totalCost};return[{type:"done",reason:bO(e.status),text:e.outputText,iterations:e.iterations,usage:t}]}}var xO="session_run_in_progress";class ES extends Error{agentId;code=xO;constructor(e){super(`SessionRuntime.shutdown called while a run is in progress${e?` (agentId=${e})`:""}`);this.agentId=e;this.name="SessionRunInProgressError"}}function MO(e){if(typeof e==="string")return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}async function OO(e){let n=(typeof e.content==="function"?await e.content():e.content).trim();return n.length>0?n:void 0}function LO(e,t){let n=e.trim(),r=t.map((o)=>o.trim()).filter(Boolean).join(`
257
257
 
258
258
  `);if(n&&r)return`${n}
259
259
 
@@ -262,10 +262,10 @@ ${r}`;return n||r}function NO(e,t){let n=t?.["*"]??{},r=t?.[e]??{};return{...n,.
262
262
  `);r={...r,...s,appendContext:i||void 0}}return r},afterRun:async(n)=>{for(let r of t)await r.afterRun?.(n)},beforeModel:async(n)=>{let r=n.request,o;for(let s of t){let i=await s.beforeModel?.({...n,request:r});if(!i)continue;if(i.stop)return i;o={...o,...i,options:IS(o?.options,i.options)},r={...r,...i.messages?{messages:i.messages}:{},...i.tools?{tools:i.tools}:{},...i.options?{options:IS(r.options,i.options)}:{}}}return o},afterModel:async(n)=>{for(let r of t){let o=await r.afterModel?.(n);if(o?.stop)return o}return},beforeTool:async(n)=>{let r=n.input,o;for(let s of t){let i=await s.beforeTool?.({...n,input:r});if(!i)continue;if(i.stop||i.skip)return i;if(o={...o,...i},Object.hasOwn(i,"input"))r=i.input}return o},afterTool:async(n)=>{let r=n.result,o;for(let s of t){let i=await s.afterTool?.({...n,result:r});if(!i)continue;if(i.stop)return i;if(o={...o,...i},i.result)r=i.result}return o},onEvent:async(n)=>{for(let r of t)await r.onEvent?.(n)}}}class Bn{config;agentId;parentAgentId;logger;telemetry;conversation;toolResultCache;cacheableToolNames=new Set;maxCachedResultChars;pendingTerminalError;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new hu;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;handleExternalAbort=()=>{this.abort(this.config.abortSignal?.reason)};constructor(e,t={}){this.config=e,this.agentId=`agent_${CO()}`,this.parentAgentId=e.parentAgentId,this.logger=t.logger??e.logger,this.telemetry=t.telemetry??e.telemetry,this.createAgentRuntimeImpl=t.createAgentRuntimeImpl??IO,this.conversation=new pu(e.initialMessages),this.toolResultCache=new Mo(e.sessionId??this.agentId);let n=bS();this.maxCachedResultChars=n.maxToolResultChars??du,this.messageBuilder=new cu({...n,getToolResultRecovery:(i)=>this.cacheableToolNames.has(i.name??"")?{uri:this.toolResultCache.uriFor(i.tool_use_id)}:void 0}),this.contributionRegistry=AO({extensions:e.extensions?[...e.extensions]:[],setupContext:{session:e.extensionContext?.session,client:e.extensionContext?.client,user:e.extensionContext?.user,workspaceInfo:e.extensionContext?.workspace,automation:e.extensionContext?.automation,logger:e.extensionContext?.logger??this.logger,telemetry:e.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let r=e.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new fu({maxConsecutiveMistakes:r,onLimitReached:e.onConsecutiveMistakeLimitReached,onLimitTelemetry:(i)=>{af(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:i.reason,consecutiveMistakes:i.consecutiveMistakes,maxConsecutiveMistakes:i.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(i)=>this.emitLegacyEvent(i),log:(i,a,d)=>FO(this.logger,i,a,d),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(i,a)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:i}]})}});let o=e.execution?.loopDetection;this.loopDetectionDisabled=o===!1;let s=o===!1||o===void 0?void 0:o;this.loopTracker=new gu(s)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.activeRunPromise&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools(e){if(e.length===0)return;let t=new Set(this.config.tools.map((r)=>r.name)),n=[...this.config.tools];for(let r of e)if(!t.has(r.name))n.push(r),t.add(r.name);this.config={...this.config,tools:n}}updateConnection(e){let t=Ur(e),n={...this.config};if(t.providerId!==void 0)n.providerId=t.providerId;if(t.modelId!==void 0)n.modelId=t.modelId;if(t.apiKey!==void 0)n.apiKey=t.apiKey;if(t.baseUrl!==void 0)n.baseUrl=t.baseUrl;if(t.headers!==void 0)n.headers=t.headers;if(t.providerConfig!==void 0)n.providerConfig=t.providerConfig;if(Object.hasOwn(t,"reasoningEffort"))n.reasoningEffort=t.reasoningEffort??void 0;if(Object.hasOwn(t,"thinkingBudgetTokens"))n.thinkingBudgetTokens=t.thinkingBudgetTokens??void 0;if(Object.hasOwn(t,"thinking")){if(n.thinking=t.thinking??void 0,t.thinking===!1||t.thinking===null)n.reasoningEffort=void 0,n.thinkingBudgetTokens=void 0}this.config=n}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore(e){this.conversation.restore(e),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.toolResultCache.clear(),this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notifyPendingUserMessage(){this.activeRuntime?.notifyPendingUserMessage()}abort(e){let t=typeof e==="string"?e:e instanceof Error?e.message:e===void 0?void 0:String(e);if(this.abortRequested=!0,this.abortReason=t,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(t)}async shutdown(e,t){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw new ES(this.agentId);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0,this.toolResultCache.clear()}run(e,t,n){let r=this.getRunAdmissionError();if(r)return Promise.reject(r);return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:e,userImages:t,userFiles:n,isContinue:!1})}continue(e,t,n){let r=this.getRunAdmissionError();if(r)return Promise.reject(r);return this.executeRun({userMessage:e,userImages:t,userFiles:n,isContinue:!0})}async composeSystemPrompt(e){let t=[];for(let n of this.contributionRegistry.getRegisteredRules()){if(n.whenToolAvailable&&!e.has(n.whenToolAvailable))continue;let r=await OO(n);if(r)t.push(r)}return LO(this.config.systemPrompt,t)}getRunAdmissionError(){if(this.shutdownCalled)return Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running||this.activeRunPromise)return Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);return}executeRun(e){let t;return t=this.executeRunWithAuthRetry(e).then((n)=>{if(n.finishReason==="error")return this.recordTerminalError(n.text,"result"),{...n,messages:this.conversation.getMessages()};return this.pendingTerminalError=void 0,n},(n)=>{throw this.recordTerminalError(n instanceof Error?n.message:String(n),"thrown"),n}).finally(()=>{if(this.activeRunPromise===t)this.activeRunPromise=null}),this.activeRunPromise=t,t}recordTerminalError(e,t){this.conversation.appendMessage({id:`error_${crypto.randomUUID()}`,role:"assistant",content:[{type:"text",text:e}],ts:Date.now(),metadata:{displayOnly:!0,displayRole:"error"},modelInfo:{id:this.config.modelId,provider:this.config.providerId}});let n=this.pendingTerminalError;this.pendingTerminalError=void 0,this.emitLegacyEvent(n?.error.message===e?n:{type:"error",error:Error(e),recoverable:!1,iteration:0});try{vf(this.telemetry,{sessionId:this.config.sessionId,provider:this.config.providerId,model:this.config.modelId,source:t})}catch{}}async executeRunWithAuthRetry(e){let t=await this.executeRunInternal(e);if(t.finishReason!=="error"||!this.config.onAuthError||!RO(t.text))return t;if(!await this.config.onAuthError().catch(()=>!1))return t;let r=await this.executeRunInternal({isContinue:!0});return Yg(this.telemetry,this.config.providerId,{recovered:r.finishReason!=="error"}),r}async executeRunInternal(e){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let t=new Date,n=e.userMessage;if(n!==void 0){let v=await BO(n,e.userImages,e.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({id:crypto.randomUUID(),role:"user",content:v})}let r=Jf(this.config,this.logger,this.telemetry),o=new Map;for(let v of this.contributionRegistry.getRegisteredTools())o.set(v.name,v);let s=AS([...o.values()],this.config.toolPolicies),i=new Map;for(let v of s)i.set(v.name,v);for(let v of this.config.tools)i.set(v.name,v);let a=this.conversation.getConversationId(),d=RS(this.config),l=_O(d??{})||!PO(d??{}),u=AS(Array.from(i.values()),this.config.toolPolicies),p=l?[]:u,m=await this.composeSystemPrompt(new Set(p.map((v)=>v.name))),g=Ci(this.conversation.getMessages());this.cacheableToolNames=new Set(p.filter((v)=>v.resultPolicy==="cache-oversized").map((v)=>v.name.toLowerCase()));let f=wS({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:a,parentAgentId:this.parentAgentId,model:r,logger:this.logger,telemetry:this.telemetry,tools:p,toolContextMetadata:{modelSupportsImages:EO(d??{}),...this.config.toolContextMetadata,toolResultCache:this.toolResultCache},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(d,p),initialMessages:g,completionPolicy:l?null:void 0,systemPrompt:m}),h=this.createAgentRuntimeImpl(f);this.activeRuntime=h;let S=h.subscribe((v)=>{if(v.type==="run-started"&&this.abortRequested)h.abort(this.abortReason);this.handleRuntimeEvent(v)});if(this.config.abortSignal)if(this.config.abortSignal.aborted)this.handleExternalAbort();else this.config.abortSignal.addEventListener("abort",this.handleExternalAbort,{once:!0});let y,b;try{if(e.isContinue)y=await h.continue(void 0);else y=await h.run("")}catch(v){b=v instanceof Error?v:Error(String(v))}finally{S(),this.config.abortSignal?.removeEventListener("abort",this.handleExternalAbort);try{await this.activeTrackerWork}catch(v){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:v})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(y&&y.messages.length>0){let v=vo(y.messages);this.conversation.replaceMessages(v)}let k=new Date;try{return this.buildLegacyResult({runResult:y,thrownError:b,startedAt:t,endedAt:k})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch(e){if(this.config.hookErrorMode==="throw")throw e;this.emitLegacyEvent({type:"error",error:e instanceof Error?e:Error(String(e)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let e=UO([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((t)=>t.hooks)]);return{...e,afterTool:async(t)=>{let n=await e.afterTool?.(t),r=n?.result??t.result;if(t.tool.resultPolicy==="cache-oversized"){let{text:o}=da(ki(r.output));if(typeof o==="string"&&o.length>this.maxCachedResultChars){let{text:s}=Fy(r.output);if(typeof s==="string")this.toolResultCache.store(t.toolCall.toolCallId,s)}}return n},beforeModel:async(t)=>{let n=await e.beforeModel?.(t);if(n?.stop)return n;let r=n?.messages??t.request.messages,o=await this.prepareMessagesForModelRequest(r);return{...n,messages:o}}}}createRuntimePrepareTurn(e,t){let n=this.config.prepareTurn;if(!n)return;return async(r)=>{let o=vo(r.messages),s=await this.prepareProviderMessagesForApi(o),i=await n({agentId:r.agentId,conversationId:r.conversationId??this.conversation.getConversationId(),parentAgentId:r.parentAgentId??null,iteration:r.iteration,messages:o,apiMessages:s,abortSignal:r.signal??new AbortController().signal,systemPrompt:r.systemPrompt??"",tools:t,model:{id:this.config.modelId,provider:this.config.providerId,info:e},overflowRecovery:r.overflowRecovery,previousRequestInputTokens:r.previousRequestInputTokens,emitStatusNotice:r.emitStatusNotice});if(!i)return;return{...i.messages?{messages:Ci(i.messages)}:{},...i.systemPrompt!==void 0?{systemPrompt:i.systemPrompt}:{}}}}async prepareMessagesForModelRequest(e){let t=await this.prepareProviderMessagesForApi(Ii(e));return Ci(t)}async prepareProviderMessagesForApi(e){let t=e,n=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let r of n)t=await r.build(t);return this.messageBuilder.buildForApi(t)}handleRuntimeEvent(e){switch(e.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage(e.snapshot.messages,[e.message]);break}case"turn-started":{this.toolResultCache.advanceIteration(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{if(this.toolStartedAt.set(e.toolCall.toolCallId,new Date),this.toolInputs.set(e.toolCall.toolCallId,e.toolCall.input),e.toolCall.execution)break;this.inspectLoopForToolCall(e.toolCall.toolName,e.toolCall.input,e.iteration);break}case"tool-finished":{let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=new Date,r=this.toolInputs.get(e.toolCall.toolCallId);this.toolStartedAt.delete(e.toolCall.toolCallId),this.toolInputs.delete(e.toolCall.toolCallId);let o=e.message.content.find((d)=>d.type==="tool-result"),s=o?.type==="tool-result"&&o.isError===!0,i=s?MO(o?.type==="tool-result"?o.output:void 0):void 0,a={id:e.toolCall.toolCallId,name:e.toolCall.toolName,execution:e.toolCall.execution,input:r,output:o?.type==="tool-result"?o.output:void 0,error:i,durationMs:t===void 0?0:n.getTime()-t.getTime(),startedAt:t??n,endedAt:n};if(this.currentRunToolCalls.push(a),e.toolCall.execution)break;if(s){if(this.currentTurnFailedTools+=1,i)this.currentTurnFailureDetails.push(`[${e.toolCall.toolName}] ${i}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let t=this.currentTurnFailedTools,n=this.currentTurnSuccessfulTools;if(t>0&&n===0){let r=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:e.iteration,reason:"tool_execution_failed",details:`${t} tool call(s) failed${r?`: ${r}`:""}`})}else if(n>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens>0?e.usage.cacheReadTokens:void 0,cacheWriteTokens:e.usage.cacheWriteTokens>0?e.usage.cacheWriteTokens:void 0,totalCost:e.usage.totalCost};break}default:break}for(let t of this.eventAdapter.translate(e)){if(t.type==="error"&&!t.recoverable){this.pendingTerminalError=t;continue}this.emitLegacyEvent(t)}}syncConversationFromRuntimeMessage(e,t){if(e.length>0){this.conversation.replaceMessages(vo(e));return}if(t.length===0)return;let n=new Set(this.conversation.getMessages().map((o)=>o.id).filter((o)=>typeof o==="string")),r=vo(t).filter((o)=>!o.id||!n.has(o.id));if(r.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...r])}emitLegacyEvent(e){for(let t of this.listeners)try{t(e)}catch(n){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:n})}}inspectLoopForToolCall(e,t,n){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let r=this.loopTracker.inspect({name:e,input:t});if(r.kind==="ok")return;if(r.kind==="soft"){if(r.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:r.message}]});return}this.enqueueMistakeRecord({iteration:n,reason:"tool_execution_failed",forceAtLimit:!0,details:r.message??`Detected repeated tool calls to \`${e}\`; stopping to avoid a loop.`})}enqueueMistakeRecord(e){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let t=await this.mistakeTracker.record(e);if(t.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:t.message}]}),this.activeRuntime?.abort(t.reason??t.message)})}buildLegacyResult(e){let{runResult:t,thrownError:n,startedAt:r,endedAt:o}=e,s=o.getTime()-r.getTime(),i=n?"error":HO(t),a=(t?.status==="failed"?t.error?.message:void 0)||t?.outputText||"",d=t?{inputTokens:t.usage.inputTokens,outputTokens:t.usage.outputTokens,cacheReadTokens:t.usage.cacheReadTokens>0?t.usage.cacheReadTokens:void 0,cacheWriteTokens:t.usage.cacheWriteTokens>0?t.usage.cacheWriteTokens:void 0,totalCost:t.usage.totalCost}:this.currentRunUsage,c=this.conversation.getMessages(),l=RS(this.config);if(n)throw n;return{text:a,usage:d,messages:c,toolCalls:this.currentRunToolCalls,iterations:t?.iterations??0,finishReason:i,model:{id:this.config.modelId,provider:this.config.providerId,info:l},startedAt:r,endedAt:o,durationMs:s}}}function FO(e,t,n,r){if(!e)return;if(t==="debug"){e.debug(n,r);return}if(t==="error"&&e.error){e.error(n,r);return}let o=t==="warn"?"warn":t==="error"?"error":"info";e.log(n,{...r,severity:o})}function HO(e){if(!e)return"error";switch(e.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function BO(e,t,n,r){await Promise.resolve();return CS(e,t,n,r)}function RS(e){if(e.knownModels?.[e.modelId])return e.knownModels[e.modelId];let t=Rc(e);if(t?.[e.modelId])return t[e.modelId];return}import{buildClineSystemPrompt as PS}from"@cline/shared";function _S(e,t){let n=e.trim();if(t.providerId.toLowerCase()!=="cline")return n;return PS({ide:t.clineIdeName?.trim()||"Terminal",workspaceRoot:t.cwd?.trim()||"/",providerId:t.providerId,rules:`# Team Teammate Role
263
263
  ${n}`,platform:t.clinePlatform,metadata:t.workspaceMetadata})}function xS(e,t){let n=e.trim();if(t.providerId.toLowerCase()!=="cline")return n;return PS({ide:t.clineIdeName||"Terminal",workspaceRoot:t.cwd?.trim()||"/",providerId:t.providerId,overridePrompt:n,metadata:t.workspaceMetadata,platform:t.clinePlatform})}function $o(e){let t={...e};return{getRuntimeConfig:()=>t,getConnectionConfig:()=>({providerId:t.providerId,modelId:t.modelId,apiKey:t.apiKey,baseUrl:t.baseUrl,headers:t.headers,onAuthError:t.onAuthError,providerConfig:t.providerConfig,knownModels:t.knownModels,thinking:t.thinking,reasoningEffort:t.reasoningEffort,thinkingBudgetTokens:t.thinkingBudgetTokens,maxTokensPerTurn:t.maxTokensPerTurn,temperature:t.temperature}),updateConnectionDefaults:(n)=>{t={...t,...n}}}}function ka(e){let t=e.configProvider.getRuntimeConfig(),n=e.kind==="teammate"?_S(e.prompt,t):xS(e.prompt,t);return{...e.configProvider.getConnectionConfig(),distinctId:t.distinctId,sessionId:t.sessionId,systemPrompt:n,tools:e.tools,maxIterations:e.maxIterations??t.maxIterations,parentAgentId:e.parentAgentId,abortSignal:e.abortSignal,onEvent:e.onEvent,hooks:t.hooks,extensions:t.extensions,hookErrorMode:e.hookErrorMode,toolPolicies:e.toolPolicies,requestToolApproval:e.requestToolApproval,logger:t.logger,role:e.role}}function Wo(e){let t=ka(e),n=new Bn(t);if(t.onEvent)n.subscribeEvents(t.onEvent);return n}var jO=Su.object({systemPrompt:Su.string().describe("System prompt defining the sub-agent's behavior"),task:Su.string().describe("Task for the sub-agent to complete")});function jo(e){return $O({name:"spawn_agent",executionMode:"parallel",description:"Spawn a sub-agent with custom instructions for a specialized task. Waits for the sub-agent to finish and returns its result before your next step.",inputSchema:WO(jO),execute:async(t,n)=>{let r=e.createSubAgentTools?await e.createSubAgentTools(t,n):e.subAgentTools??[],o=Wo({kind:"subagent",prompt:t.systemPrompt,configProvider:e.configProvider,tools:r,maxIterations:e.defaultMaxIterations,parentAgentId:n.agentId,abortSignal:n.signal,onEvent:e.onSubAgentEvent,hookErrorMode:e.hookErrorMode,toolPolicies:e.toolPolicies,requestToolApproval:e.requestToolApproval}),s=o.getAgentId(),i=o.getConversationId(),a=n.agentId;if(e.onSubAgentStart)try{await e.onSubAgentStart({subAgentId:s,conversationId:i,parentAgentId:a,input:t})}catch{}try{let d=await o.run(t.task),c={text:d.text,iterations:d.iterations,finishReason:d.finishReason,usage:{inputTokens:d.usage.inputTokens,outputTokens:d.usage.outputTokens}};if(e.onSubAgentEnd)try{await e.onSubAgentEnd({subAgentId:s,conversationId:i,parentAgentId:a,input:t,result:c,agentResult:d})}catch{}return c}catch(d){if(e.onSubAgentEnd)try{await e.onSubAgentEnd({subAgentId:s,conversationId:i,parentAgentId:a,input:t,error:d instanceof Error?d:Error(String(d))})}catch{}throw d}},timeoutMs:300000,retryable:!1})}function Ue(e){let t=e.toLowerCase().replace(/[^a-z0-9._-]+/g,"-"),n=0,r=t.length;while(n<r&&t[n]==="-")n++;while(r>n&&t[r-1]==="-")r--;return t.slice(n,r)}import{createTool as Ae,TEAM_AWAIT_TIMEOUT_MS as qO,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as zO,TEAM_RUN_TEXT_PREVIEW_LIMIT as KO,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as GO,TeamAttachOutcomeFragmentInputSchema as MS,TeamAwaitRunsInputSchema as OS,TeamBroadcastInputSchema as LS,TeamBroadcastToolResultSchema as VO,TeamCancelRunInputSchema as NS,TeamCancelRunToolResultSchema as XO,TeamCleanupInputSchema as DS,TeamCleanupToolResultSchema as JO,TeamCreateOutcomeInputSchema as US,TeamCreateOutcomeToolResultSchema as YO,TeamFinalizeOutcomeInputSchema as FS,TeamFinalizeOutcomeToolResultSchema as QO,TeamListOutcomesInputSchema as HS,TeamListRunsInputSchema as BS,TeamMailboxMessageToolResultSchema as ZO,TeamMissionLogInputSchema as $S,TeamMissionLogToolResultSchema as eL,TeamOutcomeFragmentToolResultSchema as WS,TeamOutcomeToolResultSchema as tL,TeamReadMailboxInputSchema as jS,TeamReviewOutcomeFragmentInputSchema as qS,TeamRunTaskInputSchema as zS,TeamRunTaskToolResultSchema as bu,TeamRunToolSummarySchema as vu,TeamSendMessageInputSchema as KS,TeamSendMessageToolResultSchema as nL,TeamShutdownTeammateInputSchema as GS,TeamSimpleAgentStatusToolResultSchema as VS,TeamSpawnTeammateInputSchema as XS,TeamStatusInputSchema as JS,TeamStatusToolResultSchema as rL,TeamTaskInputSchema as YS,TeamTaskToolResultSchema as qo,validateWithZod as q,zodToJsonSchema as Re}from"@cline/shared";function QS(e,t){let n=e.replace(/\s+/g," ").trim();if(n.length<=t)return n;return`${n.slice(0,Math.max(0,t-3)).trimEnd()}...`}function $n(e,t){if(e===void 0)throw Error(`Missing required field: ${t}`);return e}function oL(e){let t=e.result;if(!t)return;return{textPreview:QS(t.text,KO),iterations:t.iterations,finishReason:t.finishReason,durationMs:t.durationMs,usage:{inputTokens:t.usage.inputTokens,outputTokens:t.usage.outputTokens,cacheReadTokens:t.usage.cacheReadTokens,cacheWriteTokens:t.usage.cacheWriteTokens,totalCost:t.usage.totalCost}}}function Ca(e){return e?.toISOString()}function Tu(e){return{id:e.id,agentId:e.agentId,taskId:e.taskId,status:e.status,messagePreview:QS(e.message,zO),priority:e.priority,retryCount:e.retryCount,maxRetries:e.maxRetries,nextAttemptAt:Ca(e.nextAttemptAt),continueConversation:e.continueConversation,startedAt:e.startedAt.toISOString(),endedAt:Ca(e.endedAt),leaseOwner:e.leaseOwner,heartbeatAt:Ca(e.heartbeatAt),lastProgressAt:Ca(e.lastProgressAt),lastProgressMessage:e.lastProgressMessage,currentActivity:e.currentActivity,error:e.error,resultSummary:oL(e)}}function sL(e){if(e.status==="failed")throw Error(`Run "${e.id}" failed${e.error?`: ${e.error}`:""}`);if(e.status==="cancelled")throw Error(`Run "${e.id}" was cancelled${e.error?`: ${e.error}`:""}`);if(e.status==="interrupted")throw Error(`Run "${e.id}" was interrupted${e.error?`: ${e.error}`:""}`)}var wu=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function ZS(e){let t=[];if(e.createBaseTools)t.push(...e.createBaseTools());t.push(...Ia({runtime:e.runtime,requesterId:e.spec.agentId,teammateConfigProvider:e.teammateConfigProvider,createBaseTools:e.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),e.runtime.spawnTeammate({agentId:e.spec.agentId,config:ka({kind:"teammate",prompt:e.spec.rolePrompt,role:e.spec.rolePrompt,configProvider:e.teammateConfigProvider,tools:t,maxIterations:e.spec.maxIterations,cwd:e.teammateConfigProvider.getRuntimeConfig().cwd})})}function ku(e){let t=e.leadAgentId??"lead",n=e.restoredFromPersistence===!0,r=Ia({runtime:e.runtime,requesterId:t,teammateConfigProvider:e.teammateConfigProvider,createBaseTools:e.createBaseTools,allowSpawn:!0,includeSpawnTool:e.includeLeadSpawnTool,includeManagementTools:e.includeLeadManagementTools,onLeadToolsUnlocked:e.onLeadToolsUnlocked}),o=[];for(let s of e.restoredTeammates??[]){if(e.runtime.isTeammateActive(s.agentId))continue;ZS({runtime:e.runtime,requesterId:t,teammateConfigProvider:e.teammateConfigProvider,createBaseTools:e.createBaseTools,spec:s}),o.push(s.agentId)}return{tools:r,restoredFromPersistence:n,restoredTeammates:o}}function Ia(e){let t=e.allowSpawn??!0,n=e.includeSpawnTool??!0,r=e.includeManagementTools??!0,o=[];if(n)o.push(Ae({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:Re(XS),execute:async(i)=>{let a=q(XS,i);if(e.runtime.getMemberRole(e.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!t)throw Error("Spawning teammates is disabled in this context.");let d={agentId:a.agentId,rolePrompt:a.rolePrompt};if(ZS({runtime:e.runtime,requesterId:e.requesterId,teammateConfigProvider:e.teammateConfigProvider,createBaseTools:e.createBaseTools,spec:d}),!r)e.onLeadToolsUnlocked?.(Ia({...e,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return q(VS,{agentId:a.agentId,status:"spawned"})}}));if(!r)return o;o.push(Ae({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:Re(GS),execute:async(i)=>{let a=q(GS,i);if(e.runtime.getMemberRole(e.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return e.runtime.shutdownTeammate(a.agentId,a.reason),q(VS,{agentId:a.agentId,status:"stopped"})}})),o.push(Ae({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:Re(JS),execute:async(i)=>(q(JS,i),q(rL,e.runtime.getSnapshot()))})),o.push(Ae({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:Re(YS),execute:async(i)=>{let a=q(YS,i);switch(a.action){case"create":{let d=new Set(GO.create??[]),c=Object.entries(i).filter(([u,p])=>d.has(u)&&p!=null).map(([u])=>u),l=e.runtime.createTask({title:$n(a.title,"title"),description:$n(a.description,"description"),dependsOn:a.dependsOn,assignee:a.assignee,createdBy:e.requesterId});return q(qo,{action:"create",taskId:l.id,status:l.status,...c.length>0?{ignoredFields:c,note:`Ignored fields for action=create: ${c.join(", ")}`}:{}})}case"list":return q(qo,{action:"list",tasks:e.runtime.listTaskItems({status:a.status,assignee:a.assignee})});case"claim":{let d=e.runtime.claimTask($n(a.taskId,"taskId"),e.requesterId);return q(qo,{action:"claim",taskId:d.id,status:d.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let d=e.runtime.completeTask($n(a.taskId,"taskId"),e.requesterId,$n(a.summary,"summary"));return q(qo,{action:"complete",taskId:d.id,status:d.status})}case"block":{let d=e.runtime.blockTask($n(a.taskId,"taskId"),e.requesterId,$n(a.reason,"reason"));return q(qo,{action:"block",taskId:d.id,status:d.status})}}}}));let s=new Map;return o.push(Ae({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:Re(zS),execute:async(i)=>{let a=q(zS,i);if(a.runMode==="async"){let l=e.runtime.startTeammateRun(a.agentId,a.task,{taskId:a.taskId||void 0,fromAgentId:e.requesterId,continueConversation:a.continueConversation||void 0});return q(bu,{agentId:a.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${a.agentId} and queued as ${l.id}.`,runId:l.id})}let d=s.get(a.agentId);if(d){let l=await d;return q(bu,{...l,status:"joined",deduped:!0,message:`Task for ${a.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let c=e.runtime.routeToTeammate(a.agentId,a.task,{taskId:a.taskId||void 0,fromAgentId:e.requesterId,continueConversation:a.continueConversation||void 0}).then((l)=>q(bu,{agentId:a.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${a.agentId} and completed in sync mode.`,text:l.text,iterations:l.iterations})).finally(()=>{s.delete(a.agentId)});return s.set(a.agentId,c),await c}})),o.push(Ae({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:Re(NS),execute:async(i)=>{let a=q(NS,i),d=e.runtime.cancelRun(a.runId,a.reason);return q(XO,{runId:d.id,status:d.status})}})),o.push(Ae({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:Re(BS),execute:async(i)=>q(vu.array(),e.runtime.listRuns(q(BS,i)).map(Tu))})),o.push(Ae({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:Re(OS),timeoutMs:qO,execute:async(i)=>{let a=q(OS,i);if(a.runId){let l=await e.runtime.awaitRun(a.runId);return sL(l),q(vu,Tu(l))}let d=await e.runtime.awaitAllRuns(),c=d.filter((l)=>["failed","cancelled","interrupted"].includes(l.status));if(c.length>0){let l=c.map((u)=>`${u.id}:${u.status}${u.error?`(${u.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${l}`)}return q(vu.array(),d.map(Tu))}})),o.push(Ae({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:Re(KS),execute:async(i)=>{let a=q(KS,i),d=e.runtime.sendMessage(e.requesterId,a.toAgentId,a.subject,a.body,a.taskId??void 0);return q(nL,{id:d.id,toAgentId:d.toAgentId})}})),o.push(Ae({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:Re(LS),execute:async(i)=>{let a=q(LS,i),d=e.runtime.broadcast(e.requesterId,a.subject,a.body,{taskId:a.taskId??void 0});return q(VO,{delivered:d.length})}})),o.push(Ae({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:Re(jS),execute:async(i)=>{let a=q(jS,i);return q(ZO.array(),e.runtime.listMailbox(e.requesterId,{unreadOnly:a.unreadOnly,markRead:!0}))}})),o.push(Ae({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:Re($S),execute:async(i)=>{let a=q($S,i),d=e.runtime.appendMissionLog({agentId:e.requesterId,taskId:a.taskId||void 0,kind:a.kind,summary:a.summary,evidence:a.evidence?.length?a.evidence:void 0,nextAction:a.nextAction||void 0});return q(eL,{id:d.id})}})),o.push(Ae({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:Re(DS),execute:async(i)=>{if(q(DS,i),e.runtime.getMemberRole(e.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return e.runtime.cleanup(),q(JO,{status:"cleaned"})}})),o.push(Ae({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:Re(US),execute:async(i)=>{let a=q(US,i),d=e.runtime.createOutcome({title:a.title,requiredSections:a.requiredSections,createdBy:e.requesterId});return q(YO,{outcomeId:d.id,status:d.status,requiredSections:d.requiredSections})}})),o.push(Ae({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:Re(MS),execute:async(i)=>{let a=q(MS,i),d=e.runtime.attachOutcomeFragment({outcomeId:a.outcomeId,section:a.section,sourceAgentId:e.requesterId,sourceRunId:a.sourceRunId||void 0,content:a.content});return q(WS,{fragmentId:d.id,status:d.status})}})),o.push(Ae({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:Re(qS),execute:async(i)=>{let a=q(qS,i),d=e.runtime.reviewOutcomeFragment({fragmentId:a.fragmentId,reviewedBy:e.requesterId,approved:a.approved});return q(WS,{fragmentId:d.id,status:d.status})}})),o.push(Ae({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:Re(FS),execute:async(i)=>{let a=q(FS,i),d=e.runtime.finalizeOutcome(a.outcomeId);return q(QO,{outcomeId:d.id,status:d.status})}})),o.push(Ae({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:Re(HS),execute:async(i)=>(q(HS,i),q(tL.array(),e.runtime.listOutcomes()))})),o}function Cu(e){if(e==="vscode")return"vscode";if(e==="cli"||e?.startsWith("cline-cli"))return"cli";return}var iL=[{id:"web_search",description:"Search the public web using the selected model provider's native search capability.",headlessToolNames:["web_search"]},{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"tasks",description:"Create and manage explicitly requested one-time and recurring agent schedules.",headlessToolNames:["tasks"],unavailableClientTypes:["cli","vscode"]},{id:"spawn_agent",description:jo({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...wu]}];function Iu(e,t){if(!t)return!0;return!iL.find((r)=>r.id===e||r.headlessToolNames.includes(e))?.unavailableClientTypes?.includes(t)}import{getDefaultShell as aL}from"@cline/shared";function Aa(e={}){let{executorOptions:t={},executors:n,...r}=e,o=r.shell??t.bash?.shell??aL(process.platform),s={...t,bash:{...t.bash,shell:o}},i={...nu(s),...n??{}};return ra({...r,shell:o,executors:i})}import{mkdirSync as mL,writeFileSync as gL}from"node:fs";import{dirname as fL}from"node:path";import{normalizeUserInput as hL,stripModeNotices as yL}from"@cline/shared";import{nanoid as SL}from"nanoid";import{SESSION_STATUS_VALUES as dL}from"@cline/shared";var eb=dL,cL=["idle","running","pending"];function uL(e){return!cL.includes(e)}function xe(e){return!uL(e)}var Ee={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var tb="sessionHistoryOrigin";function Fr(e){return typeof e==="string"&&e.trim()?e.trim():void 0}function nb(e){let t=[e?.name,e?.platform].filter((n)=>typeof n==="string").join(" ").toLowerCase();if(!t)return;if(t.includes("vscode")||t.includes("visual studio code"))return Ee.VSCODE;if(t.includes("jetbrains")||t.includes("webstorm")||t.includes("intellij")||t.includes("pycharm")||t.includes("goland")||t.includes("clion")||t.includes("rider")||t.includes("android studio"))return Ee.JETBRAINS;if(t.includes("neovim"))return Ee.NEOVIM;if(t.includes("kanban"))return Ee.KANBAN;if(t.includes("desktop"))return Ee.DESKTOP;if(t.includes("cline-platform"))return Ee.WEB;if(t.includes("cline-cli")||t.includes("cline-acp"))return Ee.CLI;if(t.includes("cline-sdk")||t.includes("cline-core"))return Ee.CORE;return}function Gt(e){let t=e?.[tb];if(!t||typeof t!=="object"||Array.isArray(t))return;let n=t,r=Fr(n.mode);if(!r)return;let o=Fr(n.version),s=Fr(n.trigger);return{mode:r,...o?{version:o}:{},...s?{trigger:s}:{}}}function et(e,t){let n=Gt(e),r=Fr(t.mode)??n?.mode??"user",o=Fr(t.version)??n?.version,s=Fr(t.trigger)??n?.trigger;return{...e??{},[tb]:{mode:r,...o?{version:o}:{},...s?{trigger:s}:{}}}}import{nanoid as lL}from"nanoid";function Ra(e){return e.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Au(e,t){let n=Ra(e),r=Ra(t),o=`${n}__${r}`;return o.length>180?o.slice(0,180):o}function rb(e,t){let n=Ra(e),r=Ra(t);return`${n}__teamtask__${r}__${lL(6)}`}function zo(e){let n=e.indexOf("__teamtask__");if(n<=0)return null;let r=e.slice(0,n),o=e.slice(n+12),s=o.lastIndexOf("__");if(s<=0)return null;let i=o.slice(0,s),a=o.slice(s+2);if(!r||!i||!a)return null;return{rootSessionId:r,agentId:i,teamTaskId:a}}function Ea(e){if(zo(e))return null;let t="__",n=e.indexOf(t);if(n<=0)return null;let r=e.slice(0,n),o=e.slice(n+t.length);if(!r||!o)return null;return{rootSessionId:r,agentId:o}}function ob(e){switch(e.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let t=String(e.reason??"").toLowerCase();if(t.includes("cancel")||t.includes("abort")||t.includes("interrupt"))return"cancelled";if(t.includes("fail")||t.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as le}from"zod";var pL=le.enum(eb),gn=le.object({version:le.literal(1),session_id:le.string().min(1),source:le.string().min(1),pid:le.number().int(),started_at:le.string().min(1),ended_at:le.string().min(1).optional(),exit_code:le.number().int().nullable().optional(),status:pL,interactive:le.boolean(),provider:le.string().min(1),model:le.string().min(1),cwd:le.string().min(1),workspace_root:le.string().min(1),team_name:le.string().min(1).optional(),enable_tools:le.boolean(),enable_spawn:le.boolean(),enable_teams:le.boolean(),prompt:le.string().optional(),metadata:le.record(le.string(),le.unknown()).optional(),messages_path:le.string().min(1).optional(),compaction_path:le.string().min(1).optional()});function sb(e){if(!e)return!1;return Object.values(e).some((t)=>typeof t==="function")}function Eu(e,t){let n=[...e??[],...t??[]];if(n.length===0)return;let r=[],o=new Set;for(let s of n){if(o.has(s.name))continue;o.add(s.name),r.push(s)}return r}function ib(e){return JSON.stringify(e,(t,n)=>{if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};return n})}function Vt(e){return typeof e==="string"&&e.trim()?e.trim():void 0}function Ru(e,t){let n={...e};n.id=Vt(n.id)??SL();let r=n.modelInfo&&typeof n.modelInfo==="object"?{...n.modelInfo}:void 0,o={id:Vt(r?.id)??Vt(n.modelId)??Vt(t?.id),provider:Vt(r?.provider)??Vt(n.providerId)??Vt(t?.provider),family:Vt(r?.family)??Vt(t?.family)};if(delete n.providerId,delete n.modelId,o.id&&o.provider)n.modelInfo={id:o.id,provider:o.provider,...o.family?{family:o.family}:{}};else delete n.modelInfo;return n}function Pa(e){return e.map((t)=>Ru(t))}function _a(e,t,n=[]){let r=e.map((d,c)=>{let l=n[c],p=l?.role===d.role&&JSON.stringify(l.content)===JSON.stringify(d.content)?{...l,...d}:{...d};return Ru(p)}),o=n.length,s=[];for(let d=o;d<r.length;d+=1)if(r[d]?.role==="assistant"&&r[d]?.metadata?.displayOnly!==!0)s.push(d);if(s.length===0){let d=[...r].reverse().findIndex((c)=>c.role==="assistant"&&c.metadata?.displayOnly!==!0);if(d===-1)return r;s.push(r.length-1-d)}let i=s[s.length-1],a=s.some((d)=>r[d]?.metrics);for(let d of s){let c=r[d],l=c.metrics;if(!l&&d===i&&!a){let u=t.usage;l={inputTokens:u.inputTokens,outputTokens:u.outputTokens,cacheReadTokens:u.cacheReadTokens??0,cacheWriteTokens:u.cacheWriteTokens??0,cost:u.totalCost}}r[d]={...Ru(c,{id:t.model.id,provider:t.model.provider,family:t.model.info?.family}),...l?{metrics:l}:{},ts:c.ts??t.endedAt.getTime()}}return r}function xa(e){return{sessionId:e.sessionId,source:e.source,pid:e.pid,startedAt:e.startedAt,endedAt:e.endedAt??null,exitCode:e.exitCode??null,status:e.status,interactive:e.interactive,provider:e.provider,model:e.model,cwd:e.cwd,workspaceRoot:e.workspaceRoot,teamName:e.teamName??void 0,enableTools:e.enableTools,enableSpawn:e.enableSpawn,enableTeams:e.enableTeams,parentSessionId:e.parentSessionId??void 0,parentAgentId:e.parentAgentId??void 0,agentId:e.agentId??void 0,conversationId:e.conversationId??void 0,isSubagent:e.isSubagent,prompt:e.prompt??void 0,metadata:e.metadata??void 0,messagesPath:e.messagesPath??void 0,updatedAt:e.updatedAt}}var bL=120;function Wn(e){let t=e?.trim();return t?t.slice(0,bL):void 0}function Pu(e){let t=yL(hL(e??"")).trim();if(!t)return;return Wn(t.split(`
264
264
  `)[0]?.trim())}function Xt(e){if(!e)return;let t={...e},n=Wn(typeof t.title==="string"?t.title:void 0);if(n)t.title=n;else delete t.title;return Object.keys(t).length>0?t:void 0}function Ko(e){let t=Xt(e.metadata)??{},n=e.title!==void 0?Wn(e.title):Pu(e.prompt);if(n)t.title=n;return Object.keys(t).length>0?t:void 0}function _u(e){let t=Gt(e.metadata),n={source:e.source,mode:t?.mode??"user",sessionId:e.sessionId,...e.parentSessionId?{parentThreadId:e.parentSessionId}:{},...e.agentId?{subagent:e.agentId}:{},...t?.version?{version:t.version}:{},...t?.trigger?{trigger:t.trigger}:{}};if(zo(e.sessionId))return{agent:"teammate",sessionId:e.sessionId,taskType:"team",origin:n};if(Ea(e.sessionId))return{agent:"subagent",sessionId:e.sessionId,taskType:"subagent_task",origin:n};return{agent:"lead",sessionId:e.sessionId,origin:n}}function xu(e){return{version:1,updated_at:e.updatedAt,agent:e.context.agent,sessionId:e.context.sessionId,...e.context.taskType?{taskType:e.context.taskType}:{},origin:e.context.origin,messages:Pa(e.messages),...e.systemPrompt?{system_prompt:e.systemPrompt}:{}}}function ab(e,t,n){mL(fL(e),{recursive:!0}),gL(e,`${JSON.stringify(xu({updatedAt:t,context:n,messages:[]}),null,2)}
265
- `,"utf8")}function db(e,t){return gn.parse({version:1,session_id:e.sessionId,source:e.source,pid:e.pid,started_at:e.startedAt,ended_at:t?.endedAt??e.endedAt??void 0,exit_code:t?.exitCode??e.exitCode??void 0,status:t?.status??e.status,interactive:e.interactive,provider:e.provider,model:e.model,cwd:e.cwd,workspace_root:e.workspaceRoot,team_name:e.teamName??void 0,enable_tools:e.enableTools,enable_spawn:e.enableSpawn,enable_teams:e.enableTeams,prompt:e.prompt??void 0,metadata:t?.metadata??e.metadata??void 0,messages_path:e.messagesPath??void 0})}async function cb(e,t,n){let r=0;while(!0){let o=await e();if(o===void 0)return{updated:!1};let s=await t(o);if(typeof s==="object"&&s!==null&&"updated"in s&&s.updated===!1){if(r+=1,r>=n)return s;continue}return s}}function qe(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function Fe(e,t){return{inputTokens:e.inputTokens+Math.max(0,t.inputTokens??0),outputTokens:e.outputTokens+Math.max(0,t.outputTokens??0),cacheReadTokens:e.cacheReadTokens+Math.max(0,t.cacheReadTokens??0),cacheWriteTokens:e.cacheWriteTokens+Math.max(0,t.cacheWriteTokens??0),totalCost:e.totalCost+Math.max(0,t.totalCost??0)}}function Ma(e){let t=qe();for(let n of e)t=Fe(t,n);return t}function Go(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function Mu(e){let t=qe();for(let n of e){let r=n.metrics;if(!r)continue;t=Fe(t,{inputTokens:Go(r.inputTokens),outputTokens:Go(r.outputTokens),cacheReadTokens:Go(r.cacheReadTokens),cacheWriteTokens:Go(r.cacheWriteTokens),totalCost:Go(r.cost)})}return t}function vL(e){if(!e||typeof e!=="object")return;let t=e,n=t.skill??t.skill_name??t.skillName;if(typeof n!=="string")return;let r=n.trim();return r.length>0?r:void 0}function Ou(e){if(!e||typeof e!=="object")return{};let t=e;return{agentId:typeof t.agentId==="string"?t.agentId:void 0,conversationId:typeof t.conversationId==="string"?t.conversationId:void 0,parentAgentId:typeof t.parentAgentId==="string"?t.parentAgentId:void 0}}function Jt(e){let t=e.agentId?.trim();if(!t)return;let n=e.parentAgentId?.trim()||void 0,r=e.teamRole,o="root";if(r==="teammate")o="team_teammate";else if(r==="lead")o="team_lead";else if(n)o="subagent";return{agentId:t,agentKind:o,conversationId:e.conversationId?.trim()||void 0,parentAgentId:n,createdByAgentId:e.createdByAgentId?.trim()||n||void 0,isSubagent:Boolean(n),teamId:e.teamId?.trim()||void 0,teamName:e.teamName?.trim()||void 0,teamRole:r,teamAgentId:e.teamAgentId?.trim()||void 0}}function TL(e){return{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheWriteTokens:e.cacheWriteTokens,cacheReadTokens:e.cacheReadTokens,totalCost:e.cost}}function wL(e){let t=e.cacheWriteTokens??0,n=e.cacheReadTokens??0;return{tokensIn:Math.max(0,e.inputTokens-n-t),tokensOut:e.outputTokens,cacheWriteTokens:t,cacheReadTokens:n,totalCost:e.cost,reasoningTokenCount:e.reasoningTokenCount}}function kL(e){let t=e.isPrimaryAgentEvent?[e.overrides?.agentId,e.eventMetadata.agentId,e.overrides?.teamAgentId]:[e.overrides?.teamAgentId,e.overrides?.agentId,e.eventMetadata.agentId,e.eventMetadata.conversationId];for(let n of t){let r=n?.trim();if(r)return r}return e.isPrimaryAgentEvent?"root":"unknown"}function Oa(e,t,n){let{sessionId:r,config:o,liveSession:s,emit:i}=e,a=o.telemetry,d=s?.runtime.teamRuntime,c=n?.isPrimaryAgentEvent??!0,l=Ou(t),u=Jt({agentId:n?.agentId??l.agentId,conversationId:n?.conversationId??l.conversationId,parentAgentId:n?.parentAgentId??l.parentAgentId,createdByAgentId:n?.createdByAgentId,teamId:n?.teamId??d?.getTeamId(),teamName:n?.teamName??d?.getTeamName(),teamRole:n?.teamRole,teamAgentId:n?.teamAgentId});if(t.type==="content_start"&&t.contentType==="tool"&&t.toolName==="skills"){let p=vL(t.input);if(p)of(a,{ulid:r,skillName:p,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:o.providerId,modelId:o.modelId,...u})}if(t.type==="content_end"&&t.contentType==="tool"){let p=t.toolName??"unknown",m=!t.error;if(rn(a,{ulid:r,tool:p,autoApproved:void 0,success:m,modelId:o.modelId,provider:o.providerId,...u}),!m&&(p==="editor"||p==="apply_patch"))sf(a,{ulid:r,modelId:o.modelId,provider:o.providerId,errorType:t.error,...u})}if(t.type==="usage"&&s?.turnUsageBaseline){let p=TL(t);if(c){s.turnPrimaryUsage=Fe(s.turnPrimaryUsage??qe(),p);let g=Fe(s.turnUsageBaseline,s.turnPrimaryUsage);e.usageBySession.set(r,g),Si(a,{ulid:r,provider:o.providerId,model:o.modelId,source:"assistant",mode:o.mode,...u}),nf(a,{ulid:r,...wL(t),provider:o.providerId,model:o.modelId,...u})}else{let g=kL({isPrimaryAgentEvent:c,overrides:n,eventMetadata:l}),f=s.turnUsageByAgent??new Map;s.turnUsageByAgent=f,f.set(g,Fe(f.get(g)??qe(),p))}let m=Fe(s.turnPrimaryUsage??qe(),Ma(s.turnUsageByAgent?.values()??[]));e.aggregateUsageBySession.set(r,Fe(s.turnAggregateUsageBaseline??s.turnUsageBaseline,m))}if(t.type==="iteration_end"&&c)e.persistMessages(r,s?.agent.getMessages()??[],s?.config.systemPrompt);i({type:"agent_event",payload:{sessionId:r,event:t,teamAgentId:n?.teamAgentId,teamRole:n!==void 0?n.teamRole??(c?"lead":void 0):void 0}}),i({type:"chunk",payload:{sessionId:r,stream:"agent",chunk:ib(t),ts:Date.now()}})}function Yt(e){return e.workspaceRoot??e.cwd}import{resolveProviderRequestHeaders as kF}from"@cline/llms";import{buildClineSystemPrompt as CF,hasRuntimeConfigExtension as IF}from"@cline/shared";import{stripUtf8Bom as CL}from"@cline/shared";import IL from"yaml";var AL=new Set(["name","description","license","compatibility","metadata","allowed-tools"]),Lu=64,RL=1024,EL=500;function ub(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Vo(e,t,n={}){if(e===void 0){if(n.required)throw Error(`Missing required frontmatter field '${t}'.`);return}if(typeof e!=="string")throw Error(`Frontmatter field '${t}' must be a string.`);let r=e.trim();if(n.required&&r.length===0)throw Error(`Frontmatter field '${t}' cannot be empty.`);if(n.maxLength!==void 0&&r.length>n.maxLength)throw Error(`Frontmatter field '${t}' exceeds ${n.maxLength} characters.`);return r}function PL(e,t){let n=e.normalize("NFKC");if(n.length===0||n.length>Lu)throw Error(`Skill name must be between 1 and ${Lu} characters.`);if(n!==n.toLowerCase())throw Error(`Skill name '${n}' must be lowercase.`);if(n.startsWith("-")||n.endsWith("-")||n.includes("--"))throw Error(`Skill name '${n}' cannot start or end with a hyphen or contain consecutive hyphens.`);for(let r of n)if(r!=="-"&&!/[\p{L}\p{N}]/u.test(r))throw Error(`Skill name '${n}' may contain only lowercase letters, numbers, and hyphens.`);if(t.normalize("NFKC")!==n)throw Error(`Skill directory '${t}' must match frontmatter name '${n}'.`);return n}function _L(e){if(e===void 0)return;if(!ub(e))throw Error("Frontmatter field 'metadata' must be an object.");let t={};for(let[n,r]of Object.entries(e)){if(typeof r!=="string")throw Error(`Frontmatter metadata value '${n}' must be a string.`);t[n]=r}return t}function Xo(e,t){let r=CL(e).match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)([\s\S]*)$/);if(!r)throw Error("SKILL.md must start with YAML frontmatter delimited by '---'.");let o;try{o=IL.parse(r[1])}catch(m){throw Error(`Failed to parse YAML frontmatter: ${m instanceof Error?m.message:String(m)}`)}if(!ub(o))throw Error("SKILL.md frontmatter must be a YAML mapping.");let s=Object.keys(o).filter((m)=>!AL.has(m)).sort();if(s.length>0)throw Error(`Unexpected frontmatter field${s.length===1?"":"s"}: ${s.join(", ")}.`);let i=Vo(o.name,"name",{required:!0,maxLength:Lu}),a=PL(i,t),d=Vo(o.description,"description",{required:!0,maxLength:RL}),c=Vo(o.license,"license"),l=Vo(o.compatibility,"compatibility",{maxLength:EL});if(o.compatibility!==void 0&&!l)throw Error("Frontmatter field 'compatibility' cannot be empty.");let u=Vo(o["allowed-tools"],"allowed-tools"),p=_L(o.metadata);return{metadata:{name:a,description:d,...c!==void 0?{license:c}:{},...l!==void 0?{compatibility:l}:{},...p!==void 0?{metadata:p}:{},...u!==void 0?{"allowed-tools":u}:{}},instructions:r[2].trim(),frontmatter:o}}import{createHash as xL}from"node:crypto";import{lstat as ML,readdir as mb,readFile as $u,realpath as Wu,stat as Qo}from"node:fs/promises";import{validateHeaderName as OL,validateHeaderValue as LL}from"node:http";import{isIP as NL}from"node:net";import{basename as A8,dirname as DL,isAbsolute as gb,join as Ot,relative as fb,resolve as qn}from"node:path";import{AGENT_PLUGIN_MANIFEST_FILE_NAME as ju,resolveAgentPluginSearchPaths as UL,resolveClineDataDir as FL,SKILLS_CONFIG_DIRECTORY_NAME as HL}from"@cline/shared/storage";var La="https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",Fu="https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",BL=new Set(["$schema","name","version","description","author","homepage","repository","license","keywords","extensions"]),$L=new Set(["name","email","url"]),WL=/^(?!.*(?:--|\.\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/,Nu="${PLUGIN_ROOT}",Du="${PLUGIN_DATA}";function jn(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Hu(e,t){let n=fb(e,t);return n===""||!n.startsWith("..")&&!gb(n)}function Me(e){return e instanceof Error?e.message:String(e)}function qu(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}function we(e){return{level:e.level??"error",...e}}async function Bu(e){let t=await Wu(e);if(!(await Qo(t)).isDirectory())throw Error("expected a directory");return t}async function Yo(e,t,n){let r=await Wu(t);if(!Hu(e,r))throw Error(`path resolves outside the plugin root: ${t}`);let o=await Qo(r);if(!(n==="file"?o.isFile():o.isDirectory()))throw Error(`expected a regular ${n}: ${t}`);return r}async function lb(e,t){let n=qn(t);if(!Hu(e,n))throw Error(`path resolves outside its permitted root: ${t}`);let r=n;while(!0)try{let o=await Wu(r),s=qn(o,fb(r,n));if(!Hu(e,s))throw Error(`path resolves outside its permitted root: ${t}`);return s}catch(o){if(!qu(o))throw o;let s=DL(r);if(s===r)throw o;r=s}}async function pb(e){try{return await Qo(e),!0}catch(t){if(qu(t))return!1;throw t}}async function Na(e){try{return await ML(e),!0}catch(t){if(qu(t))return!1;throw t}}async function jL(e){let t;try{t=await Bu(e)}catch{return[]}let n=[],r;try{r=await mb(t,{withFileTypes:!0})}catch{return[]}for(let o of r){let s=Ot(t,o.name),i;try{i=await Bu(s)}catch{continue}let a=!1;try{a=await Na(Ot(i,ju))}catch{continue}if(a)n.push(i)}return n.sort((o,s)=>o.localeCompare(s))}async function qL(e,t){let n=qn(e.cwd??process.cwd()),r=[];for(let a of e.pluginPaths??[]){let d=a.trim();if(!d)continue;let c=qn(n,d);try{r.push(await Bu(c))}catch(l){t.push(we({scope:"plugin",pluginPath:c,message:`Cannot load Agent Plugin directory: ${Me(l)}`}))}}let o=e.searchPaths??UL();for(let a of o)r.push(...await jL(a));let s=[],i=new Set;for(let a of r)if(!i.has(a))i.add(a),s.push(a);return s}function Jo(e,t){let n=e[t];if(n===void 0)return;if(typeof n!=="string")throw Error(`Manifest field '${t}' must be a string.`);return n}function zL(e,t,n){if(!jn(e))throw Error("plugin.json must contain a JSON object.");for(let i of Object.keys(e).filter((a)=>!BL.has(a)).sort())n.push(we({level:"warning",scope:"manifest",pluginPath:t,message:`Ignoring unknown plugin.json field '${i}'.`}));if(e.$schema!==La)throw Error(`Unsupported or missing plugin.json $schema; expected '${La}'.`);if(typeof e.name!=="string")throw Error("Manifest field 'name' must be a string.");if(e.name.length<1||e.name.length>64||!WL.test(e.name))throw Error("Manifest field 'name' must be 1-64 lowercase alphanumeric, hyphen, or period characters; it must start and end alphanumeric and cannot contain '--' or '..'.");let r;if(e.author!==void 0){if(!jn(e.author))throw Error("Manifest field 'author' must be an object.");let i=Object.keys(e.author).filter((a)=>!$L.has(a));if(i.length>0)throw Error(`Manifest author contains unknown field '${i.sort()[0]}'.`);for(let[a,d]of Object.entries(e.author))if(typeof d!=="string")throw Error(`Manifest author field '${a}' must be a string.`);r=e.author}let o;if(e.keywords!==void 0){if(!Array.isArray(e.keywords)||!e.keywords.every((i)=>typeof i==="string"))throw Error("Manifest field 'keywords' must be an array of strings.");o=[...e.keywords]}let s;if(e.extensions!==void 0)if(jn(e.extensions))s={...e.extensions};else n.push(we({level:"warning",scope:"manifest",pluginPath:t,pluginName:e.name,message:"Ignoring non-object plugin.json 'extensions' field."}));return{$schema:La,name:e.name,...Jo(e,"version")!==void 0?{version:e.version}:{},...Jo(e,"description")!==void 0?{description:e.description}:{},...r?{author:r}:{},...Jo(e,"homepage")!==void 0?{homepage:e.homepage}:{},...Jo(e,"repository")!==void 0?{repository:e.repository}:{},...Jo(e,"license")!==void 0?{license:e.license}:{},...o?{keywords:o}:{},...s?{extensions:s}:{}}}async function KL(e,t){let n=Ot(e,ju),r=await Yo(e,n,"file"),o;try{o=JSON.parse(await $u(r,"utf8"))}catch(s){throw Error(`Invalid plugin.json: ${Me(s)}`)}return{manifestPath:r,manifest:zL(o,e,t)}}async function GL(e,t,n){let r=Ot(e,HL),o;try{o=await Na(r)}catch(d){return n.push(we({scope:"skills",pluginPath:e,pluginName:t,componentPath:r,message:`Cannot inspect Agent Plugin skills component: ${Me(d)}`})),[]}if(!o)return[];let s;try{s=await Yo(e,r,"directory")}catch(d){return n.push(we({scope:"skills",pluginPath:e,pluginName:t,componentPath:r,message:`Invalid Agent Plugin skills component: ${Me(d)}`})),[]}let i=[],a;try{a=await mb(s,{withFileTypes:!0})}catch(d){return n.push(we({scope:"skills",pluginPath:e,pluginName:t,componentPath:s,message:`Cannot read Agent Plugin skills component: ${Me(d)}`})),[]}for(let d of a.sort((c,l)=>c.name.localeCompare(l.name))){let c=Ot(s,d.name),l;try{l=await Yo(e,c,"directory")}catch(g){if(d.isSymbolicLink())n.push(we({scope:"skill",pluginPath:e,pluginName:t,componentPath:c,componentName:d.name,message:`Skipping invalid Agent Plugin skill directory '${d.name}': ${Me(g)}`}));continue}let u=Ot(l,"SKILL.md"),p;try{p=await Na(u)}catch(g){n.push(we({scope:"skill",pluginPath:e,pluginName:t,componentPath:u,componentName:d.name,message:`Cannot inspect Agent Plugin skill '${d.name}': ${Me(g)}`}));continue}if(!p)continue;let m;try{m=await Yo(e,u,"file")}catch(g){n.push(we({scope:"skill",pluginPath:e,pluginName:t,componentPath:u,componentName:d.name,message:`Skipping invalid Agent Plugin skill '${d.name}': ${Me(g)}`}));continue}try{let g=Xo(await $u(m,"utf8"),d.name);i.push({pluginName:t,pluginRoot:e,directoryPath:l,filePath:m,metadata:g.metadata})}catch(g){n.push(we({scope:"skill",pluginPath:e,pluginName:t,componentPath:m,componentName:d.name,message:`Skipping invalid Agent Plugin skill '${d.name}': ${Me(g)}`}))}}return i}function zu(e,t,n){let r=Object.keys(e).filter((o)=>!t.has(o)).sort();if(r.length>0)throw Error(`${n} contains unknown field '${r[0]}'.`)}function VL(e,t){if(e===void 0)return;if(!Array.isArray(e)||!e.every((n)=>typeof n==="string"))throw Error(`MCP field '${t}' must be an array of strings.`);return[...e]}function hb(e,t){if(e===void 0)return;if(!jn(e)||!Object.values(e).every((n)=>typeof n==="string"))throw Error(`MCP field '${t}' must be an object of strings.`);return e}function Uu(e,t,n){return e.replace(/\$\{PLUGIN_(ROOT|DATA)\}/g,(r,o)=>o==="ROOT"?t:n)}function XL(e,t,n){let r=xL("sha256").update(n).digest("hex").slice(0,12);return Ot(e,`${t}-${r}`)}function JL(e,t,n){let r={...e};if(process.platform==="win32")for(let o of Object.keys(r)){let s=o.toUpperCase();if(s==="PLUGIN_ROOT"||s==="PLUGIN_DATA")delete r[o]}return r.PLUGIN_ROOT=t,r.PLUGIN_DATA=n,r}async function YL(e){if(zu(e.server,new Set(["type","command","args","env","cwd"]),"stdio MCP server"),typeof e.server.command!=="string"||!e.server.command)throw Error("stdio MCP server requires a non-empty 'command'.");let t;if(e.server.command.startsWith("./")){if(t=await lb(e.pluginRoot,qn(e.pluginRoot,e.server.command)),await pb(t)){if(!(await Qo(t)).isFile())throw Error("stdio MCP 'command' must resolve to a regular file.")}}else{if(gb(e.server.command)||/[\s/\\\0]/u.test(e.server.command))throw Error("stdio MCP 'command' must be one bare executable token or a plugin-relative path beginning with './'.");t=e.server.command}let n=VL(e.server.args,"args")?.map((a)=>Uu(a,e.pluginRoot,e.pluginDataPath)),r=hb(e.server.env,"env")??{};for(let a of Object.keys(r))if(process.platform==="win32"?a.toUpperCase()==="PLUGIN_ROOT"||a.toUpperCase()==="PLUGIN_DATA":a==="PLUGIN_ROOT"||a==="PLUGIN_DATA")throw Error(`stdio MCP env cannot configure reserved key '${a}'.`);let o=Object.fromEntries(Object.entries(r).map(([a,d])=>[a,Uu(d,e.pluginRoot,e.pluginDataPath)])),s=JL(o,e.pluginRoot,e.pluginDataPath),i=e.pluginRoot;if(e.server.cwd!==void 0){if(typeof e.server.cwd!=="string")throw Error("stdio MCP field 'cwd' must be a string.");let a;if(e.server.cwd.startsWith("./"))a=e.pluginRoot;else if(e.server.cwd===Nu||e.server.cwd.startsWith(`${Nu}/`))a=e.pluginRoot;else if(e.server.cwd===Du||e.server.cwd.startsWith(`${Du}/`))a=e.pluginDataPath;else throw Error(`stdio MCP 'cwd' must begin with './', '${Nu}', or '${Du}'.`);let d=Uu(e.server.cwd,e.pluginRoot,e.pluginDataPath);if(i=await lb(a,e.server.cwd.startsWith("./")?qn(e.pluginRoot,d):d),await pb(i)&&!(await Qo(i)).isDirectory())throw Error("stdio MCP 'cwd' must resolve to a directory.")}return{type:"stdio",command:t,...n?{args:n}:{},cwd:i,env:s}}function QL(e){let t=e.replace(/^\[|\]$/g,"").toLowerCase();if(t==="localhost"||t==="::1")return!0;if(NL(t)===4)return t.split(".")[0]==="127";return!1}function ZL(e,t){if(zu(e,new Set(["type","url","headers"]),`${t} MCP server`),typeof e.url!=="string"||!e.url)throw Error(`${t} MCP server requires a non-empty 'url'.`);let n;try{n=new URL(e.url)}catch{throw Error(`${t} MCP 'url' must be an absolute HTTP(S) URL.`)}if(n.protocol!=="http:"&&n.protocol!=="https:"||n.username||n.password||n.hash)throw Error(`${t} MCP 'url' must be HTTP(S) without user information or a fragment.`);if(n.protocol!=="https:"&&!QL(n.hostname))throw Error(`${t} MCP endpoints must use HTTPS unless loopback.`);let r=hb(e.headers,"headers"),o=new Set;for(let[s,i]of Object.entries(r??{})){let a=s.toLowerCase();if(o.has(a))throw Error(`Duplicate case-insensitive MCP header '${s}'.`);o.add(a);try{OL(s),LL(s,i)}catch(d){throw Error(`Invalid MCP header '${s}': ${Me(d)}`)}}return t==="sse"?{type:"sse",url:n.toString(),...r?{headers:r}:{}}:{type:"streamableHttp",url:n.toString(),...r?{headers:r}:{}}}async function eN(e){let t=Ot(e.pluginRoot,"mcp.json"),n;try{n=await Na(t)}catch(a){return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:t,message:`Cannot inspect Agent Plugin MCP component: ${Me(a)}`})),[]}if(!n)return[];let r;try{r=await Yo(e.pluginRoot,t,"file")}catch(a){return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:t,message:`Invalid Agent Plugin MCP component: ${Me(a)}`})),[]}let o;try{o=JSON.parse(await $u(r,"utf8"))}catch(a){return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:r,message:`Invalid mcp.json: ${Me(a)}`})),[]}if(!jn(o))return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:r,message:"mcp.json must contain a JSON object."})),[];try{if(zu(o,new Set(["$schema","mcpServers"]),"mcp.json"),o.$schema!==Fu)throw Error(`Unsupported or mismatched mcp.json $schema; expected '${Fu}'.`);if(!jn(o.mcpServers))throw Error("mcp.json field 'mcpServers' must be an object.")}catch(a){return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:r,message:`Invalid Agent Plugin MCP component: ${Me(a)}`})),[]}let s=XL(e.pluginDataRoot,e.pluginName,e.pluginRoot),i=[];for(let[a,d]of Object.entries(o.mcpServers).sort(([c],[l])=>c.localeCompare(l)))try{if(!jn(d))throw Error("server configuration must be an object.");if(d.type!=="stdio"&&d.type!=="streamable-http"&&d.type!=="sse")throw Error("server has an unsupported or missing transport type.");let c,l;if(d.type==="stdio")l=s,c=await YL({server:d,pluginRoot:e.pluginRoot,pluginDataPath:l});else c=ZL(d,d.type);let p={name:`${e.pluginName}.${a}`,transport:c,metadata:{source:"agent-plugin",pluginName:e.pluginName,pluginPath:e.pluginRoot,serverName:a,...l?{pluginDataPath:l}:{}}};i.push({pluginName:e.pluginName,pluginRoot:e.pluginRoot,...l?{pluginDataPath:l}:{},serverName:a,registration:p})}catch(c){e.diagnostics.push(we({scope:"mcp-server",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:r,componentName:a,message:`Skipping invalid Agent Plugin MCP server '${a}': ${Me(c)}`}))}return i}async function tN(e,t){let n;try{n=await KL(e,t)}catch(s){t.push(we({scope:"manifest",pluginPath:e,componentPath:Ot(e,ju),message:`Rejecting Agent Plugin: ${Me(s)}`}));return}let{manifest:r,manifestPath:o}=n;return{rootPath:e,manifestPath:o,manifest:r}}async function nN(e,t,n){let{rootPath:r,manifest:o}=e,[s,i]=await Promise.all([GL(r,o.name,n),eN({pluginRoot:r,pluginName:o.name,pluginDataRoot:t,diagnostics:n})]);return{...e,skills:s,mcpServers:i}}async function Zo(e={}){let t=[],n=await qL(e,t),r=qn(e.pluginDataRoot??Ot(FL(),"agent-plugins")),o=new Set((e.disabledPluginNames??[]).map((c)=>c.trim()).filter(Boolean)),s=[],i=new Map;for(let c of n){let l=await tN(c,t);if(!l)continue;let u=l.manifest.name,p=i.get(u);if(p){t.push(we({level:"warning",scope:"plugin",pluginPath:c,pluginName:u,message:`Ignoring duplicate Agent Plugin '${u}'; '${p}' has precedence.`}));continue}if(i.set(u,c),o.has(u))continue;s.push(await nN(l,r,t))}let a=[],d=new Set;for(let c of s)for(let l of c.mcpServers){if(d.has(l.registration.name)){t.push(we({scope:"mcp-server",pluginPath:c.rootPath,pluginName:c.manifest.name,componentName:l.serverName,message:`Skipping duplicate Agent Plugin MCP runtime name '${l.registration.name}'.`}));continue}d.add(l.registration.name),a.push(l)}return{plugins:s,skills:s.flatMap((c)=>c.skills),mcpServers:a,diagnostics:t}}import{createHash as JD}from"node:crypto";import{existsSync as YD,readFileSync as QD}from"node:fs";import{join as ZD}from"node:path";import{createTool as e0,FeatureFlag as Vb,getClineEnvironmentConfig as t0}from"@cline/shared";import{resolveClineDataDir as n0}from"@cline/shared/storage";import{chmodSync as Fb,existsSync as tl,mkdirSync as vD,readFileSync as TD,renameSync as wD,rmSync as kD,writeFileSync as CD}from"node:fs";import{basename as Hb,dirname as nl}from"node:path";import{resolveProviderSettingsPath as ID}from"@cline/shared/storage";import{z as ze}from"zod";import*as Lt from"@cline/llms";import{ReasoningLevelSchema as hN}from"@cline/shared";import{z as P}from"zod";import*as kt from"@cline/llms";function sN(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,{...n}]))}function iN(e){if(e.baseUrl.length===0)return!1;switch(e.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return e.protocol==="openai-chat"}}var aN=Object.values(kt.MODEL_COLLECTIONS_BY_PROVIDER_ID).map((e)=>({id:e.provider.id,baseUrl:e.provider.baseUrl??"",modelsSourceUrl:e.provider.modelsSourceUrl,modelId:e.provider.defaultModelId,knownModels:sN(e.models),capabilities:e.provider.capabilities?[...e.provider.capabilities]:void 0,env:e.provider.env?[...e.provider.env]:void 0,client:e.provider.client,protocol:e.provider.protocol})),dN=Object.fromEntries(aN.map((e)=>[e.id,e]));function cN(){return Object.fromEntries(Object.entries(dN).filter(([,e])=>iN(e)))}function uN(e=[]){let t=e.flatMap((n)=>{switch(n){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[n];default:return[]}});return t.length>0?t:void 0}var lN="https://models.dev/api.json",pN=600000;var mN=5000,yb=new Map,Ku=new Map;async function gN(e,t){let n=Object.assign((...r)=>{let[o,s]=r,i=AbortSignal.timeout(mN),a=s?.signal?AbortSignal.any([s.signal,i]):i;return globalThis.fetch(o,{...s,signal:a})},globalThis.fetch);return kt.fetchLiveProviderModels(e,n,{includeClineCloudModels:t})}async function Da(e={}){let t=e.url??lN,n=e.cacheTtlMs??pN,r=e.includeClineCloudModels===!0,o=`${t}\x00cloud=${r}`,s=Date.now(),i=yb.get(o);if(i&&i.expiresAt>s)return i.data;let a=Ku.get(o);if(a)return a;let d=gN(t,r).then((c)=>(yb.set(o,{data:c,expiresAt:s+n}),c)).finally(()=>{Ku.delete(o)});return Ku.set(o,d),d}function fN(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,{baseUrl:n.baseUrl,modelId:n.modelId,capabilities:uN(n.capabilities)}]))}var Sb=fN(cN());var bb=Lt.BUILT_IN_PROVIDER;var yN=Lt.normalizeProviderId,vb=P.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),SN=P.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),bN=P.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),vN=P.object({apiKey:P.string().optional(),accessToken:P.string().optional(),refreshToken:P.string().optional(),expiresAt:P.number().int().positive().optional(),accountId:P.string().optional(),organizationId:P.string().optional(),organizationName:P.string().optional(),memberId:P.string().optional(),metadata:P.record(P.string(),P.unknown()).optional()}),TN=P.object({enabled:P.boolean().optional(),effort:hN.optional(),budgetTokens:P.number().int().positive().optional()}),wN=P.object({accessKey:P.string().optional(),secretKey:P.string().optional(),sessionToken:P.string().optional(),region:P.string().optional(),profile:P.string().optional(),authentication:P.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:P.boolean().optional(),useCrossRegionInference:P.boolean().optional(),useGlobalInference:P.boolean().optional(),endpoint:P.string().url().optional(),customModelBaseId:P.string().optional()}),kN=P.object({projectId:P.string().optional(),region:P.string().optional()}),CN=P.object({apiVersion:P.string().optional(),useIdentity:P.boolean().optional()}),IN=P.object({clientId:P.string().optional(),clientSecret:P.string().optional(),tokenUrl:P.string().url().optional(),resourceGroup:P.string().optional(),deploymentId:P.string().optional(),useOrchestrationMode:P.boolean().optional(),api:P.enum(["orchestration","foundation-models"]).optional(),defaultSettings:P.record(P.string(),P.unknown()).optional()}),AN=P.object({mode:P.enum(["internal","external"]).optional(),usePromptCache:P.boolean().optional()}),RN=P.object({loadLatestOnInit:P.boolean().optional(),includeClineCloudModels:P.boolean().optional(),loadPrivateOnAuth:P.boolean().optional(),url:P.string().url().optional(),cacheTtlMs:P.number().int().positive().optional(),failOnError:P.boolean().optional()}),Gu=P.object({provider:vb,apiKey:P.string().optional(),auth:vN.optional(),model:P.string().optional(),protocol:SN.optional(),client:bN.optional(),routingProviderId:vb.optional(),maxTokens:P.number().int().positive().optional(),contextWindow:P.number().int().positive().optional(),baseUrl:P.string().url().optional(),headers:P.record(P.string(),P.string()).optional(),timeout:P.number().int().positive().optional(),reasoning:TN.optional(),aws:wN.optional(),gcp:kN.optional(),azure:CN.optional(),sap:IN.optional(),oca:AN.optional(),region:P.string().optional(),apiLine:P.enum(["china","international"]).optional(),capabilities:P.array(P.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:RN.optional()});function EN(e){return e.protocol==="openai-responses"||e.client==="openai"}function zn(e,t={}){let n=e.provider,r=yN(n),o=t.includeKnownModels!==!1,s=e.reasoning?.effort||"none",i=s==="none"?void 0:s,a=Sb[r],d=Lt.getGeneratedModelsForRuntimeProvider(r),c=Object.keys(d)[0],l=Ac(r,e),u=e.baseUrl??Lt.resolveProviderApiLineBaseUrl(r,e.apiLine)??(r==="oca"?e.oca?.mode==="internal"?Tc:wc:a?.baseUrl),p=e.routingProviderId??(EN(e)&&r!==bb.OPENAI_NATIVE?bb.OPENAI_NATIVE:void 0),m=o?a?.knownModels??(Object.keys(d).length>0?d:void 0):void 0,g={providerId:n,clientType:e.client,routingProviderId:p,modelId:e.model??a?.modelId??c??"default",...o?{knownModels:m}:{},apiKey:l,accessToken:e.auth?.accessToken,refreshToken:e.auth?.refreshToken,accountId:e.auth?.accountId,baseUrl:u,headers:e.headers,timeoutMs:e.timeout,maxOutputTokens:e.maxTokens,maxInputTokens:e.contextWindow,thinking:e.reasoning?.enabled,reasoningEffort:i,thinkingBudgetTokens:e.reasoning?.budgetTokens,region:e.region??e.aws?.region??e.gcp?.region,apiLine:e.apiLine,useCrossRegionInference:e.aws?.useCrossRegionInference,useGlobalInference:e.aws?.useGlobalInference,aws:e.aws?{accessKey:e.aws.accessKey,secretKey:e.aws.secretKey,sessionToken:e.aws.sessionToken,authentication:e.aws.authentication,profile:e.aws.profile,usePromptCache:e.aws.usePromptCache,endpoint:e.aws.endpoint,customModelBaseId:e.aws.customModelBaseId}:void 0,gcp:e.gcp?{projectId:e.gcp.projectId,region:e.gcp.region}:void 0,azure:e.azure,sap:e.sap,oca:e.oca,capabilities:e.capabilities??a?.capabilities,modelCatalog:e.modelCatalog?{loadLatestOnInit:e.modelCatalog.loadLatestOnInit,includeClineCloudModels:e.modelCatalog.includeClineCloudModels,loadPrivateOnAuth:e.modelCatalog.loadPrivateOnAuth,url:e.modelCatalog.url,cacheTtlMs:e.modelCatalog.cacheTtlMs,failOnError:e.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(g).filter(([f,h])=>h!==void 0))}var es=Gu;var Vu=ze.object({providerId:ze.string().min(1),modelId:ze.string().min(1)}),PN=ze.object({voiceInput:Vu.optional()}),_N=ze.object({bedrockProfile:ze.boolean().optional()}),xN=ze.object({settings:Gu,updatedAt:ze.string().datetime(),tokenSource:ze.enum(["manual","oauth","migration"]).default("manual")}),Xu=ze.object({version:ze.literal(1),lastUsedProvider:ze.string().min(1).optional(),modes:PN.default({}),repairs:_N.optional(),providers:ze.record(ze.string(),xN)});function ts(){return{version:1,modes:{},providers:{}}}import{existsSync as MN,mkdirSync as ON,readFileSync as LN,renameSync as NN,rmSync as DN,writeFileSync as UN}from"node:fs";import{dirname as wb,join as FN}from"node:path";import*as He from"@cline/llms";import{ApiFormatSchema as HN,ModelCapabilitySchema as BN,ModelModalitiesSchema as $N,ModelOperationModeSchema as WN,ModelOperationSchema as jN,ProviderCapabilitySchema as qN,ProviderClientSchema as zN,ProviderProtocolSchema as KN}from"@cline/shared";import{z as re}from"zod";var Ju=re.number().finite().positive().optional().catch(void 0),ns=re.number().finite().nonnegative().optional().catch(void 0),GN=re.object({id:re.string().optional(),name:re.string().optional(),maxTokens:Ju,contextWindow:Ju,maxInputTokens:Ju,capabilities:re.array(BN).optional(),supportsVision:re.boolean().optional(),supportsAttachments:re.boolean().optional(),supportsReasoning:re.boolean().optional(),operation:jN.optional(),operationModes:re.array(WN).optional(),modalities:$N.optional(),inputPrice:ns,outputPrice:ns,cacheReadsPrice:ns,cacheWritesPrice:ns,temperature:ns,apiFormat:HN.optional()}).passthrough(),VN=re.object({name:re.string(),baseUrl:re.string(),defaultModelId:re.string().optional(),protocol:KN.optional(),client:zN.optional(),capabilities:re.array(qN).optional(),modelsSourceUrl:re.string().optional()}).passthrough(),kb=re.object({provider:VN.optional(),models:re.record(re.string(),GN).optional(),discoveredModelIds:re.array(re.string()).optional()}).passthrough(),XN=re.object({version:re.literal(1),providers:re.record(re.string(),kb)}),JN=re.object({version:re.literal(1),providers:re.record(re.string(),re.unknown())}),Tb=new Set;function Cb(e){return e.split(/[-_]/).filter(Boolean).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function Ib(e){return FN(wb(e.getFilePath()),"models.json")}function Yu(){return{version:1,providers:{}}}function YN(e){let t=JN.safeParse(e);if(!t.success)return ue("models.json content is not a valid models file envelope; starting from an empty registry"),Yu();let n={};for(let[r,o]of Object.entries(t.data.providers)){let s=kb.safeParse(o);if(s.success)n[r]=s.data;else ue(`models.json: dropping invalid entry for provider=${r}`)}return{version:1,providers:n}}function Qu(e){if(!MN(e))return Yu();try{let t=LN(e,"utf8");return YN(JSON.parse(t))}catch{ue(`models.json at ${e} exists but is unreadable or invalid JSON; treating as an empty registry`)}return Yu()}function Ab(e,t){ON(wb(e),{recursive:!0});let n=XN.parse(t),r=`${e}.${process.pid}.tmp`;try{UN(r,`${JSON.stringify(n,null,2)}
265
+ `,"utf8")}function db(e,t){return gn.parse({version:1,session_id:e.sessionId,source:e.source,pid:e.pid,started_at:e.startedAt,ended_at:t?.endedAt??e.endedAt??void 0,exit_code:t?.exitCode??e.exitCode??void 0,status:t?.status??e.status,interactive:e.interactive,provider:e.provider,model:e.model,cwd:e.cwd,workspace_root:e.workspaceRoot,team_name:e.teamName??void 0,enable_tools:e.enableTools,enable_spawn:e.enableSpawn,enable_teams:e.enableTeams,prompt:e.prompt??void 0,metadata:t?.metadata??e.metadata??void 0,messages_path:e.messagesPath??void 0})}async function cb(e,t,n){let r=0;while(!0){let o=await e();if(o===void 0)return{updated:!1};let s=await t(o);if(typeof s==="object"&&s!==null&&"updated"in s&&s.updated===!1){if(r+=1,r>=n)return s;continue}return s}}function qe(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function Fe(e,t){return{inputTokens:e.inputTokens+Math.max(0,t.inputTokens??0),outputTokens:e.outputTokens+Math.max(0,t.outputTokens??0),cacheReadTokens:e.cacheReadTokens+Math.max(0,t.cacheReadTokens??0),cacheWriteTokens:e.cacheWriteTokens+Math.max(0,t.cacheWriteTokens??0),totalCost:e.totalCost+Math.max(0,t.totalCost??0)}}function Ma(e){let t=qe();for(let n of e)t=Fe(t,n);return t}function Go(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function Mu(e){let t=qe();for(let n of e){let r=n.metrics;if(!r)continue;t=Fe(t,{inputTokens:Go(r.inputTokens),outputTokens:Go(r.outputTokens),cacheReadTokens:Go(r.cacheReadTokens),cacheWriteTokens:Go(r.cacheWriteTokens),totalCost:Go(r.cost)})}return t}function vL(e){if(!e||typeof e!=="object")return;let t=e,n=t.skill??t.skill_name??t.skillName;if(typeof n!=="string")return;let r=n.trim();return r.length>0?r:void 0}function Ou(e){if(!e||typeof e!=="object")return{};let t=e;return{agentId:typeof t.agentId==="string"?t.agentId:void 0,conversationId:typeof t.conversationId==="string"?t.conversationId:void 0,parentAgentId:typeof t.parentAgentId==="string"?t.parentAgentId:void 0}}function Jt(e){let t=e.agentId?.trim();if(!t)return;let n=e.parentAgentId?.trim()||void 0,r=e.teamRole,o="root";if(r==="teammate")o="team_teammate";else if(r==="lead")o="team_lead";else if(n)o="subagent";return{agentId:t,agentKind:o,conversationId:e.conversationId?.trim()||void 0,parentAgentId:n,createdByAgentId:e.createdByAgentId?.trim()||n||void 0,isSubagent:Boolean(n),teamId:e.teamId?.trim()||void 0,teamName:e.teamName?.trim()||void 0,teamRole:r,teamAgentId:e.teamAgentId?.trim()||void 0}}function TL(e){return{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheWriteTokens:e.cacheWriteTokens,cacheReadTokens:e.cacheReadTokens,totalCost:e.cost}}function wL(e){let t=e.cacheWriteTokens??0,n=e.cacheReadTokens??0;return{tokensIn:Math.max(0,e.inputTokens-n-t),tokensOut:e.outputTokens,cacheWriteTokens:t,cacheReadTokens:n,totalCost:e.cost,reasoningTokenCount:e.reasoningTokenCount}}function kL(e){let t=e.isPrimaryAgentEvent?[e.overrides?.agentId,e.eventMetadata.agentId,e.overrides?.teamAgentId]:[e.overrides?.teamAgentId,e.overrides?.agentId,e.eventMetadata.agentId,e.eventMetadata.conversationId];for(let n of t){let r=n?.trim();if(r)return r}return e.isPrimaryAgentEvent?"root":"unknown"}function Oa(e,t,n){let{sessionId:r,config:o,liveSession:s,emit:i}=e,a=o.telemetry,d=s?.runtime.teamRuntime,c=n?.isPrimaryAgentEvent??!0,l=Ou(t),u=Jt({agentId:n?.agentId??l.agentId,conversationId:n?.conversationId??l.conversationId,parentAgentId:n?.parentAgentId??l.parentAgentId,createdByAgentId:n?.createdByAgentId,teamId:n?.teamId??d?.getTeamId(),teamName:n?.teamName??d?.getTeamName(),teamRole:n?.teamRole,teamAgentId:n?.teamAgentId});if(t.type==="content_start"&&t.contentType==="tool"&&t.toolName==="skills"){let p=vL(t.input);if(p)of(a,{ulid:r,skillName:p,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:o.providerId,modelId:o.modelId,...u})}if(t.type==="content_end"&&t.contentType==="tool"){let p=t.toolName??"unknown",m=!t.error;if(rn(a,{ulid:r,tool:p,autoApproved:void 0,success:m,modelId:o.modelId,provider:o.providerId,...u}),!m&&(p==="editor"||p==="apply_patch"))sf(a,{ulid:r,modelId:o.modelId,provider:o.providerId,errorType:t.error,...u})}if(t.type==="usage"&&s?.turnUsageBaseline){let p=TL(t);if(c){s.turnPrimaryUsage=Fe(s.turnPrimaryUsage??qe(),p);let g=Fe(s.turnUsageBaseline,s.turnPrimaryUsage);e.usageBySession.set(r,g),Si(a,{ulid:r,provider:o.providerId,model:o.modelId,source:"assistant",mode:o.mode,...u}),nf(a,{ulid:r,...wL(t),provider:o.providerId,model:o.modelId,...u})}else{let g=kL({isPrimaryAgentEvent:c,overrides:n,eventMetadata:l}),f=s.turnUsageByAgent??new Map;s.turnUsageByAgent=f,f.set(g,Fe(f.get(g)??qe(),p))}let m=Fe(s.turnPrimaryUsage??qe(),Ma(s.turnUsageByAgent?.values()??[]));e.aggregateUsageBySession.set(r,Fe(s.turnAggregateUsageBaseline??s.turnUsageBaseline,m))}if(t.type==="iteration_end"&&c)e.persistMessages(r,s?.agent.getMessages()??[],s?.config.systemPrompt);i({type:"agent_event",payload:{sessionId:r,event:t,teamAgentId:n?.teamAgentId,teamRole:n!==void 0?n.teamRole??(c?"lead":void 0):void 0}}),i({type:"chunk",payload:{sessionId:r,stream:"agent",chunk:ib(t),ts:Date.now()}})}function Yt(e){return e.workspaceRoot??e.cwd}import{resolveProviderRequestHeaders as kF}from"@cline/llms";import{buildClineSystemPrompt as CF,hasRuntimeConfigExtension as IF}from"@cline/shared";import{stripUtf8Bom as CL}from"@cline/shared";import IL from"yaml";var AL=new Set(["name","description","license","compatibility","metadata","allowed-tools"]),Lu=64,RL=1024,EL=500;function ub(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Vo(e,t,n={}){if(e===void 0){if(n.required)throw Error(`Missing required frontmatter field '${t}'.`);return}if(typeof e!=="string")throw Error(`Frontmatter field '${t}' must be a string.`);let r=e.trim();if(n.required&&r.length===0)throw Error(`Frontmatter field '${t}' cannot be empty.`);if(n.maxLength!==void 0&&r.length>n.maxLength)throw Error(`Frontmatter field '${t}' exceeds ${n.maxLength} characters.`);return r}function PL(e,t){let n=e.normalize("NFKC");if(n.length===0||n.length>Lu)throw Error(`Skill name must be between 1 and ${Lu} characters.`);if(n!==n.toLowerCase())throw Error(`Skill name '${n}' must be lowercase.`);if(n.startsWith("-")||n.endsWith("-")||n.includes("--"))throw Error(`Skill name '${n}' cannot start or end with a hyphen or contain consecutive hyphens.`);for(let r of n)if(r!=="-"&&!/[\p{L}\p{N}]/u.test(r))throw Error(`Skill name '${n}' may contain only lowercase letters, numbers, and hyphens.`);if(t.normalize("NFKC")!==n)throw Error(`Skill directory '${t}' must match frontmatter name '${n}'.`);return n}function _L(e){if(e===void 0)return;if(!ub(e))throw Error("Frontmatter field 'metadata' must be an object.");let t={};for(let[n,r]of Object.entries(e)){if(typeof r!=="string")throw Error(`Frontmatter metadata value '${n}' must be a string.`);t[n]=r}return t}function Xo(e,t){let r=CL(e).match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)([\s\S]*)$/);if(!r)throw Error("SKILL.md must start with YAML frontmatter delimited by '---'.");let o;try{o=IL.parse(r[1])}catch(m){throw Error(`Failed to parse YAML frontmatter: ${m instanceof Error?m.message:String(m)}`)}if(!ub(o))throw Error("SKILL.md frontmatter must be a YAML mapping.");let s=Object.keys(o).filter((m)=>!AL.has(m)).sort();if(s.length>0)throw Error(`Unexpected frontmatter field${s.length===1?"":"s"}: ${s.join(", ")}.`);let i=Vo(o.name,"name",{required:!0,maxLength:Lu}),a=PL(i,t),d=Vo(o.description,"description",{required:!0,maxLength:RL}),c=Vo(o.license,"license"),l=Vo(o.compatibility,"compatibility",{maxLength:EL});if(o.compatibility!==void 0&&!l)throw Error("Frontmatter field 'compatibility' cannot be empty.");let u=Vo(o["allowed-tools"],"allowed-tools"),p=_L(o.metadata);return{metadata:{name:a,description:d,...c!==void 0?{license:c}:{},...l!==void 0?{compatibility:l}:{},...p!==void 0?{metadata:p}:{},...u!==void 0?{"allowed-tools":u}:{}},instructions:r[2].trim(),frontmatter:o}}import{createHash as xL}from"node:crypto";import{lstat as ML,readdir as mb,readFile as $u,realpath as Wu,stat as Qo}from"node:fs/promises";import{validateHeaderName as OL,validateHeaderValue as LL}from"node:http";import{isIP as NL}from"node:net";import{basename as AQ,dirname as DL,isAbsolute as gb,join as Ot,relative as fb,resolve as qn}from"node:path";import{AGENT_PLUGIN_MANIFEST_FILE_NAME as ju,resolveAgentPluginSearchPaths as UL,resolveClineDataDir as FL,SKILLS_CONFIG_DIRECTORY_NAME as HL}from"@cline/shared/storage";var La="https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",Fu="https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",BL=new Set(["$schema","name","version","description","author","homepage","repository","license","keywords","extensions"]),$L=new Set(["name","email","url"]),WL=/^(?!.*(?:--|\.\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/,Nu="${PLUGIN_ROOT}",Du="${PLUGIN_DATA}";function jn(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Hu(e,t){let n=fb(e,t);return n===""||!n.startsWith("..")&&!gb(n)}function Me(e){return e instanceof Error?e.message:String(e)}function qu(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}function we(e){return{level:e.level??"error",...e}}async function Bu(e){let t=await Wu(e);if(!(await Qo(t)).isDirectory())throw Error("expected a directory");return t}async function Yo(e,t,n){let r=await Wu(t);if(!Hu(e,r))throw Error(`path resolves outside the plugin root: ${t}`);let o=await Qo(r);if(!(n==="file"?o.isFile():o.isDirectory()))throw Error(`expected a regular ${n}: ${t}`);return r}async function lb(e,t){let n=qn(t);if(!Hu(e,n))throw Error(`path resolves outside its permitted root: ${t}`);let r=n;while(!0)try{let o=await Wu(r),s=qn(o,fb(r,n));if(!Hu(e,s))throw Error(`path resolves outside its permitted root: ${t}`);return s}catch(o){if(!qu(o))throw o;let s=DL(r);if(s===r)throw o;r=s}}async function pb(e){try{return await Qo(e),!0}catch(t){if(qu(t))return!1;throw t}}async function Na(e){try{return await ML(e),!0}catch(t){if(qu(t))return!1;throw t}}async function jL(e){let t;try{t=await Bu(e)}catch{return[]}let n=[],r;try{r=await mb(t,{withFileTypes:!0})}catch{return[]}for(let o of r){let s=Ot(t,o.name),i;try{i=await Bu(s)}catch{continue}let a=!1;try{a=await Na(Ot(i,ju))}catch{continue}if(a)n.push(i)}return n.sort((o,s)=>o.localeCompare(s))}async function qL(e,t){let n=qn(e.cwd??process.cwd()),r=[];for(let a of e.pluginPaths??[]){let d=a.trim();if(!d)continue;let c=qn(n,d);try{r.push(await Bu(c))}catch(l){t.push(we({scope:"plugin",pluginPath:c,message:`Cannot load Agent Plugin directory: ${Me(l)}`}))}}let o=e.searchPaths??UL();for(let a of o)r.push(...await jL(a));let s=[],i=new Set;for(let a of r)if(!i.has(a))i.add(a),s.push(a);return s}function Jo(e,t){let n=e[t];if(n===void 0)return;if(typeof n!=="string")throw Error(`Manifest field '${t}' must be a string.`);return n}function zL(e,t,n){if(!jn(e))throw Error("plugin.json must contain a JSON object.");for(let i of Object.keys(e).filter((a)=>!BL.has(a)).sort())n.push(we({level:"warning",scope:"manifest",pluginPath:t,message:`Ignoring unknown plugin.json field '${i}'.`}));if(e.$schema!==La)throw Error(`Unsupported or missing plugin.json $schema; expected '${La}'.`);if(typeof e.name!=="string")throw Error("Manifest field 'name' must be a string.");if(e.name.length<1||e.name.length>64||!WL.test(e.name))throw Error("Manifest field 'name' must be 1-64 lowercase alphanumeric, hyphen, or period characters; it must start and end alphanumeric and cannot contain '--' or '..'.");let r;if(e.author!==void 0){if(!jn(e.author))throw Error("Manifest field 'author' must be an object.");let i=Object.keys(e.author).filter((a)=>!$L.has(a));if(i.length>0)throw Error(`Manifest author contains unknown field '${i.sort()[0]}'.`);for(let[a,d]of Object.entries(e.author))if(typeof d!=="string")throw Error(`Manifest author field '${a}' must be a string.`);r=e.author}let o;if(e.keywords!==void 0){if(!Array.isArray(e.keywords)||!e.keywords.every((i)=>typeof i==="string"))throw Error("Manifest field 'keywords' must be an array of strings.");o=[...e.keywords]}let s;if(e.extensions!==void 0)if(jn(e.extensions))s={...e.extensions};else n.push(we({level:"warning",scope:"manifest",pluginPath:t,pluginName:e.name,message:"Ignoring non-object plugin.json 'extensions' field."}));return{$schema:La,name:e.name,...Jo(e,"version")!==void 0?{version:e.version}:{},...Jo(e,"description")!==void 0?{description:e.description}:{},...r?{author:r}:{},...Jo(e,"homepage")!==void 0?{homepage:e.homepage}:{},...Jo(e,"repository")!==void 0?{repository:e.repository}:{},...Jo(e,"license")!==void 0?{license:e.license}:{},...o?{keywords:o}:{},...s?{extensions:s}:{}}}async function KL(e,t){let n=Ot(e,ju),r=await Yo(e,n,"file"),o;try{o=JSON.parse(await $u(r,"utf8"))}catch(s){throw Error(`Invalid plugin.json: ${Me(s)}`)}return{manifestPath:r,manifest:zL(o,e,t)}}async function GL(e,t,n){let r=Ot(e,HL),o;try{o=await Na(r)}catch(d){return n.push(we({scope:"skills",pluginPath:e,pluginName:t,componentPath:r,message:`Cannot inspect Agent Plugin skills component: ${Me(d)}`})),[]}if(!o)return[];let s;try{s=await Yo(e,r,"directory")}catch(d){return n.push(we({scope:"skills",pluginPath:e,pluginName:t,componentPath:r,message:`Invalid Agent Plugin skills component: ${Me(d)}`})),[]}let i=[],a;try{a=await mb(s,{withFileTypes:!0})}catch(d){return n.push(we({scope:"skills",pluginPath:e,pluginName:t,componentPath:s,message:`Cannot read Agent Plugin skills component: ${Me(d)}`})),[]}for(let d of a.sort((c,l)=>c.name.localeCompare(l.name))){let c=Ot(s,d.name),l;try{l=await Yo(e,c,"directory")}catch(g){if(d.isSymbolicLink())n.push(we({scope:"skill",pluginPath:e,pluginName:t,componentPath:c,componentName:d.name,message:`Skipping invalid Agent Plugin skill directory '${d.name}': ${Me(g)}`}));continue}let u=Ot(l,"SKILL.md"),p;try{p=await Na(u)}catch(g){n.push(we({scope:"skill",pluginPath:e,pluginName:t,componentPath:u,componentName:d.name,message:`Cannot inspect Agent Plugin skill '${d.name}': ${Me(g)}`}));continue}if(!p)continue;let m;try{m=await Yo(e,u,"file")}catch(g){n.push(we({scope:"skill",pluginPath:e,pluginName:t,componentPath:u,componentName:d.name,message:`Skipping invalid Agent Plugin skill '${d.name}': ${Me(g)}`}));continue}try{let g=Xo(await $u(m,"utf8"),d.name);i.push({pluginName:t,pluginRoot:e,directoryPath:l,filePath:m,metadata:g.metadata})}catch(g){n.push(we({scope:"skill",pluginPath:e,pluginName:t,componentPath:m,componentName:d.name,message:`Skipping invalid Agent Plugin skill '${d.name}': ${Me(g)}`}))}}return i}function zu(e,t,n){let r=Object.keys(e).filter((o)=>!t.has(o)).sort();if(r.length>0)throw Error(`${n} contains unknown field '${r[0]}'.`)}function VL(e,t){if(e===void 0)return;if(!Array.isArray(e)||!e.every((n)=>typeof n==="string"))throw Error(`MCP field '${t}' must be an array of strings.`);return[...e]}function hb(e,t){if(e===void 0)return;if(!jn(e)||!Object.values(e).every((n)=>typeof n==="string"))throw Error(`MCP field '${t}' must be an object of strings.`);return e}function Uu(e,t,n){return e.replace(/\$\{PLUGIN_(ROOT|DATA)\}/g,(r,o)=>o==="ROOT"?t:n)}function XL(e,t,n){let r=xL("sha256").update(n).digest("hex").slice(0,12);return Ot(e,`${t}-${r}`)}function JL(e,t,n){let r={...e};if(process.platform==="win32")for(let o of Object.keys(r)){let s=o.toUpperCase();if(s==="PLUGIN_ROOT"||s==="PLUGIN_DATA")delete r[o]}return r.PLUGIN_ROOT=t,r.PLUGIN_DATA=n,r}async function YL(e){if(zu(e.server,new Set(["type","command","args","env","cwd"]),"stdio MCP server"),typeof e.server.command!=="string"||!e.server.command)throw Error("stdio MCP server requires a non-empty 'command'.");let t;if(e.server.command.startsWith("./")){if(t=await lb(e.pluginRoot,qn(e.pluginRoot,e.server.command)),await pb(t)){if(!(await Qo(t)).isFile())throw Error("stdio MCP 'command' must resolve to a regular file.")}}else{if(gb(e.server.command)||/[\s/\\\0]/u.test(e.server.command))throw Error("stdio MCP 'command' must be one bare executable token or a plugin-relative path beginning with './'.");t=e.server.command}let n=VL(e.server.args,"args")?.map((a)=>Uu(a,e.pluginRoot,e.pluginDataPath)),r=hb(e.server.env,"env")??{};for(let a of Object.keys(r))if(process.platform==="win32"?a.toUpperCase()==="PLUGIN_ROOT"||a.toUpperCase()==="PLUGIN_DATA":a==="PLUGIN_ROOT"||a==="PLUGIN_DATA")throw Error(`stdio MCP env cannot configure reserved key '${a}'.`);let o=Object.fromEntries(Object.entries(r).map(([a,d])=>[a,Uu(d,e.pluginRoot,e.pluginDataPath)])),s=JL(o,e.pluginRoot,e.pluginDataPath),i=e.pluginRoot;if(e.server.cwd!==void 0){if(typeof e.server.cwd!=="string")throw Error("stdio MCP field 'cwd' must be a string.");let a;if(e.server.cwd.startsWith("./"))a=e.pluginRoot;else if(e.server.cwd===Nu||e.server.cwd.startsWith(`${Nu}/`))a=e.pluginRoot;else if(e.server.cwd===Du||e.server.cwd.startsWith(`${Du}/`))a=e.pluginDataPath;else throw Error(`stdio MCP 'cwd' must begin with './', '${Nu}', or '${Du}'.`);let d=Uu(e.server.cwd,e.pluginRoot,e.pluginDataPath);if(i=await lb(a,e.server.cwd.startsWith("./")?qn(e.pluginRoot,d):d),await pb(i)&&!(await Qo(i)).isDirectory())throw Error("stdio MCP 'cwd' must resolve to a directory.")}return{type:"stdio",command:t,...n?{args:n}:{},cwd:i,env:s}}function QL(e){let t=e.replace(/^\[|\]$/g,"").toLowerCase();if(t==="localhost"||t==="::1")return!0;if(NL(t)===4)return t.split(".")[0]==="127";return!1}function ZL(e,t){if(zu(e,new Set(["type","url","headers"]),`${t} MCP server`),typeof e.url!=="string"||!e.url)throw Error(`${t} MCP server requires a non-empty 'url'.`);let n;try{n=new URL(e.url)}catch{throw Error(`${t} MCP 'url' must be an absolute HTTP(S) URL.`)}if(n.protocol!=="http:"&&n.protocol!=="https:"||n.username||n.password||n.hash)throw Error(`${t} MCP 'url' must be HTTP(S) without user information or a fragment.`);if(n.protocol!=="https:"&&!QL(n.hostname))throw Error(`${t} MCP endpoints must use HTTPS unless loopback.`);let r=hb(e.headers,"headers"),o=new Set;for(let[s,i]of Object.entries(r??{})){let a=s.toLowerCase();if(o.has(a))throw Error(`Duplicate case-insensitive MCP header '${s}'.`);o.add(a);try{OL(s),LL(s,i)}catch(d){throw Error(`Invalid MCP header '${s}': ${Me(d)}`)}}return t==="sse"?{type:"sse",url:n.toString(),...r?{headers:r}:{}}:{type:"streamableHttp",url:n.toString(),...r?{headers:r}:{}}}async function eN(e){let t=Ot(e.pluginRoot,"mcp.json"),n;try{n=await Na(t)}catch(a){return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:t,message:`Cannot inspect Agent Plugin MCP component: ${Me(a)}`})),[]}if(!n)return[];let r;try{r=await Yo(e.pluginRoot,t,"file")}catch(a){return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:t,message:`Invalid Agent Plugin MCP component: ${Me(a)}`})),[]}let o;try{o=JSON.parse(await $u(r,"utf8"))}catch(a){return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:r,message:`Invalid mcp.json: ${Me(a)}`})),[]}if(!jn(o))return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:r,message:"mcp.json must contain a JSON object."})),[];try{if(zu(o,new Set(["$schema","mcpServers"]),"mcp.json"),o.$schema!==Fu)throw Error(`Unsupported or mismatched mcp.json $schema; expected '${Fu}'.`);if(!jn(o.mcpServers))throw Error("mcp.json field 'mcpServers' must be an object.")}catch(a){return e.diagnostics.push(we({scope:"mcp",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:r,message:`Invalid Agent Plugin MCP component: ${Me(a)}`})),[]}let s=XL(e.pluginDataRoot,e.pluginName,e.pluginRoot),i=[];for(let[a,d]of Object.entries(o.mcpServers).sort(([c],[l])=>c.localeCompare(l)))try{if(!jn(d))throw Error("server configuration must be an object.");if(d.type!=="stdio"&&d.type!=="streamable-http"&&d.type!=="sse")throw Error("server has an unsupported or missing transport type.");let c,l;if(d.type==="stdio")l=s,c=await YL({server:d,pluginRoot:e.pluginRoot,pluginDataPath:l});else c=ZL(d,d.type);let p={name:`${e.pluginName}.${a}`,transport:c,metadata:{source:"agent-plugin",pluginName:e.pluginName,pluginPath:e.pluginRoot,serverName:a,...l?{pluginDataPath:l}:{}}};i.push({pluginName:e.pluginName,pluginRoot:e.pluginRoot,...l?{pluginDataPath:l}:{},serverName:a,registration:p})}catch(c){e.diagnostics.push(we({scope:"mcp-server",pluginPath:e.pluginRoot,pluginName:e.pluginName,componentPath:r,componentName:a,message:`Skipping invalid Agent Plugin MCP server '${a}': ${Me(c)}`}))}return i}async function tN(e,t){let n;try{n=await KL(e,t)}catch(s){t.push(we({scope:"manifest",pluginPath:e,componentPath:Ot(e,ju),message:`Rejecting Agent Plugin: ${Me(s)}`}));return}let{manifest:r,manifestPath:o}=n;return{rootPath:e,manifestPath:o,manifest:r}}async function nN(e,t,n){let{rootPath:r,manifest:o}=e,[s,i]=await Promise.all([GL(r,o.name,n),eN({pluginRoot:r,pluginName:o.name,pluginDataRoot:t,diagnostics:n})]);return{...e,skills:s,mcpServers:i}}async function Zo(e={}){let t=[],n=await qL(e,t),r=qn(e.pluginDataRoot??Ot(FL(),"agent-plugins")),o=new Set((e.disabledPluginNames??[]).map((c)=>c.trim()).filter(Boolean)),s=[],i=new Map;for(let c of n){let l=await tN(c,t);if(!l)continue;let u=l.manifest.name,p=i.get(u);if(p){t.push(we({level:"warning",scope:"plugin",pluginPath:c,pluginName:u,message:`Ignoring duplicate Agent Plugin '${u}'; '${p}' has precedence.`}));continue}if(i.set(u,c),o.has(u))continue;s.push(await nN(l,r,t))}let a=[],d=new Set;for(let c of s)for(let l of c.mcpServers){if(d.has(l.registration.name)){t.push(we({scope:"mcp-server",pluginPath:c.rootPath,pluginName:c.manifest.name,componentName:l.serverName,message:`Skipping duplicate Agent Plugin MCP runtime name '${l.registration.name}'.`}));continue}d.add(l.registration.name),a.push(l)}return{plugins:s,skills:s.flatMap((c)=>c.skills),mcpServers:a,diagnostics:t}}import{createHash as JD}from"node:crypto";import{existsSync as YD,readFileSync as QD}from"node:fs";import{join as ZD}from"node:path";import{createTool as e0,FeatureFlag as Vb,getClineEnvironmentConfig as t0}from"@cline/shared";import{resolveClineDataDir as n0}from"@cline/shared/storage";import{chmodSync as Fb,existsSync as tl,mkdirSync as vD,readFileSync as TD,renameSync as wD,rmSync as kD,writeFileSync as CD}from"node:fs";import{basename as Hb,dirname as nl}from"node:path";import{resolveProviderSettingsPath as ID}from"@cline/shared/storage";import{z as ze}from"zod";import*as Lt from"@cline/llms";import{ReasoningLevelSchema as hN}from"@cline/shared";import{z as P}from"zod";import*as kt from"@cline/llms";function sN(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,{...n}]))}function iN(e){if(e.baseUrl.length===0)return!1;switch(e.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return e.protocol==="openai-chat"}}var aN=Object.values(kt.MODEL_COLLECTIONS_BY_PROVIDER_ID).map((e)=>({id:e.provider.id,baseUrl:e.provider.baseUrl??"",modelsSourceUrl:e.provider.modelsSourceUrl,modelId:e.provider.defaultModelId,knownModels:sN(e.models),capabilities:e.provider.capabilities?[...e.provider.capabilities]:void 0,env:e.provider.env?[...e.provider.env]:void 0,client:e.provider.client,protocol:e.provider.protocol})),dN=Object.fromEntries(aN.map((e)=>[e.id,e]));function cN(){return Object.fromEntries(Object.entries(dN).filter(([,e])=>iN(e)))}function uN(e=[]){let t=e.flatMap((n)=>{switch(n){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[n];default:return[]}});return t.length>0?t:void 0}var lN="https://models.dev/api.json",pN=600000;var mN=5000,yb=new Map,Ku=new Map;async function gN(e,t){let n=Object.assign((...r)=>{let[o,s]=r,i=AbortSignal.timeout(mN),a=s?.signal?AbortSignal.any([s.signal,i]):i;return globalThis.fetch(o,{...s,signal:a})},globalThis.fetch);return kt.fetchLiveProviderModels(e,n,{includeClineCloudModels:t})}async function Da(e={}){let t=e.url??lN,n=e.cacheTtlMs??pN,r=e.includeClineCloudModels===!0,o=`${t}\x00cloud=${r}`,s=Date.now(),i=yb.get(o);if(i&&i.expiresAt>s)return i.data;let a=Ku.get(o);if(a)return a;let d=gN(t,r).then((c)=>(yb.set(o,{data:c,expiresAt:s+n}),c)).finally(()=>{Ku.delete(o)});return Ku.set(o,d),d}function fN(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,{baseUrl:n.baseUrl,modelId:n.modelId,capabilities:uN(n.capabilities)}]))}var Sb=fN(cN());var bb=Lt.BUILT_IN_PROVIDER;var yN=Lt.normalizeProviderId,vb=P.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),SN=P.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),bN=P.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),vN=P.object({apiKey:P.string().optional(),accessToken:P.string().optional(),refreshToken:P.string().optional(),expiresAt:P.number().int().positive().optional(),accountId:P.string().optional(),organizationId:P.string().optional(),organizationName:P.string().optional(),memberId:P.string().optional(),metadata:P.record(P.string(),P.unknown()).optional()}),TN=P.object({enabled:P.boolean().optional(),effort:hN.optional(),budgetTokens:P.number().int().positive().optional()}),wN=P.object({accessKey:P.string().optional(),secretKey:P.string().optional(),sessionToken:P.string().optional(),region:P.string().optional(),profile:P.string().optional(),authentication:P.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:P.boolean().optional(),useCrossRegionInference:P.boolean().optional(),useGlobalInference:P.boolean().optional(),endpoint:P.string().url().optional(),customModelBaseId:P.string().optional()}),kN=P.object({projectId:P.string().optional(),region:P.string().optional()}),CN=P.object({apiVersion:P.string().optional(),useIdentity:P.boolean().optional()}),IN=P.object({clientId:P.string().optional(),clientSecret:P.string().optional(),tokenUrl:P.string().url().optional(),resourceGroup:P.string().optional(),deploymentId:P.string().optional(),useOrchestrationMode:P.boolean().optional(),api:P.enum(["orchestration","foundation-models"]).optional(),defaultSettings:P.record(P.string(),P.unknown()).optional()}),AN=P.object({mode:P.enum(["internal","external"]).optional(),usePromptCache:P.boolean().optional()}),RN=P.object({loadLatestOnInit:P.boolean().optional(),includeClineCloudModels:P.boolean().optional(),loadPrivateOnAuth:P.boolean().optional(),url:P.string().url().optional(),cacheTtlMs:P.number().int().positive().optional(),failOnError:P.boolean().optional()}),Gu=P.object({provider:vb,apiKey:P.string().optional(),auth:vN.optional(),model:P.string().optional(),protocol:SN.optional(),client:bN.optional(),routingProviderId:vb.optional(),maxTokens:P.number().int().positive().optional(),contextWindow:P.number().int().positive().optional(),baseUrl:P.string().url().optional(),headers:P.record(P.string(),P.string()).optional(),timeout:P.number().int().positive().optional(),reasoning:TN.optional(),aws:wN.optional(),gcp:kN.optional(),azure:CN.optional(),sap:IN.optional(),oca:AN.optional(),region:P.string().optional(),apiLine:P.enum(["china","international"]).optional(),capabilities:P.array(P.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:RN.optional()});function EN(e){return e.protocol==="openai-responses"||e.client==="openai"}function zn(e,t={}){let n=e.provider,r=yN(n),o=t.includeKnownModels!==!1,s=e.reasoning?.effort||"none",i=s==="none"?void 0:s,a=Sb[r],d=Lt.getGeneratedModelsForRuntimeProvider(r),c=Object.keys(d)[0],l=Ac(r,e),u=e.baseUrl??Lt.resolveProviderApiLineBaseUrl(r,e.apiLine)??(r==="oca"?e.oca?.mode==="internal"?Tc:wc:a?.baseUrl),p=e.routingProviderId??(EN(e)&&r!==bb.OPENAI_NATIVE?bb.OPENAI_NATIVE:void 0),m=o?a?.knownModels??(Object.keys(d).length>0?d:void 0):void 0,g={providerId:n,clientType:e.client,routingProviderId:p,modelId:e.model??a?.modelId??c??"default",...o?{knownModels:m}:{},apiKey:l,accessToken:e.auth?.accessToken,refreshToken:e.auth?.refreshToken,accountId:e.auth?.accountId,baseUrl:u,headers:e.headers,timeoutMs:e.timeout,maxOutputTokens:e.maxTokens,maxInputTokens:e.contextWindow,thinking:e.reasoning?.enabled,reasoningEffort:i,thinkingBudgetTokens:e.reasoning?.budgetTokens,region:e.region??e.aws?.region??e.gcp?.region,apiLine:e.apiLine,useCrossRegionInference:e.aws?.useCrossRegionInference,useGlobalInference:e.aws?.useGlobalInference,aws:e.aws?{accessKey:e.aws.accessKey,secretKey:e.aws.secretKey,sessionToken:e.aws.sessionToken,authentication:e.aws.authentication,profile:e.aws.profile,usePromptCache:e.aws.usePromptCache,endpoint:e.aws.endpoint,customModelBaseId:e.aws.customModelBaseId}:void 0,gcp:e.gcp?{projectId:e.gcp.projectId,region:e.gcp.region}:void 0,azure:e.azure,sap:e.sap,oca:e.oca,capabilities:e.capabilities??a?.capabilities,modelCatalog:e.modelCatalog?{loadLatestOnInit:e.modelCatalog.loadLatestOnInit,includeClineCloudModels:e.modelCatalog.includeClineCloudModels,loadPrivateOnAuth:e.modelCatalog.loadPrivateOnAuth,url:e.modelCatalog.url,cacheTtlMs:e.modelCatalog.cacheTtlMs,failOnError:e.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(g).filter(([f,h])=>h!==void 0))}var es=Gu;var Vu=ze.object({providerId:ze.string().min(1),modelId:ze.string().min(1)}),PN=ze.object({voiceInput:Vu.optional()}),_N=ze.object({bedrockProfile:ze.boolean().optional()}),xN=ze.object({settings:Gu,updatedAt:ze.string().datetime(),tokenSource:ze.enum(["manual","oauth","migration"]).default("manual")}),Xu=ze.object({version:ze.literal(1),lastUsedProvider:ze.string().min(1).optional(),modes:PN.default({}),repairs:_N.optional(),providers:ze.record(ze.string(),xN)});function ts(){return{version:1,modes:{},providers:{}}}import{existsSync as MN,mkdirSync as ON,readFileSync as LN,renameSync as NN,rmSync as DN,writeFileSync as UN}from"node:fs";import{dirname as wb,join as FN}from"node:path";import*as He from"@cline/llms";import{ApiFormatSchema as HN,ModelCapabilitySchema as BN,ModelModalitiesSchema as $N,ModelOperationModeSchema as WN,ModelOperationSchema as jN,ProviderCapabilitySchema as qN,ProviderClientSchema as zN,ProviderProtocolSchema as KN}from"@cline/shared";import{z as re}from"zod";var Ju=re.number().finite().positive().optional().catch(void 0),ns=re.number().finite().nonnegative().optional().catch(void 0),GN=re.object({id:re.string().optional(),name:re.string().optional(),maxTokens:Ju,contextWindow:Ju,maxInputTokens:Ju,capabilities:re.array(BN).optional(),supportsVision:re.boolean().optional(),supportsAttachments:re.boolean().optional(),supportsReasoning:re.boolean().optional(),operation:jN.optional(),operationModes:re.array(WN).optional(),modalities:$N.optional(),inputPrice:ns,outputPrice:ns,cacheReadsPrice:ns,cacheWritesPrice:ns,temperature:ns,apiFormat:HN.optional()}).passthrough(),VN=re.object({name:re.string(),baseUrl:re.string(),defaultModelId:re.string().optional(),protocol:KN.optional(),client:zN.optional(),capabilities:re.array(qN).optional(),modelsSourceUrl:re.string().optional()}).passthrough(),kb=re.object({provider:VN.optional(),models:re.record(re.string(),GN).optional(),discoveredModelIds:re.array(re.string()).optional()}).passthrough(),XN=re.object({version:re.literal(1),providers:re.record(re.string(),kb)}),JN=re.object({version:re.literal(1),providers:re.record(re.string(),re.unknown())}),Tb=new Set;function Cb(e){return e.split(/[-_]/).filter(Boolean).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function Ib(e){return FN(wb(e.getFilePath()),"models.json")}function Yu(){return{version:1,providers:{}}}function YN(e){let t=JN.safeParse(e);if(!t.success)return ue("models.json content is not a valid models file envelope; starting from an empty registry"),Yu();let n={};for(let[r,o]of Object.entries(t.data.providers)){let s=kb.safeParse(o);if(s.success)n[r]=s.data;else ue(`models.json: dropping invalid entry for provider=${r}`)}return{version:1,providers:n}}function Qu(e){if(!MN(e))return Yu();try{let t=LN(e,"utf8");return YN(JSON.parse(t))}catch{ue(`models.json at ${e} exists but is unreadable or invalid JSON; treating as an empty registry`)}return Yu()}function Ab(e,t){ON(wb(e),{recursive:!0});let n=XN.parse(t),r=`${e}.${process.pid}.tmp`;try{UN(r,`${JSON.stringify(n,null,2)}
266
266
  `,"utf8"),NN(r,e)}catch(o){throw DN(r,{force:!0}),o}}function Rb(e){if(!e||e.length===0)return;let t=new Set;if(e.includes("reasoning"))t.add("reasoning");if(e.includes("prompt-cache"))t.add("prompt-cache");if(e.includes("tools"))t.add("tools");return t.size>0?[...t]:void 0}function Eb(e){let t=new Set;if(!e||e.length===0)return[...t];if(e.includes("streaming"))t.add("streaming");if(e.includes("tools"))t.add("tools");if(e.includes("reasoning"))t.add("reasoning");if(e.includes("prompt-cache"))t.add("prompt-cache");if(e.includes("vision"))t.add("images"),t.add("files");return[...t]}function QN(e){return e!=null&&typeof e.name==="string"&&typeof e.baseUrl==="string"}function Pb(e,t){return e??t??"openai-chat"}function _b(e,t,n){return e??n??(t==="openai-responses"?"openai":"openai-compatible")}function xb(e,t,n,r=!1){let o=new Set(t?.capabilities??n??[]);if(t?.supportsVision!==void 0)if(t.supportsVision)o.add("images");else o.delete("images");if(t?.supportsAttachments!==void 0)if(t.supportsAttachments)o.add("files");else o.delete("files");if(t?.supportsReasoning!==void 0)if(t.supportsReasoning)o.add("reasoning");else o.delete("reasoning");if(!r&&o.size>0&&(t?.operation===void 0||t.operation==="language"))o.add("tools");let s=t?.apiFormat,i=t?.inputPrice!==void 0||t?.outputPrice!==void 0||t?.cacheReadsPrice!==void 0||t?.cacheWritesPrice!==void 0;return{id:e,name:t?.name??e,...t?.maxTokens!==void 0?{maxTokens:t.maxTokens}:{},...t?.contextWindow!==void 0?{contextWindow:t.contextWindow}:{},...t?.maxInputTokens!==void 0?{maxInputTokens:t.maxInputTokens}:{},...o.size>0?{capabilities:[...o]}:{},...t?.temperature!==void 0?{temperature:t.temperature}:{},...s!==void 0?{apiFormat:s}:{},...t?.operation!==void 0?{operation:t.operation}:{},...t?.operationModes!==void 0?{operationModes:t.operationModes}:{},...t?.modalities!==void 0?{modalities:t.modalities}:{},...i?{pricing:{...t?.inputPrice!==void 0?{input:t.inputPrice}:{},...t?.outputPrice!==void 0?{output:t.outputPrice}:{},...t?.cacheReadsPrice!==void 0?{cacheRead:t.cacheReadsPrice}:{},...t?.cacheWritesPrice!==void 0?{cacheWrite:t.cacheWritesPrice}:{}}}:{}}}function ZN(e,t){let n=Mb(e);for(let[r,o]of Object.entries(t??{})){let s=o.id?.trim()||r.trim();if(!s)continue;let i=n[s]?.capabilities,a=i&&o.capabilities?{...o,capabilities:[...new Set([...i,...o.capabilities])]}:o;He.registerModel(e,s,xb(s,a,i,i!==void 0))}}function eD(e,t,n){return{...t??{},id:e,name:t?.name??e,capabilities:t?.capabilities??n}}function Mb(e){return Object.assign({},...He.resolveProviderModelCatalogKeys(e).map((n)=>He.getGeneratedModelsForProvider(n)))}function tD(e){let t=e.provider.trim();if(!t||He.isBuiltInProviderId(t))return;let n=e.baseUrl?.trim();if(!n)return;let r=He.MODEL_COLLECTIONS_BY_PROVIDER_ID[t],o=Mb(t),s=Eb(e.capabilities),i=s.length>0?s:void 0,a=e.model?.trim(),d={...o,...r?.models??{}};if(a)d[a]=eD(a,d[a],i);let c=Object.keys(d).filter(Boolean),l=a||c[0];if(!l)return;let u=Pb(e.protocol,r?.provider.protocol),p=_b(e.client,u,r?.provider.client);He.registerProvider({provider:{id:t,name:r?.provider.name??Cb(t),description:r?.provider.description,protocol:u,client:p,baseUrl:n,modelsSourceUrl:r?.provider.modelsSourceUrl,defaultModelId:l,capabilities:Rb(e.capabilities)??r?.provider.capabilities,source:"file"},models:d})}function Ua(e){for(let t of Object.values(e.providers))tD(t.settings)}function Ob(e,t){let n=t.models??{};if(!QN(t.provider)){ZN(e,n);return}let r=Eb(t.provider.capabilities),o=Object.entries(n).map(([c,l])=>({id:l.id?.trim()||c.trim(),model:l})).filter(({id:c})=>c.length>0),s=t.provider.defaultModelId?.trim()||o[0]?.id||"default",i=Pb(t.provider.protocol,void 0),a=_b(t.provider.client,i,void 0),d=Object.fromEntries(o.map(({id:c,model:l})=>[c,{...xb(c,l,r.length>0?r:void 0),status:"active"}]));He.registerProvider({provider:{id:e,name:t.provider.name.trim()||Cb(e),protocol:i,client:a,baseUrl:t.provider.baseUrl,modelsSourceUrl:t.provider.modelsSourceUrl,defaultModelId:s,capabilities:Rb(t.provider.capabilities),source:"file"},models:d})}function Lb(e){let t=Ib(e);if(Tb.has(t))return;let n=Qu(t);for(let[r,o]of Object.entries(n.providers))Ob(r,o);Tb.add(t)}import{existsSync as nD,readFileSync as rD}from"node:fs";import{dirname as oD,join as Zu}from"node:path";import*as mt from"@cline/llms";import{ReasoningLevelSchema as sD}from"@cline/shared";import{resolveClineDataDir as iD}from"@cline/shared/storage";var Fa="openai",aD=mt.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,dD=128000;function Db(e){let t=e?.trim();if(!t)return;try{let n=JSON.parse(t);if(!n)return;let r=typeof n.expiresAt==="number"&&Number.isFinite(n.expiresAt)?n.expiresAt<10000000000?n.expiresAt*1000:n.expiresAt:void 0;return{accessToken:n.idToken,refreshToken:n.refreshToken,expiresAt:r,accountId:n.userInfo?.id}}catch{return}}function R(e){let t=e?.trim();return t?t:void 0}function cD(e){return e==="credentials"?"iam":e}function Nb(e){if(!nD(e))return;try{let t=rD(e,"utf8"),n=JSON.parse(t);if(n&&typeof n==="object"&&!Array.isArray(n))return n}catch{}return}function uD(e){let t=e.dataDir??iD(),n=e.globalStatePath??Zu(t,"globalState.json"),r=e.secretsPath??Zu(t,"secrets.json"),o=Nb(n),s=Nb(r);if(!o&&!s)return;return{globalState:o??{},secrets:s??{}}}function el(e){return mt.normalizeProviderId(e)}function Ha(e){if(e===Fa)return e;return mt.normalizeProviderId(e)}function lD(e,t,n,r){let o=n==="plan"?"planMode":"actMode",s=t===r?R(n==="plan"?e.planModeApiModelId:e.actModeApiModelId):void 0,a={openrouter:`${o}OpenRouterModelId`,cline:`${o}ClineModelId`,openai:`${o}OpenAiModelId`,ollama:`${o}OllamaModelId`,lmstudio:`${o}LmStudioModelId`,litellm:`${o}LiteLlmModelId`,requesty:`${o}RequestyModelId`,together:`${o}TogetherModelId`,fireworks:`${o}FireworksModelId`,sapaicore:`${o}SapAiCoreModelId`,groq:`${o}GroqModelId`,baseten:`${o}BasetenModelId`,huggingface:`${o}HuggingFaceModelId`,"huawei-cloud-maas":`${o}HuaweiCloudMaasModelId`,oca:`${o}OcaModelId`,aihubmix:`${o}AihubmixModelId`,hicap:`${o}HicapModelId`,nousResearch:`${o}NousResearchModelId`,"vercel-ai-gateway":`${o}VercelAiGatewayModelId`}[t];return(a?R(typeof e[a]==="string"?e[a]:void 0):void 0)??s}function pD(e,t,n){let r=n==="plan"?e.planModeThinkingBudgetTokens:e.actModeThinkingBudgetTokens,o=[...t==="oca"?[e.actModeOcaReasoningEffort,e.planModeOcaReasoningEffort]:[],...t==="gemini"?[e.geminiActModeThinkingLevel,e.geminiPlanModeThinkingLevel]:[],e.actModeReasoningEffort,e.planModeReasoningEffort].map(R).find(Boolean),s=sD.safeParse(o),i=s.success?s.data:void 0,a=typeof r==="number"&&Number.isInteger(r)&&r>0?r:void 0;if(!i&&a===void 0)return;return{...i?{effort:i}:{},...a!==void 0?{budgetTokens:a}:{}}}function mD(e){let t=e["openai-codex-oauth-credentials"];if(!t)return;try{let n=JSON.parse(t),r=R(n.access_token),o=R(n.refresh_token),s=R(n.accountId);if(!r&&!o&&!s)return;return{...r?{apiKey:r}:{},auth:{...r?{accessToken:r}:{},...o?{refreshToken:o}:{},...s?{accountId:s}:{}}}}catch{return}}function gD(e){let t=mt.getGeneratedModelsForProvider(e),n=mt.getProviderCollectionSync(e),r=n?.provider.defaultModelId;if(r&&(t[r]||n?.models?.[r]))return r;return Object.keys(t)[0]??void 0}function fD(e,t){if(!t||e!=="cline")return t;let n=mt.getProviderCollectionSync(e)?.models;if(!n)return t;if(n[t])return t;for(let r of mt.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES){if(!t.startsWith(r.aliasPrefix))continue;let o=`${r.canonicalPrefix}${t.slice(r.aliasPrefix.length)}`;if(n[o])return o}return}function hD(e,t,n,r){let o=el(e),s=R(r==="plan"?t.planModeApiProvider:t.actModeApiProvider),i=s?Ha(s):void 0,a=fD(o,lD(t,e,r,i))??gD(o),d=pD(t,o,r),c=typeof t.requestTimeoutMs==="number"&&Number.isInteger(t.requestTimeoutMs)&&t.requestTimeoutMs>0?t.requestTimeoutMs:void 0,l={anthropic:n.apiKey,cline:n.clineApiKey,openai:n.openAiApiKey,"openai-native":n.openAiNativeApiKey,openrouter:n.openRouterApiKey,bedrock:n.awsBedrockApiKey,gemini:n.geminiApiKey,ollama:n.ollamaApiKey,deepseek:n.deepSeekApiKey,requesty:n.requestyApiKey,together:n.togetherApiKey,fireworks:n.fireworksApiKey,qwen:n.qwenApiKey,doubao:n.doubaoApiKey,mistral:n.mistralApiKey,litellm:n.liteLlmApiKey,asksage:n.asksageApiKey,xai:n.xaiApiKey,moonshot:n.moonshotApiKey,zai:n.zaiApiKey,huggingface:n.huggingFaceApiKey,nebius:n.nebiusApiKey,sambanova:n.sambanovaApiKey,cerebras:n.cerebrasApiKey,groq:n.groqApiKey,"huawei-cloud-maas":n.huaweiCloudMaasApiKey,baseten:n.basetenApiKey,"vercel-ai-gateway":n.vercelAiGatewayApiKey,dify:n.difyApiKey,minimax:n.minimaxApiKey,hicap:n.hicapApiKey,aihubmix:n.aihubmixApiKey,nousResearch:n.nousResearchApiKey,oca:n.ocaApiKey},u={};if(e==="openai-codex")Object.assign(u,mD(n));if(e==="cline")try{let y=R(n["cline:clineAccountId"]);if(y)u.auth={...u.auth??{},...Db(y)}}catch{}if(e===Fa&&t.openAiHeaders)u.headers=t.openAiHeaders;if(e==="bedrock"){let y=cD(t.awsAuthentication),b=R(t.awsProfile),k=y==="profile"||t.awsUseProfile===!0||y===void 0&&b!==void 0,v=k&&y===void 0?"profile":y;u.aws={accessKey:R(n.awsAccessKey),secretKey:R(n.awsSecretKey),sessionToken:R(n.awsSessionToken),region:R(t.awsRegion),authentication:v,profile:k?b:void 0,usePromptCache:t.awsBedrockUsePromptCache,useCrossRegionInference:t.awsUseCrossRegionInference,useGlobalInference:t.awsUseGlobalInference,endpoint:R(t.awsBedrockEndpoint),customModelBaseId:R(r==="plan"?t.planModeAwsBedrockCustomModelBaseId:t.actModeAwsBedrockCustomModelBaseId)}}if(e==="vertex")u.gcp={projectId:R(t.vertexProjectId),region:R(t.vertexRegion)};if(e===Fa&&(t.azureApiVersion||t.azureIdentity!==void 0))u.azure={apiVersion:R(t.azureApiVersion),useIdentity:t.azureIdentity};if(e==="sapaicore"){let y=t.sapAiCoreUseOrchestrationMode??!0;u.sap={clientId:R(n.sapAiCoreClientId),clientSecret:R(n.sapAiCoreClientSecret),tokenUrl:R(t.sapAiCoreTokenUrl),resourceGroup:R(t.sapAiResourceGroup),deploymentId:y?void 0:R(r==="plan"?t.planModeSapAiCoreDeploymentId:t.actModeSapAiCoreDeploymentId),useOrchestrationMode:y}}if(e==="oca"){u.oca={mode:t.ocaMode};let y=R(n.ocaRefreshToken);if(y)u.auth={...u.auth??{},refreshToken:y}}if(e==="qwen")u.apiLine=t.qwenApiLine;if(e==="moonshot")u.apiLine=t.moonshotApiLine;if(e==="zai")u.apiLine=t.zaiApiLine;if(e==="minimax")u.apiLine=t.minimaxApiLine;let p={anthropic:t.anthropicBaseUrl,openai:t.openAiBaseUrl,ollama:t.ollamaBaseUrl,lmstudio:t.lmStudioBaseUrl,litellm:t.liteLlmBaseUrl,gemini:t.geminiBaseUrl,requesty:t.requestyBaseUrl,asksage:t.asksageApiUrl,dify:t.difyBaseUrl,oca:t.ocaBaseUrl,aihubmix:t.aihubmixBaseUrl,sapaicore:t.sapAiCoreBaseUrl},m=R(l[e]),g=R(p[e]),f={provider:o,...m?{apiKey:m}:{},...a?{model:a}:{},...g?{baseUrl:g}:{},...d?{reasoning:d}:{},...c?{timeout:c}:{},...u},h=es.safeParse(f);if(!h.success)return;return Object.keys(f).filter((y)=>y!=="provider").length>0?h.data:void 0}function rs(e){return typeof e==="number"&&Number.isFinite(e)&&e>0?e:void 0}function yD(e,t,n){if(e!==aD)return;if(!t.baseUrl||!t.model)return;let r=rs(n?.contextWindow)??dD,o=rs(n?.maxTokens),s=rs(n?.inputPrice),i=rs(n?.outputPrice),a=rs(n?.temperature),d=["streaming","tools"];if(n?.supportsImages!==!1)d.push("images");if(n?.supportsPromptCache===!0)d.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:t.baseUrl,defaultModelId:t.model},models:{[t.model]:{id:t.model,name:t.model,contextWindow:r,maxInputTokens:r,capabilities:d,...o!==void 0?{maxTokens:o}:{},...s!==void 0?{inputPrice:s}:{},...i!==void 0?{outputPrice:i}:{},...a!==void 0?{temperature:a}:{}}}}}function SD(e,t){let n=new Set;for(let o of[e.actModeApiProvider,e.planModeApiProvider]){let s=R(o);if(s)n.add(Ha(s))}if(R(t.apiKey))n.add("anthropic");if(R(t.openRouterApiKey))n.add("openrouter");if(R(t.openAiApiKey))n.add(Fa);if(R(t.openAiNativeApiKey))n.add("openai-native");if(R(t["openai-codex-oauth-credentials"]))n.add("openai-codex");if(R(t.geminiApiKey))n.add("gemini");if(R(t.ollamaApiKey))n.add("ollama");if(R(t.deepSeekApiKey))n.add("deepseek");if(R(t.requestyApiKey))n.add("requesty");if(R(t.togetherApiKey))n.add("together");if(R(t.fireworksApiKey))n.add("fireworks");if(R(t.qwenApiKey))n.add("qwen");if(R(t.doubaoApiKey))n.add("doubao");if(R(t.mistralApiKey))n.add("mistral");if(R(t.liteLlmApiKey))n.add("litellm");if(R(t.asksageApiKey))n.add("asksage");if(R(t.xaiApiKey))n.add("xai");if(R(t.moonshotApiKey))n.add("moonshot");if(R(t.zaiApiKey))n.add("zai");if(R(t.huggingFaceApiKey))n.add("huggingface");if(R(t.nebiusApiKey))n.add("nebius");if(R(t.sambanovaApiKey))n.add("sambanova");if(R(t.cerebrasApiKey))n.add("cerebras");if(R(t.groqApiKey))n.add("groq");if(R(t.huaweiCloudMaasApiKey))n.add("huawei-cloud-maas");if(R(t.basetenApiKey))n.add("baseten");if(R(t.vercelAiGatewayApiKey))n.add("vercel-ai-gateway");if(R(t.difyApiKey))n.add("dify");if(R(t.minimaxApiKey))n.add("minimax");if(R(t.hicapApiKey))n.add("hicap");if(R(t.aihubmixApiKey))n.add("aihubmix");if(R(t.nousResearchApiKey))n.add("nousResearch");if(R(t.awsAccessKey)||R(t.awsBedrockApiKey)||e.awsAuthentication!==void 0||e.awsUseProfile===!0||R(e.awsProfile))n.add("bedrock");if(R(e.vertexProjectId)||R(e.vertexRegion))n.add("vertex");if(R(t.clineApiKey))n.add("cline");let r=Db(R(t["cline:clineAccountId"]));if(r?.accessToken||r?.refreshToken||r?.accountId)n.add("cline");if(R(t.ocaApiKey))n.add("oca");if(R(t.sapAiCoreClientId)||R(t.sapAiCoreClientSecret)||R(e.sapAiCoreTokenUrl)||R(e.sapAiCoreBaseUrl)||R(e.sapAiResourceGroup)||e.sapAiCoreUseOrchestrationMode!==void 0)n.add("sapaicore");return n}function bD(e,t,n){if(e.repairs?.bedrockProfile)return!1;let r=e.providers.bedrock;if(!r||r.tokenSource!=="migration")return!1;if(t.awsAuthentication!==void 0)return!1;let o=R(t.awsProfile);if(!o)return!1;let s=r.settings.aws;if(s?.authentication!==void 0||s?.profile!==void 0||s?.accessKey||s?.secretKey||r.settings.apiKey)return!1;return e.providers.bedrock={...r,settings:{...r.settings,aws:{...s??{},authentication:"profile",profile:o}},updatedAt:n},e.repairs={...e.repairs,bedrockProfile:!0},!0}function Ub(e){let t=e.providerSettingsManager.read(),n=uD(e);if(!n)return{migrated:!1,providerCount:Object.keys(t.providers).length,lastUsedProvider:t.lastUsedProvider};let{globalState:r,secrets:o}=n,s=r.mode==="plan"?"plan":"act",i=s==="plan"?"act":"plan",a=R(s==="plan"?r.planModeApiProvider:r.actModeApiProvider),d=a?Ha(a):void 0,c=R(s==="plan"?r.actModeApiProvider:r.planModeApiProvider),l=c?Ha(c):void 0,u=SD(r,o),p=ts();p.providers={...t.providers},p.lastUsedProvider=t.lastUsedProvider,p.modes=t.modes,p.repairs=t.repairs;let m=new Date().toISOString(),g=0,f=Zu(oD(e.providerSettingsManager.getFilePath()),"models.json"),h=Qu(f),S=0;for(let v of u){let T=el(v);if(p.providers[T])continue;let w=v!==d&&v===l?i:s,C=hD(v,r,o,w);if(!C)continue;p.providers[T]={settings:C,updatedAt:m,tokenSource:"migration"},g+=1;let B=yD(T,C,w==="plan"?r.planModeOpenAiModelInfo:r.actModeOpenAiModelInfo);if(B&&!h.providers[T])h.providers[T]=B,S+=1}let y=bD(p,r,m);if(g===0&&S===0&&!y)return{migrated:!1,providerCount:Object.keys(t.providers).length,lastUsedProvider:t.lastUsedProvider};let b=R(s==="plan"?r.planModeApiProvider:r.actModeApiProvider),k=b?el(b):void 0;if(p.lastUsedProvider=t.lastUsedProvider??(k&&p.providers[k]?k:Object.keys(p.providers)[0]),e.providerSettingsManager.write(p),S>0)Ab(f,h);return{migrated:g>0||S>0||y,providerCount:Object.keys(p.providers).length,lastUsedProvider:p.lastUsedProvider}}function AD(){return new Date().toISOString()}var RD="cline",ED="cline-pass",Bb=/[\p{Cc}\p{Cf}]/gu;function Ct(e){if(typeof e!=="string")return e;let t=e.replace(Bb,"").trim();return t.length>0?t:void 0}function PD(e){let t={...e,apiKey:Ct(e.apiKey)};if(e.auth)t.auth={...e.auth,apiKey:Ct(e.auth.apiKey),accessToken:Ct(e.auth.accessToken),refreshToken:Ct(e.auth.refreshToken)};if(e.aws)t.aws={...e.aws,accessKey:Ct(e.aws.accessKey),secretKey:Ct(e.aws.secretKey),sessionToken:Ct(e.aws.sessionToken)};if(e.gcp)t.gcp={...e.gcp,projectId:Ct(e.gcp.projectId),region:Ct(e.gcp.region)};if(e.sap)t.sap={...e.sap,clientId:Ct(e.sap.clientId),clientSecret:Ct(e.sap.clientSecret)};if(e.headers)t.headers=Object.fromEntries(Object.entries(e.headers).map(([n,r])=>[n,r.replace(Bb,"").trim()]));return t}function _D(e){if(Hb(e)!=="providers.json")return;let t=nl(e);if(Hb(t)!=="settings")return;return nl(t)}class tt{filePath;dataDir;constructor(e={}){if(this.filePath=e.filePath??ID(),this.dataDir=e.dataDir??_D(this.filePath),this.dataDir||!e.filePath)Ub({providerSettingsManager:this,dataDir:this.dataDir});if(Lb(this),Ua(this.read()),tl(this.filePath))try{Fb(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!tl(this.filePath))return ts();try{let e=TD(this.filePath,"utf8"),t=JSON.parse(e),n=Xu.safeParse(t);if(n.success){Ua(n.data);let r=n.data.providers.cline?.settings?.auth;return ue(`providers.read providers=[${Object.keys(n.data.providers).join(",")}] lastUsed=${n.data.lastUsedProvider??"none"} clineAuthPresent=${!!r?.accessToken} clineAccessTokenHash=${Qe(r?.accessToken)} clineRefreshTokenHash=${Qe(r?.refreshToken)}`),n.data}}catch{}return ts()}write(e){let t=Xu.parse(e),n=nl(this.filePath);if(!tl(n))vD(n,{recursive:!0,mode:448});let r=`${this.filePath}.${process.pid}.tmp`;try{CD(r,`${JSON.stringify(t,null,2)}
267
267
  `,{encoding:"utf8",mode:384}),wD(r,this.filePath)}catch(o){throw kD(r,{force:!0}),o}try{Fb(this.filePath,384)}catch{}Ua(t)}saveProviderSettings(e,t={}){let n=PD(es.parse(e)),r=this.read(),o=n.provider,s=t.setLastUsed!==!1,i=r.providers[o],a=t.tokenSource??i?.tokenSource??"manual",d={...r,providers:{...r.providers,[o]:{settings:n,updatedAt:AD(),tokenSource:a}},lastUsedProvider:s?o:r.lastUsedProvider};this.write(d);let c=r.providers.cline?.settings?.auth,l=n.provider==="cline"?n.auth:d.providers.cline?.settings?.auth,u=!!c?.accessToken&&!l?.accessToken;return ue(`providers.save providerId=${o} tokenSource=${a} clineAuthWasPresent=${!!c?.accessToken} clineAuthIsPresent=${!!l?.accessToken} authDropped=${u}`),d}resolveProviderSettings(e,t){let n=e.providers[t]?.settings,o=_t(t)?.storageProviderId;if(!o||o===t)return n;let s=e.providers[o]?.settings;if(!s)return n;return es.parse({...s.auth?{auth:s.auth}:{},...s.apiKey?{apiKey:s.apiKey}:{},...s.baseUrl?{baseUrl:s.baseUrl}:{},...n??{},provider:t})}getProviderSettings(e){let t=this.read();return this.resolveProviderSettings(t,e)}getVoiceInputSettings(){return this.read().modes.voiceInput}setVoiceInputSettings(e){let t=this.read();if(e)t.modes.voiceInput=Vu.parse(e);else delete t.modes.voiceInput;return this.write(t),t}resolveLastUsedProviderId(e,t){let n=e.lastUsedProvider;if(n===ED&&t.isClinePassEnabled===!1)return RD;return n}getLastUsedProviderSettings(e={}){let t=this.read(),n=this.resolveLastUsedProviderId(t,e);if(!n)return;return this.resolveProviderSettings(t,n)}getProviderConfig(e,t){let n=this.getProviderSettings(e);if(!n)return;return zn(n,t)}getLastUsedProviderConfig(e={}){let t=this.getLastUsedProviderSettings(e);if(!t)return;return zn(t,e)}async refreshCatalog(){try{await Da({})}catch{}}}import{createHash as xD}from"node:crypto";import{resolve as MD}from"node:path";import{setTimeout as OD}from"node:timers/promises";import{loadSqliteDb as LD}from"@cline/shared/db";async function $b(e,t,n){let r=xD("sha256").update(t).digest("hex"),o=LD(`${MD(e)}.oauth-${r}.lock`),s=!1,i=Date.now()+60000;try{o.exec("PRAGMA busy_timeout = 0;");while(!s)try{o.exec("BEGIN EXCLUSIVE;"),s=!0}catch(a){let d=a instanceof Error?a.message:String(a),c=a?.code;if(!(c==="SQLITE_BUSY"||c==="SQLITE_LOCKED"||/SQLITE_BUSY|SQLITE_LOCKED|database is locked/.test(d)))throw a;if(Date.now()>=i)throw Error("Timed out waiting for another process to refresh OAuth credentials.");await OD(25)}return await n()}finally{try{if(s)o.exec("ROLLBACK;")}finally{o.close?.()}}}function rl(e,t){let n=e?.expiresAt,r=t?.expiresAt;return e?.accessToken===t?.accessToken&&e?.refreshToken===t?.refreshToken&&e?.accountId===t?.accountId&&n===r}class Hr extends Error{providerId;constructor(e){super(`OAuth credentials for provider "${e}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=e}}class os{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor(e){this.providerSettingsManager=e?.providerSettingsManager??new tt,this.telemetry=e?.telemetry}async resolveProviderApiKey(e){let t=_t(e.providerId);if(!t)return null;return this.resolveWithSingleFlight(t.providerId,t.storageProviderId,e.forceRefresh)}async resolveWithSingleFlight(e,t,n=!1){let r=this.refreshInFlight.get(t);if(r)return r;let o=this.providerSettingsManager.getProviderSettings(t);if(!o||!Cc(e,o))return null;let s=o.auth,i=$b(this.providerSettingsManager.getFilePath(),t,()=>this.resolveProviderApiKeyInternal(e,t,n&&rl(s,this.providerSettingsManager.getProviderSettings(t)?.auth))).finally(()=>{this.refreshInFlight.delete(t)});return this.refreshInFlight.set(t,i),i}async resolveProviderApiKeyInternal(e,t,n){let r=_t(e);if(!r)return null;let o=this.providerSettingsManager.getProviderSettings(t);if(!o)return ue(`oauth.resolve providerId=${e} storageProviderId=${t} outcome=no_settings`),null;let s=Cc(e,o);if(!s)return ue(`oauth.resolve providerId=${e} storageProviderId=${t} outcome=no_credentials`),null;ue(`oauth.resolve.start providerId=${e} storageProviderId=${t} forceRefresh=${n} accessTokenHash=${Qe(s.access)} refreshTokenHash=${Qe(s.refresh)}`);let i=await r.refresh({settings:o,credentials:s,forceRefresh:n,telemetry:this.telemetry}),a=this.providerSettingsManager.getProviderSettings(t);if(!rl(o.auth,a?.auth))return null;if(!i)throw ue(`oauth.resolve providerId=${e} outcome=refresh_returned_null`),new Hr(e);let d=Ic({manager:this.providerSettingsManager,providerId:e,settings:{...o,...a},credentials:i,setLastUsed:!1,save:!1}),c=!rl(o.auth,d.auth);if(c)ue(`oauth.resolve.refreshed providerId=${e} newAccessTokenHash=${Qe(i.access)} newRefreshTokenHash=${Qe(i.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(d,{setLastUsed:!1,tokenSource:"oauth"});else ue(`oauth.resolve providerId=${e} outcome=not_refreshed`);return{apiKey:r.getApiKey(d)??i.access,accountId:i.accountId,refreshed:c}}}import{existsSync as ND,mkdirSync as DD,readFileSync as UD,writeFileSync as FD}from"node:fs";import{dirname as HD}from"node:path";import{FEATURE_FLAGS as Wb,FeatureFlagDefaultValue as ol}from"@cline/shared";var BD=3600000,$D=604800000,jb=2;class sl{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};pendingPoll;constructor(e){this.provider=e.provider,this.telemetry=e.telemetry,this.logger=e.logger,this.cacheTtlMs=e.cacheTtlMs??BD,this.cacheFilePath=e.cacheFilePath,this.persistentCacheMaxAgeMs=e.persistentCacheMaxAgeMs??$D,this.context={...e.context??{}},this.hydrateFromPersistentCache()}setContext(e){let t=this.cacheInfo.userId!==(e.userId??null);if(this.context={...e},t)this.pendingPoll=void 0,this.cache.clear(),this.cacheInfo={updateTime:0,userId:e.userId??null}}hydrateCache(e){this.cacheInfo={updateTime:e.updateTime,userId:e.userId,flagsPayload:e.flagsPayload},this.rebuildCacheFromSnapshot(e.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll(e){let t=e??this.context.userId??null;if(this.pendingPoll?.userId===t)return this.pendingPoll.promise;let n={userId:t,promise:this.pollFlags(t)};this.pendingPoll=n;try{await n.promise}finally{if(this.pendingPoll===n)this.pendingPoll=void 0}}async pollFlags(e){let t=Date.now();if(t-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===e)return}let n=this.cacheInfo;this.cacheInfo={updateTime:t,userId:e||null};try{let r=await this.provider.getAllFlagsAndPayloads({flagKeys:Wb.length>0?Wb:void 0,context:{...this.context,userId:e}});if(this.cacheInfo.userId!==e)return;this.cacheInfo.flagsPayload=r,this.rebuildCacheFromSnapshot(r),this.writePersistentCache()}catch(r){if(this.cacheInfo.userId!==e)return;throw this.cacheInfo=n.updateTime?n:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:r}),r}}hydrateFromPersistentCache(){let e=this.readPersistentCache();if(!e)return;if(e.userId&&this.context.userId&&e.userId!==this.context.userId)return;this.hydrateCache(e)}isFeatureFlagPayload(e){if(e===null||typeof e==="string"||typeof e==="number"||typeof e==="boolean")return!0;if(Array.isArray(e))return e.every((t)=>this.isFeatureFlagPayload(t));if(typeof e==="object")return Object.values(e).every((t)=>this.isFeatureFlagPayload(t));return!1}readPayloadRecord(e){if(!e||typeof e!=="object"||Array.isArray(e))return;let t=Object.entries(e).filter(([,r])=>this.isFeatureFlagPayload(r));if(t.length===0)return;let n={};for(let[r,o]of t)n[r]=o;return n}readPersistentCache(){try{if(!this.cacheFilePath||!ND(this.cacheFilePath))return;let e=JSON.parse(UD(this.cacheFilePath,"utf8"));if(!e||typeof e!=="object")return;let t=e;if(t.version!==jb||typeof t.updatedAt!=="number"||!Number.isFinite(t.updatedAt)||Date.now()-t.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:t.updatedAt,userId:t.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(t.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(t.flagsPayload?.featureFlagPayloads)}}}catch(e){this.logger?.error?.("Error reading SDK feature flags cache",{error:e});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;DD(HD(this.cacheFilePath),{recursive:!0,mode:448});let e=this.getCacheSnapshot(),t={version:jb,updatedAt:e.updateTime,userId:e.userId,flagsPayload:e.flagsPayload};FD(this.cacheFilePath,`${JSON.stringify(t,null,2)}
268
- `,"utf8")}catch(e){this.logger?.error?.("Error writing SDK feature flags cache",{error:e})}}getReturnedFlagKeys(e){return[...new Set([...Object.keys(e?.featureFlags??{}),...Object.keys(e?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot(e){let t=new Map;for(let n of this.getReturnedFlagKeys(e)){let r=this.getFeatureFlag(n);t.set(n,r??!1)}this.cache=t}getFeatureFlag(e){try{let t=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[e],n=this.cacheInfo.flagsPayload?.featureFlags?.[e],r=t??n??ol[e]??void 0;if(!this.cache.has(e)||this.cache.get(e)!==r)this.telemetry?.capture({event:J.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:e,$feature_flag_response:n}});return r}catch(t){return this.logger?.error?.(`Error checking SDK feature flag ${e}`,{error:t}),ol[e]??!1}}getBooleanFlagEnabled(e){return this.cache.get(e)===!0}getFlagPayload(e){return this.cache.get(e)??ol[e]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test(e,t){if(process.env.IS_TEST==="true")this.cache.set(e,t)}async dispose(){await this.provider.dispose()}}var Br;function qb(){return new tt().getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}async function il(e){let t=qb(),n=process.env.TELEMETRY_SERVICE_API_KEY;if(!t||!n)return Br=void 0,!1;if(Br?.accountId!==t||Br.apiKey!==n)Br={accountId:t,apiKey:n,service:new sl({context:{distinctId:t,userId:t},cacheTtlMs:60000,provider:{enabled:!0,getSettings:()=>({enabled:!0}),dispose:async()=>{},async getAllFlagsAndPayloads(o){let{buildClinePostHogClient:s,PostHogFeatureFlagsProvider:i}=await import("@cline/core/services/feature-flags/posthog"),a=new i({client:s(n),config:{}});try{return await a.getAllFlagsAndPayloads(o)}finally{await a.dispose()}}}})};let r=Br;try{return r.pending??=r.service.poll().finally(()=>{r.pending=void 0}),await r.pending,Br===r&&qb()===t&&r.service.getCacheSnapshot().flagsPayload?.featureFlags?.[e]===!0}catch{return!1}}import*as Ke from"@cline/llms";import{isTranscriptionModel as a6,MODEL_TOOL_NAMES as d6,resolveProviderLocalCli as c6}from"@cline/shared";import{buildClineClientHeaders as NQ,GENERATED_CLINE_RECOMMENDED_MODELS as WD,getGeneratedProviderModels as jD,VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES as qD}from"@cline/llms";import{getClineEnvironmentConfig as UQ}from"@cline/shared";var BQ=VD(zD(WD)??{recommended:[],free:[],clinePass:[]},jD());function al(e){if(!e||typeof e!=="object")return null;let t=e;if(typeof t.id!=="string"||t.id.length===0)return null;return{id:t.id,name:typeof t.name==="string"&&t.name.length>0?t.name:t.id,description:typeof t.description==="string"?t.description:"",tags:Array.isArray(t.tags)?t.tags.filter((n)=>typeof n==="string"):[]}}function zD(e){if(!e||typeof e!=="object")return null;let t=e,n=Array.isArray(t.recommended)?t.recommended:[],r=Array.isArray(t.free)?t.free:[],o=Array.isArray(t.clinePass)?t.clinePass:[],s=n.map(al).filter((d)=>d!==null),i=r.map(al).filter((d)=>d!==null),a=o.map(al).filter((d)=>d!==null);if(s.length===0&&i.length===0&&a.length===0)return null;return{recommended:s,free:i,clinePass:a}}function dl(e){return e.replace(/\s*\(free\)\s*$/i,"").replace(/:free$/i,"").trim()}function KD(e){let t=[e];for(let n of qD)if(e.startsWith(n.canonicalPrefix))t.push(`${n.aliasPrefix}${e.slice(n.canonicalPrefix.length)}`);else if(e.startsWith(n.aliasPrefix))t.push(`${n.canonicalPrefix}${e.slice(n.aliasPrefix.length)}`);return t}function GD(e,t){for(let o of t)for(let s of KD(e.id)){let i=o?.[s]?.name?.trim();if(i)return dl(i)}let n=e.name?.trim();if(n&&n!==e.id)return dl(n);let r=e.id.split("/").at(-1)??e.id;return dl(r)}function VD(e,t){let n=(r,o)=>r.map((s)=>({...s,name:GD(s,o)}));return{recommended:n(e.recommended,[t?.openrouter]),free:n(e.free,[t?.cline,t?.openrouter]),clinePass:n(e.clinePass,[t?.["cline-pass"]])}}import*as XD from"@cline/llms";import*as zb from"@cline/llms";function Kb(e){let t=e?.auth?.accessToken?.trim()||e?.apiKey?.trim();return t&&t.length>0?t:void 0}var r0=120000,o0="/api/v1/connectors";function s0(e){let t=JD("sha256").update(e).digest("hex");return ZD(n0(),"settings","composio",`${t}.json`)}function ss(){return new tt().getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}function i0(e){try{let t=s0(e);if(!YD(t))return;let n=JSON.parse(QD(t,"utf8"));return typeof n==="object"&&n!==null?n:void 0}catch{return}}var Gb;async function a0(e){let t=new tt,n;try{Gb??=new os,n=(await Gb.resolveProviderApiKey({providerId:"cline"}))?.apiKey??void 0}catch(s){if(s instanceof Hr)return}if(n??=Kb(t.getProviderSettings("cline")),!n||ss()!==e)return;return{baseUrl:(t.getProviderSettings("cline")?.baseUrl?.trim()||t0().apiBaseUrl).replace(/\/+$/,""),token:n}}async function d0(e,t,n){if(ss()!==e)return{successful:!1,error:"The Cline account changed. Start a new session to use connector tools."};if(!await il(Vb.CLINE_COMPOSIO_BETA))return{successful:!1,error:"Composio connectors are not enabled for this account."};let r=await a0(e);if(!r)return{successful:!1,error:"Sign in to your Cline account to use connector tools (no account token available)."};let o=`${r.baseUrl}${o0}/tools/${encodeURIComponent(t.slug)}/execute`,s={arguments:n&&typeof n==="object"?n:{}};if(t.version)s.version=t.version;let i;try{i=await fetch(o,{method:"POST",headers:{authorization:`Bearer ${r.token}`,"content-type":"application/json"},body:JSON.stringify(s)})}catch(c){return{successful:!1,error:`Cline connectors request failed: ${c instanceof Error?c.message:String(c)}`}}let a=await i.text(),d;try{d=a?JSON.parse(a):void 0}catch{d=void 0}if(!i.ok){let c=d!==void 0?JSON.stringify(d).slice(0,600):a.slice(0,600);return{successful:!1,error:`Cline connectors proxy returned HTTP ${i.status} for ${t.slug}${c?`: ${c}`:""}`}}return d??{successful:!0}}async function Xb(e){let t=ss();if(!t)return;let n=i0(t);if(!n?.toolkits)return;if(!await il(Vb.CLINE_COMPOSIO_BETA))return;if(ss()!==t)return;let r=Object.entries(n.toolkits).filter(([,o])=>o?.connectedAccountId&&(o.tools?.length??0)>0);if(r.length===0)return;return{name:"composio-tools",manifest:{capabilities:["tools"]},setup(o){if(ss()!==t)return;let s=new Set;for(let[i,a]of r)for(let d of a?.tools??[]){if(!d?.slug)continue;let c=d.slug.toLowerCase().replace(/[^a-z0-9_]/g,"_");if(s.has(c))continue;s.add(c);try{o.registerTool(e0({name:c,resultPolicy:"cache-oversized",description:`${d.description||d.name||d.slug} (${i} account connected via Composio)`,inputSchema:d.input_parameters??{type:"object",properties:{}},timeoutMs:r0,retryable:!1,execute:(l)=>d0(t,d,l)}))}catch(l){s.delete(c),e?.logger?.log?.(`composio-tools: skipping ${d.slug}: ${l instanceof Error?l.message:String(l)}`)}}e?.logger?.log?.(`composio-tools: registered ${s.size} connector tool(s) for this session`)}}}import{existsSync as Ga,readFileSync as rU,statSync as oU}from"node:fs";import{basename as sU,dirname as za,join as Va,resolve as Ka}from"node:path";import{discoverPluginModulePaths as iU,resolveConfiguredPluginModulePaths as Sv,resolvePluginConfigSearchPaths as aU,SKILLS_CONFIG_DIRECTORY_NAME as dU}from"@cline/shared/storage";import{resolve as E0}from"node:path";import{normalizePluginManifest as P0}from"@cline/shared";import{existsSync as Oe,readFileSync as Wr}from"node:fs";import{builtinModules as c0,createRequire as pl}from"node:module";import{dirname as fn,extname as as,isAbsolute as u0,resolve as oe}from"node:path";import{fileURLToPath as Yb}from"node:url";import{PLUGIN_FILE_EXTENSIONS as l0}from"@cline/shared";var Qb=fn(Yb(import.meta.url)),p0=pl(import.meta.url),m0=oe(Qb,"..","..","..","..",".."),cl=h0(m0),g0=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],ml=new Set(c0.flatMap((e)=>[e,e.replace(/^node:/,"")])),is=new Set(l0),f0=["development","node","import","require","default"];function h0(e){let t={},n={"@cline/sdk":oe(e,"packages/sdk/src/index.ts"),"@cline/agents":oe(e,"packages/agents/src/index.ts"),"@cline/core":oe(e,"packages/core/src/index.ts"),"@cline/llms":oe(e,"packages/llms/src/index.ts"),"@cline/shared":oe(e,"packages/shared/src/index.ts"),"@cline/shared/storage":oe(e,"packages/shared/src/storage/index.ts"),"@cline/shared/db":oe(e,"packages/shared/src/db/index.ts")};for(let[r,o]of Object.entries(n))if(Oe(o))t[r]=o;for(let r of["agents","core","llms","shared"]){let o=oe(e,"packages",r),s=oe(o,"package.json");if(!Oe(s))continue;try{let i=JSON.parse(Wr(s,"utf8"));if(typeof i.name!=="string"||!i.exports)continue;if(typeof i.exports==="string"){let a=oe(o,i.exports);if(Oe(a))t[i.name]=a;continue}if(typeof i.exports!=="object")continue;for(let[a,d]of Object.entries(i.exports)){let c=y0(o,d);if(!c)continue;let l=a==="."?i.name:`${i.name}/${a.replace(/^\.\//,"")}`;t[l]=c}}catch{}}return t}function y0(e,t){let n=gl(t);if(!n)return null;let r=Zb(e,n);for(let o of r)if(Oe(o))return o;return null}function gl(e,t=new Set){if(typeof e==="string")return e;if(!e||typeof e!=="object")return null;if(t.has(e))return null;t.add(e);let n=e;for(let r of f0){let o=gl(n[r],t);if(o)return o}return null}function Zb(e,t){let n=t.replace(/^\.\//,""),r=[oe(e,t)];if(n.startsWith("dist/")){let o=n.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[oe(e,`${o}.ts`),oe(e,`${o}.tsx`),oe(e,`${o}.mts`),oe(e,`${o}.cts`),...r]}return r}function S0(e){return Object.fromEntries(Object.entries(e).sort(([t],[n])=>n.length-t.length))}function Ba(e){return!(e.startsWith(".")||e.startsWith("/")||e.startsWith("file:")||e.startsWith("data:")||e.startsWith("http:")||e.startsWith("https:"))}function $r(e){if(e.startsWith("@")){let[t,n]=e.split("/",3);return n?`${t}/${n}`:e}return e.split("/",1)[0]??e}function b0(e){let t=$r(e);if(e===t)return".";return`.${e.slice(t.length)}`}function ev(e){return $r(e).startsWith("@cline/")}function ul(e,t){let n=$r(t),r=fn(e);while(!0){let o=oe(r,"node_modules",n);if(Oe(o)||Oe(oe(o,"package.json")))return!0;let s=oe(r,"..");if(s===r)return!1;r=s}}function Jb(e){return ll(e)!==null}function ll(e){try{return p0.resolve(e)}catch{}return v0(e)}function v0(e){let t=$r(e),n=tv(t);if(!n)return null;let r=oe(n,"package.json");try{let o=JSON.parse(Wr(r,"utf8")),s=b0(e),i=s==="."&&typeof o.exports==="string"?o.exports:o.exports&&typeof o.exports==="object"&&Object.hasOwn(o.exports,s)?o.exports[s]:void 0,a=gl(i)??(s==="."&&typeof o.main==="string"?o.main:null);if(!a)return null;let d=oe(n,a),c=[d,...Zb(n,a).filter((l)=>l!==d)];for(let l of c)if(Oe(l))return l;return null}catch{return null}}function T0(){let e=[Qb],t=process.env.CLINE_WRAPPER_PATH?.trim();if(t)e.push(fn(fn(t)));let n=process.execPath?.trim();if(n)e.push(fn(n));return[...new Set(e.map((r)=>oe(r)))]}function w0(e,t){let n=e;while(!0){let r=oe(n,"package.json");if(Oe(r))try{if(JSON.parse(Wr(r,"utf8")).name===t)return n}catch{}let o=oe(n,"node_modules",t,"package.json");if(Oe(o))return fn(o);let s=oe(n,"..");if(s===n)return null;n=s}}function tv(e){for(let t of T0()){let n=w0(t,e);if(n)return n}return null}function k0(e){let n=fn(e);for(let r=0;r<4;r++){let o=oe(n,"package.json");if(Oe(o))try{let i=JSON.parse(Wr(o,"utf8"));return i!=null&&typeof i==="object"&&"cline"in i}catch{return!1}let s=oe(n,"..");if(s===n)return!1;n=s}return!1}function nv(e,t){let n=t.startsWith("file:")?Yb(t):u0(t)?t:oe(fn(e),t);if(Oe(n)&&is.has(as(n)))return n;for(let r of is){let o=`${n}${r}`;if(Oe(o))return o}for(let r of is){let o=oe(n,`index${r}`);if(Oe(o))return o}return null}function rv(e){let t=new Set,n=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let r of n)for(let o of e.matchAll(r)){let s=o[1];if(s)t.add(s)}return[...t]}function C0(e){return as(e)!==".ts"}function ov(e,t,n=new Set){if(n.has(e)||!Oe(e))return;if(n.add(e),!is.has(as(e)))return;let r=Wr(e,"utf8"),o=C0(e);for(let s of rv(r)){if(s.startsWith("node:")||ml.has(s))continue;if(Ba(s)){if(!o)continue;if(Object.hasOwn(cl,s)||Object.hasOwn(cl,$r(s))||ul(e,s)||ev(s)&&Jb(s)||t&&Jb(s))continue;throw Error(`Cannot find module '${$r(s)}'`)}let i=nv(e,s);if(i)ov(i,t,n)}}function sv(e,t=new Set,n=new Set){if(t.has(e)||!Oe(e))return n;if(t.add(e),!is.has(as(e)))return n;let r=Wr(e,"utf8");for(let o of rv(r)){if(n.add(o),Ba(o))continue;let s=nv(e,o);if(s)sv(s,t,n)}return n}function I0(e,t){let n=pl(e),r={},o=sv(e),s=new Set(g0);for(let[i,a]of Object.entries(cl)){try{n.resolve(i);continue}catch{}r[i]=a}for(let i of o)if(Ba(i)&&(ev(i)||t))s.add(i);for(let i of s){if(Object.hasOwn(r,i)||ul(e,i))continue;let a=ll(i);if(a)r[i]=a}if(!t)return r;for(let i of o){if(!Ba(i)||Object.hasOwn(r,i)||ul(e,i)||i.startsWith("node:")||ml.has(i))continue;let a=ll(i);if(a)r[i]=a}return r}function A0(e){let t=as(e);return t===".ts"||t===".tsx"||t===".mts"||t===".cts"}var Kn;function R0(){if(Kn!==void 0)return Kn;let e=tv("jiti");if(!e)return Kn=null,null;let t=oe(e,"dist","babel.cjs");if(!Oe(t))return Kn=null,null;try{let r=pl(t)(t);Kn=typeof r==="function"?r:null}catch{Kn=null}return Kn}async function iv(e,t={}){let n=!k0(e);ov(e,n);let r=I0(e,n),o=S0(r),s=await import("jiti"),i=typeof s==="function"?s:typeof s.default==="function"?s.default:void 0;if(!i)throw Error("Unable to load jiti");let a=Object.entries(o).filter(([,u])=>A0(u)).map(([u])=>u),d=R0(),c=d?(u)=>d({...u,interopDefault:!0}):void 0;return await i(e,{alias:o,cache:t.useCache,requireCache:t.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...ml],transformModules:a,tryNative:!1,...c?{transform:c}:{}}).import(e,{})}function av(e,t){if(!e)return!0;if(e.providerIds?.length){if(!t?.providerId||!e.providerIds.includes(t.providerId))return!1}if(e.modelIds?.length){if(!t?.modelId||!e.modelIds.includes(t.modelId))return!1}return!0}function dv(e){return typeof e==="object"&&e!==null}function fl(e){return Array.isArray(e)&&e.every((t)=>typeof t==="string")}function _0(e,t){if(!dv(e.manifest))throw Error(`Invalid plugin module at ${t}: missing required "manifest"`);if(!fl(e.manifest.capabilities))throw Error(`Invalid plugin module at ${t}: manifest.capabilities must be a string array`);if(e.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${t}: manifest.capabilities cannot be empty`);if(Object.hasOwn(e.manifest,"providerIds")&&!fl(e.manifest.providerIds))throw Error(`Invalid plugin module at ${t}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn(e.manifest,"modelIds")&&!fl(e.manifest.modelIds))throw Error(`Invalid plugin module at ${t}: manifest.modelIds must be a string array when provided`)}function x0(e,t){if(!dv(e))throw Error(`Invalid plugin module at ${t}: expected object export`);if(typeof e.name!=="string"||e.name.length===0)throw Error(`Invalid plugin module at ${t}: expected non-empty "name"`);if(!Object.hasOwn(e,"manifest"))throw Error(`Invalid plugin module at ${t}: missing required "manifest"`);_0(e,t)}async function M0(e,t={}){let n=E0(t.cwd??process.cwd(),e),r=await iv(n,{useCache:t.useCache}),o=t.exportName??"plugin",s=r.default??r[o];x0(s,n);let i=s,a=i.setup,d=a?(c,l)=>{let u={...t.session,...l.session},p={...l,session:Object.keys(u).length>0?u:void 0,client:t.client??l.client,user:t.user??l.user,workspaceInfo:t.workspaceInfo??l.workspaceInfo,automation:t.automation??l.automation,logger:t.logger??l.logger,telemetry:t.telemetry??l.telemetry};return a(c,p)}:void 0;return{...i,manifest:P0(i.manifest),setup:d}}async function cv(e,t={}){let n=[],r=[],o=new Map,s=0;for(let a of e)try{let d=await M0(a,t);if(!av(d.manifest,t))continue;let c=o.get(d.name);if(c)r.push({type:"duplicate_plugin_override",pluginName:d.name,pluginPath:a,overriddenPluginPath:c.pluginPath,message:`Plugin "${d.name}" from ${a} overrides ${c.pluginPath}`});o.set(d.name,{plugin:d,pluginPath:a,order:s++})}catch(d){let c=d instanceof Error?d.message:String(d);n.push({pluginPath:a,phase:"load",message:c,stack:d instanceof Error?d.stack:void 0})}let i=[...o.values()].sort((a,d)=>a.order-d.order);return{plugins:i.map((a)=>a.plugin),pluginPaths:i.map((a)=>a.pluginPath),failures:n,warnings:r}}import{existsSync as Tl}from"node:fs";import{createRequire as fv}from"node:module";import{dirname as ja,join as jr}from"node:path";import{fileURLToPath as B0}from"node:url";import{spawn as O0}from"node:child_process";import{basename as L0}from"node:path";import{augmentNodeCommandForDebug as N0,withResolvedClineBuildEnv as D0}from"@cline/shared";var ds=2147483647;function uv(e){return typeof e==="number"&&Number.isInteger(e)&&e>0&&e<=2147483647?e:void 0}var U0=300;function hl(e){if(e instanceof Error)return e;return Error(String(e))}function yl(e){return e.exitCode===null&&e.signalCode===null}function $a(e){return yl(e)&&e.connected}var F0="CLINE_JS_RUNTIME_PATH";function lv(e){let t=e?.trim();if(!t)return!1;let n=L0(t).toLowerCase();return n==="node"||n==="node.exe"||n==="bun"||n==="bun.exe"}function pv(e={}){let t=e.env??process.env,n=e.runtimeExecutable?.trim()||t[F0]?.trim();if(n)return n;let r=e.execPath?.trim()||process.execPath;if(lv(r))return r;for(let o of[t.BUN_EXEC_PATH,t.npm_node_execpath,t.NODE]){let s=o?.trim();if(s&&lv(s))return s}return"node"}function H0(e,t={}){let n=pv({env:t.env,execPath:t.execPath,runtimeExecutable:t.runtimeExecutable});return N0([n,...e],{env:t.env,execArgv:t.execArgv,debugRole:t.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class Sl{options;idleTimeoutMs;process=null;requestCounter=0;pending=new Map;idleTimer;shutdowns=new Map;constructor(e){if(this.options=e,this.idleTimeoutMs=uv(e.idleTimeoutMs),e.idleTimeoutMs!==void 0&&this.idleTimeoutMs===void 0)throw RangeError(`idleTimeoutMs must be an integer between 1 and ${ds}`)}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest(e){let t=this.pending.get(e);if(!t)return;if(this.pending.delete(e),t.timeout)clearTimeout(t.timeout);return this.armIdleTimer(t.child),t}clearIdleTimer(){if(!this.idleTimer)return;clearTimeout(this.idleTimer),this.idleTimer=void 0}hasPendingRequests(e){for(let t of this.pending.values())if(t.child===e)return!0;return!1}armIdleTimer(e){if(this.process!==e)return;if(this.clearIdleTimer(),this.idleTimeoutMs===void 0||!$a(e)||this.hasPendingRequests(e))return;let t=setTimeout(()=>{if(this.idleTimer===t)this.idleTimer=void 0;if(this.process!==e||!$a(e)||this.hasPendingRequests(e))return;this.shutdownProcess(e).catch(()=>{})},this.idleTimeoutMs);t.unref(),this.idleTimer=t}start(){if(this.process&&$a(this.process))return;let e=this.process;if(this.process=null,this.clearIdleTimer(),e&&yl(e))this.shutdownProcess(e).catch(()=>{});let t=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],n=H0(t,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),r=O0(n[0]??pv(this.options),n.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:D0(process.env),windowsHide:!0});this.process=r;let o="",s=(i)=>{let a=o+i;o=a.length>4000?a.slice(-4000):a};r.stderr?.setEncoding("utf8"),r.stderr?.on("data",(i)=>{s(i)}),r.on("message",(i)=>{this.onMessage(r,i)}),r.on("error",(i)=>{this.failPendingForProcess(r,Error(`${this.processLabel} process error: ${hl(i).message}`))}),r.on("exit",(i,a)=>{if(this.process===r)this.process=null,this.clearIdleTimer();let d=o.trim();this.failPendingForProcess(r,Error(`${this.options.name??"sandbox"} process exited (code=${String(i)}, signal=${String(a)})${d?`: ${d}`:""}`))}),this.armIdleTimer(r)}async call(e,t,n={}){this.start();let r=this.process;if(!r||!$a(r))throw Error(`${this.processLabel} process is not available`);this.clearIdleTimer();let o=`req_${++this.requestCounter}`,s={type:"call",id:o,method:e,args:t};return await new Promise((i,a)=>{let d={child:r,resolve:(c)=>i(c),reject:a};if((n.timeoutMs??0)>0)d.timeout=setTimeout(()=>{let c=this.clearPendingRequest(o);if(!c)return;this.shutdownProcess(c.child).catch(()=>{}),c.reject(Error(`${this.processLabel} call timed out after ${n.timeoutMs}ms: ${e}`))},n.timeoutMs);this.pending.set(o,d);try{r.send(s,(c)=>{if(!c)return;let l=this.clearPendingRequest(o);if(!l)return;l.reject(Error(`${this.processLabel} failed to send call "${e}": ${hl(c).message}`))})}catch(c){this.clearPendingRequest(o),a(hl(c))}})}async shutdown(){this.clearIdleTimer();let e=this.process,t=[...this.shutdowns.values()];if(e)t.push(this.shutdownProcess(e));if(t.length===0){this.failPending(Error(`${this.processLabel} shutdown`));return}await Promise.all(t)}shutdownProcess(e){let t=this.shutdowns.get(e);if(t)return t;if(this.process===e)this.process=null,this.clearIdleTimer();let n=this.terminateProcess(e).finally(()=>{if(this.shutdowns.get(e)===n)this.shutdowns.delete(e)});return this.shutdowns.set(e,n),n}async terminateProcess(e){if(!yl(e)){this.failPendingForProcess(e,Error(`${this.processLabel} shutdown`));return}await new Promise((t)=>{let n=setTimeout(()=>{try{e.kill("SIGKILL")}catch{}t()},U0);e.once("exit",()=>{clearTimeout(n),t()});try{e.kill("SIGTERM")}catch{clearTimeout(n),t()}}),this.failPendingForProcess(e,Error(`${this.processLabel} shutdown`))}onMessage(e,t){if(!t)return;if(t.type==="event"){if(this.process===e&&typeof t.name==="string"&&t.name.length>0)this.options.onEvent?.({name:t.name,payload:t.payload});return}if(t.type!=="response"||!t.id)return;let n=this.pending.get(t.id);if(!n||n.child!==e)return;let r=this.clearPendingRequest(t.id);if(!r)return;if(t.ok){r.resolve(t.result);return}r.reject(Error(t.error?.message||`${this.processLabel} call failed`))}failPendingForProcess(e,t){for(let[n,r]of this.pending.entries()){if(r.child!==e)continue;if(this.pending.delete(n),r.timeout)clearTimeout(r.timeout);r.reject(t)}}failPending(e){for(let[t,n]of this.pending.entries()){if(this.pending.delete(t),n.timeout)clearTimeout(n.timeout);n.reject(e)}}}var $0="CLINE_PLUGIN_IDLE_TIMEOUT_MS",W0=1800000;function j0(e){return{...e,contributions:{tools:e.contributions?.tools??[],commands:e.contributions?.commands??[],rules:e.contributions?.rules??[],messageBuilders:e.contributions?.messageBuilders??[],providers:e.contributions?.providers??[],automationEventTypes:e.contributions?.automationEventTypes??[],mcpServers:e.contributions?.mcpServers??[],shortcuts:e.contributions?.shortcuts??[],flags:e.contributions?.flags??[]}}}function cs(e){return(e instanceof Error?e.message:String(e)).includes("Unknown sandbox plugin id:")}function q0(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function z0(){let e=process.env.CLINE_WRAPPER_PATH?.trim();if(!e)return;try{let n=fv(e).resolve(`${q0()}/package.json`),r=jr(ja(n),"extensions","plugin-sandbox-bootstrap.js");return Tl(r)?r:void 0}catch{return}}function K0(){let e=process.execPath?.trim();if(!e)return;let t=jr(ja(ja(e)),"extensions","plugin-sandbox-bootstrap.js");return Tl(t)?t:void 0}function G0(e){let t=e.exists??Tl;for(let n of e.siblingCandidates)if(t(n))return{file:n};if(t(e.sourceBootstrapPath))return{sourcePath:e.sourceBootstrapPath};for(let n of e.installedCandidates)if(n&&t(n))return{file:n};return{sourcePath:e.sourceBootstrapPath}}function V0(){let e=ja(B0(import.meta.url)),t=fv(import.meta.url),n=G0({siblingCandidates:[jr(e,"plugin-sandbox-bootstrap.js"),jr(e,"extensions","plugin-sandbox-bootstrap.js"),jr(e,"agents","plugin-sandbox-bootstrap.js")],sourceBootstrapPath:jr(e,"plugin-sandbox-bootstrap.ts"),installedCandidates:[z0(),K0()]});if("file"in n)return n;let r=n.sourcePath,o="jiti";try{o=t.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(o)});`,`const jiti = createJiti(${JSON.stringify(r)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(r)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
268
+ `,"utf8")}catch(e){this.logger?.error?.("Error writing SDK feature flags cache",{error:e})}}getReturnedFlagKeys(e){return[...new Set([...Object.keys(e?.featureFlags??{}),...Object.keys(e?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot(e){let t=new Map;for(let n of this.getReturnedFlagKeys(e)){let r=this.getFeatureFlag(n);t.set(n,r??!1)}this.cache=t}getFeatureFlag(e){try{let t=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[e],n=this.cacheInfo.flagsPayload?.featureFlags?.[e],r=t??n??ol[e]??void 0;if(!this.cache.has(e)||this.cache.get(e)!==r)this.telemetry?.capture({event:J.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:e,$feature_flag_response:n}});return r}catch(t){return this.logger?.error?.(`Error checking SDK feature flag ${e}`,{error:t}),ol[e]??!1}}getBooleanFlagEnabled(e){return this.cache.get(e)===!0}getFlagPayload(e){return this.cache.get(e)??ol[e]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test(e,t){if(process.env.IS_TEST==="true")this.cache.set(e,t)}async dispose(){await this.provider.dispose()}}var Br;function qb(){return new tt().getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}async function il(e){let t=qb(),n=process.env.TELEMETRY_SERVICE_API_KEY;if(!t||!n)return Br=void 0,!1;if(Br?.accountId!==t||Br.apiKey!==n)Br={accountId:t,apiKey:n,service:new sl({context:{distinctId:t,userId:t},cacheTtlMs:60000,provider:{enabled:!0,getSettings:()=>({enabled:!0}),dispose:async()=>{},async getAllFlagsAndPayloads(o){let{buildClinePostHogClient:s,PostHogFeatureFlagsProvider:i}=await import("@cline/core/services/feature-flags/posthog"),a=new i({client:s(n),config:{}});try{return await a.getAllFlagsAndPayloads(o)}finally{await a.dispose()}}}})};let r=Br;try{return r.pending??=r.service.poll().finally(()=>{r.pending=void 0}),await r.pending,Br===r&&qb()===t&&r.service.getCacheSnapshot().flagsPayload?.featureFlags?.[e]===!0}catch{return!1}}import*as Ke from"@cline/llms";import{isTranscriptionModel as a6,MODEL_TOOL_NAMES as d6,resolveProviderLocalCli as c6}from"@cline/shared";import{buildClineClientHeaders as N8,GENERATED_CLINE_RECOMMENDED_MODELS as WD,getGeneratedProviderModels as jD,VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES as qD}from"@cline/llms";import{getClineEnvironmentConfig as U8}from"@cline/shared";var B8=VD(zD(WD)??{recommended:[],free:[],clinePass:[]},jD());function al(e){if(!e||typeof e!=="object")return null;let t=e;if(typeof t.id!=="string"||t.id.length===0)return null;return{id:t.id,name:typeof t.name==="string"&&t.name.length>0?t.name:t.id,description:typeof t.description==="string"?t.description:"",tags:Array.isArray(t.tags)?t.tags.filter((n)=>typeof n==="string"):[]}}function zD(e){if(!e||typeof e!=="object")return null;let t=e,n=Array.isArray(t.recommended)?t.recommended:[],r=Array.isArray(t.free)?t.free:[],o=Array.isArray(t.clinePass)?t.clinePass:[],s=n.map(al).filter((d)=>d!==null),i=r.map(al).filter((d)=>d!==null),a=o.map(al).filter((d)=>d!==null);if(s.length===0&&i.length===0&&a.length===0)return null;return{recommended:s,free:i,clinePass:a}}function dl(e){return e.replace(/\s*\(free\)\s*$/i,"").replace(/:free$/i,"").trim()}function KD(e){let t=[e];for(let n of qD)if(e.startsWith(n.canonicalPrefix))t.push(`${n.aliasPrefix}${e.slice(n.canonicalPrefix.length)}`);else if(e.startsWith(n.aliasPrefix))t.push(`${n.canonicalPrefix}${e.slice(n.aliasPrefix.length)}`);return t}function GD(e,t){for(let o of t)for(let s of KD(e.id)){let i=o?.[s]?.name?.trim();if(i)return dl(i)}let n=e.name?.trim();if(n&&n!==e.id)return dl(n);let r=e.id.split("/").at(-1)??e.id;return dl(r)}function VD(e,t){let n=(r,o)=>r.map((s)=>({...s,name:GD(s,o)}));return{recommended:n(e.recommended,[t?.openrouter]),free:n(e.free,[t?.cline,t?.openrouter]),clinePass:n(e.clinePass,[t?.["cline-pass"]])}}import*as XD from"@cline/llms";import*as zb from"@cline/llms";function Kb(e){let t=e?.auth?.accessToken?.trim()||e?.apiKey?.trim();return t&&t.length>0?t:void 0}var r0=120000,o0="/api/v1/connectors";function s0(e){let t=JD("sha256").update(e).digest("hex");return ZD(n0(),"settings","composio",`${t}.json`)}function ss(){return new tt().getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}function i0(e){try{let t=s0(e);if(!YD(t))return;let n=JSON.parse(QD(t,"utf8"));return typeof n==="object"&&n!==null?n:void 0}catch{return}}var Gb;async function a0(e){let t=new tt,n;try{Gb??=new os,n=(await Gb.resolveProviderApiKey({providerId:"cline"}))?.apiKey??void 0}catch(s){if(s instanceof Hr)return}if(n??=Kb(t.getProviderSettings("cline")),!n||ss()!==e)return;return{baseUrl:(t.getProviderSettings("cline")?.baseUrl?.trim()||t0().apiBaseUrl).replace(/\/+$/,""),token:n}}async function d0(e,t,n){if(ss()!==e)return{successful:!1,error:"The Cline account changed. Start a new session to use connector tools."};if(!await il(Vb.CLINE_COMPOSIO_BETA))return{successful:!1,error:"Composio connectors are not enabled for this account."};let r=await a0(e);if(!r)return{successful:!1,error:"Sign in to your Cline account to use connector tools (no account token available)."};let o=`${r.baseUrl}${o0}/tools/${encodeURIComponent(t.slug)}/execute`,s={arguments:n&&typeof n==="object"?n:{}};if(t.version)s.version=t.version;let i;try{i=await fetch(o,{method:"POST",headers:{authorization:`Bearer ${r.token}`,"content-type":"application/json"},body:JSON.stringify(s)})}catch(c){return{successful:!1,error:`Cline connectors request failed: ${c instanceof Error?c.message:String(c)}`}}let a=await i.text(),d;try{d=a?JSON.parse(a):void 0}catch{d=void 0}if(!i.ok){let c=d!==void 0?JSON.stringify(d).slice(0,600):a.slice(0,600);return{successful:!1,error:`Cline connectors proxy returned HTTP ${i.status} for ${t.slug}${c?`: ${c}`:""}`}}return d??{successful:!0}}async function Xb(e){let t=ss();if(!t)return;let n=i0(t);if(!n?.toolkits)return;if(!await il(Vb.CLINE_COMPOSIO_BETA))return;if(ss()!==t)return;let r=Object.entries(n.toolkits).filter(([,o])=>o?.connectedAccountId&&(o.tools?.length??0)>0);if(r.length===0)return;return{name:"composio-tools",manifest:{capabilities:["tools"]},setup(o){if(ss()!==t)return;let s=new Set;for(let[i,a]of r)for(let d of a?.tools??[]){if(!d?.slug)continue;let c=d.slug.toLowerCase().replace(/[^a-z0-9_]/g,"_");if(s.has(c))continue;s.add(c);try{o.registerTool(e0({name:c,resultPolicy:"cache-oversized",description:`${d.description||d.name||d.slug} (${i} account connected via Composio)`,inputSchema:d.input_parameters??{type:"object",properties:{}},timeoutMs:r0,retryable:!1,execute:(l)=>d0(t,d,l)}))}catch(l){s.delete(c),e?.logger?.log?.(`composio-tools: skipping ${d.slug}: ${l instanceof Error?l.message:String(l)}`)}}e?.logger?.log?.(`composio-tools: registered ${s.size} connector tool(s) for this session`)}}}import{existsSync as Ga,readFileSync as rU,statSync as oU}from"node:fs";import{basename as sU,dirname as za,join as Va,resolve as Ka}from"node:path";import{discoverPluginModulePaths as iU,resolveConfiguredPluginModulePaths as Sv,resolvePluginConfigSearchPaths as aU,SKILLS_CONFIG_DIRECTORY_NAME as dU}from"@cline/shared/storage";import{resolve as E0}from"node:path";import{normalizePluginManifest as P0}from"@cline/shared";import{existsSync as Oe,readFileSync as Wr}from"node:fs";import{builtinModules as c0,createRequire as pl}from"node:module";import{dirname as fn,extname as as,isAbsolute as u0,resolve as oe}from"node:path";import{fileURLToPath as Yb}from"node:url";import{PLUGIN_FILE_EXTENSIONS as l0}from"@cline/shared";var Qb=fn(Yb(import.meta.url)),p0=pl(import.meta.url),m0=oe(Qb,"..","..","..","..",".."),cl=h0(m0),g0=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],ml=new Set(c0.flatMap((e)=>[e,e.replace(/^node:/,"")])),is=new Set(l0),f0=["development","node","import","require","default"];function h0(e){let t={},n={"@cline/sdk":oe(e,"packages/sdk/src/index.ts"),"@cline/agents":oe(e,"packages/agents/src/index.ts"),"@cline/core":oe(e,"packages/core/src/index.ts"),"@cline/llms":oe(e,"packages/llms/src/index.ts"),"@cline/shared":oe(e,"packages/shared/src/index.ts"),"@cline/shared/storage":oe(e,"packages/shared/src/storage/index.ts"),"@cline/shared/db":oe(e,"packages/shared/src/db/index.ts")};for(let[r,o]of Object.entries(n))if(Oe(o))t[r]=o;for(let r of["agents","core","llms","shared"]){let o=oe(e,"packages",r),s=oe(o,"package.json");if(!Oe(s))continue;try{let i=JSON.parse(Wr(s,"utf8"));if(typeof i.name!=="string"||!i.exports)continue;if(typeof i.exports==="string"){let a=oe(o,i.exports);if(Oe(a))t[i.name]=a;continue}if(typeof i.exports!=="object")continue;for(let[a,d]of Object.entries(i.exports)){let c=y0(o,d);if(!c)continue;let l=a==="."?i.name:`${i.name}/${a.replace(/^\.\//,"")}`;t[l]=c}}catch{}}return t}function y0(e,t){let n=gl(t);if(!n)return null;let r=Zb(e,n);for(let o of r)if(Oe(o))return o;return null}function gl(e,t=new Set){if(typeof e==="string")return e;if(!e||typeof e!=="object")return null;if(t.has(e))return null;t.add(e);let n=e;for(let r of f0){let o=gl(n[r],t);if(o)return o}return null}function Zb(e,t){let n=t.replace(/^\.\//,""),r=[oe(e,t)];if(n.startsWith("dist/")){let o=n.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[oe(e,`${o}.ts`),oe(e,`${o}.tsx`),oe(e,`${o}.mts`),oe(e,`${o}.cts`),...r]}return r}function S0(e){return Object.fromEntries(Object.entries(e).sort(([t],[n])=>n.length-t.length))}function Ba(e){return!(e.startsWith(".")||e.startsWith("/")||e.startsWith("file:")||e.startsWith("data:")||e.startsWith("http:")||e.startsWith("https:"))}function $r(e){if(e.startsWith("@")){let[t,n]=e.split("/",3);return n?`${t}/${n}`:e}return e.split("/",1)[0]??e}function b0(e){let t=$r(e);if(e===t)return".";return`.${e.slice(t.length)}`}function ev(e){return $r(e).startsWith("@cline/")}function ul(e,t){let n=$r(t),r=fn(e);while(!0){let o=oe(r,"node_modules",n);if(Oe(o)||Oe(oe(o,"package.json")))return!0;let s=oe(r,"..");if(s===r)return!1;r=s}}function Jb(e){return ll(e)!==null}function ll(e){try{return p0.resolve(e)}catch{}return v0(e)}function v0(e){let t=$r(e),n=tv(t);if(!n)return null;let r=oe(n,"package.json");try{let o=JSON.parse(Wr(r,"utf8")),s=b0(e),i=s==="."&&typeof o.exports==="string"?o.exports:o.exports&&typeof o.exports==="object"&&Object.hasOwn(o.exports,s)?o.exports[s]:void 0,a=gl(i)??(s==="."&&typeof o.main==="string"?o.main:null);if(!a)return null;let d=oe(n,a),c=[d,...Zb(n,a).filter((l)=>l!==d)];for(let l of c)if(Oe(l))return l;return null}catch{return null}}function T0(){let e=[Qb],t=process.env.CLINE_WRAPPER_PATH?.trim();if(t)e.push(fn(fn(t)));let n=process.execPath?.trim();if(n)e.push(fn(n));return[...new Set(e.map((r)=>oe(r)))]}function w0(e,t){let n=e;while(!0){let r=oe(n,"package.json");if(Oe(r))try{if(JSON.parse(Wr(r,"utf8")).name===t)return n}catch{}let o=oe(n,"node_modules",t,"package.json");if(Oe(o))return fn(o);let s=oe(n,"..");if(s===n)return null;n=s}}function tv(e){for(let t of T0()){let n=w0(t,e);if(n)return n}return null}function k0(e){let n=fn(e);for(let r=0;r<4;r++){let o=oe(n,"package.json");if(Oe(o))try{let i=JSON.parse(Wr(o,"utf8"));return i!=null&&typeof i==="object"&&"cline"in i}catch{return!1}let s=oe(n,"..");if(s===n)return!1;n=s}return!1}function nv(e,t){let n=t.startsWith("file:")?Yb(t):u0(t)?t:oe(fn(e),t);if(Oe(n)&&is.has(as(n)))return n;for(let r of is){let o=`${n}${r}`;if(Oe(o))return o}for(let r of is){let o=oe(n,`index${r}`);if(Oe(o))return o}return null}function rv(e){let t=new Set,n=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let r of n)for(let o of e.matchAll(r)){let s=o[1];if(s)t.add(s)}return[...t]}function C0(e){return as(e)!==".ts"}function ov(e,t,n=new Set){if(n.has(e)||!Oe(e))return;if(n.add(e),!is.has(as(e)))return;let r=Wr(e,"utf8"),o=C0(e);for(let s of rv(r)){if(s.startsWith("node:")||ml.has(s))continue;if(Ba(s)){if(!o)continue;if(Object.hasOwn(cl,s)||Object.hasOwn(cl,$r(s))||ul(e,s)||ev(s)&&Jb(s)||t&&Jb(s))continue;throw Error(`Cannot find module '${$r(s)}'`)}let i=nv(e,s);if(i)ov(i,t,n)}}function sv(e,t=new Set,n=new Set){if(t.has(e)||!Oe(e))return n;if(t.add(e),!is.has(as(e)))return n;let r=Wr(e,"utf8");for(let o of rv(r)){if(n.add(o),Ba(o))continue;let s=nv(e,o);if(s)sv(s,t,n)}return n}function I0(e,t){let n=pl(e),r={},o=sv(e),s=new Set(g0);for(let[i,a]of Object.entries(cl)){try{n.resolve(i);continue}catch{}r[i]=a}for(let i of o)if(Ba(i)&&(ev(i)||t))s.add(i);for(let i of s){if(Object.hasOwn(r,i)||ul(e,i))continue;let a=ll(i);if(a)r[i]=a}if(!t)return r;for(let i of o){if(!Ba(i)||Object.hasOwn(r,i)||ul(e,i)||i.startsWith("node:")||ml.has(i))continue;let a=ll(i);if(a)r[i]=a}return r}function A0(e){let t=as(e);return t===".ts"||t===".tsx"||t===".mts"||t===".cts"}var Kn;function R0(){if(Kn!==void 0)return Kn;let e=tv("jiti");if(!e)return Kn=null,null;let t=oe(e,"dist","babel.cjs");if(!Oe(t))return Kn=null,null;try{let r=pl(t)(t);Kn=typeof r==="function"?r:null}catch{Kn=null}return Kn}async function iv(e,t={}){let n=!k0(e);ov(e,n);let r=I0(e,n),o=S0(r),s=await import("jiti"),i=typeof s==="function"?s:typeof s.default==="function"?s.default:void 0;if(!i)throw Error("Unable to load jiti");let a=Object.entries(o).filter(([,u])=>A0(u)).map(([u])=>u),d=R0(),c=d?(u)=>d({...u,interopDefault:!0}):void 0;return await i(e,{alias:o,cache:t.useCache,requireCache:t.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...ml],transformModules:a,tryNative:!1,...c?{transform:c}:{}}).import(e,{})}function av(e,t){if(!e)return!0;if(e.providerIds?.length){if(!t?.providerId||!e.providerIds.includes(t.providerId))return!1}if(e.modelIds?.length){if(!t?.modelId||!e.modelIds.includes(t.modelId))return!1}return!0}function dv(e){return typeof e==="object"&&e!==null}function fl(e){return Array.isArray(e)&&e.every((t)=>typeof t==="string")}function _0(e,t){if(!dv(e.manifest))throw Error(`Invalid plugin module at ${t}: missing required "manifest"`);if(!fl(e.manifest.capabilities))throw Error(`Invalid plugin module at ${t}: manifest.capabilities must be a string array`);if(e.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${t}: manifest.capabilities cannot be empty`);if(Object.hasOwn(e.manifest,"providerIds")&&!fl(e.manifest.providerIds))throw Error(`Invalid plugin module at ${t}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn(e.manifest,"modelIds")&&!fl(e.manifest.modelIds))throw Error(`Invalid plugin module at ${t}: manifest.modelIds must be a string array when provided`)}function x0(e,t){if(!dv(e))throw Error(`Invalid plugin module at ${t}: expected object export`);if(typeof e.name!=="string"||e.name.length===0)throw Error(`Invalid plugin module at ${t}: expected non-empty "name"`);if(!Object.hasOwn(e,"manifest"))throw Error(`Invalid plugin module at ${t}: missing required "manifest"`);_0(e,t)}async function M0(e,t={}){let n=E0(t.cwd??process.cwd(),e),r=await iv(n,{useCache:t.useCache}),o=t.exportName??"plugin",s=r.default??r[o];x0(s,n);let i=s,a=i.setup,d=a?(c,l)=>{let u={...t.session,...l.session},p={...l,session:Object.keys(u).length>0?u:void 0,client:t.client??l.client,user:t.user??l.user,workspaceInfo:t.workspaceInfo??l.workspaceInfo,automation:t.automation??l.automation,logger:t.logger??l.logger,telemetry:t.telemetry??l.telemetry};return a(c,p)}:void 0;return{...i,manifest:P0(i.manifest),setup:d}}async function cv(e,t={}){let n=[],r=[],o=new Map,s=0;for(let a of e)try{let d=await M0(a,t);if(!av(d.manifest,t))continue;let c=o.get(d.name);if(c)r.push({type:"duplicate_plugin_override",pluginName:d.name,pluginPath:a,overriddenPluginPath:c.pluginPath,message:`Plugin "${d.name}" from ${a} overrides ${c.pluginPath}`});o.set(d.name,{plugin:d,pluginPath:a,order:s++})}catch(d){let c=d instanceof Error?d.message:String(d);n.push({pluginPath:a,phase:"load",message:c,stack:d instanceof Error?d.stack:void 0})}let i=[...o.values()].sort((a,d)=>a.order-d.order);return{plugins:i.map((a)=>a.plugin),pluginPaths:i.map((a)=>a.pluginPath),failures:n,warnings:r}}import{existsSync as Tl}from"node:fs";import{createRequire as fv}from"node:module";import{dirname as ja,join as jr}from"node:path";import{fileURLToPath as B0}from"node:url";import{spawn as O0}from"node:child_process";import{basename as L0}from"node:path";import{augmentNodeCommandForDebug as N0,withResolvedClineBuildEnv as D0}from"@cline/shared";var ds=2147483647;function uv(e){return typeof e==="number"&&Number.isInteger(e)&&e>0&&e<=2147483647?e:void 0}var U0=300;function hl(e){if(e instanceof Error)return e;return Error(String(e))}function yl(e){return e.exitCode===null&&e.signalCode===null}function $a(e){return yl(e)&&e.connected}var F0="CLINE_JS_RUNTIME_PATH";function lv(e){let t=e?.trim();if(!t)return!1;let n=L0(t).toLowerCase();return n==="node"||n==="node.exe"||n==="bun"||n==="bun.exe"}function pv(e={}){let t=e.env??process.env,n=e.runtimeExecutable?.trim()||t[F0]?.trim();if(n)return n;let r=e.execPath?.trim()||process.execPath;if(lv(r))return r;for(let o of[t.BUN_EXEC_PATH,t.npm_node_execpath,t.NODE]){let s=o?.trim();if(s&&lv(s))return s}return"node"}function H0(e,t={}){let n=pv({env:t.env,execPath:t.execPath,runtimeExecutable:t.runtimeExecutable});return N0([n,...e],{env:t.env,execArgv:t.execArgv,debugRole:t.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class Sl{options;idleTimeoutMs;process=null;requestCounter=0;pending=new Map;idleTimer;shutdowns=new Map;constructor(e){if(this.options=e,this.idleTimeoutMs=uv(e.idleTimeoutMs),e.idleTimeoutMs!==void 0&&this.idleTimeoutMs===void 0)throw RangeError(`idleTimeoutMs must be an integer between 1 and ${ds}`)}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest(e){let t=this.pending.get(e);if(!t)return;if(this.pending.delete(e),t.timeout)clearTimeout(t.timeout);return this.armIdleTimer(t.child),t}clearIdleTimer(){if(!this.idleTimer)return;clearTimeout(this.idleTimer),this.idleTimer=void 0}hasPendingRequests(e){for(let t of this.pending.values())if(t.child===e)return!0;return!1}armIdleTimer(e){if(this.process!==e)return;if(this.clearIdleTimer(),this.idleTimeoutMs===void 0||!$a(e)||this.hasPendingRequests(e))return;let t=setTimeout(()=>{if(this.idleTimer===t)this.idleTimer=void 0;if(this.process!==e||!$a(e)||this.hasPendingRequests(e))return;this.shutdownProcess(e).catch(()=>{})},this.idleTimeoutMs);t.unref(),this.idleTimer=t}start(){if(this.process&&$a(this.process))return;let e=this.process;if(this.process=null,this.clearIdleTimer(),e&&yl(e))this.shutdownProcess(e).catch(()=>{});let t=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],n=H0(t,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),r=O0(n[0]??pv(this.options),n.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:D0(process.env),windowsHide:!0});this.process=r;let o="",s=(i)=>{let a=o+i;o=a.length>4000?a.slice(-4000):a};r.stderr?.setEncoding("utf8"),r.stderr?.on("data",(i)=>{s(i)}),r.on("message",(i)=>{this.onMessage(r,i)}),r.on("error",(i)=>{this.failPendingForProcess(r,Error(`${this.processLabel} process error: ${hl(i).message}`))}),r.on("exit",(i,a)=>{if(this.process===r)this.process=null,this.clearIdleTimer();let d=o.trim();this.failPendingForProcess(r,Error(`${this.options.name??"sandbox"} process exited (code=${String(i)}, signal=${String(a)})${d?`: ${d}`:""}`))}),this.armIdleTimer(r)}async call(e,t,n={}){this.start();let r=this.process;if(!r||!$a(r))throw Error(`${this.processLabel} process is not available`);this.clearIdleTimer();let o=`req_${++this.requestCounter}`,s={type:"call",id:o,method:e,args:t};return await new Promise((i,a)=>{let d={child:r,resolve:(c)=>i(c),reject:a};if((n.timeoutMs??0)>0)d.timeout=setTimeout(()=>{let c=this.clearPendingRequest(o);if(!c)return;this.shutdownProcess(c.child).catch(()=>{}),c.reject(Error(`${this.processLabel} call timed out after ${n.timeoutMs}ms: ${e}`))},n.timeoutMs);this.pending.set(o,d);try{r.send(s,(c)=>{if(!c)return;let l=this.clearPendingRequest(o);if(!l)return;l.reject(Error(`${this.processLabel} failed to send call "${e}": ${hl(c).message}`))})}catch(c){this.clearPendingRequest(o),a(hl(c))}})}async shutdown(){this.clearIdleTimer();let e=this.process,t=[...this.shutdowns.values()];if(e)t.push(this.shutdownProcess(e));if(t.length===0){this.failPending(Error(`${this.processLabel} shutdown`));return}await Promise.all(t)}shutdownProcess(e){let t=this.shutdowns.get(e);if(t)return t;if(this.process===e)this.process=null,this.clearIdleTimer();let n=this.terminateProcess(e).finally(()=>{if(this.shutdowns.get(e)===n)this.shutdowns.delete(e)});return this.shutdowns.set(e,n),n}async terminateProcess(e){if(!yl(e)){this.failPendingForProcess(e,Error(`${this.processLabel} shutdown`));return}await new Promise((t)=>{let n=setTimeout(()=>{try{e.kill("SIGKILL")}catch{}t()},U0);e.once("exit",()=>{clearTimeout(n),t()});try{e.kill("SIGTERM")}catch{clearTimeout(n),t()}}),this.failPendingForProcess(e,Error(`${this.processLabel} shutdown`))}onMessage(e,t){if(!t)return;if(t.type==="event"){if(this.process===e&&typeof t.name==="string"&&t.name.length>0)this.options.onEvent?.({name:t.name,payload:t.payload});return}if(t.type!=="response"||!t.id)return;let n=this.pending.get(t.id);if(!n||n.child!==e)return;let r=this.clearPendingRequest(t.id);if(!r)return;if(t.ok){r.resolve(t.result);return}r.reject(Error(t.error?.message||`${this.processLabel} call failed`))}failPendingForProcess(e,t){for(let[n,r]of this.pending.entries()){if(r.child!==e)continue;if(this.pending.delete(n),r.timeout)clearTimeout(r.timeout);r.reject(t)}}failPending(e){for(let[t,n]of this.pending.entries()){if(this.pending.delete(t),n.timeout)clearTimeout(n.timeout);n.reject(e)}}}var $0="CLINE_PLUGIN_IDLE_TIMEOUT_MS",W0=1800000;function j0(e){return{...e,contributions:{tools:e.contributions?.tools??[],commands:e.contributions?.commands??[],rules:e.contributions?.rules??[],messageBuilders:e.contributions?.messageBuilders??[],providers:e.contributions?.providers??[],automationEventTypes:e.contributions?.automationEventTypes??[],mcpServers:e.contributions?.mcpServers??[],shortcuts:e.contributions?.shortcuts??[],flags:e.contributions?.flags??[]}}}function cs(e){return(e instanceof Error?e.message:String(e)).includes("Unknown sandbox plugin id:")}function q0(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function z0(){let e=process.env.CLINE_WRAPPER_PATH?.trim();if(!e)return;try{let n=fv(e).resolve(`${q0()}/package.json`),r=jr(ja(n),"extensions","plugin-sandbox-bootstrap.js");return Tl(r)?r:void 0}catch{return}}function K0(){let e=process.execPath?.trim();if(!e)return;let t=jr(ja(ja(e)),"extensions","plugin-sandbox-bootstrap.js");return Tl(t)?t:void 0}function G0(e){let t=e.exists??Tl;for(let n of e.siblingCandidates)if(t(n))return{file:n};if(t(e.sourceBootstrapPath))return{sourcePath:e.sourceBootstrapPath};for(let n of e.installedCandidates)if(n&&t(n))return{file:n};return{sourcePath:e.sourceBootstrapPath}}function V0(){let e=ja(B0(import.meta.url)),t=fv(import.meta.url),n=G0({siblingCandidates:[jr(e,"plugin-sandbox-bootstrap.js"),jr(e,"extensions","plugin-sandbox-bootstrap.js"),jr(e,"agents","plugin-sandbox-bootstrap.js")],sourceBootstrapPath:jr(e,"plugin-sandbox-bootstrap.ts"),installedCandidates:[z0(),K0()]});if("file"in n)return n;let r=n.sourcePath,o="jiti";try{o=t.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(o)});`,`const jiti = createJiti(${JSON.stringify(r)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(r)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
269
269
  `)}}var bl=V0();function Wa(e,t,n){if(typeof e==="number"&&Number.isInteger(e)&&e>0&&e<=ds)return e;if(n){let r=process.env[n];if(r){let o=Number(r);if(Number.isInteger(o)&&o>0&&o<=ds)return o}}return t}async function qa(e){let t=Wa(e.idleTimeoutMs,W0,$0),n=new Sl({name:"plugin-sandbox",..."file"in bl?{bootstrapFile:bl.file}:{bootstrapScript:bl.script},idleTimeoutMs:t,onEvent:e.onEvent}),r=Wa(e.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),o=Wa(e.hookTimeoutMs,3000),s=Wa(e.contributionTimeoutMs,60000),i={pluginPaths:e.pluginPaths,exportName:e.exportName,providerId:e.providerId,modelId:e.modelId,cwd:e.cwd,session:e.session,client:e.client,user:e.user,workspaceInfo:e.workspaceInfo,loggerEnabled:Boolean(e.logger),telemetryEnabled:e.telemetryAvailable===!0},a,d=()=>(a??=n.call("initialize",i,{timeoutMs:r}).finally(()=>{a=void 0}),a),c;try{c=await n.call("initialize",i,{timeoutMs:r})}catch(p){throw await n.shutdown().catch(()=>{}),p}let l=c.plugins.map(j0);return{extensions:l.map((p)=>{let m={name:p.name,__clinePluginPath:p.pluginPath,manifest:p.manifest,setup:(g)=>{J0(g,n,p,s,d),Y0(g,n,p,s,d),Q0(g,n,p,s,d),eU(g,n,p,s,d),Z0(g,p)}};return m.hooks=nU(n,p,o,d),m}),failures:c.failures,pluginPaths:l.map((p)=>p.pluginPath),shutdown:async()=>{await n.shutdown()},warnings:c.warnings}}function X0(e){let t=e instanceof Error?e.message:String(e);return/cyclic|circular|bigint/i.test(t)}function vl(e,t=new WeakSet){if(e===null||typeof e!=="object")return typeof e==="function"||typeof e==="symbol"||typeof e==="bigint"?void 0:e;if(t.has(e))return;let n=e;if(typeof n.toJSON==="function")try{return n.toJSON()}catch{return}t.add(e);try{if(Array.isArray(e))return e.map((o)=>vl(o,t)??null);let r={};for(let[o,s]of Object.entries(e)){let i=vl(s,t);if(i!==void 0)r[o]=i}return r}finally{t.delete(e)}}var mv=new Set;function hv(e,t,n){let r=`${e}:${t}`;if(mv.has(r))return;mv.add(r);let o=n instanceof Error?n.message:String(n);console.warn(`[plugin-sandbox] ${e} "${t}" received a payload that is not JSON-serializable (${o}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function yv(e,t,n){try{return await e(t)}catch(r){if(!X0(r))throw r;return n(r),await e(vl(t))}}function J0(e,t,n,r,o){for(let s of n.contributions?.tools??[]){let i={name:s.name,description:s.description??"",inputSchema:s.inputSchema??{type:"object",properties:{}},timeoutMs:s.timeoutMs,retryable:s.retryable,execute:async(a,d)=>await yv(async(l)=>{let{input:u,context:p}=l;try{return await t.call("executeTool",{pluginId:n.pluginId,contributionId:s.id,input:u,context:p},{timeoutMs:r})}catch(m){if(!cs(m))throw m;return await o(),await t.call("executeTool",{pluginId:n.pluginId,contributionId:s.id,input:u,context:p},{timeoutMs:r})}},{input:a,context:d},(l)=>hv("tool",s.name,l))};e.registerTool(i)}}function Y0(e,t,n,r,o){for(let s of n.contributions?.commands??[])e.registerCommand({name:s.name,description:s.description,handler:async(i)=>{try{return await t.call("executeCommand",{pluginId:n.pluginId,contributionId:s.id,input:i},{timeoutMs:r})}catch(a){if(!cs(a))throw a;return await o(),await t.call("executeCommand",{pluginId:n.pluginId,contributionId:s.id,input:i},{timeoutMs:r})}}})}function Q0(e,t,n,r,o){for(let s of n.contributions?.rules??[])e.registerRule({id:s.ruleId,source:s.source,content:s.hasContentHandler===!0?async()=>{try{return await t.call("resolveRuleContent",{pluginId:n.pluginId,contributionId:s.id},{timeoutMs:r})}catch(i){if(!cs(i))throw i;return await o(),await t.call("resolveRuleContent",{pluginId:n.pluginId,contributionId:s.id},{timeoutMs:r})}}:s.content??""})}function Z0(e,t){for(let n of t.contributions?.providers??[])e.registerProvider({name:n.name,description:n.description,metadata:n.metadata});for(let n of t.contributions?.automationEventTypes??[])e.registerAutomationEventType({eventType:n.eventType,source:n.source,description:n.description,attributesSchema:n.attributesSchema,payloadSchema:n.payloadSchema,examples:n.examples,metadata:n.metadata});for(let n of t.contributions?.mcpServers??[])e.registerMcpServer(n)}function eU(e,t,n,r,o){for(let s of n.contributions?.messageBuilders??[])e.registerMessageBuilder({name:s.name,async build(i){try{let a=await t.call("buildMessages",{pluginId:n.pluginId,contributionId:s.id,messages:i},{timeoutMs:r});return gv(a)?a:i}catch(a){if(!cs(a))throw a;await o();let d=await t.call("buildMessages",{pluginId:n.pluginId,contributionId:s.id,messages:i},{timeoutMs:r});return gv(d)?d:i}}})}function gv(e){return Array.isArray(e)&&e.every((t)=>typeof t==="object"&&t!==null&&("role"in t)&&("content"in t))}function tU(e,t,n,r,o){return async(s)=>await yv(async(a)=>{try{return await e.call("invokeHook",{pluginId:t,hookName:n,payload:a},{timeoutMs:r})}catch(d){if(!cs(d))throw d;return await o(),await e.call("invokeHook",{pluginId:t,hookName:n,payload:a},{timeoutMs:r})}},s,(a)=>hv("hook",n,a))}function nU(e,t,n,r){let o={};for(let s of t.hooks??[])o[s]=tU(e,t.pluginId,s,n,r);return Object.keys(o).length>0?o:void 0}import{getPluginDisplayName as c3}from"@cline/shared/storage";var kl="package.json",cU="package";function Cl(e){return aU(e)}function Il(e){return iU(e)}function uU(e){try{return Ga(e)&&oU(e).isDirectory()}catch{return!1}}function Xa(e){let t=[],n=new Set;for(let r of e){let o=Ka(r);if(n.has(o))continue;n.add(o),t.push(o)}return t}function bv(e){let t=Xa(e);return cS(t)}function vv(e){return Cl(e).flatMap((t)=>Il(t)).filter((t)=>Ga(t))}function lU(e,t){let n=[];for(let r of e)try{n.push(...Sv([r],t))}catch{}return n}function wl(e){return typeof e==="object"&&e!==null}function pU(e){try{let t=JSON.parse(rU(Va(e,kl),"utf8"));if(!wl(t)||!wl(t.cline))return[];let n=t.cline.plugins;if(!Array.isArray(n))return[];let r=[];for(let o of n){if(typeof o==="string"){r.push(o);continue}if(!wl(o)||!Array.isArray(o.paths))continue;for(let s of o.paths)if(typeof s==="string")r.push(s)}return r}catch{return[]}}function Tv(e,t){let n=Ka(t);return pU(e).some((r)=>Ka(e,r)===n)}function mU(e,t){return sU(e)===cU&&Ga(Va(za(e),kl))&&Tv(za(e),t)}function gU(e){let t=Ka(e),n=[],r=za(t);while(!0){if(mU(r,t)){n.push(r);break}if(Ga(Va(r,kl))){if(Tv(r,t))n.push(r);break}let o=za(r);if(o===r)break;r=o}return Xa(n)}function us(e={}){let t=e.cwd??process.cwd(),n=vv(e.workspacePath),o=[...Sv(e.pluginPaths??[],t),...n];return e.includeDisabled?Xa(o):bv(o)}function fU(e={}){let t=e.cwd??process.cwd(),n=vv(e.workspacePath),r=lU(e.pluginPaths??[],t);return bv([...r,...n])}function qr(e){let t=[];for(let n of e)for(let r of gU(n)){let o=Va(r,dU);if(uU(o))t.push(o)}return Xa(t)}function wv(e={}){return qr(fU(e))}async function kv(e={}){let t=us(e);if(t.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if(e.mode==="in_process"){let r=await cv(t,{cwd:e.cwd,exportName:e.exportName,providerId:e.providerId,modelId:e.modelId,session:e.session,client:e.client,user:e.user,workspaceInfo:e.workspaceInfo,automation:e.automation,logger:e.logger,telemetry:e.telemetry});return{extensions:r.plugins,failures:r.failures,pluginPaths:r.pluginPaths,warnings:r.warnings}}let n=await qa({pluginPaths:t,exportName:e.exportName,importTimeoutMs:e.importTimeoutMs,hookTimeoutMs:e.hookTimeoutMs,contributionTimeoutMs:e.contributionTimeoutMs,onEvent:e.onEvent,telemetryAvailable:Boolean(e.telemetry),providerId:e.providerId,modelId:e.modelId,cwd:e.cwd,session:e.session,client:e.client,user:e.user,workspaceInfo:e.workspaceInfo,logger:e.logger});return{extensions:n.extensions??[],shutdown:n.shutdown,failures:n.failures,pluginPaths:n.pluginPaths,warnings:n.warnings}}import{execFile as hU,spawn as yU}from"node:child_process";import{createHash as SU}from"node:crypto";import{mkdir as bU,readdir as vU,rm as Ya,stat as TU,writeFile as wU}from"node:fs/promises";import{join as ls}from"node:path";import{promisify as kU}from"node:util";import{resolveClineDataDir as CU}from"@cline/shared/storage";var Qa=kU(hU),Cv="cline checkpoint session=",Rl=67108864,IU=1209600000;function Iv(e){return e.includes(Cv)}function Av(){return ls(CU(),"checkpoint-scratch")}function Rv(e,t){let n=SU("sha256").update(`${e}\x00${t}`).digest("hex").slice(0,32);return ls(Av(),n)}async function AU(){try{let e=Av(),t=Date.now()-IU,n=await vU(e,{withFileTypes:!0});await Promise.all(n.map(async(r)=>{if(!r.isDirectory())return;let o=ls(e,r.name);try{if((await TU(o)).mtimeMs<t)await Ya(o,{recursive:!0,force:!0})}catch{}}))}catch{}}function Al(e,t){e?.log(t,{severity:"warn"})}function RU(e){let t=e?.checkpoint;if(!t||typeof t!=="object"||Array.isArray(t))return;let n=t;if(!n.latest||!Array.isArray(n.history))return;let r=n.latest,o=n.history.filter((s)=>!!s&&typeof s==="object"&&typeof s.ref==="string"&&typeof s.createdAt==="number"&&typeof s.runCount==="number");if(typeof r.ref!=="string"||typeof r.createdAt!=="number"||typeof r.runCount!=="number")return;return{latest:r,history:o}}async function Be(e,t){let n=await Qa("git",["-C",e,...t],{windowsHide:!0});return{stdout:n.stdout.trim(),stderr:n.stderr.trim()}}var El=["-c","core.ignorestat=false","-c","core.splitIndex=false"];async function Ja(e,t,n){return(await Qa("git",["-C",e,...El,...n],{windowsHide:!0,maxBuffer:Rl,env:{...process.env,GIT_INDEX_FILE:t}})).stdout.trim()}function EU(e,t,n,r){return new Promise((o,s)=>{let i=yU("git",["-C",e,...El,...n],{windowsHide:!0,env:{...process.env,GIT_INDEX_FILE:t},stdio:["pipe","ignore","pipe"]}),a="";i.stderr.on("data",(d)=>{a+=d}),i.on("error",s),i.on("close",(d)=>{if(d===0)o();else s(Error(`git ${n[0]} exited with ${d}: ${a.trim()}`))}),i.stdin.on("error",()=>{}),i.stdin.end(r)})}async function PU(e,t){let r=(await Qa("git",["-C",e,"ls-files","--others","--exclude-standard","-z"],{windowsHide:!0,maxBuffer:Rl})).stdout.split("\x00").filter(Boolean);if(r.length===0)return;await bU(t,{recursive:!0,mode:448});let o=ls(t,"index"),s=ls(t,"pathspec");await wU(s,`${r.join("\x00")}\x00`);let i=["add","--force","--pathspec-from-file",s,"--pathspec-file-nul"];try{await Ja(e,o,i)}catch(p){if(String(p.stderr??"").includes("did not match any files"))throw p;await Ya(o,{force:!0}),await Ya(`${o}.lock`,{force:!0}),await Ja(e,o,i)}let a=await Qa("git",["-C",e,...El,"ls-files","-z"],{windowsHide:!0,maxBuffer:Rl,env:{...process.env,GIT_INDEX_FILE:o}}),d=new Set(r.map((p)=>p.endsWith("/")?p.slice(0,-1):p)),c=a.stdout.split("\x00").filter(Boolean).filter((p)=>!d.has(p));if(c.length>0)await EU(e,o,["update-index","-z","--force-remove","--stdin"],`${c.join("\x00")}\x00`);let l=await Ja(e,o,["write-tree"]);if(!l)return;return await Ja(e,o,["commit-tree",l,"-m","untracked files on cline checkpoint"])||void 0}async function _U(e,t,n){let r=(await Be(e,["stash","create",n])).stdout,o=await PU(e,t);if(r){if(!o)return r;let d=(await Be(e,["rev-parse",`${r}^{tree}`])).stdout,c=(await Be(e,["rev-parse",`${r}^1`])).stdout,l=(await Be(e,["rev-parse",`${r}^2`])).stdout;if(!d||!c||!l)return r;return(await Be(e,["commit-tree",d,"-p",c,"-p",l,"-p",o,"-m",n])).stdout||r}if(!o)return;let s=(await Be(e,["rev-parse","HEAD"])).stdout,i=(await Be(e,["rev-parse","HEAD^{tree}"])).stdout;if(!s||!i)return;let a=(await Be(e,["commit-tree",i,"-p",s,"-m","index on cline checkpoint"])).stdout;if(!a)return;return(await Be(e,["commit-tree",i,"-p",s,"-p",a,"-p",o,"-m",n])).stdout||void 0}async function Pl(e,t){if(!e)return;await Ya(Rv(e,t),{recursive:!0,force:!0}).catch(()=>{return});let n=`refs/cline/checkpoints/${t}/`;try{let{stdout:r}=await Be(e,["for-each-ref","--format=%(refname)",n]),o=r.trim().split(`
270
270
  `).filter(Boolean);await Promise.allSettled(o.map((s)=>Be(e,["update-ref","-d",s])))}catch{}}async function Ev(e,t,n){if(!e||n.length===0)return;await Promise.allSettled(n.map((r)=>Be(e,["update-ref",`refs/cline/checkpoints/${t}/${r.runCount}`,r.ref])))}function xU(e,t){let n=e.findIndex((r)=>r.runCount===t.runCount);if(n<0)return[...e,t];return e.map((r,o)=>o===n?t:r)}function Pv(e){AU();let t,n,r=async()=>{if(t===!0)return!0;try{t=(await Be(e.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{t=!1}return t},o=async(s)=>{if(e.createCheckpoint)return await e.createCheckpoint({cwd:e.cwd,sessionId:e.sessionId,runCount:s});if(!await r())return;let i=Date.now(),a=(p)=>{e.telemetry?.capture({event:"checkpoint.snapshot",properties:{sessionId:e.sessionId,runCount:s,outcome:p,durationMs:Date.now()-i}})},d=async(p)=>{try{let g=(await Be(e.cwd,["rev-parse","HEAD"])).stdout.trim();if(!g)return;return{ref:g,createdAt:Date.now(),runCount:s,kind:"commit"}}catch(m){Al(e.logger,`${p}: ${m instanceof Error?m.message:String(m)}`);return}},c=`${Cv}${e.sessionId} run=${s}`,l="";try{l=await _U(e.cwd,Rv(e.cwd,e.sessionId),c)??""}catch(p){Al(e.logger,`Checkpoint snapshot failed after ${Date.now()-i}ms: ${p instanceof Error?p.message:String(p)}`);let m=await d("Checkpoint HEAD fallback failed");return a(m?"head_fallback":"skipped"),m}if(!l){let p=await d("Checkpoint HEAD fallback failed");return a(p?"head_clean":"skipped"),p}let u=`refs/cline/checkpoints/${e.sessionId}/${s}`;try{await Be(e.cwd,["update-ref",u,l])}catch(p){Al(e.logger,`Checkpoint store failed: ${p instanceof Error?p.message:String(p)}`),a("skipped");return}return a("stash"),{ref:l,createdAt:Date.now(),runCount:s,kind:"stash"}};return{beforeRun:async({snapshot:s})=>{if(s.parentAgentId==null)n=s.messages.length;return},beforeModel:async({snapshot:s})=>{if(s.parentAgentId!=null||s.iteration!==1)return;let i=s.messages.slice(n??Math.max(0,s.messages.length-1));n=void 0;let a=wo(s.messages);if(a<1)return;let d=await e.readSessionMetadata(),c=RU(d),l=wo(i)>=1,u=c?.history.some((g)=>g.runCount===a)??!1;if(!l&&u)return;let p=await o(a);if(!p)return;if(c?.latest.ref===p.ref)return;let m=xU(c?.history??[],p);await e.writeSessionMetadata({...d??{},checkpoint:{latest:p,history:m}});return}}}import{appendFileSync as YU,readFileSync as QU}from"node:fs";import{join as ZU}from"node:path";import{augmentNodeCommandForDebug as eF}from"@cline/shared";import{ensureHookLogDir as Nv}from"@cline/shared/storage";function _l(e,t){if(!t)return;return{name:e,manifest:{capabilities:["hooks"]},hooks:t}}import{existsSync as MU,readdirSync as OU}from"node:fs";import{basename as LU,extname as NU,join as DU}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as UU,resolveHooksConfigSearchPaths as FU}from"@cline/shared/storage";function _v(e){return FU(e)}var xl;((l)=>{l.TaskStart="TaskStart";l.TaskResume="TaskResume";l.TaskCancel="TaskCancel";l.TaskComplete="TaskComplete";l.TaskError="TaskError";l.PreToolUse="PreToolUse";l.PostToolUse="PostToolUse";l.UserPromptSubmit="UserPromptSubmit";l.PreCompact="PreCompact";l.SessionShutdown="SessionShutdown"})(xl||={});var xv={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},HU=new Map(Object.values(xl).map((e)=>[e.toLowerCase(),e])),BU=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function Mv(e){let t=NU(e).toLowerCase();if(!BU.has(t))return;let n=LU(e,t).trim().toLowerCase();return HU.get(n)}function ps(e){let t=[],n=new Set,r=_v(e).filter((o)=>MU(o));for(let o of r)try{for(let s of OU(o,{withFileTypes:!0})){if(!s.isFile())continue;let i=Mv(s.name);if(!i)continue;let a=DU(o,s.name);if(n.has(a))continue;n.add(a),t.push({fileName:i,hookEventName:xv[i],path:a})}}catch{}return t.sort((o,s)=>o.path.localeCompare(s.path))}import{HookEventNameSchema as XU,HookEventPayloadSchema as JU,parseHookEventPayload as Ol,resolveHookSessionContext as R3}from"@cline/shared";import{z as Gn}from"zod";import{spawn as $U}from"node:child_process";import{augmentNodeCommandForDebug as WU,withResolvedClineBuildEnv as jU}from"@cline/shared";var qU=30000,zU=1000;function KU(e){let t=e.trim();if(!t)return{};let r=t.split(`
271
271
  `).map((s)=>s.trim()).filter(Boolean).filter((s)=>s.startsWith("HOOK_CONTROL\t")).map((s)=>s.slice(13)),o=r.length>0?r[r.length-1]:t;try{return{parsedJson:JSON.parse(o)}}catch(s){return{parseError:s instanceof Error?s.message:"Failed to parse subprocess stdout JSON"}}}function Ov(e,t){let n=e instanceof Error?e:Error(String(e)),r=n,o=t.join(" ");if(r.code==="EACCES"){let i=Error(`Failed to execute hook command "${o}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return i.code=r.code,i}let s=Error(`Failed to execute hook command "${o}": ${n.message}`);return s.code=r.code,s}function GU(e){for(let t of[e.stdin,e.stdout,e.stderr]){if(!t||t.destroyed)continue;t.removeAllListeners("data"),t.destroy()}}async function VU(e,t){let n=e.stdin;if(!n)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((r,o)=>{let s=!1,i=(c)=>{if(s)return;s=!0,c()},a=(c)=>{let l=c.code;return l==="EPIPE"||l==="EOF"||l==="ERR_STREAM_DESTROYED"},d=(c)=>{if(a(c)){i(r);return}i(()=>o(c))};n.on("error",d),n.once("close",()=>n.off("error",d)),n.end(t,(c)=>{if(c){if(a(c)){i(r);return}i(()=>o(c));return}i(r)})})}async function ms(e,t){let n=WU(t.command,{env:t.env,debugRole:"hook"});if(!Array.isArray(n)||n.length===0)throw Error("runSubprocessEvent requires a non-empty command");let r=!!t.detached,o=$U(n[0],n.slice(1),{cwd:t.cwd,env:jU(t.env),stdio:r?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:r,windowsHide:!0}),s="",i="",a=!1,d;if(!r&&(!o.stdout||!o.stderr))throw o.kill("SIGKILL"),Error("runSubprocessEvent failed to create stdout/stderr pipes");o.stdout?.on("data",(u)=>{s+=u.toString()}),o.stderr?.on("data",(u)=>{i+=u.toString()});let c=new Promise((u,p)=>{o.once("spawn",()=>{try{t.onSpawn?.({command:n,pid:o.pid??void 0,detached:r})}catch{}u()}),o.once("error",(m)=>p(Ov(m,n)))}),l=new Promise((u,p)=>{let m=!1,g,f=()=>{if(d)clearTimeout(d);if(g)clearTimeout(g)},h=(S)=>{if(m)return;m=!0,f();let{parsedJson:y,parseError:b}=KU(s);u({exitCode:S,stdout:s,stderr:i,parsedJson:y,parseError:b,timedOut:a})};if(o.once("error",(S)=>{f(),p(Ov(S,n))}),o.once("close",(S)=>h(S)),!r)o.once("exit",(S)=>{g=setTimeout(()=>{h(S),GU(o)},zU),g.unref?.()})});if(r)l.catch(()=>{return});if(!r&&(t.timeoutMs??0)>0)d=setTimeout(()=>{a=!0,o.kill("SIGKILL")},t.timeoutMs);if(r&&t.onDetachedSettled){let u=Date.now(),p=t.onDetachedSettled,m=!1,g,f=(S)=>{if(m)return;if(m=!0,g)clearTimeout(g);p({command:n,...S})},h=t.detachedObservationMs??qU;g=setTimeout(()=>f({durationMs:h,exitCode:null,exited:!1}),h),g.unref?.(),l.then((S)=>f({durationMs:Date.now()-u,exitCode:S.exitCode,exited:!0})).catch(()=>{if(m=!0,g)clearTimeout(g)})}if(await Promise.race([Promise.all([c,VU(o,JSON.stringify(e))]),l]),r){o.unref();return}return await l}var Ml=50000;function Lv(e){if(e===void 0||e.length<=Ml)return e;return`${e.slice(0,Ml)}
@@ -310,7 +310,7 @@ ${a}`:s.instructions}})}})}}class cw{watcher;ready;stopped=!1;constructor(e){thi
310
310
  `,"utf8"),t])}class Mp{buffer="";decoder=new Dw("utf8");push(e){this.buffer+=this.decoder.write(e);let t=[];while(!0){let n=this.buffer.indexOf(`\r
311
311
  \r
312
312
  `);if(n<0)break;let o=this.buffer.slice(0,n).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!o)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let s=Number.parseInt(o[1],10),i=n+4,a=i+s;if(this.buffer.length<a)break;t.push(this.buffer.slice(i,a)),this.buffer=this.buffer.slice(a)}return t}}class Op{buffer="";decoder=new Dw("utf8");push(e){this.buffer+=this.decoder.write(e);let t=[];while(!0){let n=this.buffer.indexOf(`
313
- `);if(n<0)break;let r=this.buffer.slice(0,n).trim();if(this.buffer=this.buffer.slice(n+1),r.length>0)t.push(r)}return t}}class Hw{registration;process;processClose;nextRequestId=1;pending=new Map;framedParser=new Mp;newlineParser=new Op;stderrBuffer="";connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;constructor(e){this.registration=e,this.requestTimeoutMs=bd(e.timeoutSeconds),this.connectAttemptTimeoutMs=Uw(e.timeoutSeconds)?this.requestTimeoutMs:Fw}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let e={protocolVersion:S$,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}};await this.ensureAgentPluginDataDirectory(),this.spawnProcess("newline");try{await this.request("initialize",e,this.connectAttemptTimeoutMs)}catch(t){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",e,this.connectAttemptTimeoutMs)}catch(n){throw await this.disconnect().catch(()=>{}),T$(this.registration.name,t,n)}}this.notify("notifications/initialized"),this.connected=!0}async ensureAgentPluginDataDirectory(){if(this.registration.metadata?.source!=="agent-plugin")return;let e=this.registration.metadata.pluginDataPath;if(typeof e!=="string"||e.length===0)return;await f$(e,{recursive:!0})}async disconnect(){let e=this.process,t=this.processClose;if(this.connected=!1,this.process=void 0,this.processClose=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!t)return;if(!e){if(!await Td(t,xp))throw Error(`MCP process for "${this.registration.name}" did not close during disconnect.`);return}if(!e.stdin.destroyed)e.stdin.end();if(await Td(t,v$))return;if(e.kill(),await Td(t,xp))return;if(e.kill("SIGKILL"),!await Td(t,xp))throw Error(`MCP process for "${this.registration.name}" did not exit during disconnect.`)}async listTools(){return((await this.request("tools/list")).tools??[]).filter((t)=>typeof t?.name==="string"&&typeof t.inputSchema==="object"&&t.inputSchema!==null).map((t)=>({name:t.name,description:t.description,inputSchema:t.inputSchema}))}async callTool(e){return this.request("tools/call",{name:e.name,arguments:e.arguments??{}},void 0,e.context?.signal)}spawnProcess(e){let t=this.registration.transport;if(t.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${t.type}`);this.framedParser=new Mp,this.newlineParser=new Op,this.stderrBuffer="",this.protocolMode=e;let n=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},r=g$(t.command,t.args??[],{cwd:t.cwd,env:{...process.env,...t.env??{}},stdio:["pipe","pipe","pipe"],...n});this.process=r,this.processClose=new Promise((o)=>{r.once("close",()=>o())}),r.stdout.on("data",(o)=>this.handleStdout(o)),r.stderr.on("data",(o)=>{if(this.process!==r)return;if(this.stderrBuffer+=o.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),r.once("error",(o)=>{if(this.process!==r)return;this.failAllPending(Error(`MCP process error: ${Qr(o)}`))}),r.once("exit",(o,s)=>{if(this.process!==r)return;this.connected=!1,this.process=void 0;let i=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${o??"null"}, signal=${s??"null"}).${i}`))})}handleStdout(e){try{let t=this.protocolMode==="framed"?this.framedParser.push(e):this.newlineParser.push(e);for(let n of t){let r=JSON.parse(n);if(typeof r.id!=="number")continue;let o=this.takePending(r.id);if(!o)continue;if(r.error){let s=r.error.message||`MCP request failed with code ${r.error.code??"unknown"}`;o.reject(Error(s));continue}o.resolve(r.result)}}catch(t){this.handleProtocolFailure(t)}}handleProtocolFailure(e){let t=this.process;if(!t)return;this.connected=!1,this.process=void 0;let n=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${Qr(e)}.${n}`)),t.kill()}async request(e,t,n=this.requestTimeoutMs,r){let o=this.process;if(!o?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let s=this.nextRequestId++,i={jsonrpc:"2.0",id:s,method:e,...t?{params:t}:{}},a=new Promise((d,c)=>{let l=setTimeout(()=>{this.takePending(s),c(this.createTimeoutError(e,n))},n),u=r?()=>{let p=this.takePending(s);if(!p)return;let m=r.reason instanceof Error?r.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${e}).`),{name:"AbortError"});p.reject(m)}:void 0;if(this.pending.set(s,{resolve:d,reject:c,timeout:l,signal:r,onAbort:u}),r&&u){if(r.addEventListener("abort",u,{once:!0}),r.aborted)u()}});if(!this.pending.has(s))return a;try{o.stdin.write(this.protocolMode==="framed"?Nw(i):Lw(i))}catch(d){let c=this.takePending(s);if(c)c.reject(d instanceof Error?d:Error(String(d)))}return a}createTimeoutError(e,t){return Error(h$(this.registration.name,t,e))}notify(e,t){let n=this.process;if(!n?.stdin.writable)return;let r={jsonrpc:"2.0",method:e,...t?{params:t}:{}};n.stdin.write(this.protocolMode==="framed"?Nw(r):Lw(r))}failAllPending(e){for(let t of[...this.pending.keys()]){let n=this.takePending(t);if(!n)continue;n.reject(e)}}takePending(e){let t=this.pending.get(e);if(!t)return;if(this.pending.delete(e),clearTimeout(t.timeout),t.signal&&t.onAbort)t.signal.removeEventListener("abort",t.onAbort);return t}}class Bw{registration;options;client;authContext;requestTimeoutMs;connectAttemptTimeoutMs;constructor(e,t){this.registration=e;this.options=t;this.requestTimeoutMs=bd(e.timeoutSeconds),this.connectAttemptTimeoutMs=Uw(e.timeoutSeconds)?this.requestTimeoutMs:b$}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let e=Pp({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??Ow,clientInformation:Ep(this.registration.oauthClient)});this.authContext=e;let t=await e.provider.tokens()?e.provider:void 0,n;try{n=new y$({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"});let r=Mw({registration:this.registration,oauthProvider:t,fetch:this.options.fetch,restrictConfiguredHeadersToOrigin:this.options.restrictConfiguredHeadersToOrigin});await n.connect(r,{timeout:this.connectAttemptTimeoutMs}),await e.clearError(),this.client=n}catch(r){await n?.close().catch(()=>{});let o=Ms(r,this.registration.name,this.connectAttemptTimeoutMs),s=_p(r),i=s?this.formatUnauthorizedMessage(e.getLastAuthorizationUrl()):Qr(o);if(s&&!this.hasStaticAuthorizationHeader())await e.markAuthorizationRequired(i);else await e.markConnectionError(i);throw Error(i)}}async disconnect(){let e=this.client;this.client=void 0,await e?.close()}async listTools(){let e=await this.ensureConnectedClient();try{return(await e.listTools(void 0,{timeout:this.requestTimeoutMs})).tools.map((n)=>({name:n.name,description:n.description,inputSchema:n.inputSchema&&typeof n.inputSchema==="object"&&!Array.isArray(n.inputSchema)?n.inputSchema:{}}))}catch(t){return await this.handleOperationError(t)}}async callTool(e){let t=await this.ensureConnectedClient();try{return await t.callTool({name:e.name,arguments:e.arguments??{}},void 0,{timeout:this.requestTimeoutMs,signal:e.context?.signal})}catch(n){return await this.handleOperationError(n)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage(e){if(this.hasStaticAuthorizationHeader())return`MCP server "${this.registration.name}" rejected its configured Authorization header. Update or remove that header before connecting with OAuth.`;let t=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!e)return`${t} Run authorizeMcpServerOAuth for this server.`;return`${t} Run authorizeMcpServerOAuth for this server and complete this URL: ${e}`}hasStaticAuthorizationHeader(){let e=this.registration.transport;if(e.type==="stdio")return!1;return Object.keys(e.headers??{}).some((t)=>t.toLowerCase()==="authorization")}async handleOperationError(e){let t=this.authContext??Pp({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??Ow,clientInformation:Ep(this.registration.oauthClient)}),n=Ms(e,this.registration.name,this.requestTimeoutMs),r=_p(e),o=r?this.formatUnauthorizedMessage(t.getLastAuthorizationUrl()):Qr(n);if(r&&!this.hasStaticAuthorizationHeader())await t.markAuthorizationRequired(o);else await t.markConnectionError(o);throw Error(o)}}function wd(e={}){return(t)=>t.transport.type==="stdio"?new Hw(t):new Bw(t,e)}Rp();import{isMcpTimeoutConfigured as $w,resolveMcpTimeoutSeconds as Ww}from"@cline/shared";var w$=5000;function gt(){return Date.now()}function k$(e){return e.map((t)=>({name:t.name,description:t.description,inputSchema:t.inputSchema}))}class kd{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor(e){this.clientFactory=e.clientFactory,this.toolsCacheTtlMs=e.toolsCacheTtlMs??w$}async registerServer(e){await this.runExclusive(e.name,async()=>{let t=this.servers.get(e.name);if(!t){this.servers.set(e.name,{registration:{...e},status:"disconnected",updatedAt:gt()});return}let n=JSON.stringify(t.registration.transport)!==JSON.stringify(e.transport),r=$w(t.registration.timeoutSeconds)!==$w(e.timeoutSeconds)||Ww(t.registration.timeoutSeconds)!==Ww(e.timeoutSeconds);if(t.registration={...e},t.updatedAt=gt(),n||r)await this.disconnectState(t),t.client=void 0,t.toolCache=void 0,t.toolCacheUpdatedAt=void 0})}async unregisterServer(e){await this.runExclusive(e,async()=>{let t=this.requireServer(e);await this.disconnectState(t),this.servers.delete(e)})}async connectServer(e){await this.runExclusive(e,async()=>{let t=this.requireServer(e);await this.connectState(t)})}async disconnectServer(e){await this.runExclusive(e,async()=>{let t=this.requireServer(e);await this.disconnectState(t)})}async setServerDisabled(e,t){await this.runExclusive(e,async()=>{let n=this.requireServer(e);if(n.registration={...n.registration,disabled:t},n.updatedAt=gt(),t)await this.disconnectState(n)})}listServers(){return[...this.servers.values()].map((e)=>({name:e.registration.name,status:e.status,disabled:e.registration.disabled===!0,lastError:e.lastError,toolCount:e.toolCache?.length??0,updatedAt:e.updatedAt,metadata:e.registration.metadata})).sort((e,t)=>e.name.localeCompare(t.name))}async listTools(e){let t=this.requireServer(e),n=t.toolCacheUpdatedAt??0;if(t.toolCache&&gt()-n<=this.toolsCacheTtlMs)return t.toolCache;return this.refreshTools(e)}async refreshTools(e){return this.runExclusive(e,async()=>{let t=this.requireServer(e),r=await(await this.ensureConnectedClient(t)).listTools(),o=k$(r);return t.toolCache=o,t.toolCacheUpdatedAt=gt(),t.updatedAt=gt(),o})}async callTool(e){return this.runExclusive(e.serverName,async()=>{let t=this.requireServer(e.serverName),n=await this.ensureConnectedClient(t);return t.updatedAt=gt(),n.callTool({name:e.toolName,arguments:e.arguments,context:e.context})})}async dispose(){let e=[...this.servers.keys()],t=[];for(let n of e)try{await this.unregisterServer(n)}catch(r){t.push(r)}if(t.length>0)throw AggregateError(t,"MCP manager dispose failed")}async ensureConnectedClient(e){if(await this.connectState(e),!e.client)throw Error(`MCP server "${e.registration.name}" does not have an initialized client.`);return e.client}async connectState(e){if(e.registration.disabled)throw Error(`MCP server "${e.registration.name}" is disabled and cannot be connected.`);if(e.status==="connected"&&e.client)return;e.status="connecting",e.updatedAt=gt();let t=e.client;try{t??=await this.clientFactory(e.registration),e.client=t,await t.connect(),e.status="connected",e.lastError=void 0,e.updatedAt=gt()}catch(n){throw await t?.disconnect().catch(()=>{}),e.status="disconnected",e.lastError=n instanceof Error?n.message:String(n),e.updatedAt=gt(),n}}async disconnectState(e){if(!e.client){e.status="disconnected",e.updatedAt=gt();return}try{await e.client.disconnect()}finally{e.status="disconnected",e.updatedAt=gt()}}requireServer(e){let t=this.servers.get(e);if(!t)throw Error(`Unknown MCP server: ${e}`);return t}async runExclusive(e,t){let n=this.operationLocks.get(e)??Promise.resolve(),r,o=new Promise((i)=>{r=i}),s=n.catch(()=>{return}).then(()=>o);this.operationLocks.set(e,s),await n.catch(()=>{return});try{return await t()}finally{if(r?.(),this.operationLocks.get(e)===s)this.operationLocks.delete(e)}}}import{createHash as C$}from"node:crypto";var jw=64,I$=/[^a-zA-Z0-9_-]+/g,qw=8,A$=1,R$="mcp_tool";function E$(e){return C$("sha1").update(e).digest("hex").slice(0,qw)}function P$(e){return e.replace(I$,"_")}var Lp=({serverName:e,toolName:t})=>{let n=`${e}__${t}`,r=P$(n);if(r===n&&n.length<=jw)return n;let o=E$(n),s=jw-A$-qw;return`${r.slice(0,s)||R$}_${o}`};import{createTool as _$}from"@cline/shared";function x$(e,t){let n=t.description?.trim();if(n)return n;return`Execute MCP tool "${t.name}" from server "${e}".`}async function Np(e){let t=await e.provider.listTools(e.serverName),n=e.nameTransform??Lp;return t.map((r)=>{let o=n({serverName:e.serverName,toolName:r.name});return _$({name:o,resultPolicy:"cache-oversized",description:x$(e.serverName,r),inputSchema:r.inputSchema,timeoutMs:e.timeoutMs,retryable:e.retryable,maxRetries:e.maxRetries,execute:async(s,i)=>e.provider.callTool({serverName:e.serverName,toolName:r.name,arguments:s&&typeof s==="object"&&!Array.isArray(s)?s:void 0,context:i})})})}import{appendFileSync as $$,existsSync as to,mkdirSync as Jw,readdirSync as W$,readFileSync as Up,renameSync as Yw,statSync as j$,writeFileSync as Qw}from"node:fs";import{join as Fp}from"node:path";import{resolveTeamDataDir as q$}from"@cline/shared/storage";import{existsSync as M$,mkdirSync as O$}from"node:fs";import{join as L$}from"node:path";import{safeJsonParse as Xw}from"@cline/shared";import{loadSqliteDb as N$,nowIso as Zr}from"@cline/shared/db";import{resolveDbDataDir as D$}from"@cline/shared/storage";function U$(){return D$()}function F$(e){let t=Xw(e);if(!Array.isArray(t))return[];let n=[];for(let r of t){if(!r||typeof r!=="object")continue;let o=r,{agentId:s,rolePrompt:i}=o;if(typeof s!=="string"||!s.trim())continue;if(typeof i!=="string"||!i.trim())continue;let a={agentId:s.trim(),rolePrompt:i};if(typeof o.modelId==="string"&&o.modelId.trim())a.modelId=o.modelId.trim();if(typeof o.maxIterations==="number"&&Number.isFinite(o.maxIterations))a.maxIterations=Math.max(1,Math.floor(o.maxIterations));n.push(a)}return n}function zw(e){return{...e,tasks:e.tasks.map((t)=>({...t,createdAt:new Date(t.createdAt),updatedAt:new Date(t.updatedAt)})),mailbox:e.mailbox.map((t)=>({...t,sentAt:new Date(t.sentAt),readAt:t.readAt?new Date(t.readAt):void 0})),missionLog:e.missionLog.map((t)=>({...t,ts:new Date(t.ts)})),runs:(e.runs??[]).map((t)=>({...t,startedAt:new Date(t.startedAt),endedAt:t.endedAt?new Date(t.endedAt):void 0,nextAttemptAt:t.nextAttemptAt?new Date(t.nextAttemptAt):void 0,heartbeatAt:t.heartbeatAt?new Date(t.heartbeatAt):void 0})),outcomes:(e.outcomes??[]).map((t)=>({...t,createdAt:new Date(t.createdAt),finalizedAt:t.finalizedAt?new Date(t.finalizedAt):void 0})),outcomeFragments:(e.outcomeFragments??[]).map((t)=>({...t,createdAt:new Date(t.createdAt),reviewedAt:t.reviewedAt?new Date(t.reviewedAt):void 0}))}}var Dp=2000,H$=2592000000,Kw=["agent_event","run_progress"],Gw=2,B$=["team_tasks","team_runs","team_outcomes","team_outcome_fragments","team_mailbox","team_mission_log"];function eo(e){if(e===void 0||e===null)return null;let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?null:t.toISOString()}function Ls(e,t){if(typeof e!=="string"||e.length===0)return t;return Xw(e)??t}var Ns=(e)=>typeof e==="string"?e:"";function Vw(e){return{teamId:e.teamId,teamName:e.teamName,reset:!0,members:e.members,tasks:e.tasks,mailbox:e.mailbox,missionLog:e.missionLog,runs:e.runs,outcomes:e.outcomes,outcomeFragments:e.outcomeFragments}}class Cd{teamDirPath;db;retentionPerTeam;retentionMs;constructor(e={}){this.teamDirPath=e.teamDir??U$(),this.retentionPerTeam=e.eventRetentionPerTeam??Dp,this.retentionMs=e.eventRetentionMs??H$}init(){this.getRawDb()}close(){this.db?.close?.(),this.db=void 0}ensureTeamDir(){if(!M$(this.teamDirPath))O$(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return L$(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let e=N$(this.dbPath());return this.ensureSchema(e),this.db=e,e}ensureSchema(e){if(e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;"),e.exec(`
313
+ `);if(n<0)break;let r=this.buffer.slice(0,n).trim();if(this.buffer=this.buffer.slice(n+1),r.length>0)t.push(r)}return t}}class Hw{registration;process;processClose;nextRequestId=1;pending=new Map;framedParser=new Mp;newlineParser=new Op;stderrBuffer="";connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;constructor(e){this.registration=e,this.requestTimeoutMs=bd(e.timeoutSeconds),this.connectAttemptTimeoutMs=Uw(e.timeoutSeconds)?this.requestTimeoutMs:Fw}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let e={protocolVersion:S$,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}};await this.ensureAgentPluginDataDirectory(),this.spawnProcess("newline");try{await this.request("initialize",e,this.connectAttemptTimeoutMs)}catch(t){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",e,this.connectAttemptTimeoutMs)}catch(n){throw await this.disconnect().catch(()=>{}),T$(this.registration.name,t,n)}}this.notify("notifications/initialized"),this.connected=!0}async ensureAgentPluginDataDirectory(){if(this.registration.metadata?.source!=="agent-plugin")return;let e=this.registration.metadata.pluginDataPath;if(typeof e!=="string"||e.length===0)return;await f$(e,{recursive:!0})}async disconnect(){let e=this.process,t=this.processClose;if(this.connected=!1,this.process=void 0,this.processClose=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!t)return;if(!e){if(!await Td(t,xp))throw Error(`MCP process for "${this.registration.name}" did not close during disconnect.`);return}if(!e.stdin.destroyed)e.stdin.end();if(await Td(t,v$))return;if(e.kill(),await Td(t,xp))return;if(e.kill("SIGKILL"),!await Td(t,xp))throw Error(`MCP process for "${this.registration.name}" did not exit during disconnect.`)}async listTools(){return((await this.request("tools/list")).tools??[]).filter((t)=>typeof t?.name==="string"&&typeof t.inputSchema==="object"&&t.inputSchema!==null).map((t)=>({name:t.name,description:t.description,inputSchema:t.inputSchema}))}async callTool(e){return this.request("tools/call",{name:e.name,arguments:e.arguments??{}},void 0,e.context?.signal)}spawnProcess(e){let t=this.registration.transport;if(t.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${t.type}`);this.framedParser=new Mp,this.newlineParser=new Op,this.stderrBuffer="",this.protocolMode=e;let n=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},r=g$(t.command,t.args??[],{cwd:t.cwd,env:{...process.env,...t.env??{}},stdio:["pipe","pipe","pipe"],...n});this.process=r,this.processClose=new Promise((o)=>{r.once("close",()=>o())}),r.stdout.on("data",(o)=>this.handleStdout(o)),r.stderr.on("data",(o)=>{if(this.process!==r)return;if(this.stderrBuffer+=o.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),r.once("error",(o)=>{if(this.process!==r)return;this.failAllPending(Error(`MCP process error: ${Qr(o)}`))}),r.once("exit",(o,s)=>{if(this.process!==r)return;this.connected=!1,this.process=void 0;let i=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${o??"null"}, signal=${s??"null"}).${i}`))})}handleStdout(e){try{let t=this.protocolMode==="framed"?this.framedParser.push(e):this.newlineParser.push(e);for(let n of t){let r=JSON.parse(n);if(typeof r.id!=="number")continue;let o=this.takePending(r.id);if(!o)continue;if(r.error){let s=r.error.message||`MCP request failed with code ${r.error.code??"unknown"}`;o.reject(Error(s));continue}o.resolve(r.result)}}catch(t){this.handleProtocolFailure(t)}}handleProtocolFailure(e){let t=this.process;if(!t)return;this.connected=!1,this.process=void 0;let n=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${Qr(e)}.${n}`)),t.kill()}async request(e,t,n=this.requestTimeoutMs,r){let o=this.process;if(!o?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let s=this.nextRequestId++,i={jsonrpc:"2.0",id:s,method:e,...t?{params:t}:{}},a=new Promise((d,c)=>{let l=setTimeout(()=>{this.takePending(s),c(this.createTimeoutError(e,n))},n),u=r?()=>{let p=this.takePending(s);if(!p)return;let m=r.reason instanceof Error?r.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${e}).`),{name:"AbortError"});p.reject(m)}:void 0;if(this.pending.set(s,{resolve:d,reject:c,timeout:l,signal:r,onAbort:u}),r&&u){if(r.addEventListener("abort",u,{once:!0}),r.aborted)u()}});if(!this.pending.has(s))return a;try{o.stdin.write(this.protocolMode==="framed"?Nw(i):Lw(i))}catch(d){let c=this.takePending(s);if(c)c.reject(d instanceof Error?d:Error(String(d)))}return a}createTimeoutError(e,t){return Error(h$(this.registration.name,t,e))}notify(e,t){let n=this.process;if(!n?.stdin.writable)return;let r={jsonrpc:"2.0",method:e,...t?{params:t}:{}};n.stdin.write(this.protocolMode==="framed"?Nw(r):Lw(r))}failAllPending(e){for(let t of[...this.pending.keys()]){let n=this.takePending(t);if(!n)continue;n.reject(e)}}takePending(e){let t=this.pending.get(e);if(!t)return;if(this.pending.delete(e),clearTimeout(t.timeout),t.signal&&t.onAbort)t.signal.removeEventListener("abort",t.onAbort);return t}}class Bw{registration;options;client;authContext;requestTimeoutMs;connectAttemptTimeoutMs;constructor(e,t){this.registration=e;this.options=t;this.requestTimeoutMs=bd(e.timeoutSeconds),this.connectAttemptTimeoutMs=Uw(e.timeoutSeconds)?this.requestTimeoutMs:b$}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let e=Pp({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??Ow,clientInformation:Ep(this.registration.oauthClient)});this.authContext=e;let t=await e.provider.tokens()?e.provider:void 0,n;try{n=new y$({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"});let r=Mw({registration:this.registration,oauthProvider:t,fetch:this.options.fetch,restrictConfiguredHeadersToOrigin:this.options.restrictConfiguredHeadersToOrigin});await n.connect(r,{timeout:this.connectAttemptTimeoutMs}),await e.clearError(),this.client=n}catch(r){await n?.close().catch(()=>{});let o=Ms(r,this.registration.name,this.connectAttemptTimeoutMs),s=_p(r),i=s?this.formatUnauthorizedMessage(e.getLastAuthorizationUrl()):Qr(o);if(s&&!this.hasStaticAuthorizationHeader())await e.markAuthorizationRequired(i);else await e.markConnectionError(i);throw Error(i)}}async disconnect(){let e=this.client;this.client=void 0,await e?.close()}async listTools(){let e=await this.ensureConnectedClient();try{return(await e.listTools(void 0,{timeout:this.requestTimeoutMs})).tools.map((n)=>({name:n.name,description:n.description,inputSchema:n.inputSchema&&typeof n.inputSchema==="object"&&!Array.isArray(n.inputSchema)?n.inputSchema:{}}))}catch(t){return await this.handleOperationError(t)}}async callTool(e){let t=await this.ensureConnectedClient();try{return await t.callTool({name:e.name,arguments:e.arguments??{}},void 0,{timeout:this.requestTimeoutMs,signal:e.context?.signal})}catch(n){return await this.handleOperationError(n)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage(e){if(this.hasStaticAuthorizationHeader())return`MCP server "${this.registration.name}" rejected its configured Authorization header. Update or remove that header before connecting with OAuth.`;let t=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!e)return`${t} Run authorizeMcpServerOAuth for this server.`;return`${t} Run authorizeMcpServerOAuth for this server and complete this URL: ${e}`}hasStaticAuthorizationHeader(){let e=this.registration.transport;if(e.type==="stdio")return!1;return Object.keys(e.headers??{}).some((t)=>t.toLowerCase()==="authorization")}async handleOperationError(e){let t=this.authContext??Pp({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??Ow,clientInformation:Ep(this.registration.oauthClient)}),n=Ms(e,this.registration.name,this.requestTimeoutMs),r=_p(e),o=r?this.formatUnauthorizedMessage(t.getLastAuthorizationUrl()):Qr(n);if(r&&!this.hasStaticAuthorizationHeader())await t.markAuthorizationRequired(o);else await t.markConnectionError(o);throw Error(o)}}function wd(e={}){return(t)=>t.transport.type==="stdio"?new Hw(t):new Bw(t,e)}Rp();import{isMcpTimeoutConfigured as $w,resolveMcpTimeoutSeconds as Ww}from"@cline/shared";var w$=5000;function gt(){return Date.now()}function k$(e){return e.map((t)=>({name:t.name,description:t.description,inputSchema:t.inputSchema}))}class kd{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor(e){this.clientFactory=e.clientFactory,this.toolsCacheTtlMs=e.toolsCacheTtlMs??w$}async registerServer(e){await this.runExclusive(e.name,async()=>{let t=this.servers.get(e.name);if(!t){this.servers.set(e.name,{registration:{...e},status:"disconnected",updatedAt:gt()});return}let n=JSON.stringify(t.registration.transport)!==JSON.stringify(e.transport),r=$w(t.registration.timeoutSeconds)!==$w(e.timeoutSeconds)||Ww(t.registration.timeoutSeconds)!==Ww(e.timeoutSeconds);if(t.registration={...e},t.updatedAt=gt(),n||r)await this.disconnectState(t),t.client=void 0,t.toolCache=void 0,t.toolCacheUpdatedAt=void 0})}async unregisterServer(e){await this.runExclusive(e,async()=>{let t=this.requireServer(e);await this.disconnectState(t),this.servers.delete(e)})}async connectServer(e){await this.runExclusive(e,async()=>{let t=this.requireServer(e);await this.connectState(t)})}async disconnectServer(e){await this.runExclusive(e,async()=>{let t=this.requireServer(e);await this.disconnectState(t)})}async setServerDisabled(e,t){await this.runExclusive(e,async()=>{let n=this.requireServer(e);if(n.registration={...n.registration,disabled:t},n.updatedAt=gt(),t)await this.disconnectState(n)})}listServers(){return[...this.servers.values()].map((e)=>({name:e.registration.name,status:e.status,disabled:e.registration.disabled===!0,lastError:e.lastError,toolCount:e.toolCache?.length??0,updatedAt:e.updatedAt,metadata:e.registration.metadata})).sort((e,t)=>e.name.localeCompare(t.name))}async listTools(e){let t=this.requireServer(e),n=t.toolCacheUpdatedAt??0;if(t.toolCache&&gt()-n<=this.toolsCacheTtlMs)return t.toolCache;return this.refreshTools(e)}async refreshTools(e){return this.runExclusive(e,async()=>{let t=this.requireServer(e),r=await(await this.ensureConnectedClient(t)).listTools(),o=k$(r);return t.toolCache=o,t.toolCacheUpdatedAt=gt(),t.updatedAt=gt(),o})}async callTool(e){return this.runExclusive(e.serverName,async()=>{let t=this.requireServer(e.serverName),n=await this.ensureConnectedClient(t);return t.updatedAt=gt(),n.callTool({name:e.toolName,arguments:e.arguments,context:e.context})})}async dispose(){let e=[...this.servers.keys()],t=[];for(let n of e)try{await this.unregisterServer(n)}catch(r){t.push(r)}if(t.length>0)throw AggregateError(t,"MCP manager dispose failed")}async ensureConnectedClient(e){if(await this.connectState(e),!e.client)throw Error(`MCP server "${e.registration.name}" does not have an initialized client.`);return e.client}async connectState(e){if(e.registration.disabled)throw Error(`MCP server "${e.registration.name}" is disabled and cannot be connected.`);if(e.status==="connected"&&e.client)return;e.status="connecting",e.updatedAt=gt();let t=e.client;try{t??=await this.clientFactory(e.registration),e.client=t,await t.connect(),e.status="connected",e.lastError=void 0,e.updatedAt=gt()}catch(n){throw await t?.disconnect().catch(()=>{}),e.status="disconnected",e.lastError=n instanceof Error?n.message:String(n),e.updatedAt=gt(),n}}async disconnectState(e){if(!e.client){e.status="disconnected",e.updatedAt=gt();return}try{await e.client.disconnect()}finally{e.status="disconnected",e.updatedAt=gt()}}requireServer(e){let t=this.servers.get(e);if(!t)throw Error(`Unknown MCP server: ${e}`);return t}async runExclusive(e,t){let n=this.operationLocks.get(e)??Promise.resolve(),r,o=new Promise((i)=>{r=i}),s=n.catch(()=>{return}).then(()=>o);this.operationLocks.set(e,s),await n.catch(()=>{return});try{return await t()}finally{if(r?.(),this.operationLocks.get(e)===s)this.operationLocks.delete(e)}}}import{createHash as C$}from"node:crypto";var jw=64,I$=/[^a-zA-Z0-9_-]+/g,qw=8,A$=1,R$="mcp_tool";function E$(e){return C$("sha1").update(e).digest("hex").slice(0,qw)}function P$(e){return e.replace(I$,"_")}var Lp=({serverName:e,toolName:t})=>{let n=`${e}__${t}`,r=P$(n);if(r===n&&n.length<=jw)return n;let o=E$(n),s=jw-A$-qw;return`${r.slice(0,s)||R$}_${o}`};import{createTool as _$}from"@cline/shared";function x$(e,t){let n=t.description?.trim();if(n)return n;return`Execute MCP tool "${t.name}" from server "${e}".`}async function Np(e){let t=await e.provider.listTools(e.serverName),n=e.nameTransform??Lp;return t.map((r)=>{let o=n({serverName:e.serverName,toolName:r.name});return _$({name:o,resultPolicy:"cache-oversized",description:x$(e.serverName,r),inputSchema:r.inputSchema,timeoutMs:e.timeoutMs,retryable:e.retryable,maxRetries:e.maxRetries,execute:async(s,i)=>e.provider.callTool({serverName:e.serverName,toolName:r.name,arguments:s&&typeof s==="object"&&!Array.isArray(s)?s:void 0,context:i})})})}import{appendFileSync as $$,existsSync as to,mkdirSync as Jw,readdirSync as W$,readFileSync as Up,renameSync as Yw,statSync as j$,writeFileSync as Qw}from"node:fs";import{join as Fp}from"node:path";import{resolveTeamDataDir as q$}from"@cline/shared/storage";import{existsSync as M$,mkdirSync as O$}from"node:fs";import{join as L$}from"node:path";import{safeJsonParse as Xw}from"@cline/shared";import{loadSqliteDb as N$,nowIso as Zr}from"@cline/shared/db";import{resolveDbDataDir as D$}from"@cline/shared/storage";function U$(){return D$()}function F$(e){let t=Xw(e);if(!Array.isArray(t))return[];let n=[];for(let r of t){if(!r||typeof r!=="object")continue;let o=r,{agentId:s,rolePrompt:i}=o;if(typeof s!=="string"||!s.trim())continue;if(typeof i!=="string"||!i.trim())continue;let a={agentId:s.trim(),rolePrompt:i};if(typeof o.modelId==="string"&&o.modelId.trim())a.modelId=o.modelId.trim();if(typeof o.maxIterations==="number"&&Number.isFinite(o.maxIterations))a.maxIterations=Math.max(1,Math.floor(o.maxIterations));n.push(a)}return n}function zw(e){return{...e,tasks:e.tasks.map((t)=>({...t,createdAt:new Date(t.createdAt),updatedAt:new Date(t.updatedAt)})),mailbox:e.mailbox.map((t)=>({...t,sentAt:new Date(t.sentAt),readAt:t.readAt?new Date(t.readAt):void 0})),missionLog:e.missionLog.map((t)=>({...t,ts:new Date(t.ts)})),runs:(e.runs??[]).map((t)=>({...t,startedAt:new Date(t.startedAt),endedAt:t.endedAt?new Date(t.endedAt):void 0,nextAttemptAt:t.nextAttemptAt?new Date(t.nextAttemptAt):void 0,heartbeatAt:t.heartbeatAt?new Date(t.heartbeatAt):void 0,lastProgressAt:t.lastProgressAt?new Date(t.lastProgressAt):void 0})),outcomes:(e.outcomes??[]).map((t)=>({...t,createdAt:new Date(t.createdAt),finalizedAt:t.finalizedAt?new Date(t.finalizedAt):void 0})),outcomeFragments:(e.outcomeFragments??[]).map((t)=>({...t,createdAt:new Date(t.createdAt),reviewedAt:t.reviewedAt?new Date(t.reviewedAt):void 0}))}}var Dp=2000,H$=2592000000,Kw=["agent_event","run_progress"],Gw=2,B$=["team_tasks","team_runs","team_outcomes","team_outcome_fragments","team_mailbox","team_mission_log"];function eo(e){if(e===void 0||e===null)return null;let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?null:t.toISOString()}function Ls(e,t){if(typeof e!=="string"||e.length===0)return t;return Xw(e)??t}var Ns=(e)=>typeof e==="string"?e:"";function Vw(e){return{teamId:e.teamId,teamName:e.teamName,reset:!0,members:e.members,tasks:e.tasks,mailbox:e.mailbox,missionLog:e.missionLog,runs:e.runs,outcomes:e.outcomes,outcomeFragments:e.outcomeFragments}}class Cd{teamDirPath;db;retentionPerTeam;retentionMs;constructor(e={}){this.teamDirPath=e.teamDir??U$(),this.retentionPerTeam=e.eventRetentionPerTeam??Dp,this.retentionMs=e.eventRetentionMs??H$}init(){this.getRawDb()}close(){this.db?.close?.(),this.db=void 0}ensureTeamDir(){if(!M$(this.teamDirPath))O$(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return L$(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let e=N$(this.dbPath());return this.ensureSchema(e),this.db=e,e}ensureSchema(e){if(e.exec("PRAGMA journal_mode = WAL;"),e.exec("PRAGMA busy_timeout = 5000;"),e.exec(`
314
314
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
315
315
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
316
316
  version INTEGER NOT NULL
@@ -474,7 +474,7 @@ ${a}`:s.instructions}})}})}}class cw{watcher;ready;stopped=!1;constructor(e){thi
474
474
  data_json = excluded.data_json`);for(let s of n.outcomeFragments)o.run(t,s.outcomeId,s.id,s.section,s.sourceAgentId,s.sourceRunId??null,s.content,s.status,s.reviewedBy??null,eo(s.reviewedAt),JSON.stringify(s))}let r=(o,s)=>e.prepare(`INSERT INTO ${o} (team_name, ${s}, data_json) VALUES (?, ?, ?)
475
475
  ON CONFLICT(team_name, ${s}) DO UPDATE SET data_json = excluded.data_json`);if(n.mailbox.length>0){let o=r("team_mailbox","message_id");for(let s of n.mailbox)o.run(t,s.id,JSON.stringify(s))}if(n.missionLog.length>0){let o=r("team_mission_log","entry_id");for(let s of n.missionLog)o.run(t,s.id,JSON.stringify(s))}}pruneTeamEvents(e,t){let n=new Date(Date.now()-this.retentionMs).toISOString();e.prepare("DELETE FROM team_events WHERE team_name = ? AND ts < ?").run(t,n);let r=e.prepare("SELECT id FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT 1 OFFSET ?").get(t,this.retentionPerTeam);if(r&&typeof r.id==="number")e.prepare("DELETE FROM team_events WHERE team_name = ? AND id <= ?").run(t,r.id)}vacuum(){this.getRawDb().exec("VACUUM;")}markInProgressRunsInterrupted(e,t){let n=Ue(e),r=this.queryAll("SELECT run_id, data_json FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[n]);if(r.length===0)return[];let o=Zr();return this.withTransaction(()=>{for(let s of r){let i=Ls(s.data_json,void 0),a=i?JSON.stringify({...i,status:"interrupted",error:t,endedAt:o}):null;this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1,
476
476
  data_json = COALESCE(?, data_json)
477
- WHERE team_name = ? AND run_id = ?`,[t,o,a,n,Ns(s.run_id)])}}),r.map((s)=>Ns(s.run_id))}handleTeamEvent(e,t){if(!Qt(t))return;this.appendTeamEvent(e,t.type,yn(t)),this.pruneTeamEvents(this.getRawDb(),Ue(e))}}var Zw=4194304;function ek(){return new Date().toISOString()}function tk(e){return{...e,tasks:e.tasks.map((t)=>({...t,createdAt:new Date(t.createdAt),updatedAt:new Date(t.updatedAt)})),mailbox:e.mailbox.map((t)=>({...t,sentAt:new Date(t.sentAt),readAt:t.readAt?new Date(t.readAt):void 0})),missionLog:e.missionLog.map((t)=>({...t,ts:new Date(t.ts)})),runs:(e.runs??[]).map((t)=>({...t,startedAt:new Date(t.startedAt),endedAt:t.endedAt?new Date(t.endedAt):void 0,nextAttemptAt:t.nextAttemptAt?new Date(t.nextAttemptAt):void 0,heartbeatAt:t.heartbeatAt?new Date(t.heartbeatAt):void 0})),outcomes:(e.outcomes??[]).map((t)=>({...t,createdAt:new Date(t.createdAt),finalizedAt:t.finalizedAt?new Date(t.finalizedAt):void 0})),outcomeFragments:(e.outcomeFragments??[]).map((t)=>({...t,createdAt:new Date(t.createdAt),reviewedAt:t.reviewedAt?new Date(t.reviewedAt):void 0}))}}class Id{teamDirPath;constructor(e={}){this.teamDirPath=e.teamDir??q$()}init(){this.ensureTeamDir()}listTeamNames(){if(!to(this.teamDirPath))return[];return W$(this.teamDirPath,{withFileTypes:!0}).filter((e)=>e.isDirectory()).filter((e)=>to(this.statePath(e.name))).map((e)=>e.name).sort()}readState(e){let t=this.readEnvelope(e);return t?.teamState?tk(t.teamState):void 0}readHistory(e,t=200){let n=this.historyPath(e);if(!to(n))return[];return Up(n,"utf8").split(`
477
+ WHERE team_name = ? AND run_id = ?`,[t,o,a,n,Ns(s.run_id)])}}),r.map((s)=>Ns(s.run_id))}handleTeamEvent(e,t){if(!Qt(t))return;this.appendTeamEvent(e,t.type,yn(t)),this.pruneTeamEvents(this.getRawDb(),Ue(e))}}var Zw=4194304;function ek(){return new Date().toISOString()}function tk(e){return{...e,tasks:e.tasks.map((t)=>({...t,createdAt:new Date(t.createdAt),updatedAt:new Date(t.updatedAt)})),mailbox:e.mailbox.map((t)=>({...t,sentAt:new Date(t.sentAt),readAt:t.readAt?new Date(t.readAt):void 0})),missionLog:e.missionLog.map((t)=>({...t,ts:new Date(t.ts)})),runs:(e.runs??[]).map((t)=>({...t,startedAt:new Date(t.startedAt),endedAt:t.endedAt?new Date(t.endedAt):void 0,nextAttemptAt:t.nextAttemptAt?new Date(t.nextAttemptAt):void 0,heartbeatAt:t.heartbeatAt?new Date(t.heartbeatAt):void 0,lastProgressAt:t.lastProgressAt?new Date(t.lastProgressAt):void 0})),outcomes:(e.outcomes??[]).map((t)=>({...t,createdAt:new Date(t.createdAt),finalizedAt:t.finalizedAt?new Date(t.finalizedAt):void 0})),outcomeFragments:(e.outcomeFragments??[]).map((t)=>({...t,createdAt:new Date(t.createdAt),reviewedAt:t.reviewedAt?new Date(t.reviewedAt):void 0}))}}class Id{teamDirPath;constructor(e={}){this.teamDirPath=e.teamDir??q$()}init(){this.ensureTeamDir()}listTeamNames(){if(!to(this.teamDirPath))return[];return W$(this.teamDirPath,{withFileTypes:!0}).filter((e)=>e.isDirectory()).filter((e)=>to(this.statePath(e.name))).map((e)=>e.name).sort()}readState(e){let t=this.readEnvelope(e);return t?.teamState?tk(t.teamState):void 0}readHistory(e,t=200){let n=this.historyPath(e);if(!to(n))return[];return Up(n,"utf8").split(`
478
478
  `).map((r)=>r.trim()).filter(Boolean).map((r)=>{try{return JSON.parse(r)}catch{return}}).filter((r)=>r!==void 0).reverse().slice(0,t)}loadRuntime(e){let t=this.readEnvelope(e);return{state:t?.teamState?tk(t.teamState):void 0,teammates:t?.teammates??[],interruptedRunIds:[]}}handleTeamEvent(e,t){if(!Qt(t))return;this.appendHistory(e,[{type:t.type,payload:yn(t)}])}persistBatch(e,t){if(this.persistRuntime(e,t.getFullState(),t.teammates),t.events.length>0)this.appendHistory(e,t.events)}appendHistory(e,t){this.ensureTeamSubdir(e);let n=ek(),r=this.historyPath(e);$$(r,t.map((o)=>`${JSON.stringify({ts:n,eventType:o.type,payload:o.payload})}
479
479
  `).join(""),"utf8");try{this.compactHistoryIfNeeded(r)}catch{}}compactHistoryIfNeeded(e){let t=0;try{t=j$(e).size}catch{return}if(t<Zw)return;let n=Up(e,"utf8").split(`
480
480
  `).filter(Boolean),r=[],o=0;for(let i=n.length-1;i>=0&&r.length<Dp;i--){let a=n[i];if(o+=Buffer.byteLength(a,"utf8")+1,o>Zw/2&&r.length>0)break;r.push(a)}r.reverse();let s=`${e}.tmp`;Qw(s,`${r.join(`
@@ -544,7 +544,7 @@ ${a}`:s.instructions}})}})}}class cw{watcher;ready;stopped=!1;constructor(e){thi
544
544
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
545
545
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
546
546
  metadata_json, transcript_path, hook_path, messages_path, updated_at
547
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[e.sessionId,e.source,e.pid,e.startedAt,null,null,"running",0,e.interactive?1:0,e.provider,e.model,e.cwd,e.workspaceRoot,e.teamName??null,e.enableTools?1:0,e.enableSpawn?1:0,e.enableTeams?1:0,null,null,null,null,0,e.prompt??null,e.metadata?JSON.stringify(e.metadata):null,"","",e.messagesPath,pe()])}}function ZW(e){return{text:e.text,usage:e.usage,inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,iterations:e.iterations,finishReason:e.finishReason,toolCalls:e.toolCalls.map((t)=>({name:t.name,input:t.input,output:t.output,error:t.error,durationMs:t.durationMs}))}}function ej(e){return e.mode==="plan"?"plan":e.mode==="yolo"?"yolo":"act"}function kk(e={}){let t=async(r)=>r,n=new Fs({sessionService:new Ws(new $s),capabilities:{toolExecutors:{submit:t}},fetch:e.fetch,telemetry:e.telemetry});return{async startSession(r,o){let s=(r.cwd?.trim()||r.workspaceRoot).trim(),i=await n.startSession({source:Ee.CORE,mode:"automation",sessionMetadata:et(o?.sessionMetadata,{mode:"automation",trigger:r.source}),interactive:!1,config:{providerId:QW(r.provider),modelId:r.model,apiKey:r.apiKey?.trim()||void 0,cwd:s,workspaceRoot:r.workspaceRoot,systemPrompt:r.systemPrompt??"",mode:ej(r),maxIterations:r.maxIterations,enableTools:r.enableTools!==!1,enableSpawnAgent:r.enableSpawn!==!1,enableAgentTeams:r.enableTeams!==!1,disableMcpSettingsTools:r.disableMcpSettingsTools,agentPluginPaths:r.agentPluginPaths,missionLogIntervalSteps:r.missionStepInterval,missionLogIntervalMs:r.missionTimeIntervalMs},toolPolicies:r.toolPolicies??{"*":{autoApprove:r.autoApproveTools!==!1}},localRuntime:{configExtensions:r.configExtensions}});return{sessionId:i.sessionId,startResult:{sessionId:i.sessionId,manifestPath:i.manifestPath,messagesPath:i.messagesPath}}},async sendSession(r,o){let s=await n.runTurn({sessionId:r,prompt:o.prompt,userImages:o.attachments?.userImages,userFiles:o.attachments?.userFiles?.map((i)=>i.content)});if(!s)throw Error("local hub schedule runtime returned no turn result");return{result:ZW(s)}},async abortSession(r){return await n.abort(r,Error("hub schedule abort")),{applied:!0}},async stopSession(r){return await n.stopSession(r),{applied:!0}}}}import{CLINE_HUB_DEV_PORT as tj,CLINE_HUB_PORT as nj,resolveClineBuildEnv as rj}from"@cline/shared";var oj="CLINE_HUB_HOST",sj="CLINE_HUB_PORT",ij="CLINE_HUB_PATHNAME",aj="127.0.0.1",dj=nj,cj="/hub";function Ck(e){return rj(e)==="development"?tj:dj}function uj(e={}){return(e.env??process.env)[oj]?.trim()||aj}function om(e={}){let n=(e.env??process.env)[sj]?.trim();if(!n)return Ck(e);let r=Number.parseInt(n,10);if(!Number.isInteger(r)||r<1||r>65535)return Ck(e);return r}function lj(e={}){return(e.env??process.env)[ij]?.trim()||cj}function sm(e={},t={}){return{host:e.host??uj(t),port:e.port??om(t),pathname:e.pathname??lj(t)}}import{chmodSync as pj,existsSync as mj,mkdirSync as gj}from"node:fs";import{dirname as fj}from"node:path";import{loadSqliteDb as hj}from"@cline/shared/db";var Ik=3;class Ak extends Error{lockFile;constructor(e){super(`Hub instance lock is held by a live Hub: ${e}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=e}}function js(e){return e instanceof Error&&e.name==="HubLockHeldError"}function Rk(e){return`${e}.instance.lock`}class no{db;lockFile;constructor(e,t){this.lockFile=e,this.db=t}get held(){return this.db!==void 0}release(){let e=this.db;if(!e)return;this.db=void 0;try{e.exec("ROLLBACK;")}catch{}e.close?.()}static acquire(e){let t=!1,n;try{gj(fj(e),{recursive:!0}),t=mj(e),n=hj(e)}catch{return new no(e,void 0)}try{n.exec("PRAGMA busy_timeout = 0;"),n.exec("BEGIN EXCLUSIVE;")}catch(r){if(n.close?.(),yj(r))throw new Ak(e);return new no(e,void 0)}if(!t)try{pj(e,384)}catch{}return new no(e,n)}}function yj(e){let t=e instanceof Error?e.message:String(e),n=e?.code;return n==="SQLITE_BUSY"||n==="SQLITE_LOCKED"||t.includes("SQLITE_BUSY")||t.includes("SQLITE_LOCKED")||t.includes("database is locked")}import{join as Lj}from"node:path";import{createHash as Sj,randomBytes as xk}from"node:crypto";import{mkdir as am,open as Ek,readFile as Mk,rename as bj,rm as dm,writeFile as vj}from"node:fs/promises";import{dirname as Ok,join as cm}from"node:path";import{ensureLoopbackProxyBypass as Tj,isHubProtocolCompatible as bre}from"@cline/shared";import{resolveClineDataDir as Md,resolveClineDir as Tre}from"@cline/shared/storage";var wj="CLINE_HUB_DISCOVERY_PATH",kj="CLINE_HUB_BUILD_ID",Cj="CLINE_HUB_BUILD_EPOCH_MS",Ij=30000,Aj=15000,Pk=100;function Rj(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Ej(e){return Sj("sha256").update(e).digest("hex").slice(0,12)}function Pj(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function Lk(){return xk(32).toString("hex")}function _k(e){return new Promise((t)=>setTimeout(t,e))}function _j(e){return`${e}.lock`}async function xj(e){try{let t=JSON.parse(await Mk(cm(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function im(e){await dm(e,{recursive:!0,force:!0}).catch(()=>{return})}function qs(){let e=process.env[kj]?.trim();if(e)return e;return"sdk-v1-4d20965c7ec7543425ee742f73e8bcb72e36b0307ddd925185fc0fcdc1edbdfc".trim()||`source-${String(Dr.version)}`}function Nk(){let e=Number(process.env[Cj]);if(Number.isFinite(e)&&e>0)return e;return Number.isFinite(1790908320303)?1790908320303:void 0}function Od(e=process.argv[1]?.trim()||process.cwd()){let t=`hub-${Ej(e)}`,n=process.env[wj]?.trim()||cm(Md(),"locks","hub","owners",`${Rj(t)}.json`);return{ownerId:t,discoveryPath:n}}async function Ld(e){try{let t=JSON.parse(await Mk(e,"utf8"));if(typeof t.hubId!=="string"||typeof t.protocolVersion!=="string"||typeof t.authToken!=="string"||typeof t.host!=="string"||typeof t.port!=="number"||typeof t.url!=="string"||typeof t.startedAt!=="string"||typeof t.updatedAt!=="string")return;return{hubId:t.hubId,protocolVersion:t.protocolVersion,minClientProtocolVersion:typeof t.minClientProtocolVersion==="string"?t.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof t.maxClientProtocolVersion==="string"?t.maxClientProtocolVersion:void 0,capabilities:Array.isArray(t.capabilities)?t.capabilities.filter((n)=>typeof n==="string"):void 0,coreVersion:typeof t.coreVersion==="string"?t.coreVersion:void 0,buildId:typeof t.buildId==="string"?t.buildId:void 0,buildEpochMs:typeof t.buildEpochMs==="number"?t.buildEpochMs:void 0,authToken:t.authToken,host:t.host,port:t.port,url:t.url,pid:typeof t.pid==="number"?t.pid:void 0,startedAt:t.startedAt,updatedAt:t.updatedAt}}catch{return}}async function um(e,t){await Uk(e,async()=>{let n=Ok(e);await am(n,{recursive:!0});let r=`${e}.${process.pid}.${xk(6).toString("hex")}.tmp`,o;try{o=await Ek(r,"wx",384),await o.writeFile(`${JSON.stringify(t,null,2)}
547
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[e.sessionId,e.source,e.pid,e.startedAt,null,null,"running",0,e.interactive?1:0,e.provider,e.model,e.cwd,e.workspaceRoot,e.teamName??null,e.enableTools?1:0,e.enableSpawn?1:0,e.enableTeams?1:0,null,null,null,null,0,e.prompt??null,e.metadata?JSON.stringify(e.metadata):null,"","",e.messagesPath,pe()])}}function ZW(e){return{text:e.text,usage:e.usage,inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,iterations:e.iterations,finishReason:e.finishReason,toolCalls:e.toolCalls.map((t)=>({name:t.name,input:t.input,output:t.output,error:t.error,durationMs:t.durationMs}))}}function ej(e){return e.mode==="plan"?"plan":e.mode==="yolo"?"yolo":"act"}function kk(e={}){let t=async(r)=>r,n=new Fs({sessionService:new Ws(new $s),capabilities:{toolExecutors:{submit:t}},fetch:e.fetch,telemetry:e.telemetry});return{async startSession(r,o){let s=(r.cwd?.trim()||r.workspaceRoot).trim(),i=await n.startSession({source:Ee.CORE,mode:"automation",sessionMetadata:et(o?.sessionMetadata,{mode:"automation",trigger:r.source}),interactive:!1,config:{providerId:QW(r.provider),modelId:r.model,apiKey:r.apiKey?.trim()||void 0,cwd:s,workspaceRoot:r.workspaceRoot,systemPrompt:r.systemPrompt??"",mode:ej(r),maxIterations:r.maxIterations,enableTools:r.enableTools!==!1,enableSpawnAgent:r.enableSpawn!==!1,enableAgentTeams:r.enableTeams!==!1,disableMcpSettingsTools:r.disableMcpSettingsTools,agentPluginPaths:r.agentPluginPaths,missionLogIntervalSteps:r.missionStepInterval,missionLogIntervalMs:r.missionTimeIntervalMs},toolPolicies:r.toolPolicies??{"*":{autoApprove:r.autoApproveTools!==!1}},localRuntime:{configExtensions:r.configExtensions}});return{sessionId:i.sessionId,startResult:{sessionId:i.sessionId,manifestPath:i.manifestPath,messagesPath:i.messagesPath}}},async sendSession(r,o){let s=await n.runTurn({sessionId:r,prompt:o.prompt,userImages:o.attachments?.userImages,userFiles:o.attachments?.userFiles?.map((i)=>i.content)});if(!s)throw Error("local hub schedule runtime returned no turn result");return{result:ZW(s)}},async abortSession(r){return await n.abort(r,Error("hub schedule abort")),{applied:!0}},async stopSession(r){return await n.stopSession(r),{applied:!0}}}}import{CLINE_HUB_DEV_PORT as tj,CLINE_HUB_PORT as nj,resolveClineBuildEnv as rj}from"@cline/shared";var oj="CLINE_HUB_HOST",sj="CLINE_HUB_PORT",ij="CLINE_HUB_PATHNAME",aj="127.0.0.1",dj=nj,cj="/hub";function Ck(e){return rj(e)==="development"?tj:dj}function uj(e={}){return(e.env??process.env)[oj]?.trim()||aj}function om(e={}){let n=(e.env??process.env)[sj]?.trim();if(!n)return Ck(e);let r=Number.parseInt(n,10);if(!Number.isInteger(r)||r<1||r>65535)return Ck(e);return r}function lj(e={}){return(e.env??process.env)[ij]?.trim()||cj}function sm(e={},t={}){return{host:e.host??uj(t),port:e.port??om(t),pathname:e.pathname??lj(t)}}import{chmodSync as pj,existsSync as mj,mkdirSync as gj}from"node:fs";import{dirname as fj}from"node:path";import{loadSqliteDb as hj}from"@cline/shared/db";var Ik=3;class Ak extends Error{lockFile;constructor(e){super(`Hub instance lock is held by a live Hub: ${e}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=e}}function js(e){return e instanceof Error&&e.name==="HubLockHeldError"}function Rk(e){return`${e}.instance.lock`}class no{db;lockFile;constructor(e,t){this.lockFile=e,this.db=t}get held(){return this.db!==void 0}release(){let e=this.db;if(!e)return;this.db=void 0;try{e.exec("ROLLBACK;")}catch{}e.close?.()}static acquire(e){let t=!1,n;try{gj(fj(e),{recursive:!0}),t=mj(e),n=hj(e)}catch{return new no(e,void 0)}try{n.exec("PRAGMA busy_timeout = 0;"),n.exec("BEGIN EXCLUSIVE;")}catch(r){if(n.close?.(),yj(r))throw new Ak(e);return new no(e,void 0)}if(!t)try{pj(e,384)}catch{}return new no(e,n)}}function yj(e){let t=e instanceof Error?e.message:String(e),n=e?.code;return n==="SQLITE_BUSY"||n==="SQLITE_LOCKED"||t.includes("SQLITE_BUSY")||t.includes("SQLITE_LOCKED")||t.includes("database is locked")}import{join as Lj}from"node:path";import{createHash as Sj,randomBytes as xk}from"node:crypto";import{mkdir as am,open as Ek,readFile as Mk,rename as bj,rm as dm,writeFile as vj}from"node:fs/promises";import{dirname as Ok,join as cm}from"node:path";import{ensureLoopbackProxyBypass as Tj,isHubProtocolCompatible as bre}from"@cline/shared";import{resolveClineDataDir as Md,resolveClineDir as Tre}from"@cline/shared/storage";var wj="CLINE_HUB_DISCOVERY_PATH",kj="CLINE_HUB_BUILD_ID",Cj="CLINE_HUB_BUILD_EPOCH_MS",Ij=30000,Aj=15000,Pk=100;function Rj(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Ej(e){return Sj("sha256").update(e).digest("hex").slice(0,12)}function Pj(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function Lk(){return xk(32).toString("hex")}function _k(e){return new Promise((t)=>setTimeout(t,e))}function _j(e){return`${e}.lock`}async function xj(e){try{let t=JSON.parse(await Mk(cm(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function im(e){await dm(e,{recursive:!0,force:!0}).catch(()=>{return})}function qs(){let e=process.env[kj]?.trim();if(e)return e;return"sdk-v1-044def9156996e41136ac41a5f678e15528d75a1173224e611a98328aae6e851".trim()||`source-${String(Dr.version)}`}function Nk(){let e=Number(process.env[Cj]);if(Number.isFinite(e)&&e>0)return e;return Number.isFinite(1790915660568)?1790915660568:void 0}function Od(e=process.argv[1]?.trim()||process.cwd()){let t=`hub-${Ej(e)}`,n=process.env[wj]?.trim()||cm(Md(),"locks","hub","owners",`${Rj(t)}.json`);return{ownerId:t,discoveryPath:n}}async function Ld(e){try{let t=JSON.parse(await Mk(e,"utf8"));if(typeof t.hubId!=="string"||typeof t.protocolVersion!=="string"||typeof t.authToken!=="string"||typeof t.host!=="string"||typeof t.port!=="number"||typeof t.url!=="string"||typeof t.startedAt!=="string"||typeof t.updatedAt!=="string")return;return{hubId:t.hubId,protocolVersion:t.protocolVersion,minClientProtocolVersion:typeof t.minClientProtocolVersion==="string"?t.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof t.maxClientProtocolVersion==="string"?t.maxClientProtocolVersion:void 0,capabilities:Array.isArray(t.capabilities)?t.capabilities.filter((n)=>typeof n==="string"):void 0,coreVersion:typeof t.coreVersion==="string"?t.coreVersion:void 0,buildId:typeof t.buildId==="string"?t.buildId:void 0,buildEpochMs:typeof t.buildEpochMs==="number"?t.buildEpochMs:void 0,authToken:t.authToken,host:t.host,port:t.port,url:t.url,pid:typeof t.pid==="number"?t.pid:void 0,startedAt:t.startedAt,updatedAt:t.updatedAt}}catch{return}}async function um(e,t){await Uk(e,async()=>{let n=Ok(e);await am(n,{recursive:!0});let r=`${e}.${process.pid}.${xk(6).toString("hex")}.tmp`,o;try{o=await Ek(r,"wx",384),await o.writeFile(`${JSON.stringify(t,null,2)}
548
548
  `,{encoding:"utf8"}),await o.sync(),await o.close(),o=void 0,await bj(r,e);let s;try{s=await Ek(n,"r"),await s.sync()}catch{}finally{await s?.close().catch(()=>{return})}}catch(s){throw await o?.close().catch(()=>{return}),await dm(r,{force:!0}).catch(()=>{return}),s}})}async function Dk(e,t){return await Uk(e,async()=>{if((await Ld(e))?.hubId!==t)return!1;return await dm(e,{force:!0}),!0})}async function Mj(e,t,n){let r=_j(e);await am(Ok(r),{recursive:!0});let o=Date.now()+Aj;while(!0){try{await am(r,{recursive:!1})}catch(s){if((s instanceof Error&&"code"in s?String(s.code):"")!=="EEXIST")throw s;let a=await xj(r);if(!a){if(Date.now()>=o){await im(r);continue}await _k(Pk);continue}let d=Date.now()-Date.parse(a.acquiredAt);if(!Pj(a.pid)||d>Ij){await im(r);continue}if(Date.now()>=o)throw Error(`Timed out waiting for hub ${t} lock ${r}`);await _k(Pk);continue}try{return await vj(cm(r,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
549
549
  `,"utf8"),await n()}finally{await im(r)}}}function Uk(e,t){return Mj(`${e}.mutation`,"discovery mutation",t)}async function zs(e,t){Tj();try{let n=await fetch(t?.authToken?Oj(e):Fk(e),{headers:t?.authToken?{authorization:`Bearer ${t.authToken}`}:void 0,signal:t?.signal});if(!n.ok)return;let r=await n.json();if(typeof r.protocolVersion!=="string"||typeof r.host!=="string"||typeof r.port!=="number"||typeof r.url!=="string")return;return{protocolVersion:r.protocolVersion,minClientProtocolVersion:typeof r.minClientProtocolVersion==="string"?r.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof r.maxClientProtocolVersion==="string"?r.maxClientProtocolVersion:void 0,capabilities:Array.isArray(r.capabilities)?r.capabilities.filter((o)=>typeof o==="string"):void 0,coreVersion:typeof r.coreVersion==="string"?r.coreVersion:void 0,buildId:typeof r.buildId==="string"?r.buildId:void 0,buildEpochMs:typeof r.buildEpochMs==="number"?r.buildEpochMs:void 0,host:r.host,port:r.port,url:r.url,hubId:typeof r.hubId==="string"?r.hubId:void 0,authToken:typeof r.authToken==="string"?r.authToken:void 0,pid:typeof r.pid==="number"?r.pid:void 0,startedAt:typeof r.startedAt==="string"?r.startedAt:void 0,updatedAt:typeof r.updatedAt==="string"?r.updatedAt:void 0}}catch{return}}function ro(e,t,n="/hub"){return new URL(`ws://${e}:${t}${n}`).toString()}function Fk(e){let t=new URL(e);return t.protocol=t.protocol==="wss:"?"https:":"http:",t.pathname="/health",t.search="",t.toString()}function Oj(e){let t=new URL(Fk(e));return t.pathname="/status",t.toString()}var Nj="shared:cline",Dj="CLINE_HUB_DISCOVERY_PATH",Uj="hub-production";function Nd(e=Nj){return Od(`${e}@${qs()}`)}function Dd(){return{ownerId:Uj,discoveryPath:process.env[Dj]?.trim()||Lj(Md(),"locks","hub","production.json")}}function Fj(e){if(typeof e==="string")return e.trim()||void 0;if(!Array.isArray(e))return;return e.map((n)=>{if(n&&typeof n==="object"&&"type"in n&&n.type==="text"&&"text"in n&&typeof n.text==="string")return n.text.trim();return""}).filter(Boolean).join(`
550
550
  `).trim()||void 0}var Hk=120,lm="...";function pm(e){let t=e.trim();if(!t)return"";if(Buffer.byteLength(t,"utf8")<=Hk)return t;let n=Hk-Buffer.byteLength(lm,"utf8");if(n<=0)return lm;let r="";for(let o of t){if(Buffer.byteLength(r+o,"utf8")>n)break;r+=o}return`${r}${lm}`}async function Bk(e){let t=e?.sessionId?.trim()||"unknown",n=typeof e?.metadata?.messagesPath==="string"?e.metadata.messagesPath:void 0,o=[...await Qn(n)].reverse().find((d)=>d.role==="assistant"),s=o?Fj(o.content):void 0,i=e?.workspaceRoot?.trim()||"workspace",a=typeof e?.metadata?.prompt==="string"?e.metadata.prompt.trim():i;return{title:`Task completed (${t})`,body:pm(s&&s.length>0?s:a.length>0?a:i),severity:"info"}}import{resolve as cG}from"node:path";import{CLINE_DEFAULT_MODEL_ID as uG,captureSdkError as nc,createSessionId as vg,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as lG}from"@cline/shared";import{isChatWorkspacePath as pG}from"@cline/shared/storage";function Ks(e){return!!e&&typeof e==="object"&&!Array.isArray(e)}function mm(e){let t=e?.trim();return t?t:void 0}function Hj(e,t){let n=e?.trim();if(!n)return t;let r=Date.parse(n);if(!Number.isFinite(r))return t;return new Date(r).toISOString()}function $k(e,t){return new Date(new Date(e).getTime()+Math.max(0,Math.floor(t))*1000).toISOString()}function Wk(e,t){return new Date(new Date(e).getTime()-Math.max(0,Math.floor(t))*1000).toISOString()}function Bj(e,t){if(!e)return t;return new Date(e).getTime()>=new Date(t).getTime()?e:t}function $j(e,t){let n=e.eventId.trim(),r=e.eventType.trim(),o=e.source.trim(),s=mm(e.subject),i=mm(e.dedupeKey)??`${r}:${o}:${s??n}`;return{eventId:n,eventType:r,source:o,subject:s,occurredAt:Hj(e.occurredAt,t),workspaceRoot:mm(e.workspaceRoot),payload:Ks(e.payload)?e.payload:void 0,attributes:Ks(e.attributes)?e.attributes:void 0,dedupeKey:i}}function gm(e,t){if(!t)return;let n=t.split("."),r=e;for(let o of n){if(!Ks(r))return;r=r[o]}return r}function Wj(e,t){if(e.attributes&&Object.hasOwn(e.attributes,t))return e.attributes[t];if(e.payload&&Object.hasOwn(e.payload,t))return e.payload[t];let n={eventId:e.eventId,eventType:e.eventType,source:e.source,subject:e.subject,occurredAt:e.occurredAt,workspaceRoot:e.workspaceRoot,dedupeKey:e.dedupeKey,attributes:e.attributes,payload:e.payload},r=gm(n,t);if(r!==void 0)return r;if(e.attributes){let o=gm(e.attributes,t);if(o!==void 0)return o}if(e.payload)return gm(e.payload,t);return}function Ud(e,t){if(Array.isArray(t))return t.some((n)=>Ud(e,n));if(Array.isArray(e))return e.some((n)=>Ud(n,t));if(Ks(t)){if(!Ks(e))return!1;return Object.entries(t).every(([n,r])=>Ud(e[n],r))}return Object.is(e,t)}function jj(e,t){if(!t||Object.keys(t).length===0)return!0;return Object.entries(t).every(([n,r])=>Ud(Wj(e,n),r))}class fm{store;nowFn;logger;constructor(e){this.store=e.store,this.nowFn=e.now??(()=>Date.now()),this.logger=e.logger}ingestEvent(e){let t=new Date(this.nowFn()).toISOString(),n=$j(e,t);try{let r=this.store.eventTransaction(()=>this.materializeEvent(n,t));return this.logger?.debug(r.duplicate?"cron.event.duplicate":"cron.event.processed",{eventId:r.event.eventId,eventType:r.event.eventType,source:r.event.source,status:r.event.processingStatus,matchedSpecCount:r.event.matchedSpecCount,queuedRunCount:r.event.queuedRunCount}),r}catch(r){throw this.logger?.error?.("cron.event.failed",{eventId:n.eventId,eventType:n.eventType,error:r}),r}}materializeEvent(e,t){let n=this.store.insertEventLog(e,{receivedAtIso:t});if(!n.created)return{event:n.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:n.record.dedupeKey}]};let r=this.store.listEventSpecsForType(e.eventType),o=[],s=[],i=[];for(let c of r){if(!jj(e,c.filters)){o.push({specId:c.specId,externalId:c.externalId,reason:"filter_mismatch",dedupeKey:e.dedupeKey});continue}s.push(c);let l=this.materializeForSpec(c,e,n.record.receivedAt);if(l.run)i.push(l.run);else o.push({specId:c.specId,externalId:c.externalId,reason:l.reason,dedupeKey:e.dedupeKey})}let a=s.length===0?"unmatched":i.length>0?"queued":"suppressed";return this.store.updateEventLogProcessing(n.record.eventId,{status:a,matchedSpecCount:s.length,queuedRunCount:i.length,suppressedCount:o.filter((c)=>c.reason!=="filter_mismatch").length}),{event:this.store.getEventLog(n.record.eventId)??n.record,duplicate:!1,matchedSpecs:s,queuedRuns:i,suppressions:o}}materializeForSpec(e,t,n){let r=t.dedupeKey??t.eventId,o=e.debounceSeconds??0;if(o>0){let d=this.store.findQueuedEventRunForDedupe({specId:e.specId,dedupeKey:r});if(d){let c=Bj(d.scheduledFor,$k(n,o)),l=this.store.updateQueuedEventRunForDebounce({runId:d.runId,triggerEventId:t.eventId,scheduledFor:c});if(l)return{run:l,reason:"dedupe_window"}}}let s=e.dedupeWindowSeconds??0;if(s>0&&this.store.hasRecentEventRunForDedupe({specId:e.specId,dedupeKey:r,sinceIso:Wk(n,s)}))return{reason:"dedupe_window"};let i=e.cooldownSeconds??0;if(i>0&&this.store.hasRecentEventRunForSpec({specId:e.specId,sinceIso:Wk(n,i)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:e.specId,specRevision:e.revision,triggerKind:"event",triggerEventId:t.eventId,scheduledFor:o>0?$k(n,o):n}),reason:"dedupe_window"}}}class Gs{store;nowFn;constructor(e){this.store=e.store,this.nowFn=e.now??(()=>Date.now())}materializeAll(){let e={oneOffQueued:0,scheduleQueued:0},t=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let r of t)if(this.materializeOneOff(r))e.oneOffQueued+=1;let n=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let r of n)try{if(this.materializeSchedule(r))e.scheduleQueued+=1}catch{}return e}materializeOneOff(e){if(e.triggerKind!=="one_off")return!1;if(!e.enabled||e.removed)return!1;if(this.store.hasConsumedOneOffRevision(e.specId,e.revision))return!1;return this.store.enqueueRun({specId:e.specId,specRevision:e.revision,triggerKind:"one_off",scheduledFor:e.nextRunAt??new Date(this.nowFn()).toISOString()}),!0}materializeSchedule(e){if(e.triggerKind!=="schedule")return!1;if(!e.enabled||e.removed)return!1;if(!e.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:e.specId,nowMs:this.nowFn()}).queued}}import{basename as eq}from"node:path";import{buildClineSystemPrompt as tq}from"@cline/shared";import{nowIso as Gk}from"@cline/shared/db";import{mkdirSync as qj,writeFileSync as zj}from"node:fs";import{isAbsolute as Kj,join as qk}from"node:path";import{resolveCronReportsDir as Gj,resolveCronSpecsDir as Vj}from"@cline/shared/storage";function bn(e){if(/[:#\n]/.test(e)||e.includes('"'))return JSON.stringify(e);return e}function yt(e,t){if(t===void 0||t===null)return;return`${e}: ${bn(t)}`}function zk(e){let t=0;for(let r of e.matchAll(/`+/g))t=Math.max(t,r[0].length);let n="`".repeat(Math.max(3,t+1));return`${n}