@cline/core 0.0.94-nightly.1792204233 → 0.0.95
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cloud/index.js +1 -1
- package/dist/hub/daemon/entry.js +2 -2
- package/dist/hub/index.js +1 -1
- package/dist/index.js +2 -2
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -198,7 +198,7 @@ Searched ${f} files.`;let y=[`Found ${g.length} result${g.length===1?"":"s"} for
|
|
|
198
198
|
|
|
199
199
|
...[assistant text truncated: omitted ${e} chars due to repeated tool-call markup]...
|
|
200
200
|
|
|
201
|
-
`;function EP(e=process.env){return{maxToolResultChars:AP(e[eh.maxToolResultChars]),maxTotalTextBytes:AP(e[eh.maxTotalTextBytes]),minOutdatedRewriteBytes:oq(e[eh.minOutdatedRewriteBytes])}}class rh{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(e={}){this.getToolResultRecovery=e.getToolResultRecovery,this.maxToolResultChars=Ia(e.maxToolResultChars,nh),this.maxFileContentChars=Ia(e.maxFileContentChars,Vj),this.maxTotalTextBytes=Ia(e.maxTotalTextBytes,Jj),this.mediaBudget=e.mediaBudget??{},this.maxAssistantTextChars=Ia(e.maxAssistantTextChars,Xj),this.maxAssistantToolMarkupChars=Ia(e.maxAssistantToolMarkupChars,Yj),this.minOutdatedRewriteBytes=sq(e.minOutdatedRewriteBytes,Qj)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(e){this.recoveryNoticeBytes=0,this.reindex(e),this.commitOutdatedRewrites(e);let n=this.addMissingToolResults(e).map((o)=>{if(!Array.isArray(o.content)){if(o.role==="user"&&typeof o.content==="string"){let a=wP(o.content);if(a!==o.content)return{...o,content:a}}if(o.role==="assistant"&&typeof o.content==="string"){let a=this.truncateAssistantText(o.content);if(a!==o.content)return{...o,content:a}}return o}let s=!1,i=o.content.map((a)=>{let d=this.transformBlock(a,o.role);if(d!==a)s=!0;return d});return s?{...o,content:i}:o}),r=this.applyMediaBudget(n);return this.truncateToTotalTextBudget(r)}transformBlock(e,t){if(t==="user"&&e.type==="text"&&typeof e.text==="string"){let s=wP(e.text);if(s!==e.text)return{...e,text:s};return e}if(t==="assistant"&&e.type==="text"&&typeof e.text==="string"){let s=this.truncateAssistantText(e.text);return s===e.text?e:{...e,text:s}}if(e.type==="file"){let s=Ra(e.content,this.maxFileContentChars,PP);return s===e.content?e:{...e,content:s}}if(e.type!=="tool_result")return e;let n=this.resolveToolName(e),r=this.getToolResultRecovery?.({...e,name:n??e.name});if(r){let{text:s,images:i}=Nu(e.content);if(typeof s==="string"&&s.length>this.maxToolResultChars){let a=[{type:"text",text:this.truncateMiddle(s)},...i];if(r.uri){let d={type:"text",text:`Full result is temporarily saved to ${r.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},c=Te(d.text);if(this.recoveryNoticeBytes+c<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=c,this.recoveryNotices.add(d),a.push(d)}return{...e,content:a}}}let o=e.content;if(this.isReadTool(n)&&e.is_error!==!0){let s=this.committedOutdatedRewrites.get(e.tool_use_id);if(s&&s.size>0){let a=this.getReadLocators(e).filter((d)=>s.has(this.toReadLocatorKey(d))&&this.isOutdatedReadLocator(d,e.tool_use_id));if(a.length>0)o=this.replaceOutdatedReadContent(o,a)}}return o=this.truncateToolResultContent(o),o===e.content?e:{...e,content:o}}reindex(e){let t=this.indexedMessageCount===0||e.length>=this.indexedMessageCount&&e[this.indexedMessageCount-1]===this.indexedTailRef;if(e.length<this.indexedMessageCount||!t)this.resetIndexes();for(let n=this.indexedMessageCount;n<e.length;n++){let r=e[n];if(!Array.isArray(r.content))continue;for(let o=0;o<r.content.length;o++){let s=r.content[o];if(s.type==="file")this.latestFullContentOwnerByPathCache.set(s.path,`file:${n}:${o}`);else if(s.type==="tool_use"){let i=s.name.toLowerCase();if(this.toolNameByIdCache.set(s.id,i),this.isReadTool(i)){let a=this.extractLocatorsFromReadToolInput(s.input);if(a.length>0)this.readLocatorsByToolUseIdCache.set(s.id,a)}}else if(s.type==="tool_result"){let i=this.resolveToolName(s);if(!this.isReadTool(i)||s.is_error===!0)continue;let a=this.getReadLocators(s);for(let d of a)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(d),s.tool_use_id),this.isFullFileRead(d))this.latestFullContentOwnerByPathCache.set(d.path,s.tool_use_id)}}}this.indexedMessageCount=e.length,this.indexedTailRef=e.length>0?e[e.length-1]:void 0}commitOutdatedRewrites(e){let t=new Map,n=new Set,r=0;for(let o of e){if(!Array.isArray(o.content))continue;for(let s of o.content){if(s.type!=="tool_result"||s.is_error===!0)continue;let i=this.resolveToolName(s);if(!this.isReadTool(i))continue;n.add(s.tool_use_id);let a=this.committedOutdatedRewrites.get(s.tool_use_id),d=new Set,c=new Set;for(let l of this.getReadLocators(s)){let p=this.toReadLocatorKey(l);if(!this.isOutdatedReadLocator(l,s.tool_use_id))continue;if(c.add(p),!a?.has(p))d.add(p)}if(a){for(let l of a)if(!c.has(l))a.delete(l);if(a.size===0)this.committedOutdatedRewrites.delete(s.tool_use_id)}if(d.size===0)continue;let u=t.get(s.tool_use_id);if(!u)u=new Set,t.set(s.tool_use_id,u);for(let l of d)u.add(l);r+=this.estimateOutdatedReclaimBytes(s.content,d)}}for(let o of this.committedOutdatedRewrites.keys())if(!n.has(o))this.committedOutdatedRewrites.delete(o);if(t.size===0||r<this.minOutdatedRewriteBytes)return;for(let[o,s]of t){let i=this.committedOutdatedRewrites.get(o);if(!i)i=new Set,this.committedOutdatedRewrites.set(o,i);for(let a of s)i.add(a)}}estimateOutdatedReclaimBytes(e,t){let n=this.extractReadLocatorsFromToolResultContent(e),r=n.length>0&&n.every((d)=>t.has(this.toReadLocatorKey(d))),o=(d)=>{let c;try{c=JSON.parse(d)}catch{return r||n.length===0?Te(this.truncateMiddle(d)):0}let u=Array.isArray(c)?c:[c],l=0;for(let p of u){let m=this.extractLocatorFromResultEntry(p);if(m&&t.has(this.toReadLocatorKey(m)))l+=this.providerBoundEntryBytes(p)}return l};if(typeof e==="string")return o(e);let s=new Set(t),i=0;for(let d of e)if(d.type==="text")i+=this.countOutdatedImageEntries(d.text,s);let a=0;for(let d of e)if(d.type==="text")a+=o(d.text);else if(d.type==="image"){if(i>0)i-=1,a+=Te(d.data)}else if(hr(d)){let c=this.extractLocatorFromResultEntry(d);if(c&&t.has(this.toReadLocatorKey(c)))a+=this.providerBoundEntryBytes(d)}else if(d.type==="file"){if(t.has(this.toReadLocatorKey({path:d.path,startLine:null,endLine:null})))a+=Te(this.truncateMiddle(d.content))}return a}providerBoundEntryBytes(e){let t=this.truncateNestedStrings(e);return Te(JSON.stringify(t))}addMissingToolResults(e){let t=this.collectToolResultIds(e),n=[],r=new Map,o=!1,s=()=>{if(r.size===0)return;i(this.createMissingToolResultMessage(r)),r.clear(),o=!0},i=(a)=>{let d=n.at(-1);if(this.shouldMergeUserAfterToolResults(d,a)){n[n.length-1]={...d,content:[...d.content,...this.contentBlocksForUserMerge(a.content)]},o=!0;return}n.push(a)};for(let a of e){if(this.isToolResultOnlyMessage(a)){if(i(this.appendMissingToolResults(a,r)),r.size>0)r.clear(),o=!0;continue}if(Array.isArray(a.content)){let d=a.content.filter((u)=>u.type==="tool_result"),c=a.content.filter((u)=>u.type!=="tool_result");if(d.length>0){let u=this.appendMissingToolResults({...a,role:"user",content:d},r);if(i(u),r.size>0)r.clear();o=!0}if(c.length>0||d.length===0){if(d.length===0)s();let u=d.length>0?{...a,content:c}:a;if(i(u),u.role==="assistant")this.trackMissingToolCalls(u,t,r)}continue}s(),i(a)}return s(),o?n:e}appendMissingToolResults(e,t){if(t.size===0||!Array.isArray(e.content))return e;return{...e,role:"user",content:[...e.content,...this.createMissingToolResultBlocks(t)]}}shouldMergeUserAfterToolResults(e,t){return e?.role==="user"&&t.role==="user"&&this.isToolResultOnlyMessage(e)&&this.contentBlocksForUserMerge(t.content).length>0}contentBlocksForUserMerge(e){return typeof e==="string"?e.length>0?[{type:"text",text:e}]:[]:e}collectToolResultIds(e){let t=new Set;for(let n of e){if(!Array.isArray(n.content))continue;for(let r of n.content)if(r.type==="tool_result")t.add(r.tool_use_id)}return t}isToolResultOnlyMessage(e){return e.role==="user"&&Array.isArray(e.content)&&e.content.length>0&&e.content.every((t)=>t.type==="tool_result")}trackMissingToolCalls(e,t,n){if(!Array.isArray(e.content))return;for(let r of e.content){if(r.type!=="tool_use"||t.has(r.id))continue;n.set(r.id,r.name)}}createMissingToolResultMessage(e){return{role:"user",content:this.createMissingToolResultBlocks(e)}}createMissingToolResultBlocks(e){return Array.from(e,([t,n])=>({type:"tool_result",tool_use_id:t,name:n,content:[{type:"text",text:this.formatMissingToolResultText(n)}],is_error:!0}))}formatMissingToolResultText(e){return e?`${kP} Tool: ${e}.`:kP}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(e){let t=e,n=this.readResultLocatorCache.get(t);if(n===void 0)n=this.extractReadLocatorsFromToolResultContent(e.content),this.readResultLocatorCache.set(t,n);if(n.length>0)return n;return this.readLocatorsByToolUseIdCache.get(e.tool_use_id)??[]}extractLocatorsFromReadToolInput(e){if(!e||typeof e!=="object")return[];let t=e,n=[],r=this.extractLocatorFromReadRequest(t);if(r)n.push(r);if(Array.isArray(t.files))for(let o of t.files){let s=this.extractLocatorFromReadRequest(o);if(s)n.push(s)}if(Array.isArray(t.file_paths)){for(let o of t.file_paths)if(typeof o==="string"&&o.length>0)n.push({path:o,startLine:null,endLine:null})}return this.dedupeReadLocators(n)}extractReadLocatorsFromToolResultContent(e){if(typeof e==="string")return this.tryParseReadLocators(e);let t=[];for(let n of e){if(n.type==="text"){t.push(...this.tryParseReadLocators(n.text));continue}if(hr(n)){let r=this.extractLocatorFromResultEntry(n);if(r)t.push(r)}}return this.dedupeReadLocators(t)}tryParseReadLocators(e){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(e))}catch{return[]}}extractLocatorsFromParsedReadResult(e){if(Array.isArray(e)){let n=[];for(let r of e){let o=this.extractLocatorFromResultEntry(r);if(o)n.push(o)}return this.dedupeReadLocators(n)}let t=this.extractLocatorFromResultEntry(e);return t?[t]:[]}extractLocatorFromReadRequest(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(!n)return;return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)}}extractLocatorFromResultEntry(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(n)return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)};if(typeof t.query==="string"&&t.query.length>0)return this.parseReadQuery(t.query);return}extractPath(e){let t=[e.path,e.file_path,e.filePath];for(let n of t)if(typeof n==="string"&&n.length>0)return n;return}extractLineNumber(e){return typeof e==="number"&&Number.isInteger(e)?e:null}parseReadQuery(e){let t=/^(.*):(\d+)-(EOF|\d+)$/.exec(e);if(!t)return{path:e,startLine:null,endLine:null};return{path:t[1],startLine:Number(t[2]),endLine:t[3]==="EOF"?null:Number(t[3])}}dedupeReadLocators(e){let t=new Map;for(let n of e)t.set(this.toReadLocatorKey(n),n);return Array.from(t.values())}toReadLocatorKey(e){if(this.isFullFileRead(e))return e.path;return`${e.path}:${e.startLine??1}-${e.endLine??"EOF"}`}isFullFileRead(e){return e.startLine==null&&e.endLine==null}isOutdatedReadLocator(e,t){let n=this.latestFullContentOwnerByPathCache.get(e.path);if(n&&n!==t)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(e))!==t}replaceOutdatedReadContent(e,t){let n=new Set(t.map((s)=>this.toReadLocatorKey(s))),r=new Set(t.map((s)=>s.path));if(typeof e==="string")return this.replaceOutdatedInString(e,n)??mo;let o=0;for(let s of e)if(s.type==="text")o+=this.countOutdatedImageEntries(s.text,n);return e.map((s)=>{if(s.type==="file"){if(!r.has(s.path))return s;return{...s,content:mo}}if(s.type==="image"){if(o===0)return s;return o-=1,{type:"text",text:mo}}if(hr(s))return this.replaceOutdatedReadEntry(s,n);if(s.type!=="text")return s;let i=this.replaceOutdatedInString(s.text,n);if(i===null)return{...s,text:mo};return i===s.text?s:{...s,text:i}})}countOutdatedImageEntries(e,t){let n;try{n=JSON.parse(e)}catch{return 0}let r=Array.isArray(n)?n:[n],o=0;for(let s of r){if(!s||typeof s!=="object")continue;let i=s,a=this.extractLocatorFromResultEntry(i);if(!a)continue;if(!t.has(this.toReadLocatorKey(a)))continue;if(i.result==="Successfully read image"||i.content==="Successfully read image")o+=1}return o}replaceOutdatedInString(e,t){let n;try{n=JSON.parse(e)}catch{return null}let r=Array.isArray(n)?n.map((o)=>this.replaceOutdatedReadEntry(o,t)):this.replaceOutdatedReadEntry(n,t);return JSON.stringify(r)}replaceOutdatedReadEntry(e,t){if(!e||typeof e!=="object")return e;let n=this.extractLocatorFromResultEntry(e);if(!n||!t.has(this.toReadLocatorKey(n)))return e;let r={...e};if(typeof r.result==="string")r.result=mo;else if(typeof r.content==="string")r.content=mo;else r.result=mo;return r}isReadTool(e){return!!e&&eq.has(e)}resolveToolName(e){let t=this.toolNameByIdCache.get(e.tool_use_id);if(t!==void 0)return t;return typeof e.name==="string"&&e.name.length>0?e.name.toLowerCase():void 0}truncateToolResultContent(e){if(typeof e==="string")return this.truncateMiddle(e);return e.map((t)=>{if(this.recoveryNotices.has(t))return t;if(t.type==="file"){let n=this.truncateMiddle(t.content);return n===t.content?t:{...t,content:n}}if(t.type==="text"){let n=this.truncateMiddle(t.text);return n===t.text?t:{...t,text:n}}if(hr(t))return this.truncateNestedStrings(t);return t})}truncateNestedStrings(e){if(typeof e==="string")return this.truncateMiddle(e);if(Array.isArray(e)){let t=!1,n=e.map((r)=>{let o=this.truncateNestedStrings(r);if(o!==r)t=!0;return o});return t?n:e}if(e!==null&&typeof e==="object"){if(oh(e))return e;let t=!1,n={};for(let[r,o]of Object.entries(e)){let s=this.truncateNestedStrings(o);if(s!==o)t=!0;n[r]=s}return t?n:e}return e}truncateMiddle(e){return Ra(e,this.maxToolResultChars,PP)}truncateAssistantText(e){if(this.hasRepeatedToolCallMarkup(e))return Ra(e,this.maxAssistantToolMarkupChars,nq);return Ra(e,this.maxAssistantTextChars,tq)}hasRepeatedToolCallMarkup(e){if(e.length<=this.maxAssistantToolMarkupChars)return!1;let t=0;for(let n of e.matchAll(rq))if(t+=1,t>=Zj)return!0;return!1}truncateToTotalTextBudget(e){let t=this.countMessageTextBytes(e);if(t<=this.maxTotalTextBytes)return e;let n=e.map((s)=>{if(!Array.isArray(s.content))return{...s};return{...s,content:s.content.map((i)=>{let a=aq(i);if(i.type==="tool_result"&&a.type==="tool_result"&&Array.isArray(i.content)&&Array.isArray(a.content))i.content.forEach((d,c)=>{if(this.recoveryNotices.has(d))this.recoveryNotices.add(a.content[c])});return a})}}),r=this.collectTruncationCandidates(n),o=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,r.length)));for(let s of r){if(t<=this.maxTotalTextBytes)break;let i=s.byteLength,a=Math.min(s.minBytes,o);if(i<=a)continue;let d=t-this.maxTotalTextBytes,c=Math.max(a,i-d),u=iq(s.get(),c,s.makeMarker);s.set(u),t-=i-Te(u)}return n}countMessageTextBytes(e){let t=0;for(let n of e){if(typeof n.content==="string"){t+=Te(n.content);continue}for(let r of n.content)if(r.type==="text")t+=Te(r.text);else if(r.type==="thinking")t+=Te(r.thinking);else if(r.type==="file")t+=Te(r.content);else if(r.type==="tool_use")t+=Gu(r.input);else if(r.type==="tool_result"){if(typeof r.content==="string")t+=Te(r.content);else for(let o of r.content)if(o.type==="text")t+=Te(o.text);else if(o.type==="file")t+=Te(o.content);else if(hr(o))t+=Gu(o)}}return t}collectTruncationCandidates(e){let t=[],n=[];for(let r of e){if(r.role==="assistant"&&typeof r.content==="string"){t.push({byteLength:Te(r.content),minBytes:CP,makeMarker:IP,get:()=>r.content,set:(o)=>{r.content=o}});continue}if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){Vu(o.input,n);continue}if(r.role==="assistant"&&o.type==="text"){t.push({byteLength:Te(o.text),minBytes:CP,makeMarker:IP,get:()=>o.text,set:(s)=>{o.text=s}});continue}if(o.type!=="tool_result")continue;if(typeof o.content==="string"){t.push({byteLength:Te(o.content),minBytes:Aa,makeMarker:Ea,get:()=>o.content,set:(s)=>{o.content=s}});continue}for(let s of o.content){if(this.recoveryNotices.has(s))continue;if(s.type==="text")t.push({byteLength:Te(s.text),minBytes:Aa,makeMarker:Ea,get:()=>s.text,set:(i)=>{s.text=i}});else if(s.type==="file")t.push({byteLength:Te(s.content),minBytes:Aa,makeMarker:Ea,get:()=>s.content,set:(i)=>{s.content=i}});else if(hr(s))Vu(s,t)}}}return t.sort((r,o)=>o.byteLength-r.byteLength),n.sort((r,o)=>o.byteLength-r.byteLength),[...t,...n]}applyMediaBudget(e){let t=this.resolveMediaBudget();if(t.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&t.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&t.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return e;let n=zj(),r=!1,o=e.map((s)=>{if(!Array.isArray(s.content))return s;let i=!1,a=s.content.map((d)=>{let c=this.applyMediaBudgetToBlock(d,t,n);if(c!==d)i=!0;return c});if(!i)return s;return r=!0,{...s,content:a}});return r?o:e}resolveMediaBudget(){return Kj(this.mediaBudget)}applyMediaBudgetToBlock(e,t,n){if(th(e))return this.limitImageContent(e,t,n);if(e.type!=="tool_result"||typeof e.content==="string")return e;let r=!1,o=e.content.map((s)=>{let i=this.applyMediaBudgetToToolResultEntry(s,t,n);if(i!==s)r=!0;return i});return r?{...e,content:o}:e}applyMediaBudgetToToolResultEntry(e,t,n){if(th(e))return this.limitImageContent(e,t,n);if(hr(e))return this.limitNestedMedia(e,t,n);return e}limitNestedMedia(e,t,n){if(th(e)){let r=this.limitImageContent(e,t,n);return r.type==="text"?r.text:r}if(Array.isArray(e)){let r=!1,o=e.map((s)=>{let i=this.limitNestedMedia(s,t,n);if(i!==s)r=!0;return i});return r?o:e}if(e!==null&&typeof e==="object"){let r=!1,o={};for(let[s,i]of Object.entries(e)){let a=this.limitNestedMedia(i,t,n);if(a!==i)r=!0;o[s]=a}return r?o:e}return e}limitImageContent(e,t,n){if(!xP(e))return{type:"text",text:TP};let r=Gj(e.mediaType,e.data,{maxImageEncodedBytes:t.maxImageEncodedBytes,maxImageDecodedBytes:t.maxImageDecodedBytes,maxTotalMediaBytes:t.maxTotalMediaBytes},n);if(!r.ok)return{type:"text",text:TP};return{...e,data:r.base64,mediaType:r.mediaType}}}var RP=String.raw`[\|\uFF5C]`,rq=new RegExp(String.raw`<\s*(?:${RP}\s*)?DSML\s*(?:${RP}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Te(e){return Buffer.byteLength(e,"utf8")}function AP(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function oq(e){if(e===void 0)return;let t=e.trim().toLowerCase();if(t==="infinity"||t==="disable")return Number.POSITIVE_INFINITY;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:void 0}function Ia(e,t){return typeof e==="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t}function sq(e,t){if(typeof e!=="number"||Number.isNaN(e)||e<0)return t;return Number.isFinite(e)?Math.floor(e):e}function Ra(e,t,n){if(e.length<=t)return e;let r=n(e.length-t),o=Math.max(0,Math.floor((t-r.length)/2)),s=Math.max(0,e.length-o*2),i=n(s),a=Math.max(0,Math.floor((t-i.length)/2)),d=e.slice(0,a),c=a>0?e.slice(-a):"";return`${d}${i}${c}`}function iq(e,t,n){if(Te(e)<=t)return e;let r=0,o=e.length,s="";while(r<=o){let i=r+o>>>1,a=Ra(e,i,n);if(Te(a)<=t)s=a,r=i+1;else o=i-1}return s}function aq(e){if(e.type==="tool_use")return{...e,input:Ju(e.input)};if(e.type!=="tool_result"||typeof e.content==="string")return{...e};return{...e,content:e.content.map((t)=>hr(t)?Ju(t):{...t})}}function hr(e){if(e===null||typeof e!=="object")return!1;let t=e.type;return t!=="text"&&t!=="image"&&t!=="file"}function th(e){return e!==null&&typeof e==="object"&&e.type==="image"}function xP(e){return e!==null&&typeof e==="object"&&e.type==="image"&&typeof e.data==="string"&&typeof e.mediaType==="string"}function oh(e){return xP(e)}function Gu(e){if(typeof e==="string")return Te(e);if(Array.isArray(e)){let t=0;for(let n of e)t+=Gu(n);return t}if(e!==null&&typeof e==="object"){if(oh(e))return 0;let t=0;for(let n of Object.values(e))t+=Gu(n);return t}return 0}function Vu(e,t){if(Array.isArray(e)){e.forEach((n,r)=>{if(typeof n==="string")t.push({byteLength:Te(n),minBytes:Aa,makeMarker:Ea,get:()=>e[r],set:(o)=>{e[r]=o}});else Vu(n,t)});return}if(e!==null&&typeof e==="object"){if(oh(e))return;let n=e;for(let r of Object.keys(n)){let o=n[r];if(typeof o==="string")t.push({byteLength:Te(o),minBytes:Aa,makeMarker:Ea,get:()=>n[r],set:(s)=>{n[r]=s}});else Vu(o,t)}}}function Ju(e){if(Array.isArray(e))return e.map(Ju);if(e!==null&&typeof e==="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=Ju(r);return t}return e}function sh(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class ih{messages=[];conversationId=sh();sessionStarted=!1;constructor(e){if((e?.length??0)>0)this.restore(e??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(e){this.messages.push(e)}appendMessages(e){if(e.length===0)return;this.messages.push(...e)}replaceMessages(e){let t=new Map(e.map((o,s)=>[o.id,s])),n=new Map,r=-1;for(let o of this.messages){let s=o.id?t.get(o.id):void 0;if(s!==void 0)r=s;else if(o.metadata?.displayOnly===!0){let i=n.get(r)??[];i.push(o),n.set(r,i)}}this.messages=[...n.get(-1)??[]];for(let[o,s]of e.entries())this.messages.push(s,...n.get(o)??[])}resetForRun(){this.messages=[],this.conversationId=sh(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=sh(),this.sessionStarted=!1}restore(e){this.messages=[...e],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var yr="0.0.94-nightly.1792204233";var Sr={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:yr,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","proxy-from-env":"^2.1.0","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/proxy-from-env":"^1.0.4","@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function MP(e){let{agentConfig:t}=e,n=dq(t),r=cq(t),o=e.hooks,s=uq(t.maxParallelToolCalls);return{distinctId:t.distinctId,clientName:t.extensionContext?.client?.name,clientVersion:t.extensionContext?.client?.version,clineCoreVersion:yr,sessionId:e.sessionId??t.sessionId,agentId:e.agentId,conversationId:e.conversationId,parentAgentId:e.parentAgentId,agentRole:e.agentRole,systemPrompt:e.systemPrompt??t.systemPrompt,messageModelInfo:r,model:e.model,modelOptions:n,modelTools:t.modelTools,tools:e.tools,hooks:o,prepareTurn:e.prepareTurn,consumePendingUserMessage:t.consumePendingUserMessage,plugins:e.plugins,logger:e.logger??t.logger,telemetry:e.telemetry??t.telemetry,initialMessages:e.initialMessages,completionPolicy:e.completionPolicy===null?void 0:e.completionPolicy??t.completionPolicy,maxIterations:t.maxIterations,toolExecution:s,toolPolicies:t.toolPolicies,toolContextMetadata:e.toolContextMetadata,requestToolApproval:t.requestToolApproval}}function dq(e){let t={};if(e.thinking!==void 0)t.thinking=e.thinking;if(e.reasoningEffort!==void 0)t.reasoningEffort=e.reasoningEffort;if(e.thinkingBudgetTokens!==void 0)t.thinkingBudgetTokens=e.thinkingBudgetTokens;if(e.maxTokensPerTurn!==void 0)t.maxTokensPerTurn=e.maxTokensPerTurn;if(e.temperature!==void 0)t.temperature=e.temperature;if(e.apiTimeoutMs!==void 0)t.apiTimeoutMs=e.apiTimeoutMs;return Object.keys(t).length>0?t:void 0}function cq(e){let t=e.providerConfig?.family;return{id:e.modelId,provider:e.providerId,family:t}}function uq(e){if(e===void 0)return;return e>=2?"parallel":"sequential"}function lq(e){let t={};if(e.providerId!==void 0)t.providerId=e.providerId;if(e.modelId!==void 0)t.modelId=e.modelId;if(e.apiKey!==void 0)t.apiKey=e.apiKey;if(e.baseUrl!==void 0)t.baseUrl=e.baseUrl;if(e.headers!==void 0)t.headers=e.headers;if(e.providerConfig!==void 0)t.providerConfig=e.providerConfig;if(e.thinking===!1)return t.thinking=!1,t.reasoningEffort=null,t.thinkingBudgetTokens=null,t;if(e.thinking===!0)t.thinking=!0,t.reasoningEffort=e.reasoningEffort??null,t.thinkingBudgetTokens=null;else if(e.reasoningEffort!==void 0)t.thinking=!0,t.reasoningEffort=e.reasoningEffort;if(typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0,t.thinkingBudgetTokens=Math.trunc(e.thinkingBudgetTokens);return t}function Ls(e){let t={...e},n=Object.hasOwn(e,"thinking"),r=Object.hasOwn(e,"thinkingBudgetTokens");if(e.thinking===!1||e.thinking===null)return t.reasoningEffort=void 0,t.thinkingBudgetTokens=void 0,t;if(!n&&r&&typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0;return t}function pq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function mq(e){e.lastToolName="",e.lastToolSignature="",e.consecutiveIdenticalCount=0}function ah(e){if(e==null||typeof e!=="object")return e;if(Array.isArray(e))return e.map(ah);let t={};for(let n of Object.keys(e).sort())t[n]=ah(e[n]);return t}function gq(e){if(e==null)return"null";if(typeof e==="string")return e;if(typeof e!=="object")return String(e);try{return JSON.stringify(ah(e))}catch{return String(e)}}function fq(e,t,n,r){if(t===e.lastToolName&&n===e.lastToolSignature)e.consecutiveIdenticalCount++;else e.consecutiveIdenticalCount=1;return e.lastToolName=t,e.lastToolSignature=n,{softWarning:e.consecutiveIdenticalCount===r.softThreshold,hardEscalation:e.consecutiveIdenticalCount>=r.hardThreshold}}var OP={softThreshold:3,hardThreshold:5};class dh{config;state=pq();constructor(e){this.config={softThreshold:e?.softThreshold??OP.softThreshold,hardThreshold:e?.hardThreshold??OP.hardThreshold}}inspect(e){let t=gq(e.input),n=fq(this.state,e.name,t,this.config);if(n.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; stopping to avoid a loop.`};if(n.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){mq(this.state)}}class ch{consecutiveMistakes=0;options;constructor(e){this.options=e}async record(e){let t=this.options.maxConsecutiveMistakes,n=e.forceAtLimit&&t?t:this.consecutiveMistakes+1;this.consecutiveMistakes=n;let r=e.details?.trim()||`consecutive mistake (${e.reason})`;if(this.options.emit({type:"error",error:Error(r),recoverable:!0,iteration:e.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:e.iteration,reason:e.reason,details:e.details,consecutiveMistakes:n,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!t||n<t)return{action:"continue"};let o={iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details};this.options.onLimitTelemetry?.(o);let s=await yq(o,this.options.onLimitReached);if(s.action==="continue"){let i=s.guidance?.trim();if(i)this.options.appendRecoveryNotice(i,e.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:i}}return{action:"stop",reason:s.reason?.trim()||void 0,message:hq({iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details,stopReason:s.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function hq(e){let t=[`Stopped after ${e.consecutiveMistakes}/${e.maxConsecutiveMistakes} consecutive mistakes (${e.reason}) at iteration ${e.iteration}.`],n=e.details?.trim();if(n)t.push(`Error: ${n}`);let r=e.stopReason?.trim();if(r)t.push(`Decision: ${r}`);return t.push("Session state was preserved. Send a new prompt to resume from the latest state."),t.join(" ")}async function yq(e,t){if(!t)return{action:"stop",reason:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`};try{return await t(e)}catch(n){return{action:"stop",reason:n instanceof Error?n.message:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`}}}function Sq(e){switch(e){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return e;default:return}}function bq(e){let t=e.content.filter((n)=>n.type==="text");if(t.length===0)return;return t.map((n)=>n.text).join("")}function vq(e){let t=e.content.filter((n)=>n.type==="reasoning");if(t.length===0)return;return{reasoning:t.map((n)=>n.text).join(""),redacted:t.some((n)=>n.redacted===!0)}}function Tq(e){return e.content.find((t)=>t.type==="tool-result")}function wq(e){switch(e){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Cq(e){if(!e||e.isError!==!0)return;if(typeof e.output==="string")return e.output;if(e.output instanceof Error)return e.output.message;try{return JSON.stringify(e.output)}catch{return String(e.output)}}class uh{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(e){switch(e.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:e.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:e.iteration,hadToolCalls:e.toolCallCount>0,toolCallCount:e.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:e.text,accumulated:e.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:e.text,redacted:e.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:e.media}];case"assistant-message":return this.translateAssistantMessage(e.message);case"tool-started":return this.translateToolStarted(e);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,update:e.update}];case"tool-finished":return this.translateToolFinished(e);case"usage-updated":return this.translateUsage(e.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:e.message,reason:Sq(e.metadata?.reason),metadata:e.metadata}];case"run-finished":return this.translateRunFinished(e.result);case"run-failed":return[{type:"error",error:e.error,errorClass:e.errorClass,recoverable:!1,iteration:e.snapshot.iteration}];default:return e}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(e){let t=[],n=bq(e);if(n!==void 0)t.push({type:"content_end",contentType:"text",text:n});let r=vq(e);if(r!==void 0)t.push({type:"content_end",contentType:"reasoning",reasoning:r.reasoning});return t}translateToolStarted(e){return this.toolStartedAt.set(e.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,execution:e.toolCall.execution}]}translateToolFinished(e){let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=t===void 0?void 0:Date.now()-t;this.toolStartedAt.delete(e.toolCall.toolCallId);let r=Tq(e.message),o=r?.output,s=Cq(r);return[{type:"content_end",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,output:o,error:s,durationMs:n,execution:e.toolCall.execution}]}translateUsage(e){let t=e.inputTokens-this.lastUsage.inputTokens,n=e.outputTokens-this.lastUsage.outputTokens,r=e.cacheReadTokens-this.lastUsage.cacheReadTokens,o=e.cacheWriteTokens-this.lastUsage.cacheWriteTokens,s=this.lastUsage.totalCost??0,a=(e.totalCost??0)-s,d=this.lastUsage.reasoningTokenCount??0,u=(e.reasoningTokenCount??0)-d;return this.lastUsage={inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,totalCost:e.totalCost,reasoningTokenCount:e.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,t),outputTokens:Math.max(0,n),cacheReadTokens:r===0?void 0:Math.max(0,r),cacheWriteTokens:o===0?void 0:Math.max(0,o),cost:a===0?void 0:a,reasoningTokenCount:u===0?void 0:Math.max(0,u),totalInputTokens:e.inputTokens,totalOutputTokens:e.outputTokens,totalCacheReadTokens:e.cacheReadTokens===0?void 0:e.cacheReadTokens,totalCacheWriteTokens:e.cacheWriteTokens===0?void 0:e.cacheWriteTokens,totalCost:e.totalCost}]}translateRunFinished(e){let t={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens===0?void 0:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens===0?void 0:e.usage.cacheWriteTokens,totalCost:e.usage.totalCost};return[{type:"done",reason:wq(e.status),text:e.outputText,iterations:e.iterations,usage:t}]}}var Lq="session_run_in_progress";class HP extends Error{agentId;code=Lq;constructor(e){super(`SessionRuntime.shutdown called while a run is in progress${e?` (agentId=${e})`:""}`);this.agentId=e;this.name="SessionRunInProgressError"}}function Nq(e){if(typeof e==="string")return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}async function Dq(e){let n=(typeof e.content==="function"?await e.content():e.content).trim();return n.length>0?n:void 0}function Uq(e,t){let n=e.trim(),r=t.map((o)=>o.trim()).filter(Boolean).join(`
|
|
201
|
+
`;function EP(e=process.env){return{maxToolResultChars:AP(e[eh.maxToolResultChars]),maxTotalTextBytes:AP(e[eh.maxTotalTextBytes]),minOutdatedRewriteBytes:oq(e[eh.minOutdatedRewriteBytes])}}class rh{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(e={}){this.getToolResultRecovery=e.getToolResultRecovery,this.maxToolResultChars=Ia(e.maxToolResultChars,nh),this.maxFileContentChars=Ia(e.maxFileContentChars,Vj),this.maxTotalTextBytes=Ia(e.maxTotalTextBytes,Jj),this.mediaBudget=e.mediaBudget??{},this.maxAssistantTextChars=Ia(e.maxAssistantTextChars,Xj),this.maxAssistantToolMarkupChars=Ia(e.maxAssistantToolMarkupChars,Yj),this.minOutdatedRewriteBytes=sq(e.minOutdatedRewriteBytes,Qj)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(e){this.recoveryNoticeBytes=0,this.reindex(e),this.commitOutdatedRewrites(e);let n=this.addMissingToolResults(e).map((o)=>{if(!Array.isArray(o.content)){if(o.role==="user"&&typeof o.content==="string"){let a=wP(o.content);if(a!==o.content)return{...o,content:a}}if(o.role==="assistant"&&typeof o.content==="string"){let a=this.truncateAssistantText(o.content);if(a!==o.content)return{...o,content:a}}return o}let s=!1,i=o.content.map((a)=>{let d=this.transformBlock(a,o.role);if(d!==a)s=!0;return d});return s?{...o,content:i}:o}),r=this.applyMediaBudget(n);return this.truncateToTotalTextBudget(r)}transformBlock(e,t){if(t==="user"&&e.type==="text"&&typeof e.text==="string"){let s=wP(e.text);if(s!==e.text)return{...e,text:s};return e}if(t==="assistant"&&e.type==="text"&&typeof e.text==="string"){let s=this.truncateAssistantText(e.text);return s===e.text?e:{...e,text:s}}if(e.type==="file"){let s=Ra(e.content,this.maxFileContentChars,PP);return s===e.content?e:{...e,content:s}}if(e.type!=="tool_result")return e;let n=this.resolveToolName(e),r=this.getToolResultRecovery?.({...e,name:n??e.name});if(r){let{text:s,images:i}=Nu(e.content);if(typeof s==="string"&&s.length>this.maxToolResultChars){let a=[{type:"text",text:this.truncateMiddle(s)},...i];if(r.uri){let d={type:"text",text:`Full result is temporarily saved to ${r.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},c=Te(d.text);if(this.recoveryNoticeBytes+c<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=c,this.recoveryNotices.add(d),a.push(d)}return{...e,content:a}}}let o=e.content;if(this.isReadTool(n)&&e.is_error!==!0){let s=this.committedOutdatedRewrites.get(e.tool_use_id);if(s&&s.size>0){let a=this.getReadLocators(e).filter((d)=>s.has(this.toReadLocatorKey(d))&&this.isOutdatedReadLocator(d,e.tool_use_id));if(a.length>0)o=this.replaceOutdatedReadContent(o,a)}}return o=this.truncateToolResultContent(o),o===e.content?e:{...e,content:o}}reindex(e){let t=this.indexedMessageCount===0||e.length>=this.indexedMessageCount&&e[this.indexedMessageCount-1]===this.indexedTailRef;if(e.length<this.indexedMessageCount||!t)this.resetIndexes();for(let n=this.indexedMessageCount;n<e.length;n++){let r=e[n];if(!Array.isArray(r.content))continue;for(let o=0;o<r.content.length;o++){let s=r.content[o];if(s.type==="file")this.latestFullContentOwnerByPathCache.set(s.path,`file:${n}:${o}`);else if(s.type==="tool_use"){let i=s.name.toLowerCase();if(this.toolNameByIdCache.set(s.id,i),this.isReadTool(i)){let a=this.extractLocatorsFromReadToolInput(s.input);if(a.length>0)this.readLocatorsByToolUseIdCache.set(s.id,a)}}else if(s.type==="tool_result"){let i=this.resolveToolName(s);if(!this.isReadTool(i)||s.is_error===!0)continue;let a=this.getReadLocators(s);for(let d of a)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(d),s.tool_use_id),this.isFullFileRead(d))this.latestFullContentOwnerByPathCache.set(d.path,s.tool_use_id)}}}this.indexedMessageCount=e.length,this.indexedTailRef=e.length>0?e[e.length-1]:void 0}commitOutdatedRewrites(e){let t=new Map,n=new Set,r=0;for(let o of e){if(!Array.isArray(o.content))continue;for(let s of o.content){if(s.type!=="tool_result"||s.is_error===!0)continue;let i=this.resolveToolName(s);if(!this.isReadTool(i))continue;n.add(s.tool_use_id);let a=this.committedOutdatedRewrites.get(s.tool_use_id),d=new Set,c=new Set;for(let l of this.getReadLocators(s)){let p=this.toReadLocatorKey(l);if(!this.isOutdatedReadLocator(l,s.tool_use_id))continue;if(c.add(p),!a?.has(p))d.add(p)}if(a){for(let l of a)if(!c.has(l))a.delete(l);if(a.size===0)this.committedOutdatedRewrites.delete(s.tool_use_id)}if(d.size===0)continue;let u=t.get(s.tool_use_id);if(!u)u=new Set,t.set(s.tool_use_id,u);for(let l of d)u.add(l);r+=this.estimateOutdatedReclaimBytes(s.content,d)}}for(let o of this.committedOutdatedRewrites.keys())if(!n.has(o))this.committedOutdatedRewrites.delete(o);if(t.size===0||r<this.minOutdatedRewriteBytes)return;for(let[o,s]of t){let i=this.committedOutdatedRewrites.get(o);if(!i)i=new Set,this.committedOutdatedRewrites.set(o,i);for(let a of s)i.add(a)}}estimateOutdatedReclaimBytes(e,t){let n=this.extractReadLocatorsFromToolResultContent(e),r=n.length>0&&n.every((d)=>t.has(this.toReadLocatorKey(d))),o=(d)=>{let c;try{c=JSON.parse(d)}catch{return r||n.length===0?Te(this.truncateMiddle(d)):0}let u=Array.isArray(c)?c:[c],l=0;for(let p of u){let m=this.extractLocatorFromResultEntry(p);if(m&&t.has(this.toReadLocatorKey(m)))l+=this.providerBoundEntryBytes(p)}return l};if(typeof e==="string")return o(e);let s=new Set(t),i=0;for(let d of e)if(d.type==="text")i+=this.countOutdatedImageEntries(d.text,s);let a=0;for(let d of e)if(d.type==="text")a+=o(d.text);else if(d.type==="image"){if(i>0)i-=1,a+=Te(d.data)}else if(hr(d)){let c=this.extractLocatorFromResultEntry(d);if(c&&t.has(this.toReadLocatorKey(c)))a+=this.providerBoundEntryBytes(d)}else if(d.type==="file"){if(t.has(this.toReadLocatorKey({path:d.path,startLine:null,endLine:null})))a+=Te(this.truncateMiddle(d.content))}return a}providerBoundEntryBytes(e){let t=this.truncateNestedStrings(e);return Te(JSON.stringify(t))}addMissingToolResults(e){let t=this.collectToolResultIds(e),n=[],r=new Map,o=!1,s=()=>{if(r.size===0)return;i(this.createMissingToolResultMessage(r)),r.clear(),o=!0},i=(a)=>{let d=n.at(-1);if(this.shouldMergeUserAfterToolResults(d,a)){n[n.length-1]={...d,content:[...d.content,...this.contentBlocksForUserMerge(a.content)]},o=!0;return}n.push(a)};for(let a of e){if(this.isToolResultOnlyMessage(a)){if(i(this.appendMissingToolResults(a,r)),r.size>0)r.clear(),o=!0;continue}if(Array.isArray(a.content)){let d=a.content.filter((u)=>u.type==="tool_result"),c=a.content.filter((u)=>u.type!=="tool_result");if(d.length>0){let u=this.appendMissingToolResults({...a,role:"user",content:d},r);if(i(u),r.size>0)r.clear();o=!0}if(c.length>0||d.length===0){if(d.length===0)s();let u=d.length>0?{...a,content:c}:a;if(i(u),u.role==="assistant")this.trackMissingToolCalls(u,t,r)}continue}s(),i(a)}return s(),o?n:e}appendMissingToolResults(e,t){if(t.size===0||!Array.isArray(e.content))return e;return{...e,role:"user",content:[...e.content,...this.createMissingToolResultBlocks(t)]}}shouldMergeUserAfterToolResults(e,t){return e?.role==="user"&&t.role==="user"&&this.isToolResultOnlyMessage(e)&&this.contentBlocksForUserMerge(t.content).length>0}contentBlocksForUserMerge(e){return typeof e==="string"?e.length>0?[{type:"text",text:e}]:[]:e}collectToolResultIds(e){let t=new Set;for(let n of e){if(!Array.isArray(n.content))continue;for(let r of n.content)if(r.type==="tool_result")t.add(r.tool_use_id)}return t}isToolResultOnlyMessage(e){return e.role==="user"&&Array.isArray(e.content)&&e.content.length>0&&e.content.every((t)=>t.type==="tool_result")}trackMissingToolCalls(e,t,n){if(!Array.isArray(e.content))return;for(let r of e.content){if(r.type!=="tool_use"||t.has(r.id))continue;n.set(r.id,r.name)}}createMissingToolResultMessage(e){return{role:"user",content:this.createMissingToolResultBlocks(e)}}createMissingToolResultBlocks(e){return Array.from(e,([t,n])=>({type:"tool_result",tool_use_id:t,name:n,content:[{type:"text",text:this.formatMissingToolResultText(n)}],is_error:!0}))}formatMissingToolResultText(e){return e?`${kP} Tool: ${e}.`:kP}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(e){let t=e,n=this.readResultLocatorCache.get(t);if(n===void 0)n=this.extractReadLocatorsFromToolResultContent(e.content),this.readResultLocatorCache.set(t,n);if(n.length>0)return n;return this.readLocatorsByToolUseIdCache.get(e.tool_use_id)??[]}extractLocatorsFromReadToolInput(e){if(!e||typeof e!=="object")return[];let t=e,n=[],r=this.extractLocatorFromReadRequest(t);if(r)n.push(r);if(Array.isArray(t.files))for(let o of t.files){let s=this.extractLocatorFromReadRequest(o);if(s)n.push(s)}if(Array.isArray(t.file_paths)){for(let o of t.file_paths)if(typeof o==="string"&&o.length>0)n.push({path:o,startLine:null,endLine:null})}return this.dedupeReadLocators(n)}extractReadLocatorsFromToolResultContent(e){if(typeof e==="string")return this.tryParseReadLocators(e);let t=[];for(let n of e){if(n.type==="text"){t.push(...this.tryParseReadLocators(n.text));continue}if(hr(n)){let r=this.extractLocatorFromResultEntry(n);if(r)t.push(r)}}return this.dedupeReadLocators(t)}tryParseReadLocators(e){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(e))}catch{return[]}}extractLocatorsFromParsedReadResult(e){if(Array.isArray(e)){let n=[];for(let r of e){let o=this.extractLocatorFromResultEntry(r);if(o)n.push(o)}return this.dedupeReadLocators(n)}let t=this.extractLocatorFromResultEntry(e);return t?[t]:[]}extractLocatorFromReadRequest(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(!n)return;return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)}}extractLocatorFromResultEntry(e){if(!e||typeof e!=="object")return;let t=e,n=this.extractPath(t);if(n)return{path:n,startLine:this.extractLineNumber(t.start_line),endLine:this.extractLineNumber(t.end_line)};if(typeof t.query==="string"&&t.query.length>0)return this.parseReadQuery(t.query);return}extractPath(e){let t=[e.path,e.file_path,e.filePath];for(let n of t)if(typeof n==="string"&&n.length>0)return n;return}extractLineNumber(e){return typeof e==="number"&&Number.isInteger(e)?e:null}parseReadQuery(e){let t=/^(.*):(\d+)-(EOF|\d+)$/.exec(e);if(!t)return{path:e,startLine:null,endLine:null};return{path:t[1],startLine:Number(t[2]),endLine:t[3]==="EOF"?null:Number(t[3])}}dedupeReadLocators(e){let t=new Map;for(let n of e)t.set(this.toReadLocatorKey(n),n);return Array.from(t.values())}toReadLocatorKey(e){if(this.isFullFileRead(e))return e.path;return`${e.path}:${e.startLine??1}-${e.endLine??"EOF"}`}isFullFileRead(e){return e.startLine==null&&e.endLine==null}isOutdatedReadLocator(e,t){let n=this.latestFullContentOwnerByPathCache.get(e.path);if(n&&n!==t)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(e))!==t}replaceOutdatedReadContent(e,t){let n=new Set(t.map((s)=>this.toReadLocatorKey(s))),r=new Set(t.map((s)=>s.path));if(typeof e==="string")return this.replaceOutdatedInString(e,n)??mo;let o=0;for(let s of e)if(s.type==="text")o+=this.countOutdatedImageEntries(s.text,n);return e.map((s)=>{if(s.type==="file"){if(!r.has(s.path))return s;return{...s,content:mo}}if(s.type==="image"){if(o===0)return s;return o-=1,{type:"text",text:mo}}if(hr(s))return this.replaceOutdatedReadEntry(s,n);if(s.type!=="text")return s;let i=this.replaceOutdatedInString(s.text,n);if(i===null)return{...s,text:mo};return i===s.text?s:{...s,text:i}})}countOutdatedImageEntries(e,t){let n;try{n=JSON.parse(e)}catch{return 0}let r=Array.isArray(n)?n:[n],o=0;for(let s of r){if(!s||typeof s!=="object")continue;let i=s,a=this.extractLocatorFromResultEntry(i);if(!a)continue;if(!t.has(this.toReadLocatorKey(a)))continue;if(i.result==="Successfully read image"||i.content==="Successfully read image")o+=1}return o}replaceOutdatedInString(e,t){let n;try{n=JSON.parse(e)}catch{return null}let r=Array.isArray(n)?n.map((o)=>this.replaceOutdatedReadEntry(o,t)):this.replaceOutdatedReadEntry(n,t);return JSON.stringify(r)}replaceOutdatedReadEntry(e,t){if(!e||typeof e!=="object")return e;let n=this.extractLocatorFromResultEntry(e);if(!n||!t.has(this.toReadLocatorKey(n)))return e;let r={...e};if(typeof r.result==="string")r.result=mo;else if(typeof r.content==="string")r.content=mo;else r.result=mo;return r}isReadTool(e){return!!e&&eq.has(e)}resolveToolName(e){let t=this.toolNameByIdCache.get(e.tool_use_id);if(t!==void 0)return t;return typeof e.name==="string"&&e.name.length>0?e.name.toLowerCase():void 0}truncateToolResultContent(e){if(typeof e==="string")return this.truncateMiddle(e);return e.map((t)=>{if(this.recoveryNotices.has(t))return t;if(t.type==="file"){let n=this.truncateMiddle(t.content);return n===t.content?t:{...t,content:n}}if(t.type==="text"){let n=this.truncateMiddle(t.text);return n===t.text?t:{...t,text:n}}if(hr(t))return this.truncateNestedStrings(t);return t})}truncateNestedStrings(e){if(typeof e==="string")return this.truncateMiddle(e);if(Array.isArray(e)){let t=!1,n=e.map((r)=>{let o=this.truncateNestedStrings(r);if(o!==r)t=!0;return o});return t?n:e}if(e!==null&&typeof e==="object"){if(oh(e))return e;let t=!1,n={};for(let[r,o]of Object.entries(e)){let s=this.truncateNestedStrings(o);if(s!==o)t=!0;n[r]=s}return t?n:e}return e}truncateMiddle(e){return Ra(e,this.maxToolResultChars,PP)}truncateAssistantText(e){if(this.hasRepeatedToolCallMarkup(e))return Ra(e,this.maxAssistantToolMarkupChars,nq);return Ra(e,this.maxAssistantTextChars,tq)}hasRepeatedToolCallMarkup(e){if(e.length<=this.maxAssistantToolMarkupChars)return!1;let t=0;for(let n of e.matchAll(rq))if(t+=1,t>=Zj)return!0;return!1}truncateToTotalTextBudget(e){let t=this.countMessageTextBytes(e);if(t<=this.maxTotalTextBytes)return e;let n=e.map((s)=>{if(!Array.isArray(s.content))return{...s};return{...s,content:s.content.map((i)=>{let a=aq(i);if(i.type==="tool_result"&&a.type==="tool_result"&&Array.isArray(i.content)&&Array.isArray(a.content))i.content.forEach((d,c)=>{if(this.recoveryNotices.has(d))this.recoveryNotices.add(a.content[c])});return a})}}),r=this.collectTruncationCandidates(n),o=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,r.length)));for(let s of r){if(t<=this.maxTotalTextBytes)break;let i=s.byteLength,a=Math.min(s.minBytes,o);if(i<=a)continue;let d=t-this.maxTotalTextBytes,c=Math.max(a,i-d),u=iq(s.get(),c,s.makeMarker);s.set(u),t-=i-Te(u)}return n}countMessageTextBytes(e){let t=0;for(let n of e){if(typeof n.content==="string"){t+=Te(n.content);continue}for(let r of n.content)if(r.type==="text")t+=Te(r.text);else if(r.type==="thinking")t+=Te(r.thinking);else if(r.type==="file")t+=Te(r.content);else if(r.type==="tool_use")t+=Gu(r.input);else if(r.type==="tool_result"){if(typeof r.content==="string")t+=Te(r.content);else for(let o of r.content)if(o.type==="text")t+=Te(o.text);else if(o.type==="file")t+=Te(o.content);else if(hr(o))t+=Gu(o)}}return t}collectTruncationCandidates(e){let t=[],n=[];for(let r of e){if(r.role==="assistant"&&typeof r.content==="string"){t.push({byteLength:Te(r.content),minBytes:CP,makeMarker:IP,get:()=>r.content,set:(o)=>{r.content=o}});continue}if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){Vu(o.input,n);continue}if(r.role==="assistant"&&o.type==="text"){t.push({byteLength:Te(o.text),minBytes:CP,makeMarker:IP,get:()=>o.text,set:(s)=>{o.text=s}});continue}if(o.type!=="tool_result")continue;if(typeof o.content==="string"){t.push({byteLength:Te(o.content),minBytes:Aa,makeMarker:Ea,get:()=>o.content,set:(s)=>{o.content=s}});continue}for(let s of o.content){if(this.recoveryNotices.has(s))continue;if(s.type==="text")t.push({byteLength:Te(s.text),minBytes:Aa,makeMarker:Ea,get:()=>s.text,set:(i)=>{s.text=i}});else if(s.type==="file")t.push({byteLength:Te(s.content),minBytes:Aa,makeMarker:Ea,get:()=>s.content,set:(i)=>{s.content=i}});else if(hr(s))Vu(s,t)}}}return t.sort((r,o)=>o.byteLength-r.byteLength),n.sort((r,o)=>o.byteLength-r.byteLength),[...t,...n]}applyMediaBudget(e){let t=this.resolveMediaBudget();if(t.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&t.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&t.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return e;let n=zj(),r=!1,o=e.map((s)=>{if(!Array.isArray(s.content))return s;let i=!1,a=s.content.map((d)=>{let c=this.applyMediaBudgetToBlock(d,t,n);if(c!==d)i=!0;return c});if(!i)return s;return r=!0,{...s,content:a}});return r?o:e}resolveMediaBudget(){return Kj(this.mediaBudget)}applyMediaBudgetToBlock(e,t,n){if(th(e))return this.limitImageContent(e,t,n);if(e.type!=="tool_result"||typeof e.content==="string")return e;let r=!1,o=e.content.map((s)=>{let i=this.applyMediaBudgetToToolResultEntry(s,t,n);if(i!==s)r=!0;return i});return r?{...e,content:o}:e}applyMediaBudgetToToolResultEntry(e,t,n){if(th(e))return this.limitImageContent(e,t,n);if(hr(e))return this.limitNestedMedia(e,t,n);return e}limitNestedMedia(e,t,n){if(th(e)){let r=this.limitImageContent(e,t,n);return r.type==="text"?r.text:r}if(Array.isArray(e)){let r=!1,o=e.map((s)=>{let i=this.limitNestedMedia(s,t,n);if(i!==s)r=!0;return i});return r?o:e}if(e!==null&&typeof e==="object"){let r=!1,o={};for(let[s,i]of Object.entries(e)){let a=this.limitNestedMedia(i,t,n);if(a!==i)r=!0;o[s]=a}return r?o:e}return e}limitImageContent(e,t,n){if(!xP(e))return{type:"text",text:TP};let r=Gj(e.mediaType,e.data,{maxImageEncodedBytes:t.maxImageEncodedBytes,maxImageDecodedBytes:t.maxImageDecodedBytes,maxTotalMediaBytes:t.maxTotalMediaBytes},n);if(!r.ok)return{type:"text",text:TP};return{...e,data:r.base64,mediaType:r.mediaType}}}var RP=String.raw`[\|\uFF5C]`,rq=new RegExp(String.raw`<\s*(?:${RP}\s*)?DSML\s*(?:${RP}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Te(e){return Buffer.byteLength(e,"utf8")}function AP(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function oq(e){if(e===void 0)return;let t=e.trim().toLowerCase();if(t==="infinity"||t==="disable")return Number.POSITIVE_INFINITY;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:void 0}function Ia(e,t){return typeof e==="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t}function sq(e,t){if(typeof e!=="number"||Number.isNaN(e)||e<0)return t;return Number.isFinite(e)?Math.floor(e):e}function Ra(e,t,n){if(e.length<=t)return e;let r=n(e.length-t),o=Math.max(0,Math.floor((t-r.length)/2)),s=Math.max(0,e.length-o*2),i=n(s),a=Math.max(0,Math.floor((t-i.length)/2)),d=e.slice(0,a),c=a>0?e.slice(-a):"";return`${d}${i}${c}`}function iq(e,t,n){if(Te(e)<=t)return e;let r=0,o=e.length,s="";while(r<=o){let i=r+o>>>1,a=Ra(e,i,n);if(Te(a)<=t)s=a,r=i+1;else o=i-1}return s}function aq(e){if(e.type==="tool_use")return{...e,input:Ju(e.input)};if(e.type!=="tool_result"||typeof e.content==="string")return{...e};return{...e,content:e.content.map((t)=>hr(t)?Ju(t):{...t})}}function hr(e){if(e===null||typeof e!=="object")return!1;let t=e.type;return t!=="text"&&t!=="image"&&t!=="file"}function th(e){return e!==null&&typeof e==="object"&&e.type==="image"}function xP(e){return e!==null&&typeof e==="object"&&e.type==="image"&&typeof e.data==="string"&&typeof e.mediaType==="string"}function oh(e){return xP(e)}function Gu(e){if(typeof e==="string")return Te(e);if(Array.isArray(e)){let t=0;for(let n of e)t+=Gu(n);return t}if(e!==null&&typeof e==="object"){if(oh(e))return 0;let t=0;for(let n of Object.values(e))t+=Gu(n);return t}return 0}function Vu(e,t){if(Array.isArray(e)){e.forEach((n,r)=>{if(typeof n==="string")t.push({byteLength:Te(n),minBytes:Aa,makeMarker:Ea,get:()=>e[r],set:(o)=>{e[r]=o}});else Vu(n,t)});return}if(e!==null&&typeof e==="object"){if(oh(e))return;let n=e;for(let r of Object.keys(n)){let o=n[r];if(typeof o==="string")t.push({byteLength:Te(o),minBytes:Aa,makeMarker:Ea,get:()=>n[r],set:(s)=>{n[r]=s}});else Vu(o,t)}}}function Ju(e){if(Array.isArray(e))return e.map(Ju);if(e!==null&&typeof e==="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=Ju(r);return t}return e}function sh(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class ih{messages=[];conversationId=sh();sessionStarted=!1;constructor(e){if((e?.length??0)>0)this.restore(e??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(e){this.messages.push(e)}appendMessages(e){if(e.length===0)return;this.messages.push(...e)}replaceMessages(e){let t=new Map(e.map((o,s)=>[o.id,s])),n=new Map,r=-1;for(let o of this.messages){let s=o.id?t.get(o.id):void 0;if(s!==void 0)r=s;else if(o.metadata?.displayOnly===!0){let i=n.get(r)??[];i.push(o),n.set(r,i)}}this.messages=[...n.get(-1)??[]];for(let[o,s]of e.entries())this.messages.push(s,...n.get(o)??[])}resetForRun(){this.messages=[],this.conversationId=sh(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=sh(),this.sessionStarted=!1}restore(e){this.messages=[...e],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var yr="0.0.95";var Sr={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:yr,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","proxy-from-env":"^2.1.0","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/proxy-from-env":"^1.0.4","@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function MP(e){let{agentConfig:t}=e,n=dq(t),r=cq(t),o=e.hooks,s=uq(t.maxParallelToolCalls);return{distinctId:t.distinctId,clientName:t.extensionContext?.client?.name,clientVersion:t.extensionContext?.client?.version,clineCoreVersion:yr,sessionId:e.sessionId??t.sessionId,agentId:e.agentId,conversationId:e.conversationId,parentAgentId:e.parentAgentId,agentRole:e.agentRole,systemPrompt:e.systemPrompt??t.systemPrompt,messageModelInfo:r,model:e.model,modelOptions:n,modelTools:t.modelTools,tools:e.tools,hooks:o,prepareTurn:e.prepareTurn,consumePendingUserMessage:t.consumePendingUserMessage,plugins:e.plugins,logger:e.logger??t.logger,telemetry:e.telemetry??t.telemetry,initialMessages:e.initialMessages,completionPolicy:e.completionPolicy===null?void 0:e.completionPolicy??t.completionPolicy,maxIterations:t.maxIterations,toolExecution:s,toolPolicies:t.toolPolicies,toolContextMetadata:e.toolContextMetadata,requestToolApproval:t.requestToolApproval}}function dq(e){let t={};if(e.thinking!==void 0)t.thinking=e.thinking;if(e.reasoningEffort!==void 0)t.reasoningEffort=e.reasoningEffort;if(e.thinkingBudgetTokens!==void 0)t.thinkingBudgetTokens=e.thinkingBudgetTokens;if(e.maxTokensPerTurn!==void 0)t.maxTokensPerTurn=e.maxTokensPerTurn;if(e.temperature!==void 0)t.temperature=e.temperature;if(e.apiTimeoutMs!==void 0)t.apiTimeoutMs=e.apiTimeoutMs;return Object.keys(t).length>0?t:void 0}function cq(e){let t=e.providerConfig?.family;return{id:e.modelId,provider:e.providerId,family:t}}function uq(e){if(e===void 0)return;return e>=2?"parallel":"sequential"}function lq(e){let t={};if(e.providerId!==void 0)t.providerId=e.providerId;if(e.modelId!==void 0)t.modelId=e.modelId;if(e.apiKey!==void 0)t.apiKey=e.apiKey;if(e.baseUrl!==void 0)t.baseUrl=e.baseUrl;if(e.headers!==void 0)t.headers=e.headers;if(e.providerConfig!==void 0)t.providerConfig=e.providerConfig;if(e.thinking===!1)return t.thinking=!1,t.reasoningEffort=null,t.thinkingBudgetTokens=null,t;if(e.thinking===!0)t.thinking=!0,t.reasoningEffort=e.reasoningEffort??null,t.thinkingBudgetTokens=null;else if(e.reasoningEffort!==void 0)t.thinking=!0,t.reasoningEffort=e.reasoningEffort;if(typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0,t.thinkingBudgetTokens=Math.trunc(e.thinkingBudgetTokens);return t}function Ls(e){let t={...e},n=Object.hasOwn(e,"thinking"),r=Object.hasOwn(e,"thinkingBudgetTokens");if(e.thinking===!1||e.thinking===null)return t.reasoningEffort=void 0,t.thinkingBudgetTokens=void 0,t;if(!n&&r&&typeof e.thinkingBudgetTokens==="number"&&Number.isFinite(e.thinkingBudgetTokens)&&e.thinkingBudgetTokens>0)t.thinking=!0;return t}function pq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function mq(e){e.lastToolName="",e.lastToolSignature="",e.consecutiveIdenticalCount=0}function ah(e){if(e==null||typeof e!=="object")return e;if(Array.isArray(e))return e.map(ah);let t={};for(let n of Object.keys(e).sort())t[n]=ah(e[n]);return t}function gq(e){if(e==null)return"null";if(typeof e==="string")return e;if(typeof e!=="object")return String(e);try{return JSON.stringify(ah(e))}catch{return String(e)}}function fq(e,t,n,r){if(t===e.lastToolName&&n===e.lastToolSignature)e.consecutiveIdenticalCount++;else e.consecutiveIdenticalCount=1;return e.lastToolName=t,e.lastToolSignature=n,{softWarning:e.consecutiveIdenticalCount===r.softThreshold,hardEscalation:e.consecutiveIdenticalCount>=r.hardThreshold}}var OP={softThreshold:3,hardThreshold:5};class dh{config;state=pq();constructor(e){this.config={softThreshold:e?.softThreshold??OP.softThreshold,hardThreshold:e?.hardThreshold??OP.hardThreshold}}inspect(e){let t=gq(e.input),n=fq(this.state,e.name,t,this.config);if(n.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; stopping to avoid a loop.`};if(n.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${e.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){mq(this.state)}}class ch{consecutiveMistakes=0;options;constructor(e){this.options=e}async record(e){let t=this.options.maxConsecutiveMistakes,n=e.forceAtLimit&&t?t:this.consecutiveMistakes+1;this.consecutiveMistakes=n;let r=e.details?.trim()||`consecutive mistake (${e.reason})`;if(this.options.emit({type:"error",error:Error(r),recoverable:!0,iteration:e.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:e.iteration,reason:e.reason,details:e.details,consecutiveMistakes:n,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!t||n<t)return{action:"continue"};let o={iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details};this.options.onLimitTelemetry?.(o);let s=await yq(o,this.options.onLimitReached);if(s.action==="continue"){let i=s.guidance?.trim();if(i)this.options.appendRecoveryNotice(i,e.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:i}}return{action:"stop",reason:s.reason?.trim()||void 0,message:hq({iteration:e.iteration,consecutiveMistakes:n,maxConsecutiveMistakes:t,reason:e.reason,details:e.details,stopReason:s.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function hq(e){let t=[`Stopped after ${e.consecutiveMistakes}/${e.maxConsecutiveMistakes} consecutive mistakes (${e.reason}) at iteration ${e.iteration}.`],n=e.details?.trim();if(n)t.push(`Error: ${n}`);let r=e.stopReason?.trim();if(r)t.push(`Decision: ${r}`);return t.push("Session state was preserved. Send a new prompt to resume from the latest state."),t.join(" ")}async function yq(e,t){if(!t)return{action:"stop",reason:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`};try{return await t(e)}catch(n){return{action:"stop",reason:n instanceof Error?n.message:`maximum consecutive mistakes reached (${e.maxConsecutiveMistakes})`}}}function Sq(e){switch(e){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return e;default:return}}function bq(e){let t=e.content.filter((n)=>n.type==="text");if(t.length===0)return;return t.map((n)=>n.text).join("")}function vq(e){let t=e.content.filter((n)=>n.type==="reasoning");if(t.length===0)return;return{reasoning:t.map((n)=>n.text).join(""),redacted:t.some((n)=>n.redacted===!0)}}function Tq(e){return e.content.find((t)=>t.type==="tool-result")}function wq(e){switch(e){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Cq(e){if(!e||e.isError!==!0)return;if(typeof e.output==="string")return e.output;if(e.output instanceof Error)return e.output.message;try{return JSON.stringify(e.output)}catch{return String(e.output)}}class uh{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(e){switch(e.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:e.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:e.iteration,hadToolCalls:e.toolCallCount>0,toolCallCount:e.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:e.text,accumulated:e.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:e.text,redacted:e.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:e.media}];case"assistant-message":return this.translateAssistantMessage(e.message);case"tool-started":return this.translateToolStarted(e);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,update:e.update}];case"tool-finished":return this.translateToolFinished(e);case"usage-updated":return this.translateUsage(e.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:e.message,reason:Sq(e.metadata?.reason),metadata:e.metadata}];case"run-finished":return this.translateRunFinished(e.result);case"run-failed":return[{type:"error",error:e.error,errorClass:e.errorClass,recoverable:!1,iteration:e.snapshot.iteration}];default:return e}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(e){let t=[],n=bq(e);if(n!==void 0)t.push({type:"content_end",contentType:"text",text:n});let r=vq(e);if(r!==void 0)t.push({type:"content_end",contentType:"reasoning",reasoning:r.reasoning});return t}translateToolStarted(e){return this.toolStartedAt.set(e.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,execution:e.toolCall.execution}]}translateToolFinished(e){let t=this.toolStartedAt.get(e.toolCall.toolCallId),n=t===void 0?void 0:Date.now()-t;this.toolStartedAt.delete(e.toolCall.toolCallId);let r=Tq(e.message),o=r?.output,s=Cq(r);return[{type:"content_end",contentType:"tool",toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,output:o,error:s,durationMs:n,execution:e.toolCall.execution}]}translateUsage(e){let t=e.inputTokens-this.lastUsage.inputTokens,n=e.outputTokens-this.lastUsage.outputTokens,r=e.cacheReadTokens-this.lastUsage.cacheReadTokens,o=e.cacheWriteTokens-this.lastUsage.cacheWriteTokens,s=this.lastUsage.totalCost??0,a=(e.totalCost??0)-s,d=this.lastUsage.reasoningTokenCount??0,u=(e.reasoningTokenCount??0)-d;return this.lastUsage={inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,totalCost:e.totalCost,reasoningTokenCount:e.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,t),outputTokens:Math.max(0,n),cacheReadTokens:r===0?void 0:Math.max(0,r),cacheWriteTokens:o===0?void 0:Math.max(0,o),cost:a===0?void 0:a,reasoningTokenCount:u===0?void 0:Math.max(0,u),totalInputTokens:e.inputTokens,totalOutputTokens:e.outputTokens,totalCacheReadTokens:e.cacheReadTokens===0?void 0:e.cacheReadTokens,totalCacheWriteTokens:e.cacheWriteTokens===0?void 0:e.cacheWriteTokens,totalCost:e.totalCost}]}translateRunFinished(e){let t={inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens,cacheReadTokens:e.usage.cacheReadTokens===0?void 0:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens===0?void 0:e.usage.cacheWriteTokens,totalCost:e.usage.totalCost};return[{type:"done",reason:wq(e.status),text:e.outputText,iterations:e.iterations,usage:t}]}}var Lq="session_run_in_progress";class HP extends Error{agentId;code=Lq;constructor(e){super(`SessionRuntime.shutdown called while a run is in progress${e?` (agentId=${e})`:""}`);this.agentId=e;this.name="SessionRunInProgressError"}}function Nq(e){if(typeof e==="string")return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}async function Dq(e){let n=(typeof e.content==="function"?await e.content():e.content).trim();return n.length>0?n:void 0}function Uq(e,t){let n=e.trim(),r=t.map((o)=>o.trim()).filter(Boolean).join(`
|
|
202
202
|
|
|
203
203
|
`);if(n&&r)return`${n}
|
|
204
204
|
|
|
@@ -545,7 +545,7 @@ ${JSON.stringify(r,null,2)}`}startClaimLeaseHeartbeat(e){let t=Math.max(1000,Mat
|
|
|
545
545
|
`)[0]?.trim())}function Ln(e){if(!e)return;let t={...e},n=ko(typeof t.title==="string"?t.title:void 0);if(n)t.title=n;else delete t.title;return Object.keys(t).length>0?t:void 0}function dd(e){let t=Ln(e.metadata)??{},n=e.title!==void 0?ko(e.title):py(e.prompt);if(n)t.title=n;return Object.keys(t).length>0?t:void 0}function my(e){let t=kn(e.metadata),n={source:e.source,mode:t?.mode??"user",sessionId:e.sessionId,...e.parentSessionId?{parentThreadId:e.parentSessionId}:{},...e.agentId?{subagent:e.agentId}:{},...t?.version?{version:t.version}:{},...t?.trigger?{trigger:t.trigger}:{}};if(id(e.sessionId))return{agent:"teammate",sessionId:e.sessionId,taskType:"team",origin:n};if(_l(e.sessionId))return{agent:"subagent",sessionId:e.sessionId,taskType:"subagent_task",origin:n};return{agent:"lead",sessionId:e.sessionId,origin:n}}function gy(e){return{version:1,updated_at:e.updatedAt,agent:e.context.agent,sessionId:e.context.sessionId,...e.context.taskType?{taskType:e.context.taskType}:{},origin:e.context.origin,messages:Ml(e.messages),...e.systemPrompt?{system_prompt:e.systemPrompt}:{}}}function pA(e,t,n){DG(HG(e),{recursive:!0}),UG(e,`${JSON.stringify(gy({updatedAt:t,context:n,messages:[]}),null,2)}
|
|
546
546
|
`,"utf8")}function mA(e,t){return ht.parse({version:1,session_id:e.sessionId,source:e.source,pid:e.pid,started_at:e.startedAt,ended_at:t?.endedAt??e.endedAt??void 0,exit_code:t?.exitCode??e.exitCode??void 0,status:t?.status??e.status,interactive:e.interactive,provider:e.provider,model:e.model,cwd:e.cwd,workspace_root:e.workspaceRoot,team_name:e.teamName??void 0,enable_tools:e.enableTools,enable_spawn:e.enableSpawn,enable_teams:e.enableTeams,prompt:e.prompt??void 0,metadata:t?.metadata??e.metadata??void 0,messages_path:e.messagesPath??void 0})}async function gA(e,t,n){let r=0;while(!0){let o=await e();if(o===void 0)return{updated:!1};let s=await t(o);if(typeof s==="object"&&s!==null&&"updated"in s&&s.updated===!1){if(r+=1,r>=n)return s;continue}return s}}import{existsSync as jG}from"node:fs";import{readFile as qG}from"node:fs/promises";class cd{listeners=new Set;subscribe(e,t){let n={listener:e,sessionId:t?.sessionId?.trim()||void 0};return this.listeners.add(n),()=>{this.listeners.delete(n)}}emit(e){let t=e.payload.sessionId?.trim();for(let n of this.listeners){if(n.sessionId&&n.sessionId!==t)continue;n.listener(e)}}get size(){return this.listeners.size}}async function Ir(e){let t=e?.trim();if(!t||!jG(t))return[];try{let n=(await qG(t,"utf8")).trim();if(!n)return[];let r=JSON.parse(n);if(Array.isArray(r))return r;if(r&&typeof r==="object"&&!Array.isArray(r)){let o=r.messages;if(Array.isArray(o))return o}return[]}catch{return[]}}function fy(e){return e?{...e}:void 0}async function fA(e,t){if(!(e.hookName==="tool_call"||!!e.parent_agent_id))return;await t.queueSpawnRequest(e);let r=await t.upsertSubagentSessionFromHook(e);if(!r)return;await t.appendSubagentHookAudit(r,e),await t.applySubagentStatus(r,e)}function ud(e){if(typeof e!=="string")return;let t=e.trim();return t.length>0?t:void 0}function Et(e){let t=ud(e);if(!t)return;return t.toLowerCase()==="unknown"?void 0:t}function Ll(e){return typeof e==="number"&&Number.isFinite(e)?e:void 0}function VG(e){if(!e||typeof e!=="object"||Array.isArray(e))return;return{...e}}function Sy(e){let t=e??200;return Number.isFinite(t)?Math.max(0,Math.floor(t)):200}var hy=2000;function JG(e){if(e===0)return 0;return Math.min(Math.max(e*2,20),hy)}function XG(e){return e.isSubagent!==!0&&!ud(e.parentSessionId)}function YG(e){let t=e.match(/\d{13,}/g);if(!t||t.length===0)return 0;let n=0;for(let r of t){let o=Number.parseInt(r,10);if(Number.isFinite(o)&&o>n)n=o}return n}function by(e){return{sessionId:e.session_id,source:e.source,pid:e.pid,startedAt:e.started_at,endedAt:e.ended_at??null,exitCode:e.exit_code??null,status:e.status,interactive:e.interactive,provider:e.provider,model:e.model,cwd:e.cwd,workspaceRoot:e.workspace_root,teamName:e.team_name,enableTools:e.enable_tools,enableSpawn:e.enable_spawn,enableTeams:e.enable_teams,isSubagent:!1,prompt:e.prompt,metadata:e.metadata,messagesPath:e.messages_path,updatedAt:e.ended_at??e.started_at}}async function QG(e){let t=Sy(e);if(t===0)return[];let n=bA(),o=(await zG(n,{withFileTypes:!0}).catch(()=>[])).filter((i)=>i.isDirectory()).map((i)=>({entry:i,recency:YG(i.name.trim())})).sort((i,a)=>a.recency-i.recency||a.entry.name.localeCompare(i.entry.name));return(await Promise.all(o.map(async({entry:i})=>{let a=i.name.trim();if(!a)return;let d=SA(n,a,`${a}.json`),c=await yA(d,"utf8").catch(()=>{return});if(!c)return;let u;try{u=JSON.parse(c)}catch{return}let l=ht.safeParse(u);if(!l.success)return;return by(l.data)}))).filter((i)=>Boolean(i)).sort((i,a)=>a.startedAt.localeCompare(i.startedAt)).slice(0,t)}async function ZG(e,t,n){let r=Sy(t);if(r===0)return await e.listSessions(0),[];if(n.includeSubagents)return(await e.listSessions(r)).slice(0,r);let o=JG(r);for(;;){let s=await e.listSessions(o,{rootOnly:!0}),i=s.filter(XG);if(i.length>=r||s.length<o||o>=hy)return i.slice(0,r);o=Math.min(o*2,hy)}}function eV(e){if(typeof e==="string")return e.trim();let t=[];for(let n of e){if(!n||typeof n!=="object")continue;let r=n;if(r.type!=="text")continue;let o=r.text?.trim();if(o)t.push(o)}return t.join(`
|
|
547
547
|
`).trim()}function hA(e){return e.replace(/\s+/g," ").trim()}function tV(e,t){if(e.length<=t)return e;return`${e.slice(0,Math.max(0,t-3)).trimEnd()}...`}function nV(e){for(let t of["user","assistant"])for(let n of e){if(n.role!==t)continue;let r=hA(eV(n.content));if(!r)continue;let o=t==="user"?hA(KG(r)):r,s=GG(o.split(`
|
|
548
|
-
`)[0]??o);return tV(s,50)}return}function rV(e){let t=0;for(let n of e)t+=Ll(n.metrics?.cost)??0;return t}function oV(e){let t,n;for(let r=e.length-1;r>=0;r-=1){let o=e[r];if(!t)t=Et(o.modelInfo?.provider);if(!n)n=Et(o.modelInfo?.id);if(t&&n)break}return{provider:t,model:n}}function sV(e){return Et(e?.provider)??Et(e?.provider&&typeof e.provider==="object"&&!Array.isArray(e.provider)?e.provider.id:void 0)}function iV(e){return Et(e?.model)??Et(e?.model&&typeof e.model==="object"&&!Array.isArray(e.model)?e.model.id:void 0)}function yy(e,t){let n=VG(e.metadata),r=ud(t?.title)??ud(n?.title),o=Ll(t?.totalCost)??Ll(n?.totalCost),s=n||r!==void 0||o!==void 0?{...n??{},...r!==void 0?{title:r}:{},...o!==void 0?{totalCost:o}:{}}:void 0;return{...e,provider:Et(t?.provider)??Et(e.provider)??sV(n)??"",model:Et(t?.model)??Et(e.model)??iV(n)??"",metadata:s}}function aV(e){let t=e.content;if(!Array.isArray(t))return!1;return t.some((n)=>!!n&&typeof n==="object"&&n.type==="tool-call")}function dV(e,t){if(e.status!=="running"||e.interactive!==!0)return!1;let n=t.at(-1);return n?.role==="assistant"&&!aV(n)}async function cV(e,t){return await Promise.all(t.map(async(n)=>{if(n.status!=="running"||n.interactive!==!0)return n;let r=await e.readSessionMessages(n.sessionId);return dV(n,r)?{...n,status:"idle"}:n}))}async function uV(e,t){return await Promise.all(t.map(async(n)=>{let r=yy(n),o=Boolean(ud(r.metadata?.title)),s=Boolean(Et(r.provider)),i=Boolean(Et(r.model)),a=Ll(r.metadata?.totalCost),d=a!==void 0&&a>0;if(o&&s&&i&&d)return r;let c=await e.readSessionMessages(n.sessionId);if(c.length===0)return r;let u=oV(c),l=rV(c);return yy(n,{title:o?void 0:nV(c),provider:s?void 0:u.provider,model:i?void 0:u.model,totalCost:d||l<=0?void 0:l})}))}async function vy(e,t={}){let n=Sy(t.limit),r=t.includeSubagents===!0,o=await ZG(e,n,{includeSubagents:r}),s=t.includeManifestFallback===!0&&o.length<n?await QG(Math.min(Math.max(n*2,100),500)):[],i=new Map;for(let c of[...o,...s]){if(i.has(c.sessionId))continue;i.set(c.sessionId,c)}let a=s.length===0?o:Array.from(i.values()).sort((c,u)=>u.startedAt.localeCompare(c.startedAt)).slice(0,n),d=await cV(e,a);if(t.hydrate===!1)return d.map((c)=>yy(c));return await uV(e,d)}async function lV(e){let t=e.trim();if(!t)return;let n=SA(bA(),t,`${t}.json`),r=await yA(n,"utf8").catch(()=>{return});if(!r)return;try{let o=ht.safeParse(JSON.parse(r));return o.success?o.data.messages_path:void 0}catch{return}}async function pV(e,t={}){let n=new Map;return await vy({listSessions:async(o,s)=>{let i=await e.listSessions(o,s);n.clear();for(let a of i)n.set(a.sessionId,a);return i.map(ad)},readSessionMessages:async(o)=>{let s=n.get(o)?.messagesPath??await lV(o);return await Ir(s)}},t)}import{captureSdkError as WM}from"@cline/shared";import{createSessionId as IJ,ensureLoopbackProxyBypass as KA,isHubProtocolCompatible as RJ,resolveClineBuildEnv as AJ,resolveHubCommandTimeoutMs as EJ}from"@cline/shared";import{HttpProxyAgent as xJ}from"http-proxy-agent";import{HttpsProxyAgent as _J}from"https-proxy-agent";import{getProxyForUrl as MJ}from"proxy-from-env";import OJ from"ws";import{spawn as KV}from"node:child_process";import{closeSync as GV,mkdirSync as VV,openSync as JV,readFileSync as XV,unlinkSync as YV}from"node:fs";import{basename as QV,dirname as ZV,join as eJ}from"node:path";import{fileURLToPath as tJ}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as nJ,getClineClientIdentity as rJ,isBunEmbeddedModulePath as oJ,isHubDaemonProcess as UA,resolveClineBuildEnv as HA,withHubLauncherIdentity as sJ,withResolvedClineBuildEnv as iJ}from"@cline/shared";import{createHash as mV,randomBytes as PA}from"node:crypto";import{existsSync as gV}from"node:fs";import{mkdir as wy,open as vA,readFile as IA,rename as fV,rm as Nl,writeFile as hV}from"node:fs/promises";import{dirname as RA,join as Cy}from"node:path";import{ensureLoopbackProxyBypass as yV,isHubProtocolCompatible as SV}from"@cline/shared";import{resolveClineDataDir as ld,resolveClineDir as kge}from"@cline/shared/storage";var bV="CLINE_HUB_DISCOVERY_PATH",vV="CLINE_HUB_BUILD_ID",TV="CLINE_HUB_BUILD_EPOCH_MS",wV=30000,CV=15000,TA=100;function kV(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function PV(e){return mV("sha256").update(e).digest("hex").slice(0,12)}function IV(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function AA(){return PA(32).toString("hex")}function wA(e){return new Promise((t)=>setTimeout(t,e))}function RV(e){return`${e}.lock`}async function AV(e){try{let t=JSON.parse(await IA(Cy(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function Ty(e){await Nl(e,{recursive:!0,force:!0}).catch(()=>{return})}function dn(){let e=process.env[vV]?.trim();if(e)return e;return"sdk-v1-
|
|
548
|
+
`)[0]??o);return tV(s,50)}return}function rV(e){let t=0;for(let n of e)t+=Ll(n.metrics?.cost)??0;return t}function oV(e){let t,n;for(let r=e.length-1;r>=0;r-=1){let o=e[r];if(!t)t=Et(o.modelInfo?.provider);if(!n)n=Et(o.modelInfo?.id);if(t&&n)break}return{provider:t,model:n}}function sV(e){return Et(e?.provider)??Et(e?.provider&&typeof e.provider==="object"&&!Array.isArray(e.provider)?e.provider.id:void 0)}function iV(e){return Et(e?.model)??Et(e?.model&&typeof e.model==="object"&&!Array.isArray(e.model)?e.model.id:void 0)}function yy(e,t){let n=VG(e.metadata),r=ud(t?.title)??ud(n?.title),o=Ll(t?.totalCost)??Ll(n?.totalCost),s=n||r!==void 0||o!==void 0?{...n??{},...r!==void 0?{title:r}:{},...o!==void 0?{totalCost:o}:{}}:void 0;return{...e,provider:Et(t?.provider)??Et(e.provider)??sV(n)??"",model:Et(t?.model)??Et(e.model)??iV(n)??"",metadata:s}}function aV(e){let t=e.content;if(!Array.isArray(t))return!1;return t.some((n)=>!!n&&typeof n==="object"&&n.type==="tool-call")}function dV(e,t){if(e.status!=="running"||e.interactive!==!0)return!1;let n=t.at(-1);return n?.role==="assistant"&&!aV(n)}async function cV(e,t){return await Promise.all(t.map(async(n)=>{if(n.status!=="running"||n.interactive!==!0)return n;let r=await e.readSessionMessages(n.sessionId);return dV(n,r)?{...n,status:"idle"}:n}))}async function uV(e,t){return await Promise.all(t.map(async(n)=>{let r=yy(n),o=Boolean(ud(r.metadata?.title)),s=Boolean(Et(r.provider)),i=Boolean(Et(r.model)),a=Ll(r.metadata?.totalCost),d=a!==void 0&&a>0;if(o&&s&&i&&d)return r;let c=await e.readSessionMessages(n.sessionId);if(c.length===0)return r;let u=oV(c),l=rV(c);return yy(n,{title:o?void 0:nV(c),provider:s?void 0:u.provider,model:i?void 0:u.model,totalCost:d||l<=0?void 0:l})}))}async function vy(e,t={}){let n=Sy(t.limit),r=t.includeSubagents===!0,o=await ZG(e,n,{includeSubagents:r}),s=t.includeManifestFallback===!0&&o.length<n?await QG(Math.min(Math.max(n*2,100),500)):[],i=new Map;for(let c of[...o,...s]){if(i.has(c.sessionId))continue;i.set(c.sessionId,c)}let a=s.length===0?o:Array.from(i.values()).sort((c,u)=>u.startedAt.localeCompare(c.startedAt)).slice(0,n),d=await cV(e,a);if(t.hydrate===!1)return d.map((c)=>yy(c));return await uV(e,d)}async function lV(e){let t=e.trim();if(!t)return;let n=SA(bA(),t,`${t}.json`),r=await yA(n,"utf8").catch(()=>{return});if(!r)return;try{let o=ht.safeParse(JSON.parse(r));return o.success?o.data.messages_path:void 0}catch{return}}async function pV(e,t={}){let n=new Map;return await vy({listSessions:async(o,s)=>{let i=await e.listSessions(o,s);n.clear();for(let a of i)n.set(a.sessionId,a);return i.map(ad)},readSessionMessages:async(o)=>{let s=n.get(o)?.messagesPath??await lV(o);return await Ir(s)}},t)}import{captureSdkError as WM}from"@cline/shared";import{createSessionId as IJ,ensureLoopbackProxyBypass as KA,isHubProtocolCompatible as RJ,resolveClineBuildEnv as AJ,resolveHubCommandTimeoutMs as EJ}from"@cline/shared";import{HttpProxyAgent as xJ}from"http-proxy-agent";import{HttpsProxyAgent as _J}from"https-proxy-agent";import{getProxyForUrl as MJ}from"proxy-from-env";import OJ from"ws";import{spawn as KV}from"node:child_process";import{closeSync as GV,mkdirSync as VV,openSync as JV,readFileSync as XV,unlinkSync as YV}from"node:fs";import{basename as QV,dirname as ZV,join as eJ}from"node:path";import{fileURLToPath as tJ}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as nJ,getClineClientIdentity as rJ,isBunEmbeddedModulePath as oJ,isHubDaemonProcess as UA,resolveClineBuildEnv as HA,withHubLauncherIdentity as sJ,withResolvedClineBuildEnv as iJ}from"@cline/shared";import{createHash as mV,randomBytes as PA}from"node:crypto";import{existsSync as gV}from"node:fs";import{mkdir as wy,open as vA,readFile as IA,rename as fV,rm as Nl,writeFile as hV}from"node:fs/promises";import{dirname as RA,join as Cy}from"node:path";import{ensureLoopbackProxyBypass as yV,isHubProtocolCompatible as SV}from"@cline/shared";import{resolveClineDataDir as ld,resolveClineDir as kge}from"@cline/shared/storage";var bV="CLINE_HUB_DISCOVERY_PATH",vV="CLINE_HUB_BUILD_ID",TV="CLINE_HUB_BUILD_EPOCH_MS",wV=30000,CV=15000,TA=100;function kV(e){return e.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function PV(e){return mV("sha256").update(e).digest("hex").slice(0,12)}function IV(e){if(!Number.isInteger(e)||!e||e<=0)return!1;try{return process.kill(e,0),!0}catch(t){return t instanceof Error&&"code"in t?String(t.code)==="EPERM":!1}}function AA(){return PA(32).toString("hex")}function wA(e){return new Promise((t)=>setTimeout(t,e))}function RV(e){return`${e}.lock`}async function AV(e){try{let t=JSON.parse(await IA(Cy(e,"owner.json"),"utf8"));if(typeof t.pid!=="number"||typeof t.acquiredAt!=="string")return;return{pid:t.pid,acquiredAt:t.acquiredAt}}catch{return}}async function Ty(e){await Nl(e,{recursive:!0,force:!0}).catch(()=>{return})}function dn(){let e=process.env[vV]?.trim();if(e)return e;return"sdk-v1-d7fc6ac75da1ec6a985419452ab0576ef1178c82233d7370cd14e6261884bd99".trim()||`source-${String(Sr.version)}`}function ky(){let e=Number(process.env[TV]);if(Number.isFinite(e)&&e>0)return e;return Number.isFinite(1792205906587)?1792205906587:void 0}function Po(e,t=dn()){let n=SV(e);if(!n.compatible)return n;let r=e.buildId?.trim();if(!r)return{compatible:!1,reason:"missing_build"};if(r!==t)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function CA(e){return typeof e==="number"&&Number.isFinite(e)&&e>0?e:void 0}function kA(e){let t=e?.trim().split(/[-+]/,1)[0];if(!t)return;let n=t.split(".").map((r)=>Number(r));if(n.length===0||n.some((r)=>!Number.isInteger(r)||r<0))return;return n}function EV(e,t){for(let n=0;n<Math.max(e.length,t.length);n++){let r=e[n]??0,o=t[n]??0;if(r!==o)return r<o?-1:1}return 0}function pd(e,t){let n=e.buildId?.trim(),r=t.buildId?.trim();if(n&&r&&n===r)return 0;let o=CA(e.buildEpochMs),s=CA(t.buildEpochMs);if(o!==void 0&&s!==void 0&&o!==s)return o<s?-1:1;let i=kA(e.coreVersion),a=kA(t.coreVersion);if(i&&a){let d=EV(i,a);if(d!==0)return d}if(n&&r&&n!==r)return n<r?-1:1;return 0}function md(){return{buildId:dn(),buildEpochMs:ky(),coreVersion:String(Sr.version)}}function Vs(e,t){let n=t?.self??md(),r=Po(e,n.buildId??"");if(r.compatible)return!0;if(r.reason!=="build_mismatch"&&r.reason!=="missing_build")return!1;return pd(n,e)<=0}function Io(e=process.argv[1]?.trim()||process.cwd()){let t=`hub-${PV(e)}`,n=process.env[bV]?.trim()||Cy(ld(),"locks","hub","owners",`${kV(t)}.json`);return{ownerId:t,discoveryPath:n}}function Ige(e=`hub-${Date.now().toString(36)}`){return Io(e)}async function $e(e,t={}){try{let n;try{n=await IA(e,"utf8")}catch(o){if(o.code==="ENOENT")return;throw o}let r;try{r=JSON.parse(n)}catch{throw Error(`Invalid JSON in Hub discovery record: ${e}`)}if(!r||typeof r.hubId!=="string"||typeof r.protocolVersion!=="string"||typeof r.authToken!=="string"||typeof r.host!=="string"||typeof r.port!=="number"||typeof r.url!=="string"||typeof r.startedAt!=="string"||typeof r.updatedAt!=="string")throw Error(`Invalid Hub discovery record: ${e}`);return{hubId:r.hubId,protocolVersion:r.protocolVersion,minClientProtocolVersion:typeof r.minClientProtocolVersion==="string"?r.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof r.maxClientProtocolVersion==="string"?r.maxClientProtocolVersion:void 0,capabilities:Array.isArray(r.capabilities)?r.capabilities.filter((o)=>typeof o==="string"):void 0,coreVersion:typeof r.coreVersion==="string"?r.coreVersion:void 0,buildId:typeof r.buildId==="string"?r.buildId:void 0,buildEpochMs:typeof r.buildEpochMs==="number"?r.buildEpochMs:void 0,authToken:r.authToken,host:r.host,port:r.port,url:r.url,pid:typeof r.pid==="number"?r.pid:void 0,startedAt:r.startedAt,updatedAt:r.updatedAt}}catch(n){if(t.onError==="throw")throw n;return}}async function Dl(e,t){await Py(e,async()=>{let n=RA(e);await wy(n,{recursive:!0});let r=`${e}.${process.pid}.${PA(6).toString("hex")}.tmp`,o;try{o=await vA(r,"wx",384),await o.writeFile(`${JSON.stringify(t,null,2)}
|
|
549
549
|
`,{encoding:"utf8"}),await o.sync(),await o.close(),o=void 0,await fV(r,e);let s;try{s=await vA(n,"r"),await s.sync()}catch{}finally{await s?.close().catch(()=>{return})}}catch(s){throw await o?.close().catch(()=>{return}),await Nl(r,{force:!0}).catch(()=>{return}),s}})}async function Nn(e){await Py(e,async()=>{await Nl(e,{force:!0}).catch(()=>{return})})}async function EA(e,t){return await Py(e,async()=>{if((await $e(e))?.hubId!==t)return!1;return await Nl(e,{force:!0}),!0})}async function xA(e,t,n){let r=RV(e);await wy(RA(r),{recursive:!0});let o=Date.now()+CV;while(!0){try{await wy(r,{recursive:!1})}catch(s){if((s instanceof Error&&"code"in s?String(s.code):"")!=="EEXIST")throw s;let a=await AV(r);if(!a){if(Date.now()>=o){await Ty(r);continue}await wA(TA);continue}let d=Date.now()-Date.parse(a.acquiredAt);if(!IV(a.pid)||d>wV){await Ty(r);continue}if(Date.now()>=o)throw Error(`Timed out waiting for hub ${t} lock ${r}`);await wA(TA);continue}try{return await hV(Cy(r,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
550
550
|
`,"utf8"),await n()}finally{await Ty(r)}}}function Py(e,t){return xA(`${e}.mutation`,"discovery mutation",t)}function Ul(e,t){return xA(e,"startup",t)}async function Dn(e,t){yV();try{let n=await fetch(t?.authToken?xV(e):_A(e),{headers:t?.authToken?{authorization:`Bearer ${t.authToken}`}:void 0,signal:t?.signal});if(!n.ok)return;let r=await n.json();if(typeof r.protocolVersion!=="string"||typeof r.host!=="string"||typeof r.port!=="number"||typeof r.url!=="string")return;return{protocolVersion:r.protocolVersion,minClientProtocolVersion:typeof r.minClientProtocolVersion==="string"?r.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof r.maxClientProtocolVersion==="string"?r.maxClientProtocolVersion:void 0,capabilities:Array.isArray(r.capabilities)?r.capabilities.filter((o)=>typeof o==="string"):void 0,coreVersion:typeof r.coreVersion==="string"?r.coreVersion:void 0,buildId:typeof r.buildId==="string"?r.buildId:void 0,buildEpochMs:typeof r.buildEpochMs==="number"?r.buildEpochMs:void 0,host:r.host,port:r.port,url:r.url,hubId:typeof r.hubId==="string"?r.hubId:void 0,authToken:typeof r.authToken==="string"?r.authToken:void 0,pid:typeof r.pid==="number"?r.pid:void 0,startedAt:typeof r.startedAt==="string"?r.startedAt:void 0,updatedAt:typeof r.updatedAt==="string"?r.updatedAt:void 0}}catch{return}}function Un(e,t,n="/hub"){return new URL(`ws://${e}:${t}${n}`).toString()}function _A(e){let t=new URL(e);return t.protocol=t.protocol==="wss:"?"https:":"http:",t.pathname="/health",t.search="",t.toString()}function xV(e){let t=new URL(_A(e));return t.pathname="/status",t.toString()}function Rge(e){return gV(e)}import{CLINE_HUB_DEV_PORT as _V,CLINE_HUB_PORT as MV,resolveClineBuildEnv as OV}from"@cline/shared";var LV="CLINE_HUB_HOST",NV="CLINE_HUB_PORT",DV="CLINE_HUB_PATHNAME",UV="127.0.0.1",HV=MV,FV="/hub";function MA(e){return OV(e)==="development"?_V:HV}function BV(e={}){return(e.env??process.env)[LV]?.trim()||UV}function Hl(e={}){let n=(e.env??process.env)[NV]?.trim();if(!n)return MA(e);let r=Number.parseInt(n,10);if(!Number.isInteger(r)||r<1||r>65535)return MA(e);return r}function $V(e={}){return(e.env??process.env)[DV]?.trim()||FV}function Ro(e={},t={}){return{host:e.host??BV(t),port:e.port??Hl(t),pathname:e.pathname??$V(t)}}import{join as WV}from"node:path";var jV="shared:cline",qV="CLINE_HUB_DISCOVERY_PATH",zV="hub-production";function Lge(e){let t=Cr(e.trim());return Io(`workspace:${t||e.trim()}`)}function Gt(e=jV){return Io(`${e}@${dn()}`)}function cn(){return{ownerId:zV,discoveryPath:process.env[qV]?.trim()||WV(ld(),"locks","hub","production.json")}}var OA=15000,aJ=200,LA=3000,dJ=100,cJ=[100,250,500,1000,2000],FA="--cline-hub-daemon",uJ=3,lJ=60000,Ay=new Map,zge={resetRetireAttempts(){Ay.clear()},resolveDaemonEntryArgs:$A,resolveLaunchCommand:(e,t={})=>WA(e,t)};function pJ(e,t=Date.now()){let n=Ay.get(e);if(!n||t-n.windowStartedAt>lJ)return Ay.set(e,{count:1,windowStartedAt:t}),!0;return n.count+=1,n.count<=uJ}function mJ(e){return[...e.host?["--host",e.host]:[],...typeof e.port==="number"?["--port",String(e.port)]:[],...e.pathname?["--pathname",e.pathname]:[]]}function gJ(){try{let e=eJ(ld(),"logs","hub-daemon.log");return VV(ZV(e),{recursive:!0}),{fd:JV(e,"a"),logPath:e}}catch{return}}function BA(){return HA()==="production"?cn():Gt()}function gd(e){return Vs(e)}function fJ(e){try{let t=JSON.parse(XV(`${e}.superseded`,"utf8"));return{url:typeof t.url==="string"?t.url:void 0,authToken:typeof t.authToken==="string"?t.authToken:void 0,pid:typeof t.pid==="number"?t.pid:void 0}}catch{return}}function Iy(e){try{YV(`${e}.superseded`)}catch{}}function NA(e,t,n){if(!t||t.url!==n)return e;return{...e,authToken:e.authToken??t.authToken,pid:e.pid??t.pid}}async function Js(e,t){try{return await Dn(e,{authToken:t})}catch{return}}async function DA(e,t){let n=Date.now()+t;while(Date.now()<n){if(!(await Js(e))?.url)return!0;await new Promise((o)=>setTimeout(o,dJ))}return!1}async function Xs(e,t){if(!pJ(e.url))return!1;await Ao(e.url,e.authToken,"retired by newer install").catch(()=>!1),await hd(e.url,e.authToken).catch(()=>!1);let n=await DA(e.url,LA);if(!n&&e.pid&&hJ(e.pid)){try{process.kill(e.pid,"SIGTERM")}catch{}n=await DA(e.url,LA)}if(n)await Nn(t).catch(()=>{return});return n}function hJ(e){try{return process.kill(e,0),!0}catch(t){return t?.code==="EPERM"}}async function Ey(e){try{return(await Qs(e.url,e.authToken)).activeSessionCount>0}catch{return!1}}async function Ry(e,t){if(gd(e))return"reusable";let n=await Ao(e.url,e.authToken,"retired by newer install").catch(()=>!1);if(await Ey(e)){if(n)await Ao(e.url,e.authToken,"hub retirement deferred",{off:!0}).catch(()=>!1);return"deferred_busy"}let r=await Xs(e,t);if(!r&&n)await Ao(e.url,e.authToken,"hub retirement failed",{off:!0}).catch(()=>!1);return r?"retired":"failed"}async function yJ(e){if(HA()!=="production")return;let t=Gt();if(t.discoveryPath===e.discoveryPath)return;let n=await $e(t.discoveryPath);if(n?.url)await Xs(n,t.discoveryPath);else await Nn(t.discoveryPath).catch(()=>{return})}function SJ(){let e=import.meta.url.endsWith(".ts")?"ts":"js";return tJ(new URL(`./entry.${e}`,import.meta.url))}function $A(e,t){if(oJ(e))return[FA];return[...t&&e.toLowerCase().endsWith(".ts")?["--conditions=development"]:[],e]}var Fl;function Kge(e){let t=e?.command.trim();Fl=t?{command:t,args:e?.args?[...e.args]:void 0}:void 0}function WA(e,t){let n,r;if(Fl)n=Fl.command,r=Fl.args??[FA];else{let o=process.execPath?.trim();if(!o)throw Error("unable to resolve runtime executable for hub daemon");let s=QV(o).toLowerCase().includes("bun");n=o,r=$A(SJ(),s)}return{launcher:n,args:[...r,"--cwd",e,...mJ(t),...t.manageConnectors===!1?["--no-connectors"]:[]],cwd:e,env:{...sJ(iJ(process.env),bJ()),CLINE_NO_INTERACTIVE:"1",[nJ]:"1"}}}function bJ(){let e=rJ(),t=e?.name?.trim();return t?{client:t,version:e?.version,transport:"local"}:void 0}function vJ(e){if(!e||typeof e!=="object")return!1;if(("code"in e?e.code:void 0)==="ETXTBSY")return!0;let n="message"in e?e.message:void 0;return typeof n==="string"&&n.includes("ETXTBSY")}function TJ(e,t={}){if(UA())return;let n=WA(e,t),r=gJ();try{KV(n.launcher,n.args,{detached:!0,stdio:r?["ignore",r.fd,r.fd]:"ignore",env:n.env,cwd:n.cwd,windowsHide:!0}).unref()}finally{if(r)GV(r.fd)}}async function wJ(e,t={}){for(let n=0;;n++)try{TJ(e,t);return}catch(r){let o=cJ[n];if(!vJ(r)||o===void 0)throw r;await new Promise((s)=>setTimeout(s,o))}}function jA(e,t={}){if(UA())return;fd(e,t).catch(()=>{})}async function CJ(e,t,n={}){let r=n.host!==void 0||n.port!==void 0||n.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),o=Ro(n),s=Un(o.host,o.port,o.pathname),i=(g)=>{if(!r)Ys(g.url,g.authToken);return g};await yJ(e).catch(()=>{return});let a=await $e(e.discoveryPath),d=a?.url?void 0:fJ(e.discoveryPath),c=!1;if(a?.url){let g=a.authToken;if(!g)c=!0,await Xs(a,e.discoveryPath);else{let f=await Js(a.url,g);if(f?.url&&gd(f)&&await xt(f.url,{authToken:g}))return Iy(e.discoveryPath),i({url:f.url,authToken:g});if(f?.url){if(await Ry({...f,authToken:g},e.discoveryPath)==="deferred_busy"&&await xt(f.url,{authToken:g}))return i({url:f.url,authToken:g})}else await Nn(e.discoveryPath).catch(()=>{return})}}let u=await Js(s);if(u?.url){let g=NA(u,a??d,s);if(gd(u)){let h=[u.authToken,a?.authToken,d?.authToken].filter((S)=>typeof S==="string"&&S.trim().length>0);for(let S of h){if(!await xt(u.url,{authToken:S}))continue;let b={hubId:u.hubId??`repaired-${u.port}`,protocolVersion:u.protocolVersion,minClientProtocolVersion:u.minClientProtocolVersion,maxClientProtocolVersion:u.maxClientProtocolVersion,capabilities:u.capabilities,coreVersion:u.coreVersion,buildId:u.buildId,authToken:S,host:u.host,port:u.port,url:u.url,pid:u.pid??a?.pid??d?.pid,startedAt:u.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await Dl(e.discoveryPath,b)}catch{}return Iy(e.discoveryPath),i({url:u.url,authToken:S})}throw Error(`A compatible Cline Hub is already running at ${s}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${c?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`)}let f=await Ry(g,e.discoveryPath);if(f==="deferred_busy"){for(let h of[g.authToken,a?.authToken].filter((y)=>typeof y==="string"&&y.trim().length>0))if(await xt(u.url,{authToken:h}))return i({url:u.url,authToken:h});if(n.allowPortFallback!==!0&&o.port!==0)throw Error(`An older Cline Hub is running at ${s} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(f==="failed"&&n.allowPortFallback!==!0&&o.port!==0)throw Error(`An incompatible Cline Hub is already running at ${s} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let p=n.allowPortFallback===!0&&o.port!==0?{...o,port:0}:o;await n.beforeSpawn?.(),await wJ(t,{...p,manageConnectors:n.manageConnectors});let m=Date.now()+OA;while(Date.now()<m){let g=await $e(e.discoveryPath);if(g?.url&&g.authToken){let h=await Js(g.url,g.authToken);if(h?.url&&gd(h)&&await xt(h.url,{authToken:g.authToken}))return Iy(e.discoveryPath),i({url:h.url,authToken:g.authToken})}let f=await Js(s);if(f?.url&&!gd(f)){let h=NA(f,g??d,s),y=await Ry(h,e.discoveryPath);if(y==="deferred_busy"&&g?.authToken&&await xt(f.url,{authToken:g.authToken}))return i({url:f.url,authToken:g.authToken});if(y==="failed"&&n.allowPortFallback!==!0&&o.port!==0)throw Error(`An incompatible Cline Hub is still running at ${s} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((h)=>setTimeout(h,aJ))}throw Error(`Timed out after ${OA}ms waiting for detached hub startup.`)}async function fd(e,t={}){let n=BA();return await Ul(n.discoveryPath,async()=>CJ(n,e,t))}var kJ=5000,PJ=500;async function Gge(e={}){let t=BA(),n=e.workspaceRoot??process.cwd(),r=await $e(t.discoveryPath),o=r?.url?await Js(r.url,r.authToken):void 0;if(!o?.url)return{outcome:"started",...await fd(n)};let s={...o,authToken:o.authToken??r?.authToken,pid:o.pid??r?.pid};if(Po(o).compatible)return{outcome:"already_current",url:o.url,authToken:s.authToken};if(pd(md(),o)<=0)return{outcome:"hub_not_older",url:o.url,authToken:s.authToken};if(!await Ao(s.url,s.authToken,e.reason??"hub upgrade requested").catch(()=>!1))throw Error(`The running Cline Hub at ${s.url} did not accept a drain request, so it was not replaced. It is replaced automatically once idle when a Cline client next starts, or run 'cline doctor fix' to stop it now.`);let a=async()=>{await Ao(s.url,s.authToken,"hub upgrade aborted",{off:!0}).catch(()=>!1)},d=Date.now()+(e.waitForIdleMs??kJ),c;for(;;){try{if(c=(await Qs(s.url,s.authToken)).activeSessionCount,c===0)break}catch{}if(Date.now()>=d)break;await new Promise((p)=>setTimeout(p,PJ))}if(c!==0&&e.force!==!0)return await a(),{outcome:"still_busy",url:s.url,authToken:s.authToken,...c!==void 0?{activeSessionCount:c}:{}};if(!await Xs(s,t.discoveryPath))throw await a(),Error(`The running Cline Hub at ${s.url} could not be stopped. Run 'cline doctor fix' to stop stale hub daemons, then try again.`);return{outcome:"replaced",...await fd(n),activeSessionCount:c??0}}function Ny(){return AJ()==="production"?cn():Gt()}function LJ(){let e=globalThis.WebSocket;if(!e)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return e}function NJ(e){let t=new URL(e);t.protocol=e.protocol==="wss:"?"https:":"http:";let n=MJ(t.toString());if(!n)return;return e.protocol==="wss:"?new _J(n):new xJ(n)}function GA(e){if(typeof e==="string")return e;if(e instanceof Uint8Array)return Buffer.from(e).toString();if(e instanceof ArrayBuffer)return Buffer.from(e).toString();if(Array.isArray(e))return Buffer.concat(e.map((t)=>Buffer.from(t))).toString();if(e&&typeof e==="object"&&"data"in e&&typeof e.data<"u")return GA(e.data);return String(e)}function DJ(e){if(typeof e==="string")return e;if(e instanceof Uint8Array)return Buffer.from(e).toString("utf8");if(e instanceof ArrayBuffer)return Buffer.from(e).toString("utf8");return""}function qA(e){let t=e,n=DJ(t.reason);return new Xe("hub_connection_closed",t.code||n?`Hub connection closed (code=${t.code??0}${n?`, reason=${n}`:""})`:My,{closeCode:t.code,closeReason:n||void 0})}function xy(e,t){if(e instanceof Xe)return e;if(e instanceof Error)return new Xe("hub_connect_failed",e.message);if(e&&typeof e==="object"&&"error"in e&&e.error instanceof Error)return new Xe("hub_connect_failed",e.error.message);let n=e&&typeof e==="object"&&"message"in e&&typeof e.message==="string"?e.message.trim():"";if(n)return new Xe("hub_connect_failed",n);let r=e&&typeof e==="object"&&"type"in e&&typeof e.type==="string"?e.type.trim():"";return new Xe("hub_connect_failed",r?`Failed to connect to hub at ${t.toString()} (${r} event before socket open).`:`Failed to connect to hub at ${t.toString()}.`)}var _y="*",Bl=8000,UJ="cline-hub-auth.",VA=new Map,JA=new Set,HJ=3000,FJ=3000,BJ=100,My="Hub connection closed",$J=250,WJ=5000,zA=0.5;class Xe extends Error{code;details;constructor(e,t,n){super(t);this.code=e;this.details=n;this.name="HubTransportError"}}function jJ(e){return e instanceof Xe}class $l extends Error{command;code;constructor(e,t,n){super(n);this.command=e;this.code=t;this.name="HubCommandError"}}function XA(e,t){return e instanceof $l&&e.code==="hub_command_timeout"&&(t===void 0||e.command===t)}function Dy(e,t={}){let n=e.searchParams.get("authToken")?.trim();if(e.searchParams.delete("authToken"),n)return n;if(t.skipRegistry)return;let r=Uy(e.toString());return r?VA.get(r):void 0}function qJ(e){try{let n=new URL(e).hostname.toLowerCase().replace(/^\[|\]$/g,"");return n==="localhost"||n==="127.0.0.1"||n==="::1"}catch{return!1}}function Uy(e){if(!qJ(e))return;let t=new URL(Zs(e));return t.search="",t.hash="",t.toString()}function Oy(e){let t=Uy(e);return!!t&&JA.has(t)}function Ys(e,t){let n=Uy(e);if(n){if(JA.add(n),t?.trim())VA.set(n,t)}return e}class Hn{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;connectGeneration=0;lastCloseError=new Xe("hub_connection_closed",My);sawSocketClose=!1;registered=!1;capabilities;constructor(e){this.options=e;if(e.authToken?.trim()&&e.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");this.clientId=e.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=e.url,this.capabilities=[...e.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities(e){if(this.capabilities=e.map((t)=>({...t})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.connectPromise)return this.connectPromise;if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let e=new URL(this.currentUrl),t=this.options.authToken?.trim()||Dy(e,{skipRegistry:Boolean(this.options.resolveConnectionHeaders)});if(e.hash="",t&&this.options.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");let n=++this.connectGeneration,r=this.openSocket(e,t,n),o;this.connectPromise=r.then(async(i)=>{if(o=i,await this.commandOnce("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",capabilities:this.capabilities,metadata:{...this.options.metadata,version:this.options.clientVersion??String(Sr.version),pid:process.pid},workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}},void 0,void 0,!1),n!==this.connectGeneration||this.closedByClient){try{i.close()}catch{}throw this.lastCloseError}this.registered=!0;for(let a of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(a));this.reconnectAttempt=0});let s=this.connectPromise;try{await s}catch(i){if(this.connectPromise===s)this.connectPromise=void 0;if(o&&this.socket===o){this.lastCloseError=xy(i,e),this.registered=!1,this.sawSocketClose=!1,this.socket=void 0;try{o.close()}catch{}}if(!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect();throw i}}async openSocket(e,t,n){let r=this.options.resolveConnectionHeaders,o;if(r){let c;try{o=await Promise.race([Promise.resolve().then(()=>r()),new Promise((u,l)=>{c=setTimeout(()=>{l(new Xe("hub_connect_timeout",`Timed out resolving hub connection headers after ${Bl}ms`))},Bl)})])}catch(u){let l=u instanceof Xe?u:new Xe("hub_connect_failed",u instanceof Error?u.message:String(u));if(n===this.connectGeneration)this.lastCloseError=l;throw l}finally{clearTimeout(c)}}if(n!==this.connectGeneration||this.closedByClient)throw this.lastCloseError;if(o&&Object.keys(o).some((c)=>c.toLowerCase()==="sec-websocket-protocol")){let c=new Xe("hub_connect_failed","Hub connection headers cannot set Sec-WebSocket-Protocol.");if(n===this.connectGeneration)this.lastCloseError=c;throw c}let s;try{s=o?NJ(e):void 0}catch(c){let u=xy(c,e);if(n===this.connectGeneration)this.lastCloseError=u;throw u}let i=o?new OJ(e.toString(),{headers:{...o},agent:s}):new(LJ())(e.toString(),t?[`${UJ}${t}`]:void 0);this.socket=i;let a=!1,d=new Promise((c,u)=>{let l=!1,p=setTimeout(()=>{if(l)return;l=!0,a=!0;let m=new Xe("hub_connect_timeout",`Timed out connecting to hub after ${Bl}ms`);if(this.socket===i)this.lastCloseError=m,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{i.close()}catch{}u(m)},Bl);i.addEventListener("open",()=>{if(l)return;l=!0,clearTimeout(p),c()}),i.addEventListener("error",(m)=>{if(l)return;l=!0,clearTimeout(p);let g=xy(m,e);if(this.socket===i)this.lastCloseError=g,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;u(g)}),i.addEventListener("close",(m)=>{if(l)return;l=!0,clearTimeout(p);let g=a?this.lastCloseError:qA(m);if(this.socket===i){if(!a)this.lastCloseError=g,this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0}u(g)})});return i.addEventListener("message",(c)=>{this.handleFrame(JSON.parse(GA(c)))}),i.addEventListener("close",(c)=>{if(this.socket!==i)return;if(!a)this.lastCloseError=qA(c),this.sawSocketClose=!0;this.registered=!1;for(let u of this.pendingReplies.values())u.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await d,i}subscribe(e,t){let n=t?.sessionId?.trim()||void 0,r={listener:e,sessionId:n};return this.listeners.add(r),this.adjustSubscriptionCount(n,1),()=>{if(!this.listeners.delete(r))return;this.adjustSubscriptionCount(n,-1)}}async command(e,t,n,r){let o=0,s=e!=="client.register"&&e!=="client.unregister";while(!0)try{return await this.commandOnce(e,t,n,r)}catch(i){if(!s||o>=1||!await this.recoverLocalHubTransport(i))throw i;o+=1}}async commandOnce(e,t,n,r,o=!0){if(o)await this.connect();r?.beforeDispatch?.();let s=IJ("hubreq_");r?.onDispatch?.(s);let i=EJ(e,r?.timeoutMs),a=new Promise((c,u)=>{let l=i===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(s))return;u(new $l(e,"hub_command_timeout",`Hub command ${e} timed out after ${i}ms (hub=${this.currentUrl}, requestId=${s}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},i);this.pendingReplies.set(s,{resolve:(p)=>{if(l)clearTimeout(l);c(p)},reject:(p)=>{if(l)clearTimeout(l);u(p)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:e,requestId:s,clientId:this.clientId,sessionId:n,timeoutMs:i,payload:t}})}catch(c){throw this.pendingReplies.delete(s),c}let d=await a;if(!d.ok){if(d.error?.code===Va){let c=n??(typeof t?.sessionId==="string"?t.sessionId:void 0);throw new vo(c,d.error.message)}throw new $l(e,d.error?.code,d.error?.message??`Hub command ${e} failed`)}return d}async recoverLocalHubTransport(e){if(!Oy(this.currentUrl)||!jJ(e))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let t=await yd({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!t)return!1;return this.currentUrl=t,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let e=Math.min($J*2**this.reconnectAttempt,WJ),t=Math.round(e*(1-zA)+Math.random()*e*zA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},t)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!Oy(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let e=await yd({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if(e){this.currentUrl=e,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let e=this.socket;if(this.closedByClient=!0,this.connectGeneration+=1,this.clearReconnectTimer(),this.registered=!1,e)this.lastCloseError=new Xe("hub_connection_closed",My);for(let t of this.pendingReplies.values())t.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,!e)return;this.sawSocketClose=!1,this.socket=void 0;try{e.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame(e){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new Xe("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify(e))}sendSubscriptionFrame(e,t){let n=e==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(t)):void 0;this.sendFrame({kind:e,clientId:this.clientId,...t?{sessionId:t}:{},...n!==void 0?{sinceSequence:n}:{}})}adjustSubscriptionCount(e,t){let n=this.subscriptionKeyForSessionId(e),r=(this.subscriptionCounts.get(n)??0)+t;if(r<=0){if(this.subscriptionCounts.delete(n),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(t<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",e);return}if(this.subscriptionCounts.set(n,r),t>0&&r===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",e)}subscriptionKeyForSessionId(e){return e??_y}subscriptionSessionIdFromKey(e){return e===_y?void 0:e}handleFrame(e){switch(e.kind){case"reply":{let t=e.envelope.requestId;if(!t)return;let n=this.pendingReplies.get(t);if(!n)return;this.pendingReplies.delete(t),n.resolve(e.envelope);return}case"event":{let t=e.envelope.sequence;if(typeof t==="number"){let n=e.envelope.sessionId?.trim();for(let r of[_y,n]){if(!r||!this.subscriptionCounts.has(r))continue;let o=this.lastEventSequenceByKey.get(r)??0;if(t>o)this.lastEventSequenceByKey.set(r,t)}}for(let n of this.listeners){if(n.sessionId&&n.sessionId!==e.envelope.sessionId?.trim())continue;n.listener(e.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function Zs(e){let t=new URL(e);if(t.protocol==="http:")t.protocol="ws:";else if(t.protocol==="https:")t.protocol="wss:";return t.toString()}async function xt(e,t){let n=new Hn({url:e,authToken:t?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:t?.workspaceRoot,cwd:t?.cwd});try{return await n.connect(),!0}catch{return!1}finally{n.close()}}async function Ly(e,t){let n=Zs(e),r=await Dn(n,{authToken:t?.authToken});if(!r)return{status:"unreachable",url:n};if(t?.requireCurrentBuild){let o=dn(),s=Po(r,o);if(!s.compatible&&!Vs(r))return{status:s.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:n}}else if(!RJ(r).compatible)return{status:"protocol_mismatch",url:n};if(t?.verifyConnection===!0&&!await xt(n,{workspaceRoot:t.workspaceRoot,cwd:t.cwd,authToken:t.authToken}))return{status:"unreachable",url:n};return{status:"compatible",url:n}}async function zJ(e){let t=Date.now()+FJ;while(Date.now()<t){if(!(await Dn(e).catch(()=>{return}))?.url)return!0;await new Promise((r)=>setTimeout(r,BJ))}return!1}function KJ(e,t){try{return Zs(e)===Zs(t)}catch{return!1}}function YA(e){let t=e&&typeof e==="object"&&Array.isArray(e.sessions)?e.sessions:[],n=0,r=new Set;for(let o of t){if(!o||typeof o!=="object")continue;let s=o.participants;if(!Array.isArray(s)||s.length===0)continue;n+=1;for(let i of s){let a=i&&typeof i==="object"?i.clientId:void 0;if(typeof a==="string"&&a.trim())r.add(a)}}return{activeSessionCount:n,participantClientCount:r.size}}function sfe(e){return YA(e).activeSessionCount>0}async function Qs(e,t,n){let r=new Hn({url:e,authToken:t,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:n?.workspaceRoot,cwd:n?.cwd});try{let o=await r.command("session.list",{limit:500},void 0,{timeoutMs:HJ});return YA(o.payload)}finally{await r.dispose().catch(()=>{return})}}async function QA(e,t,n){try{return(await Qs(e,t,n)).activeSessionCount===0}catch{return!1}}async function GJ(e,t){let n=`${e.discoveryPath}.superseded`,r=await $e(n);if(!r?.url||!r.authToken)return;let o=await Ly(r.url,{authToken:r.authToken});if(o.status!=="compatible")return;if(await QA(o.url,r.authToken,t))return;return Ys(o.url,r.authToken)}async function Hy(e={}){if(e.endpoint?.trim()){let o=await Ly(e.endpoint);return o.status==="compatible"?o.url:void 0}let t=Ny(),n=await $e(t.discoveryPath);if(!n?.url)return await GJ(t,e);let r=await Ly(n.url,{authToken:n.authToken,requireCurrentBuild:!0});if(r.status==="compatible")return Ys(r.url,n.authToken);if(r.status==="protocol_mismatch")await Nn(t.discoveryPath).catch(()=>{return});return}async function yd(e={}){let t=await Hy(e);if(t&&await xt(t,{workspaceRoot:e.workspaceRoot,cwd:e.cwd}))return t;if(e.endpoint?.trim())return;try{return(await fd(e.workspaceRoot??process.cwd())).url}catch(n){e.onStartupError?.(n);return}}async function Ao(e,t,n,r){KA();let o=new URL(e),s=t?.trim()||Dy(o);if(o.protocol==="ws:")o.protocol="http:";else if(o.protocol==="wss:")o.protocol="https:";if(o.pathname="/drain",o.hash="",n)o.searchParams.set("reason",n);if(r?.off)o.searchParams.set("off","1");return(await fetch(o,{method:"POST",headers:s?{authorization:`Bearer ${s}`}:void 0})).ok}async function hd(e,t){KA();let n=new URL(e),r=t?.trim()||Dy(n);if(n.protocol==="ws:")n.protocol="http:";else if(n.protocol==="wss:")n.protocol="https:";return n.pathname="/shutdown",n.hash="",(await fetch(n,{method:"POST",headers:r?{authorization:`Bearer ${r}`}:void 0})).ok}async function VJ(e=Ny()){let t=await $e(e.discoveryPath,{onError:"throw"});if(!t?.url)return!1;try{if(await hd(t.url,t.authToken))return!0}catch{}return!1}async function ZA(e){if(!Oy(e.url))return;let t=Ny(),n=await $e(t.discoveryPath);if(!n?.url||!KJ(n.url,e.url))return;if(!await QA(n.url,n.authToken,{workspaceRoot:e.workspaceRoot,cwd:e.cwd}))return;if(!await VJ())return;if(!await zJ(n.url))return;return await Nn(t.discoveryPath).catch(()=>{return}),await yd({workspaceRoot:e.workspaceRoot,cwd:e.cwd})}import{resolveProviderRequestHeaders as nX}from"@cline/llms";import{captureSdkError as $y,createSessionId as iE,HUB_CHECKPOINT_CAPABILITY as rX,HUB_COMPACTION_CAPABILITY as oX,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as sX,HUB_HOOK_CAPABILITY_PREFIX as iX,HUB_MISTAKE_LIMIT_CAPABILITY as aX,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as dX,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as cX,isGeneratedMedia as uX,isHubToolExecutorName as lX}from"@cline/shared";Ct();import{createHash as JJ}from"node:crypto";import{formatDisplayUserInput as eE}from"@cline/shared";import{z as un}from"zod";function XJ(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let t=e;if(t.role!=="user"&&t.role!=="assistant")return!1;return typeof t.content==="string"||Array.isArray(t.content)}var YJ=un.custom(XJ),Wl=un.object({version:un.literal(1),updated_at:un.string().datetime(),conversation_id:un.string().min(1).optional(),source_message_count:un.number().int().nonnegative(),source_prefix_hash:un.string().min(1).optional(),source_last_message_key:un.string().min(1).optional(),messages:un.array(YJ),system_prompt:un.string().optional()});function tE(e){return e.filter((t)=>t.metadata?.displayOnly!==!0)}function Fy(e){return JSON.parse(JSON.stringify(e))}function nE(e){if(e.role!=="user")return e;if(typeof e.content==="string")return{...e,content:eE(e.content)};return{...e,content:e.content.map((t)=>t.type==="text"?{...t,text:eE(t.text)}:t)}}function rE(e){if(e.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function QJ(e){let t=nE(e);return rE(t.role),[["role",t.role],["content",t.content],["agent",t.agent??null],["sessionId",t.sessionId??null],["metadata",t.metadata??null],["modelInfo",t.modelInfo??null],["metrics",t.metrics??null]]}function oE(e){if(!e)return"";let t=nE(e);if(typeof t.id==="string"&&t.id.trim())return`id:${t.id.trim()}`;if(rE(t.role),typeof t.ts==="number"&&Number.isFinite(t.ts))return`ts:${t.role}:${t.ts}`;return`content:${t.role}:${JSON.stringify(t.content)}`}function sE(e,t=e.length){let n=JJ("sha256");n.update(`cline-session-compaction-source-v2
|
|
551
551
|
`),n.update(`${t}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cline/core",
|
|
3
3
|
"description": "Cline Core SDK for Node Runtime",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.95",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/cline/cline",
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
"test:watch": "vitest --config vitest.config.ts"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@cline/agents": "0.0.
|
|
57
|
-
"@cline/shared": "0.0.
|
|
58
|
-
"@cline/llms": "0.0.
|
|
56
|
+
"@cline/agents": "0.0.95",
|
|
57
|
+
"@cline/shared": "0.0.95",
|
|
58
|
+
"@cline/llms": "0.0.95",
|
|
59
59
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
60
60
|
"@opentelemetry/api": "^1.9.0",
|
|
61
61
|
"@opentelemetry/api-logs": "^0.214.0",
|