@cline/core 0.0.80 → 0.0.81
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/hub/daemon/entry.js
CHANGED
|
@@ -246,7 +246,7 @@ Searched ${L} files.`;let z=[`Found ${F.length} result${F.length===1?"":"s"} for
|
|
|
246
246
|
|
|
247
247
|
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
248
248
|
|
|
249
|
-
`;function nL($=process.env){return{maxToolResultChars:aL($[cj.maxToolResultChars]),maxTotalTextBytes:aL($[cj.maxTotalTextBytes]),minOutdatedRewriteBytes:Bb($[cj.minOutdatedRewriteBytes])}}class dj{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=O9($.maxToolResultChars,ew),this.maxFileContentChars=O9($.maxFileContentChars,$b),this.maxTotalTextBytes=O9($.maxTotalTextBytes,Zb),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=O9($.maxAssistantTextChars,Qb),this.maxAssistantToolMarkupChars=O9($.maxAssistantToolMarkupChars,Jb),this.minOutdatedRewriteBytes=Gb($.minOutdatedRewriteBytes,Xb)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((X)=>{if(!Array.isArray(X.content)){if(X.role==="user"&&typeof X.content==="string"){let Y=uL(X.content);if(Y!==X.content)return{...X,content:Y}}if(X.role==="assistant"&&typeof X.content==="string"){let Y=this.truncateAssistantText(X.content);if(Y!==X.content)return{...X,content:Y}}return X}let W=!1,j=X.content.map((Y)=>{let V=this.transformBlock(Y,X.role);if(V!==Y)W=!0;return V});return W?{...X,content:j}:X}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let X=uL($.text);if(X!==$.text)return{...$,text:X};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let X=this.truncateAssistantText($.text);return X===$.text?$:{...$,text:X}}if($.type==="file"){let X=r8($.content,this.maxFileContentChars,pL);return X===$.content?$:{...$,content:X}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let X=this.committedOutdatedRewrites.get($.tool_use_id);if(X&&X.size>0){let j=this.getReadLocators($).filter((Y)=>X.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)J=this.replaceOutdatedReadContent(J,j)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let X=0;X<J.content.length;X++){let W=J.content[X];if(W.type==="file")this.latestFullContentOwnerByPathCache.set(W.path,`file:${Q}:${X}`);else if(W.type==="tool_use"){let j=W.name.toLowerCase();if(this.toolNameByIdCache.set(W.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(W.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(W.id,Y)}}else if(W.type==="tool_result"){let j=this.resolveToolName(W);if(!this.isReadTool(j)||W.is_error===!0)continue;let Y=this.getReadLocators(W);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),W.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,W.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let X of $){if(!Array.isArray(X.content))continue;for(let W of X.content){if(W.type!=="tool_result"||W.is_error===!0)continue;let j=this.resolveToolName(W);if(!this.isReadTool(j))continue;Q.add(W.tool_use_id);let Y=this.committedOutdatedRewrites.get(W.tool_use_id),V=new Set,K=new Set;for(let G of this.getReadLocators(W)){let H=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,W.tool_use_id))continue;if(K.add(H),!Y?.has(H))V.add(H)}if(Y){for(let G of Y)if(!K.has(G))Y.delete(G);if(Y.size===0)this.committedOutdatedRewrites.delete(W.tool_use_id)}if(V.size===0)continue;let B=Z.get(W.tool_use_id);if(!B)B=new Set,Z.set(W.tool_use_id,B);for(let G of V)B.add(G);J+=this.estimateOutdatedReclaimBytes(W.content,V)}}for(let X of this.committedOutdatedRewrites.keys())if(!Q.has(X))this.committedOutdatedRewrites.delete(X);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[X,W]of Z){let j=this.committedOutdatedRewrites.get(X);if(!j)j=new Set,this.committedOutdatedRewrites.set(X,j);for(let Y of W)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),X=(V)=>{let K;try{K=JSON.parse(V)}catch{return J||Q.length===0?z0(this.truncateMiddle(V)):0}let B=Array.isArray(K)?K:[K],G=0;for(let H of B){let U=this.extractLocatorFromResultEntry(H);if(U&&Z.has(this.toReadLocatorKey(U)))G+=this.providerBoundEntryBytes(H)}return G};if(typeof $==="string")return X($);let W=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,W);let Y=0;for(let V of $)if(V.type==="text")Y+=X(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=z0(V.data)}else if(G2(V)){let K=this.extractLocatorFromResultEntry(V);if(K&&Z.has(this.toReadLocatorKey(K)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=z0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return z0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,X=!1,W=()=>{if(J.size===0)return;j(this.createMissingToolResultMessage(J)),J.clear(),X=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},X=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,J)),J.size>0)J.clear(),X=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((B)=>B.type==="tool_result"),K=Y.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...Y,role:"user",content:V},J);if(j(B),J.size>0)J.clear();X=!0}if(K.length>0||V.length===0){if(V.length===0)W();let B=V.length>0?{...Y,content:K}:Y;if(j(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,J)}continue}W(),j(Y)}return W(),X?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${lL} Tool: ${$}.`:lL}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let X of Z.files){let W=this.extractLocatorFromReadRequest(X);if(W)Q.push(W)}if(Array.isArray(Z.file_paths)){for(let X of Z.file_paths)if(typeof X==="string"&&X.length>0)Q.push({path:X,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(G2(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let X=this.extractLocatorFromResultEntry(J);if(X)Q.push(X)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((W)=>this.toReadLocatorKey(W))),J=new Set(Z.map((W)=>W.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??D6;let X=0;for(let W of $)if(W.type==="text")X+=this.countOutdatedImageEntries(W.text,Q);return $.map((W)=>{if(W.type==="file"){if(!J.has(W.path))return W;return{...W,content:D6}}if(W.type==="image"){if(X===0)return W;return X-=1,{type:"text",text:D6}}if(G2(W))return this.replaceOutdatedReadEntry(W,Q);if(W.type!=="text")return W;let j=this.replaceOutdatedInString(W.text,Q);if(j===null)return{...W,text:D6};return j===W.text?W:{...W,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],X=0;for(let W of J){if(!W||typeof W!=="object")continue;let j=W,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")X+=1}return X}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((X)=>this.replaceOutdatedReadEntry(X,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=D6;else if(typeof J.content==="string")J.content=D6;else J.result=D6;return J}isReadTool($){return!!$&&jb.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(G2(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;return X});return Z?Q:$}if($!==null&&typeof $==="object"){if(lj($))return $;let Z=!1,Q={};for(let[J,X]of Object.entries($)){let W=this.truncateNestedStrings(X);if(W!==X)Z=!0;Q[J]=W}return Z?Q:$}return $}truncateMiddle($){return r8($,this.maxToolResultChars,pL)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return r8($,this.maxAssistantToolMarkupChars,Vb);return r8($,this.maxAssistantTextChars,Yb)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(Kb))if(Z+=1,Z>=Wb)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((X)=>{if(!Array.isArray(X.content))return{...X};return{...X,content:X.content.map((W)=>Ub(W))}}),J=this.collectTruncationCandidates(Q);for(let X of J){if(Z<=this.maxTotalTextBytes)break;let W=X.byteLength;if(W<=X.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(X.minBytes,W-j),V=Hb(X.get(),Y,X.makeMarker);X.set(V),Z-=W-z0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=z0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=z0(J.text);else if(J.type==="thinking")Z+=z0(J.thinking);else if(J.type==="file")Z+=z0(J.content);else if(J.type==="tool_use")Z+=AQ(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=z0(J.content);else for(let X of J.content)if(X.type==="text")Z+=z0(X.text);else if(X.type==="file")Z+=z0(X.content);else if(G2(X))Z+=AQ(X)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:z0(J.content),minBytes:dL,makeMarker:iL,get:()=>J.content,set:(X)=>{J.content=X}});continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="tool_use"){TQ(X.input,Q);continue}if(J.role==="assistant"&&X.type==="text"){Z.push({byteLength:z0(X.text),minBytes:dL,makeMarker:iL,get:()=>X.text,set:(W)=>{X.text=W}});continue}if(X.type!=="tool_result")continue;if(typeof X.content==="string"){Z.push({byteLength:z0(X.content),minBytes:N9,makeMarker:q9,get:()=>X.content,set:(W)=>{X.content=W}});continue}for(let W of X.content)if(W.type==="text")Z.push({byteLength:z0(W.text),minBytes:N9,makeMarker:q9,get:()=>W.text,set:(j)=>{W.text=j}});else if(W.type==="file")Z.push({byteLength:z0(W.content),minBytes:N9,makeMarker:q9,get:()=>W.content,set:(j)=>{W.content=j}});else if(G2(W))TQ(W,Z)}}return Z.sort((J,X)=>X.byteLength-J.byteLength),Q.sort((J,X)=>X.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=ow(),J=!1,X=$.map((W)=>{if(!Array.isArray(W.content))return W;let j=!1,Y=W.content.map((V)=>{let K=this.applyMediaBudgetToBlock(V,Z,Q);if(K!==V)j=!0;return K});if(!j)return W;return J=!0,{...W,content:Y}});return J?X:$}resolveMediaBudget(){return sw(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(uj($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,X=$.content.map((W)=>{let j=this.applyMediaBudgetToToolResultEntry(W,Z,Q);if(j!==W)J=!0;return j});return J?{...$,content:X}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(uj($))return this.limitImageContent($,Z,Q);if(G2($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(uj($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,X=$.map((W)=>{let j=this.limitNestedMedia(W,Z,Q);if(j!==W)J=!0;return j});return J?X:$}if($!==null&&typeof $==="object"){let J=!1,X={};for(let[W,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)J=!0;X[W]=Y}return J?X:$}return $}limitImageContent($,Z,Q){if(!oL($))return{type:"text",text:cL};let J=tw($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:cL};return{...$,data:J.base64,mediaType:J.mediaType}}}var rL=String.raw`[\|\uFF5C]`,Kb=new RegExp(String.raw`<\s*(?:${rL}\s*)?DSML\s*(?:${rL}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function z0($){return Buffer.byteLength($,"utf8")}function aL($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Bb($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function O9($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Gb($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function r8($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),X=Math.max(0,Math.floor((Z-J.length)/2)),W=Math.max(0,$.length-X*2),j=Q(W),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),K=Y>0?$.slice(-Y):"";return`${V}${j}${K}`}function Hb($,Z,Q){if(z0($)<=Z)return $;let J=0,X=$.length,W=r8($,0,Q);while(J<=X){let j=J+X>>>1,Y=r8($,j,Q);if(z0(Y)<=Z)W=Y,J=j+1;else X=j-1}return W}function Ub($){if($.type==="tool_use")return{...$,input:EQ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>G2(Z)?EQ(Z):{...Z})}}function G2($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function uj($){return $!==null&&typeof $==="object"&&$.type==="image"}function oL($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function lj($){return oL($)}function AQ($){if(typeof $==="string")return z0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=AQ(Q);return Z}if($!==null&&typeof $==="object"){if(lj($))return 0;let Z=0;for(let Q of Object.values($))Z+=AQ(Q);return Z}return 0}function TQ($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:z0(Q),minBytes:N9,makeMarker:q9,get:()=>$[J],set:(X)=>{$[J]=X}});else TQ(Q,Z)});return}if($!==null&&typeof $==="object"){if(lj($))return;let Q=$;for(let J of Object.keys(Q)){let X=Q[J];if(typeof X==="string")Z.push({byteLength:z0(X),minBytes:N9,makeMarker:q9,get:()=>Q[J],set:(W)=>{Q[J]=W}});else TQ(X,Z)}}}function EQ($){if(Array.isArray($))return $.map(EQ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=EQ(J);return Z}return $}function pj(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class ij{messages=[];conversationId=pj();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=pj(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=pj(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var H2="0.0.80";var _6={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:H2,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function tL($){let{agentConfig:Z}=$,Q=Fb(Z),J=Lb(Z),X=$.hooks,W=Db(Z.maxParallelToolCalls);return{distinctId:Z.distinctId,clientName:Z.extensionContext?.client?.name,clientVersion:Z.extensionContext?.client?.version,clineCoreVersion:H2,sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,modelTools:Z.modelTools,tools:$.tools,hooks:X,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:$.completionPolicy===null?void 0:$.completionPolicy??Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:W,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function Fb($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function Lb($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function Db($){if($===void 0)return;return $>=2?"parallel":"sequential"}var eL={};f(eL,{normalizeConnectionUpdate:()=>z6,buildConnectionUpdate:()=>rj});function rj($){let Z={};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function z6($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function _b(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function zb($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function aj($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(aj);let Z={};for(let Q of Object.keys($).sort())Z[Q]=aj($[Q]);return Z}function Ob($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(aj($))}catch{return String($)}}function Nb($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var $D={softThreshold:3,hardThreshold:5};class nj{config;state=_b();constructor($){this.config={softThreshold:$?.softThreshold??$D.softThreshold,hardThreshold:$?.hardThreshold??$D.hardThreshold}}inspect($){let Z=Ob($.input),Q=Nb(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){zb(this.state)}}class oj{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let X={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(X);let W=await Ab(X,this.options.onLimitReached);if(W.action==="continue"){let j=W.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:W.reason?.trim()||void 0,message:qb({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function qb($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function Ab($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function Tb($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function Eb($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function Mb($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function Rb($){return $.content.find((Z)=>Z.type==="tool-result")}function Cb($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Pb($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class sj{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:$.media}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:Tb($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,errorClass:$.errorClass,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=Eb($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=Mb($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input,execution:$.toolCall.execution}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=Rb($.message),X=J?.output,W=Pb(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:X,error:W,durationMs:Q,execution:$.toolCall.execution}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,X=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,W=this.lastUsage.totalCost??0,Y=($.totalCost??0)-W;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:X===0?void 0:Math.max(0,X),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:Cb($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}var gb="session_run_in_progress";class WD extends Error{agentId;code=gb;constructor($){super(`SessionRuntime.shutdown called while a run is in progress${$?` (agentId=${$})`:""}`);this.agentId=$;this.name="SessionRunInProgressError"}}function mb($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function cb($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function ub($,Z){let Q=$.trim(),J=Z.map((X)=>X.trim()).filter(Boolean).join(`
|
|
249
|
+
`;function nL($=process.env){return{maxToolResultChars:aL($[cj.maxToolResultChars]),maxTotalTextBytes:aL($[cj.maxTotalTextBytes]),minOutdatedRewriteBytes:Bb($[cj.minOutdatedRewriteBytes])}}class dj{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=O9($.maxToolResultChars,ew),this.maxFileContentChars=O9($.maxFileContentChars,$b),this.maxTotalTextBytes=O9($.maxTotalTextBytes,Zb),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=O9($.maxAssistantTextChars,Qb),this.maxAssistantToolMarkupChars=O9($.maxAssistantToolMarkupChars,Jb),this.minOutdatedRewriteBytes=Gb($.minOutdatedRewriteBytes,Xb)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((X)=>{if(!Array.isArray(X.content)){if(X.role==="user"&&typeof X.content==="string"){let Y=uL(X.content);if(Y!==X.content)return{...X,content:Y}}if(X.role==="assistant"&&typeof X.content==="string"){let Y=this.truncateAssistantText(X.content);if(Y!==X.content)return{...X,content:Y}}return X}let W=!1,j=X.content.map((Y)=>{let V=this.transformBlock(Y,X.role);if(V!==Y)W=!0;return V});return W?{...X,content:j}:X}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let X=uL($.text);if(X!==$.text)return{...$,text:X};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let X=this.truncateAssistantText($.text);return X===$.text?$:{...$,text:X}}if($.type==="file"){let X=r8($.content,this.maxFileContentChars,pL);return X===$.content?$:{...$,content:X}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let X=this.committedOutdatedRewrites.get($.tool_use_id);if(X&&X.size>0){let j=this.getReadLocators($).filter((Y)=>X.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)J=this.replaceOutdatedReadContent(J,j)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let X=0;X<J.content.length;X++){let W=J.content[X];if(W.type==="file")this.latestFullContentOwnerByPathCache.set(W.path,`file:${Q}:${X}`);else if(W.type==="tool_use"){let j=W.name.toLowerCase();if(this.toolNameByIdCache.set(W.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(W.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(W.id,Y)}}else if(W.type==="tool_result"){let j=this.resolveToolName(W);if(!this.isReadTool(j)||W.is_error===!0)continue;let Y=this.getReadLocators(W);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),W.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,W.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let X of $){if(!Array.isArray(X.content))continue;for(let W of X.content){if(W.type!=="tool_result"||W.is_error===!0)continue;let j=this.resolveToolName(W);if(!this.isReadTool(j))continue;Q.add(W.tool_use_id);let Y=this.committedOutdatedRewrites.get(W.tool_use_id),V=new Set,K=new Set;for(let G of this.getReadLocators(W)){let H=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,W.tool_use_id))continue;if(K.add(H),!Y?.has(H))V.add(H)}if(Y){for(let G of Y)if(!K.has(G))Y.delete(G);if(Y.size===0)this.committedOutdatedRewrites.delete(W.tool_use_id)}if(V.size===0)continue;let B=Z.get(W.tool_use_id);if(!B)B=new Set,Z.set(W.tool_use_id,B);for(let G of V)B.add(G);J+=this.estimateOutdatedReclaimBytes(W.content,V)}}for(let X of this.committedOutdatedRewrites.keys())if(!Q.has(X))this.committedOutdatedRewrites.delete(X);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[X,W]of Z){let j=this.committedOutdatedRewrites.get(X);if(!j)j=new Set,this.committedOutdatedRewrites.set(X,j);for(let Y of W)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),X=(V)=>{let K;try{K=JSON.parse(V)}catch{return J||Q.length===0?z0(this.truncateMiddle(V)):0}let B=Array.isArray(K)?K:[K],G=0;for(let H of B){let U=this.extractLocatorFromResultEntry(H);if(U&&Z.has(this.toReadLocatorKey(U)))G+=this.providerBoundEntryBytes(H)}return G};if(typeof $==="string")return X($);let W=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,W);let Y=0;for(let V of $)if(V.type==="text")Y+=X(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=z0(V.data)}else if(G2(V)){let K=this.extractLocatorFromResultEntry(V);if(K&&Z.has(this.toReadLocatorKey(K)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=z0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return z0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,X=!1,W=()=>{if(J.size===0)return;j(this.createMissingToolResultMessage(J)),J.clear(),X=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},X=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,J)),J.size>0)J.clear(),X=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((B)=>B.type==="tool_result"),K=Y.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...Y,role:"user",content:V},J);if(j(B),J.size>0)J.clear();X=!0}if(K.length>0||V.length===0){if(V.length===0)W();let B=V.length>0?{...Y,content:K}:Y;if(j(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,J)}continue}W(),j(Y)}return W(),X?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${lL} Tool: ${$}.`:lL}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let X of Z.files){let W=this.extractLocatorFromReadRequest(X);if(W)Q.push(W)}if(Array.isArray(Z.file_paths)){for(let X of Z.file_paths)if(typeof X==="string"&&X.length>0)Q.push({path:X,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(G2(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let X=this.extractLocatorFromResultEntry(J);if(X)Q.push(X)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((W)=>this.toReadLocatorKey(W))),J=new Set(Z.map((W)=>W.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??D6;let X=0;for(let W of $)if(W.type==="text")X+=this.countOutdatedImageEntries(W.text,Q);return $.map((W)=>{if(W.type==="file"){if(!J.has(W.path))return W;return{...W,content:D6}}if(W.type==="image"){if(X===0)return W;return X-=1,{type:"text",text:D6}}if(G2(W))return this.replaceOutdatedReadEntry(W,Q);if(W.type!=="text")return W;let j=this.replaceOutdatedInString(W.text,Q);if(j===null)return{...W,text:D6};return j===W.text?W:{...W,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],X=0;for(let W of J){if(!W||typeof W!=="object")continue;let j=W,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")X+=1}return X}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((X)=>this.replaceOutdatedReadEntry(X,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=D6;else if(typeof J.content==="string")J.content=D6;else J.result=D6;return J}isReadTool($){return!!$&&jb.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(G2(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;return X});return Z?Q:$}if($!==null&&typeof $==="object"){if(lj($))return $;let Z=!1,Q={};for(let[J,X]of Object.entries($)){let W=this.truncateNestedStrings(X);if(W!==X)Z=!0;Q[J]=W}return Z?Q:$}return $}truncateMiddle($){return r8($,this.maxToolResultChars,pL)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return r8($,this.maxAssistantToolMarkupChars,Vb);return r8($,this.maxAssistantTextChars,Yb)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(Kb))if(Z+=1,Z>=Wb)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((X)=>{if(!Array.isArray(X.content))return{...X};return{...X,content:X.content.map((W)=>Ub(W))}}),J=this.collectTruncationCandidates(Q);for(let X of J){if(Z<=this.maxTotalTextBytes)break;let W=X.byteLength;if(W<=X.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(X.minBytes,W-j),V=Hb(X.get(),Y,X.makeMarker);X.set(V),Z-=W-z0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=z0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=z0(J.text);else if(J.type==="thinking")Z+=z0(J.thinking);else if(J.type==="file")Z+=z0(J.content);else if(J.type==="tool_use")Z+=AQ(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=z0(J.content);else for(let X of J.content)if(X.type==="text")Z+=z0(X.text);else if(X.type==="file")Z+=z0(X.content);else if(G2(X))Z+=AQ(X)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:z0(J.content),minBytes:dL,makeMarker:iL,get:()=>J.content,set:(X)=>{J.content=X}});continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="tool_use"){TQ(X.input,Q);continue}if(J.role==="assistant"&&X.type==="text"){Z.push({byteLength:z0(X.text),minBytes:dL,makeMarker:iL,get:()=>X.text,set:(W)=>{X.text=W}});continue}if(X.type!=="tool_result")continue;if(typeof X.content==="string"){Z.push({byteLength:z0(X.content),minBytes:N9,makeMarker:q9,get:()=>X.content,set:(W)=>{X.content=W}});continue}for(let W of X.content)if(W.type==="text")Z.push({byteLength:z0(W.text),minBytes:N9,makeMarker:q9,get:()=>W.text,set:(j)=>{W.text=j}});else if(W.type==="file")Z.push({byteLength:z0(W.content),minBytes:N9,makeMarker:q9,get:()=>W.content,set:(j)=>{W.content=j}});else if(G2(W))TQ(W,Z)}}return Z.sort((J,X)=>X.byteLength-J.byteLength),Q.sort((J,X)=>X.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=ow(),J=!1,X=$.map((W)=>{if(!Array.isArray(W.content))return W;let j=!1,Y=W.content.map((V)=>{let K=this.applyMediaBudgetToBlock(V,Z,Q);if(K!==V)j=!0;return K});if(!j)return W;return J=!0,{...W,content:Y}});return J?X:$}resolveMediaBudget(){return sw(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(uj($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,X=$.content.map((W)=>{let j=this.applyMediaBudgetToToolResultEntry(W,Z,Q);if(j!==W)J=!0;return j});return J?{...$,content:X}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(uj($))return this.limitImageContent($,Z,Q);if(G2($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(uj($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,X=$.map((W)=>{let j=this.limitNestedMedia(W,Z,Q);if(j!==W)J=!0;return j});return J?X:$}if($!==null&&typeof $==="object"){let J=!1,X={};for(let[W,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)J=!0;X[W]=Y}return J?X:$}return $}limitImageContent($,Z,Q){if(!oL($))return{type:"text",text:cL};let J=tw($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:cL};return{...$,data:J.base64,mediaType:J.mediaType}}}var rL=String.raw`[\|\uFF5C]`,Kb=new RegExp(String.raw`<\s*(?:${rL}\s*)?DSML\s*(?:${rL}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function z0($){return Buffer.byteLength($,"utf8")}function aL($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Bb($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function O9($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Gb($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function r8($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),X=Math.max(0,Math.floor((Z-J.length)/2)),W=Math.max(0,$.length-X*2),j=Q(W),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),K=Y>0?$.slice(-Y):"";return`${V}${j}${K}`}function Hb($,Z,Q){if(z0($)<=Z)return $;let J=0,X=$.length,W=r8($,0,Q);while(J<=X){let j=J+X>>>1,Y=r8($,j,Q);if(z0(Y)<=Z)W=Y,J=j+1;else X=j-1}return W}function Ub($){if($.type==="tool_use")return{...$,input:EQ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>G2(Z)?EQ(Z):{...Z})}}function G2($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function uj($){return $!==null&&typeof $==="object"&&$.type==="image"}function oL($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function lj($){return oL($)}function AQ($){if(typeof $==="string")return z0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=AQ(Q);return Z}if($!==null&&typeof $==="object"){if(lj($))return 0;let Z=0;for(let Q of Object.values($))Z+=AQ(Q);return Z}return 0}function TQ($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:z0(Q),minBytes:N9,makeMarker:q9,get:()=>$[J],set:(X)=>{$[J]=X}});else TQ(Q,Z)});return}if($!==null&&typeof $==="object"){if(lj($))return;let Q=$;for(let J of Object.keys(Q)){let X=Q[J];if(typeof X==="string")Z.push({byteLength:z0(X),minBytes:N9,makeMarker:q9,get:()=>Q[J],set:(W)=>{Q[J]=W}});else TQ(X,Z)}}}function EQ($){if(Array.isArray($))return $.map(EQ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=EQ(J);return Z}return $}function pj(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class ij{messages=[];conversationId=pj();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=pj(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=pj(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var H2="0.0.81";var _6={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:H2,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function tL($){let{agentConfig:Z}=$,Q=Fb(Z),J=Lb(Z),X=$.hooks,W=Db(Z.maxParallelToolCalls);return{distinctId:Z.distinctId,clientName:Z.extensionContext?.client?.name,clientVersion:Z.extensionContext?.client?.version,clineCoreVersion:H2,sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,modelTools:Z.modelTools,tools:$.tools,hooks:X,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:$.completionPolicy===null?void 0:$.completionPolicy??Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:W,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function Fb($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function Lb($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function Db($){if($===void 0)return;return $>=2?"parallel":"sequential"}var eL={};f(eL,{normalizeConnectionUpdate:()=>z6,buildConnectionUpdate:()=>rj});function rj($){let Z={};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function z6($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function _b(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function zb($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function aj($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(aj);let Z={};for(let Q of Object.keys($).sort())Z[Q]=aj($[Q]);return Z}function Ob($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(aj($))}catch{return String($)}}function Nb($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var $D={softThreshold:3,hardThreshold:5};class nj{config;state=_b();constructor($){this.config={softThreshold:$?.softThreshold??$D.softThreshold,hardThreshold:$?.hardThreshold??$D.hardThreshold}}inspect($){let Z=Ob($.input),Q=Nb(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){zb(this.state)}}class oj{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let X={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(X);let W=await Ab(X,this.options.onLimitReached);if(W.action==="continue"){let j=W.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:W.reason?.trim()||void 0,message:qb({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function qb($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function Ab($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function Tb($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function Eb($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function Mb($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function Rb($){return $.content.find((Z)=>Z.type==="tool-result")}function Cb($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Pb($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class sj{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:$.media}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:Tb($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,errorClass:$.errorClass,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=Eb($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=Mb($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input,execution:$.toolCall.execution}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=Rb($.message),X=J?.output,W=Pb(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:X,error:W,durationMs:Q,execution:$.toolCall.execution}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,X=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,W=this.lastUsage.totalCost??0,Y=($.totalCost??0)-W;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:X===0?void 0:Math.max(0,X),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:Cb($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}var gb="session_run_in_progress";class WD extends Error{agentId;code=gb;constructor($){super(`SessionRuntime.shutdown called while a run is in progress${$?` (agentId=${$})`:""}`);this.agentId=$;this.name="SessionRunInProgressError"}}function mb($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function cb($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function ub($,Z){let Q=$.trim(),J=Z.map((X)=>X.trim()).filter(Boolean).join(`
|
|
250
250
|
|
|
251
251
|
`);if(Q&&J)return`${Q}
|
|
252
252
|
|
|
@@ -577,7 +577,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
577
577
|
updated_at = ?
|
|
578
578
|
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,h0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,h0(),$)}}class S7{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new b7({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new mV({store:this.store,specs:Z}),this.materializer=new M7({store:this.store}),this.eventIngress=new PV({store:this.store,logger:$.logger}),this.runner=new R7({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new cV({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let J=$.logger;if(J)if(J.error)J.error("cron.watcher.failed",{error:Q});else J.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var ZN={};f(ZN,{manifestToSessionRecord:()=>eJ,listSessionHistoryFromBackend:()=>rV,listSessionHistory:()=>$X,hydrateSessionHistory:()=>$N});import{readdir as sv,readFile as sO}from"node:fs/promises";import{join as tO}from"node:path";import{formatDisplayUserInput as tv,normalizeUserInput as ev}from"@cline/shared";import{resolveSessionDataDir as eO}from"@cline/shared/storage";import{existsSync as nv}from"node:fs";import{readFile as ov}from"node:fs/promises";class k7{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function b2($){let Z=$?.trim();if(!Z||!nv(Z))return[];try{let Q=(await ov(Z,"utf8")).trim();if(!Q)return[];let J=JSON.parse(Q);if(Array.isArray(J))return J;if(J&&typeof J==="object"&&!Array.isArray(J)){let X=J.messages;if(Array.isArray(X))return X}return[]}catch{return[]}}function lV($){return $?{...$}:void 0}async function nO($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let J=await Z.upsertSubagentSessionFromHook($);if(!J)return;await Z.appendSubagentHookAudit(J,$),await Z.applySubagentStatus(J,$)}function x7($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function C1($){let Z=x7($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function tJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function $g($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function iV($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function Zg($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Qg($){return $.isSubagent!==!0&&!x7($.parentSessionId)}function Jg($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let J of Z){let X=Number.parseInt(J,10);if(Number.isFinite(X)&&X>Q)Q=X}return Q}function eJ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function Xg($){let Z=iV($);if(Z===0)return[];let Q=eO(),X=(await sv(Q,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:Jg(j.name.trim())})).sort((j,Y)=>Y.recency-j.recency||Y.entry.name.localeCompare(j.entry.name));return(await Promise.all(X.map(async({entry:j})=>{let Y=j.name.trim();if(!Y)return;let V=tO(Q,Y,`${Y}.json`),K=await sO(V,"utf8").catch(()=>{return});if(!K)return;let B;try{B=JSON.parse(K)}catch{return}let G=V1.safeParse(B);if(!G.success)return;return eJ(G.data)}))).filter((j)=>Boolean(j)).sort((j,Y)=>Y.startedAt.localeCompare(j.startedAt)).slice(0,Z)}async function Wg($,Z,Q){let J=iV(Z);if(J===0)return await $.listSessions(0),[];let X=Q.includeSubagents?J:Zg(J),W=await $.listSessions(X);return(Q.includeSubagents?W:W.filter(Qg)).slice(0,J)}function jg($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let J=Q;if(J.type!=="text")continue;let X=J.text?.trim();if(X)Z.push(X)}return Z.join(`
|
|
579
579
|
`).trim()}function oO($){return $.replace(/\s+/g," ").trim()}function Yg($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function Vg($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let J=oO(jg(Q.content));if(!J)continue;let X=Z==="user"?oO(tv(J)):J,W=ev(X.split(`
|
|
580
|
-
`)[0]??X);return Yg(W,50)}return}function Kg($){let Z=0;for(let Q of $)Z+=tJ(Q.metrics?.cost)??0;return Z}function Bg($){let Z,Q;for(let J=$.length-1;J>=0;J-=1){let X=$[J];if(!Z)Z=C1(X.modelInfo?.provider);if(!Q)Q=C1(X.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function Gg($){return C1($?.provider)??C1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Hg($){return C1($?.model)??C1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function pV($,Z){let Q=$g($.metadata),J=x7(Z?.title)??x7(Q?.title),X=tJ(Z?.totalCost)??tJ(Q?.totalCost),W=Q||J!==void 0||X!==void 0?{...Q??{},...J!==void 0?{title:J}:{},...X!==void 0?{totalCost:X}:{}}:void 0;return{...$,provider:C1(Z?.provider)??C1($.provider)??Gg(Q)??"",model:C1(Z?.model)??C1($.model)??Hg(Q)??"",metadata:W}}function Ug($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function Fg($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!Ug(Q)}async function Lg($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let J=await $.readSessionMessages(Q.sessionId);return Fg(Q,J)?{...Q,status:"idle"}:Q}))}async function $N($,Z){return await Promise.all(Z.map(async(Q)=>{let J=pV(Q),X=Boolean(x7(J.metadata?.title)),W=Boolean(C1(J.provider)),j=Boolean(C1(J.model)),Y=tJ(J.metadata?.totalCost),V=Y!==void 0&&Y>0;if(X&&W&&j&&V)return J;let K=await $.readSessionMessages(Q.sessionId);if(K.length===0)return J;let B=Bg(K),G=Kg(K);return pV(Q,{title:X?void 0:Vg(K),provider:W?void 0:B.provider,model:j?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function $X($,Z={}){let Q=iV(Z.limit),J=Z.includeSubagents===!0,X=await Wg($,Q,{includeSubagents:J}),W=Z.includeManifestFallback===!0&&X.length<Q?await Xg(Math.min(Math.max(Q*2,100),500)):[],j=new Map;for(let K of[...X,...W]){if(j.has(K.sessionId))continue;j.set(K.sessionId,K)}let Y=W.length===0?X:Array.from(j.values()).sort((K,B)=>B.startedAt.localeCompare(K.startedAt)).slice(0,Q),V=await Lg($,Y);if(Z.hydrate===!1)return V.map((K)=>pV(K));return await $N($,V)}async function Dg($){let Z=$.trim();if(!Z)return;let Q=tO(eO(),Z,`${Z}.json`),J=await sO(Q,"utf8").catch(()=>{return});if(!J)return;try{let X=V1.safeParse(JSON.parse(J));return X.success?X.data.messages_path:void 0}catch{return}}async function rV($,Z={}){let Q=new Map;return await $X({listSessions:async(X)=>{let W=await $.listSessions(X);Q.clear();for(let j of W)Q.set(j.sessionId,j);return W.map(P9)},readSessionMessages:async(X)=>{let W=Q.get(X)?.messagesPath??await Dg(X);return await b2(W)}},Z)}var Eq={};f(Eq,{resolveSessionBackend:()=>gK,createRuntimeHost:()=>t4});import{captureSdkError as Aq}from"@cline/shared";import{createSessionId as zm,isHubProtocolCompatible as Om,resolveClineBuildEnv as Nm,resolveHubCommandTimeoutMs as qm}from"@cline/shared";import{spawn as dg}from"node:child_process";import{closeSync as lg,mkdirSync as pg,openSync as ig,readFileSync as rg,unlinkSync as ag}from"node:fs";import{basename as ng,dirname as og,join as sg}from"node:path";import{fileURLToPath as tg}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as eg,isHubDaemonProcess as ON,resolveClineBuildEnv as NN,withResolvedClineBuildEnv as $m}from"@cline/shared";import{createHash as _g,randomBytes as YN}from"node:crypto";import{existsSync as zg}from"node:fs";import{mkdir as nV,open as QN,readFile as VN,rename as Og,rm as ZX,writeFile as Ng}from"node:fs/promises";import{dirname as KN,join as oV}from"node:path";import{isHubProtocolCompatible as qg}from"@cline/shared";import{resolveClineDataDir as o6,resolveClineDir as BN}from"@cline/shared/storage";var Ag="CLINE_HUB_DISCOVERY_PATH",Tg="CLINE_HUB_BUILD_ID",Eg="CLINE_HUB_BUILD_EPOCH_MS",Mg=30000,Rg=15000,JN=100;function Cg($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Pg($){return _g("sha256").update($).digest("hex").slice(0,12)}function fg($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function QX(){return YN(32).toString("hex")}function XN($){return new Promise((Z)=>setTimeout(Z,$))}function wg($){return`${$}.lock`}async function bg($){try{let Z=JSON.parse(await VN(oV($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function aV($){await ZX($,{recursive:!0,force:!0}).catch(()=>{return})}function P1(){let $=process.env[Tg]?.trim();if($)return $;return"sdk-v1-
|
|
580
|
+
`)[0]??X);return Yg(W,50)}return}function Kg($){let Z=0;for(let Q of $)Z+=tJ(Q.metrics?.cost)??0;return Z}function Bg($){let Z,Q;for(let J=$.length-1;J>=0;J-=1){let X=$[J];if(!Z)Z=C1(X.modelInfo?.provider);if(!Q)Q=C1(X.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function Gg($){return C1($?.provider)??C1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Hg($){return C1($?.model)??C1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function pV($,Z){let Q=$g($.metadata),J=x7(Z?.title)??x7(Q?.title),X=tJ(Z?.totalCost)??tJ(Q?.totalCost),W=Q||J!==void 0||X!==void 0?{...Q??{},...J!==void 0?{title:J}:{},...X!==void 0?{totalCost:X}:{}}:void 0;return{...$,provider:C1(Z?.provider)??C1($.provider)??Gg(Q)??"",model:C1(Z?.model)??C1($.model)??Hg(Q)??"",metadata:W}}function Ug($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function Fg($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!Ug(Q)}async function Lg($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let J=await $.readSessionMessages(Q.sessionId);return Fg(Q,J)?{...Q,status:"idle"}:Q}))}async function $N($,Z){return await Promise.all(Z.map(async(Q)=>{let J=pV(Q),X=Boolean(x7(J.metadata?.title)),W=Boolean(C1(J.provider)),j=Boolean(C1(J.model)),Y=tJ(J.metadata?.totalCost),V=Y!==void 0&&Y>0;if(X&&W&&j&&V)return J;let K=await $.readSessionMessages(Q.sessionId);if(K.length===0)return J;let B=Bg(K),G=Kg(K);return pV(Q,{title:X?void 0:Vg(K),provider:W?void 0:B.provider,model:j?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function $X($,Z={}){let Q=iV(Z.limit),J=Z.includeSubagents===!0,X=await Wg($,Q,{includeSubagents:J}),W=Z.includeManifestFallback===!0&&X.length<Q?await Xg(Math.min(Math.max(Q*2,100),500)):[],j=new Map;for(let K of[...X,...W]){if(j.has(K.sessionId))continue;j.set(K.sessionId,K)}let Y=W.length===0?X:Array.from(j.values()).sort((K,B)=>B.startedAt.localeCompare(K.startedAt)).slice(0,Q),V=await Lg($,Y);if(Z.hydrate===!1)return V.map((K)=>pV(K));return await $N($,V)}async function Dg($){let Z=$.trim();if(!Z)return;let Q=tO(eO(),Z,`${Z}.json`),J=await sO(Q,"utf8").catch(()=>{return});if(!J)return;try{let X=V1.safeParse(JSON.parse(J));return X.success?X.data.messages_path:void 0}catch{return}}async function rV($,Z={}){let Q=new Map;return await $X({listSessions:async(X)=>{let W=await $.listSessions(X);Q.clear();for(let j of W)Q.set(j.sessionId,j);return W.map(P9)},readSessionMessages:async(X)=>{let W=Q.get(X)?.messagesPath??await Dg(X);return await b2(W)}},Z)}var Eq={};f(Eq,{resolveSessionBackend:()=>gK,createRuntimeHost:()=>t4});import{captureSdkError as Aq}from"@cline/shared";import{createSessionId as zm,isHubProtocolCompatible as Om,resolveClineBuildEnv as Nm,resolveHubCommandTimeoutMs as qm}from"@cline/shared";import{spawn as dg}from"node:child_process";import{closeSync as lg,mkdirSync as pg,openSync as ig,readFileSync as rg,unlinkSync as ag}from"node:fs";import{basename as ng,dirname as og,join as sg}from"node:path";import{fileURLToPath as tg}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as eg,isHubDaemonProcess as ON,resolveClineBuildEnv as NN,withResolvedClineBuildEnv as $m}from"@cline/shared";import{createHash as _g,randomBytes as YN}from"node:crypto";import{existsSync as zg}from"node:fs";import{mkdir as nV,open as QN,readFile as VN,rename as Og,rm as ZX,writeFile as Ng}from"node:fs/promises";import{dirname as KN,join as oV}from"node:path";import{isHubProtocolCompatible as qg}from"@cline/shared";import{resolveClineDataDir as o6,resolveClineDir as BN}from"@cline/shared/storage";var Ag="CLINE_HUB_DISCOVERY_PATH",Tg="CLINE_HUB_BUILD_ID",Eg="CLINE_HUB_BUILD_EPOCH_MS",Mg=30000,Rg=15000,JN=100;function Cg($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Pg($){return _g("sha256").update($).digest("hex").slice(0,12)}function fg($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function QX(){return YN(32).toString("hex")}function XN($){return new Promise((Z)=>setTimeout(Z,$))}function wg($){return`${$}.lock`}async function bg($){try{let Z=JSON.parse(await VN(oV($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function aV($){await ZX($,{recursive:!0,force:!0}).catch(()=>{return})}function P1(){let $=process.env[Tg]?.trim();if($)return $;return"sdk-v1-de9deb37f4cb8cc9eb360a3aafe9a44f52cc6b6ca6b75b2a98c16c7a5d68a027".trim()||`source-${String(_6.version)}`}function y7(){let $=Number(process.env[Eg]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1787736998718)?1787736998718:void 0}function s6($,Z=P1()){let Q=qg($);if(!Q.compatible)return Q;let J=$.buildId?.trim();if(!J)return{compatible:!1,reason:"missing_build"};if(J!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function WN($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function jN($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((J)=>Number(J));if(Q.length===0||Q.some((J)=>!Number.isInteger(J)||J<0))return;return Q}function Sg($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let J=$[Q]??0,X=Z[Q]??0;if(J!==X)return J<X?-1:1}return 0}function I7($,Z){let Q=$.buildId?.trim(),J=Z.buildId?.trim();if(Q&&J&&Q===J)return 0;let X=WN($.buildEpochMs),W=WN(Z.buildEpochMs);if(X!==void 0&&W!==void 0&&X!==W)return X<W?-1:1;let j=jN($.coreVersion),Y=jN(Z.coreVersion);if(j&&Y){let V=Sg(j,Y);if(V!==0)return V}if(Q&&J&&Q!==J)return Q<J?-1:1;return 0}function h7(){return{buildId:P1(),buildEpochMs:y7(),coreVersion:String(_6.version)}}function S2($,Z){let Q=Z?.self??h7(),J=s6($,Q.buildId??"");if(J.compatible)return!0;if(J.reason!=="build_mismatch"&&J.reason!=="missing_build")return!1;return I7(Q,$)<=0}function u$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Pg($)}`,Q=process.env[Ag]?.trim()||oV(o6(),"locks","hub","owners",`${Cg(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function GN($=`hub-${Date.now().toString(36)}`){return u$($)}async function f0($){try{let Z=JSON.parse(await VN($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function v4($,Z){await sV($,async()=>{let Q=KN($);await nV(Q,{recursive:!0});let J=`${$}.${process.pid}.${YN(6).toString("hex")}.tmp`,X;try{X=await QN(J,"wx",384),await X.writeFile(`${JSON.stringify(Z,null,2)}
|
|
581
581
|
`,{encoding:"utf8"}),await X.sync(),await X.close(),X=void 0,await Og(J,$);let W;try{W=await QN(Q,"r"),await W.sync()}catch{}finally{await W?.close().catch(()=>{return})}}catch(W){throw await X?.close().catch(()=>{return}),await ZX(J,{force:!0}).catch(()=>{return}),W}})}async function d1($){await sV($,async()=>{await ZX($,{force:!0}).catch(()=>{return})})}async function JX($,Z){return await sV($,async()=>{if((await f0($))?.hubId!==Z)return!1;return await ZX($,{force:!0}),!0})}async function HN($,Z,Q){let J=wg($);await nV(KN(J),{recursive:!0});let X=Date.now()+Rg;while(!0){try{await nV(J,{recursive:!1})}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let Y=await bg(J);if(!Y){if(Date.now()>=X){await aV(J);continue}await XN(JN);continue}let V=Date.now()-Date.parse(Y.acquiredAt);if(!fg(Y.pid)||V>Mg){await aV(J);continue}if(Date.now()>=X)throw Error(`Timed out waiting for hub ${Z} lock ${J}`);await XN(JN);continue}try{return await Ng(oV(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
582
582
|
`,"utf8"),await Q()}finally{await aV(J)}}}function sV($,Z){return HN(`${$}.mutation`,"discovery mutation",Z)}function g4($,Z){return HN($,"startup",Z)}async function l1($,Z){try{let Q=await fetch(Z?.authToken?tV($):XX($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((X)=>typeof X==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,buildEpochMs:typeof J.buildEpochMs==="number"?J.buildEpochMs:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function p1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function XX($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function tV($){let Z=new URL(XX($));return Z.pathname="/status",Z.toString()}function UN($){return zg($)}import{CLINE_HUB_DEV_PORT as kg,CLINE_HUB_PORT as xg,resolveClineBuildEnv as yg}from"@cline/shared";var Ig="CLINE_HUB_HOST",hg="CLINE_HUB_PORT",vg="CLINE_HUB_PATHNAME",eV="127.0.0.1",$K=xg,ZK="/hub";function FN($){return yg($)==="development"?kg:$K}function QK($={}){return($.env??process.env)[Ig]?.trim()||eV}function m4($={}){let Q=($.env??process.env)[hg]?.trim();if(!Q)return FN($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return FN($);return J}function JK($={}){return($.env??process.env)[vg]?.trim()||ZK}function i1($={},Z={}){return{host:$.host??QK(Z),port:$.port??m4(Z),pathname:$.pathname??JK(Z)}}import{join as gg}from"node:path";var mg="shared:cline",cg="CLINE_HUB_DISCOVERY_PATH",ug="hub-production";function LN($){let Z=X$($.trim());return u$(`workspace:${Z||$.trim()}`)}function s0($=mg){return u$(`${$}@${P1()}`)}function Z1(){return{ownerId:ug,discoveryPath:process.env[cg]?.trim()||gg(o6(),"locks","hub","production.json")}}var Zm=8000,Qm=200,DN=3000,Jm=100,Xm=[100,250,500,1000,2000],Wm="--cline-hub-daemon",jm=3,Ym=60000,jK=new Map,qN={resetRetireAttempts(){jK.clear()}};function Vm($,Z=Date.now()){let Q=jK.get($);if(!Q||Z-Q.windowStartedAt>Ym)return jK.set($,{count:1,windowStartedAt:Z}),!0;return Q.count+=1,Q.count<=jm}function Km($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function Bm(){try{let $=sg(o6(),"logs","hub-daemon.log");return pg(og($),{recursive:!0}),{fd:ig($,"a"),logPath:$}}catch{return}}function Gm(){return NN()==="production"?Z1():s0()}function v7($){return S2($)}function YK($){try{let Z=JSON.parse(rg(`${$}.superseded`,"utf8"));return{url:typeof Z.url==="string"?Z.url:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0}}catch{return}}function XK($){try{ag(`${$}.superseded`)}catch{}}function _N($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function g7($,Z){try{return await l1($,{authToken:Z})}catch{return}}async function zN($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await g7($))?.url)return!0;await new Promise((X)=>setTimeout(X,Jm))}return!1}async function t6($,Z){if(!Vm($.url))return!1;await jX($.url,$.authToken,"retired by newer install").catch(()=>!1),await u7($.url,$.authToken).catch(()=>!1);let Q=await zN($.url,DN);if(!Q&&$.pid&&Hm($.pid)){try{process.kill($.pid,"SIGTERM")}catch{}Q=await zN($.url,DN)}if(Q)await d1(Z).catch(()=>{return});return Q}function Hm($){try{return process.kill($,0),!0}catch(Z){return Z?.code==="EPERM"}}async function m7($){try{return!await c4($.url,$.authToken)}catch{return!1}}async function WK($,Z){if(v7($))return"reusable";if(await m7($))return"deferred_busy";return await t6($,Z)?"retired":"failed"}async function Um($){if(NN()!=="production")return;let Z=s0();if(Z.discoveryPath===$.discoveryPath)return;let Q=await f0(Z.discoveryPath);if(Q?.url)await t6(Q,Z.discoveryPath);else await d1(Z.discoveryPath).catch(()=>{return})}function Fm(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return tg(new URL(`./entry.${$}`,import.meta.url))}function Lm($,Z){let Q=Fm(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let X=ng(J).toLowerCase().includes("bun"),W=Q.startsWith("/$bunfs/"),j=X&&Q.toLowerCase().endsWith(".ts"),Y=W?[Wm]:[...j?["--conditions=development"]:[],Q];return{launcher:J,args:[...Y,"--cwd",$,...Km(Z)],cwd:$,env:{...$m(process.env),CLINE_NO_INTERACTIVE:"1",[eg]:"1"}}}function Dm($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function VK($,Z={}){if(ON())return;let Q=Lm($,Z),J=Bm();try{dg(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)lg(J.fd)}}async function KK($,Z={}){for(let Q=0;;Q++)try{VK($,Z);return}catch(J){let X=Xm[Q];if(!Dm(J)||X===void 0)throw J;await new Promise((W)=>setTimeout(W,X))}}function WX($,Z={}){if(ON())return;c7($,Z).catch(()=>{})}async function _m($,Z,Q={}){let J=Q.host!==void 0||Q.port!==void 0||Q.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),X=i1(Q),W=p1(X.host,X.port,X.pathname),j=(F)=>{if(!J)k2(F.url,F.authToken);return F};await Um($).catch(()=>{return});let Y=await f0($.discoveryPath),V=Y?.url?void 0:YK($.discoveryPath),K=!1;if(Y?.url){let F=Y.authToken;if(!F)K=!0,await t6(Y,$.discoveryPath);else{let L=await g7(Y.url,F);if(L?.url&&v7(L)&&await Q1(L.url,{authToken:F}))return XK($.discoveryPath),j({url:L.url,authToken:F});if(L?.url){if(await WK({...L,authToken:F},$.discoveryPath)==="deferred_busy"&&await Q1(L.url,{authToken:F}))return j({url:L.url,authToken:F})}else await d1($.discoveryPath).catch(()=>{return})}}let B=await g7(W);if(B?.url){let F=_N(B,Y??V,W);if(v7(B)){let D=[B.authToken,Y?.authToken,V?.authToken].filter((_)=>typeof _==="string"&&_.trim().length>0);for(let _ of D){if(!await Q1(B.url,{authToken:_}))continue;let O={hubId:B.hubId??`repaired-${B.port}`,protocolVersion:B.protocolVersion,minClientProtocolVersion:B.minClientProtocolVersion,maxClientProtocolVersion:B.maxClientProtocolVersion,capabilities:B.capabilities,coreVersion:B.coreVersion,buildId:B.buildId,authToken:_,host:B.host,port:B.port,url:B.url,pid:B.pid??Y?.pid??V?.pid,startedAt:B.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await v4($.discoveryPath,O)}catch{}return XK($.discoveryPath),j({url:B.url,authToken:_})}throw Error(`A compatible Cline Hub is already running at ${W}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${K?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`)}let L=await WK(F,$.discoveryPath);if(L==="deferred_busy"){for(let D of[F.authToken,Y?.authToken].filter((z)=>typeof z==="string"&&z.trim().length>0))if(await Q1(B.url,{authToken:D}))return j({url:B.url,authToken:D});if(Q.allowPortFallback!==!0&&X.port!==0)throw Error(`An older Cline Hub is running at ${W} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(L==="failed"&&Q.allowPortFallback!==!0&&X.port!==0)throw Error(`An incompatible Cline Hub is already running at ${W} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let H=Q.allowPortFallback===!0&&X.port!==0?{...X,port:0}:X;await KK(Z,H);let U=Date.now()+Zm;while(Date.now()<U){let F=await f0($.discoveryPath);if(F?.url&&F.authToken){let D=await g7(F.url,F.authToken);if(D?.url&&v7(D)&&await Q1(D.url,{authToken:F.authToken}))return XK($.discoveryPath),j({url:D.url,authToken:F.authToken})}let L=await g7(W);if(L?.url&&!v7(L)){let D=_N(L,F??V,W),z=await WK(D,$.discoveryPath);if(z==="deferred_busy"&&F?.authToken&&await Q1(L.url,{authToken:F.authToken}))return j({url:L.url,authToken:F.authToken});if(z==="failed"&&Q.allowPortFallback!==!0&&X.port!==0)throw Error(`An incompatible Cline Hub is still running at ${W} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,Qm))}throw Error("Timed out waiting for detached hub startup.")}async function c7($,Z={}){let Q=Gm();return await g4(Q.discoveryPath,async()=>_m(Q,$,Z))}function FK(){return Nm()==="production"?Z1():s0()}function Am(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function MN($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return MN($.data);return String($)}function Tm($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function AN($){let Z=$,Q=Tm(Z.reason);return new J1("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:GK,{closeCode:Z.code,closeReason:Q||void 0})}function Em($,Z){if($ instanceof J1)return $;if($ instanceof Error)return new J1("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new J1("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new J1("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new J1("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var BK="*",TN=8000,Mm="cline-hub-auth.",RN=new Map,CN=new Set,Rm=3000,Cm=3000,Pm=100,GK="Hub connection closed",fm=250,wm=5000,EN=0.5;class J1 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function LK($){return $ instanceof J1}class u4 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function YX($,Z){return $ instanceof u4&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function DK($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=_K($.toString());return Q?RN.get(Q):void 0}function bm($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function _K($){if(!bm($))return;let Z=new URL(x2($));return Z.search="",Z.hash="",Z.toString()}function HK($){let Z=_K($);return!!Z&&CN.has(Z)}function k2($,Z){let Q=_K($);if(Q){if(CN.add(Q),Z?.trim())RN.set(Q,Z)}return $}class r1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new J1("hub_connection_closed",GK);sawSocketClose=!1;registered=!1;capabilities;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url,this.capabilities=[...$.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities($){if(this.capabilities=$.map((Z)=>({...Z})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||DK($);$.hash="";let J=new(Am())($.toString(),Z?[`${Mm}${Z}`]:void 0);this.socket=J;let X=!1;this.connectPromise=new Promise((W,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,X=!0,this.lastCloseError=new J1("hub_connect_timeout",`Timed out connecting to hub after ${TN}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{J.close()}catch{}j(this.lastCloseError)},TN);J.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),W()}),J.addEventListener("error",(K)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=Em(K,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),J.addEventListener("close",(K)=>{if(Y)return;if(Y=!0,clearTimeout(V),!X)this.lastCloseError=AN(K),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),J.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(MN(W)))}),J.addEventListener("close",(W)=>{if(this.socket!==J)return;if(!X)this.lastCloseError=AN(W),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",capabilities:this.capabilities,workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let W of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(W));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let X=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(j){if(!W||X>=1||!await this.recoverLocalHubTransport(j))throw j;X+=1}}async commandOnce($,Z,Q,J){await this.connect();let X=zm("hubreq_"),W=qm($,J?.timeoutMs),j=new Promise((V,K)=>{let B=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(X))return;K(new u4($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${X}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(X,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);K(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:X,clientId:this.clientId,sessionId:Q,timeoutMs:W,payload:Z}})}catch(V){throw this.pendingReplies.delete(X),V}let Y=await j;if(!Y.ok){if(Y.error?.code===r6){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new c$(V,Y.error.message)}throw new u4($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!HK(this.currentUrl)||!LK($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await e6({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(fm*2**this.reconnectAttempt,wm),Z=Math.round($*(1-EN)+Math.random()*$*EN);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!HK(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await e6({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new J1("hub_connection_closed",GK),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new J1("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){let Q=$==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(Z)):void 0;this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{},...Q!==void 0?{sinceSequence:Q}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??BK}subscriptionSessionIdFromKey($){return $===BK?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":{let Z=$.envelope.sequence;if(typeof Z==="number"){let Q=$.envelope.sessionId?.trim();for(let J of[BK,Q]){if(!J||!this.subscriptionCounts.has(J))continue;let X=this.lastEventSequenceByKey.get(J)??0;if(Z>X)this.lastEventSequenceByKey.set(J,Z)}}for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==$.envelope.sessionId?.trim())continue;Q.listener($.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function x2($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function Q1($,Z){let Q=new r1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function UK($,Z){let Q=x2($),J=await l1(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(Z?.requireCurrentBuild){let X=P1(),W=s6(J,X);if(!W.compatible&&!S2(J))return{status:W.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:Q}}else if(!Om(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await Q1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Sm($){let Z=Date.now()+Cm;while(Date.now()<Z){if(!(await l1($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,Pm))}return!1}function km($,Z){try{return x2($)===x2(Z)}catch{return!1}}function zK($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let J=Q;return Array.isArray(J.participants)&&J.participants.length>0})}async function c4($,Z,Q){let J=new r1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let X=await J.command("session.list",{limit:500},void 0,{timeoutMs:Rm});return!zK(X.payload)}catch{return!1}finally{await J.dispose().catch(()=>{return})}}async function xm($,Z){let Q=`${$.discoveryPath}.superseded`,J=await f0(Q);if(!J?.url||!J.authToken)return;let X=await UK(J.url,{authToken:J.authToken});if(X.status!=="compatible")return;if(await c4(X.url,J.authToken,Z))return;return k2(X.url,J.authToken)}async function d7($={}){if($.endpoint?.trim()){let X=await UK($.endpoint);return X.status==="compatible"?X.url:void 0}let Z=FK(),Q=await f0(Z.discoveryPath);if(!Q?.url)return await xm(Z,$);let J=await UK(Q.url,{authToken:Q.authToken,requireCurrentBuild:!0});if(J.status==="compatible")return k2(J.url,Q.authToken);if(J.status==="protocol_mismatch")await d1(Z.discoveryPath).catch(()=>{return});return}async function e6($={}){let Z=await d7($);if(Z&&await Q1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;try{return(await c7($.workspaceRoot??process.cwd())).url}catch{return}}async function jX($,Z,Q,J){let X=new URL($),W=Z?.trim()||DK(X);if(X.protocol==="ws:")X.protocol="http:";else if(X.protocol==="wss:")X.protocol="https:";if(X.pathname="/drain",X.hash="",Q)X.searchParams.set("reason",Q);if(J?.off)X.searchParams.set("off","1");return(await fetch(X,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function u7($,Z){let Q=new URL($),J=Z?.trim()||DK(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function OK($=FK()){let Z=await f0($.discoveryPath);if(!Z?.url)return!1;try{if(await u7(Z.url,Z.authToken))return!0}catch{}return!1}async function VX($){if(!HK($.url))return;let Z=FK(),Q=await f0(Z.discoveryPath);if(!Q?.url||!km(Q.url,$.url))return;if(!await c4(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await OK())return;if(!await Sm(Q.url))return;return await d1(Z.discoveryPath).catch(()=>{return}),await e6({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var uN={};f(uN,{HubRuntimeHost:()=>d$});import{resolveProviderRequestHeaders as vm}from"@cline/llms";import{captureSdkError as NK,createSessionId as fN,HUB_CHECKPOINT_CAPABILITY as gm,HUB_COMPACTION_CAPABILITY as mm,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as cm,HUB_HOOK_CAPABILITY_PREFIX as um,HUB_MISTAKE_LIMIT_CAPABILITY as dm,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as lm,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as pm,isGeneratedMedia as im,isHubToolExecutorName as rm}from"@cline/shared";var PN={};f(PN,{createCoreSessionSnapshot:()=>V$,coreSessionSnapshotToRecord:()=>KX});function ym($){return $?JSON.parse(JSON.stringify($)):void 0}function Im($){return $?JSON.parse(JSON.stringify($)):void 0}function hm($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,J=(Array.isArray(Z?.history)?Z.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let Y=typeof j.ref==="string"?j.ref.trim():"",V=Number(j.createdAt),K=Number(j.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(K))return[];return[{ref:Y,createdAt:V,runCount:K,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),X=J.at(-1),W=$?.checkpointEnabled===!0?!0:void 0;if(!W&&J.length===0)return;return{...W?{enabled:W}:{},...X?{latest:X}:{},history:J}}function V$($){let{session:Z}=$,Q=ym(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:Im($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let J=hm(Q);return J?{checkpoint:J}:{}})()}}function KX($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function d4($){if(!$)return;return JSON.parse(JSON.stringify($))}var am=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function wN($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function bN($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function SN($,Z){let Q={...$.config,sessionId:Z},J=vm({providerId:$.config.providerId,sessionId:Z,source:$.source,defaultSource:J0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:H2,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(J)Q.headers=J;return Q}function gN($){return v0($.sessionMetadata,{mode:$.mode,version:$.localRuntime?.extensionContext?.client?.version})}function kN($){return{...gN($),source:$.source??J0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0}}function xN($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:void 0,agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",runId:typeof Z.runId==="string"?Z.runId:void 0,iteration:typeof Z.iteration==="number"?Z.iteration:0,toolCallId:typeof Z.toolCallId==="string"?Z.toolCallId:void 0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function $8($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function yN($,Z){let Q={manifest:[],handlers:new Map};for(let X of Object.keys(Z.toolExecutors??{}).filter(rm)){let W=Z.toolExecutors?.[X];if(typeof W!=="function")continue;$8(Q,{kind:"toolExecutor",executor:X,capabilityName:`${lm}${X}`},async({payload:j,abortSignal:Y,progress:V})=>{let K=Array.isArray(j.args)?[...j.args]:[],B={...xN(j.context),signal:Y,emitUpdate:(G)=>{V({update:G})}};return{result:await W(...K,B)}})}for(let X of $?.extraTools??[])$8(Q,{kind:"tool",name:X.name,description:X.description,inputSchema:d4(X.inputSchema)??{},...X.lifecycle?{lifecycle:d4(X.lifecycle)}:{},capabilityName:`${cm}${X.name}`},async({payload:W,abortSignal:j,progress:Y})=>{let V={...xN(W.context),signal:j};return{result:await X.execute(W.input,{...V,emitUpdate:(B)=>{Y({update:B})}})}});let J=$?.hooks;if(J)for(let X of am){let W=J[X];if(typeof W!=="function")continue;$8(Q,{kind:"hook",name:X,capabilityName:`${um}${X}`},async({payload:j})=>({control:await W(j.context)}))}if($?.compaction?.compact){let X=$.compaction.compact;$8(Q,{kind:"compaction",capabilityName:mm,config:wN($.compaction)},async({payload:W})=>({result:await X(W.context)}))}if($?.checkpoint?.createCheckpoint){let X=$.checkpoint.createCheckpoint;$8(Q,{kind:"checkpoint",capabilityName:gm,config:wN($.checkpoint)},async({payload:W})=>({result:await X(W.context)}))}if($?.onConsecutiveMistakeLimitReached){let X=$.onConsecutiveMistakeLimitReached;$8(Q,{kind:"mistakeLimit",capabilityName:dm},async({payload:W})=>({result:await X(W.context)}))}if($?.userInstructionService){let X=$.userInstructionService;$8(Q,{kind:"userInstructionService",capabilityName:pm},async()=>{return await X.start().catch(()=>{}),{snapshot:{records:{skill:X.listRecords("skill"),rule:X.listRecords("rule"),workflow:X.listRecords("workflow")},runtimeCommands:X.listRuntimeCommands()}}})}return Q}function mN($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function nm($){return mN($)??"Capability request was cancelled."}function om($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function sm($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function tm($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,J=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||J===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function IN($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function qK($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function y2($,Z){return qK($?.[Z])??0}function em($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,J=$?.agent&&typeof $.agent==="object"?$.agent:void 0,X=J?.teamRole==="teammate"||J?.teamRole==="lead"?J.teamRole:void 0;return{event:{type:"usage",agentId:typeof J?.agentId==="string"?J.agentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,inputTokens:y2(Z,"inputTokens"),outputTokens:y2(Z,"outputTokens"),cacheReadTokens:y2(Z,"cacheReadTokens"),cacheWriteTokens:y2(Z,"cacheWriteTokens"),cost:qK(Z?.totalCost),totalInputTokens:y2(Q,"inputTokens"),totalOutputTokens:y2(Q,"outputTokens"),totalCacheReadTokens:y2(Q,"cacheReadTokens"),totalCacheWriteTokens:y2(Q,"cacheWriteTokens"),totalCost:qK(Q?.totalCost)},teamAgentId:typeof J?.teamAgentId==="string"?J.teamAgentId:void 0,teamRole:X}}function $c($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,J=sm(Q)?Q:Q==="failed"?"error":"completed",X=tm($?.usage??Z?.usage);return{type:"done",reason:J,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:X}}function Z8($,Z){return $.error?.message??`hub command failed: ${Z}`}function l7($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function cN($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:J0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:l7($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:l7($.status)==="completed"?0:l7($.status)==="failed"?1:void 0,status:l7($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function I2($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function Zc($){let Z=I2($?.snapshot);if(Z)return KX(Z);let Q=$?.session;return Q?cN(Q):void 0}function hN($,Z,Q){let J=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot?.trim()||Z.config.cwd?.trim();if(!J)throw Error("Hub runtime did not return a resolved workspace path.");let X=Q?.cwd?.trim()||Z.config.cwd?.trim()||J;return V1.parse({version:1,session_id:$,source:Z.source??J0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:l7(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:X,workspace_root:J,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:gN(Z)})}function vN($,Z){return V1.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class d${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new k7;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=i0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new r1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!YX($,"session.create"))return!1;let Z=await VX({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=yN($.localRuntime,Z),J=$.config.sessionId?.trim()||fN(),X=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:d4(SN($,J)),metadata:kN($),runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:d4($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(J,Z,Q.handlers);let W;try{W=await X()}catch(B){if(this.cleanupPlannedSession(J),await this.recoverLocalHubStartupDeadlock(B)){this.registerPlannedSession(J,Z,Q.handlers);try{W=await X()}catch(G){throw this.cleanupPlannedSession(J),G}}else throw B}let j=I2(W.payload?.snapshot),Y=W.payload?.session,V=(j?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(J),Error("Hub runtime did not return a session id.");let K;try{K=j?vN(j,$):hN(V,$,Y)}catch(B){throw this.cleanupPlannedSession(J),B}if(V!==J)this.cleanupPlannedSession(J),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:K,manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let J=$.start,X=J?this.resolveCapabilities(J):void 0,W=J?yN(J.localRuntime,X??{}):{manifest:[],handlers:new Map},j,Y;if(J)j=J.config.sessionId?.trim()||fN(),Y=SN(J,j);if(j&&X)this.sessionCapabilities.set(j,X);if(j&&W.handlers.size>0)this.sessionClientContributionHandlers.set(j,W.handlers),this.ensureSessionSubscription(j);let V;try{V=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.config.workspaceRoot?.trim()||J.config.cwd,cwd:J.config.cwd??$.cwd,sessionConfig:d4(Y),metadata:kN(J),runtimeOptions:{...W.manifest.length>0?{clientContributions:W.manifest}:{},...J.localRuntime?.configExtensions?{configExtensions:J.localRuntime.configExtensions}:{}},toolPolicies:d4(J.toolPolicies),...J.initialCompactionState?{initialCompactionState:J.initialCompactionState}:{}}:{}},Z)}catch(F){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw F}if(!V.ok){let F=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(F)}let K=I2(V.payload?.snapshot),B=V.payload?.session,G=(K?.sessionId??B?.sessionId)?.trim();if(Q&&!G){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(G&&j&&G!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(G&&X)this.sessionCapabilities.set(G,X);if(G&&W.handlers.size>0)this.sessionClientContributionHandlers.set(G,W.handlers);if(G)this.ensureSessionSubscription(G);let H=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,U=V.payload?.checkpoint;if(!U){if(G)this.cleanupPlannedSession(G);else if(j)this.cleanupPlannedSession(j);throw Error("Hub checkpoint restore returned no checkpoint")}try{return{sessionId:G,startResult:G?{sessionId:G,manifest:K?vN(K,J??{}):hN(G,J??{},B),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:H,checkpoint:U}}catch(F){if(G)this.cleanupPlannedSession(G);else if(j)this.cleanupPlannedSession(j);throw F}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=I2(Z.payload?.snapshot);if(Q){let j=Q.usage?{...Q.usage}:void 0,Y=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return j||Y?{usage:j,aggregateUsage:Y}:void 0}let J=Z.payload?.session,X=IN(J?.usage),W=IN(J?.aggregateUsage);return X||W?{usage:X,aggregateUsage:W}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:mN(Z)},$)}async proceedWhileRunning($,Z){let Q=await this.client.command("run.proceed_while_running",{sessionId:$,...Z?{toolCallId:Z}:{}},$);return typeof Q.payload?.detachedCount==="number"?Q.payload.detachedCount:0}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(j$(Q))return;throw Q}return Zc(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((X)=>{let W=I2(X);return W?[KX(W)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(cN)}async listSettings($){let Z=await this.client.command("settings.list",bN($));if(!Z.ok)throw Error(Z8(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",bN($));if(!Z.ok)throw Error(Z8(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let J=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!J.ok)throw Error(Z8(J,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!J.ok)NK(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(Z8(J,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:J.error?.code}});return{updated:J.ok&&J.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(Z8(Q,"session.compaction.get"));return v1(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw NK(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(Z8(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(Z8(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((J)=>{this.handleHubEvent(J)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return i0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:$c($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=I2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Q=$.payload?.noticeType,J=$.payload?.displayRole,X=$.payload?.reason,W=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,j=W?.teamRole==="lead"||W?.teamRole==="teammate"?W.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:Z,...j?{teamRole:j}:{},...typeof W?.teamAgentId==="string"?{teamAgentId:W.teamAgentId}:{},event:{type:"notice",...typeof W?.agentId==="string"?{agentId:W.agentId}:{},...typeof W?.conversationId==="string"?{conversationId:W.conversationId}:{},...typeof W?.parentAgentId==="string"?{parentAgentId:W.parentAgentId}:{},noticeType:Q==="recovery"||Q==="stop"?Q:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...J==="system"||J==="status"?{displayRole:J}:{},...typeof X==="string"?{reason:X}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.media":{let Q=$.payload?.media&&typeof $.payload.media==="object"&&!Array.isArray($.payload.media)?$.payload.media:void 0;if(!im(Q))return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"media",media:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",J=$.payload?.redacted===!0;if(!Q&&!J)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:J}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=em($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.updated":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_update",contentType:"tool",toolCallId:typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,update:$.payload?.update}}});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=I2($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});let X=J?.status??Q?.status;if(X)this.events.emit({type:"status",payload:{sessionId:Z,status:X}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=I2($.payload?.snapshot),J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:J}}),Q?.interactive===!0&&P0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{NK(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let J=typeof $.payload?.requestId==="string"?$.payload.requestId:"",X=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!J)return;let W=this.sessionClientContributionHandlers.get(Z)?.get(X);if(!W){await this.client.command("capability.respond",{requestId:J,ok:!1,error:`No client contribution handler registered for capability ${X} in session ${Z}.`},Z).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(J,Y);let V=(K)=>{this.client.command("capability.progress",{requestId:J,payload:K},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let K=await W({payload:j,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!0,payload:K},Z)}catch(K){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!1,error:K instanceof Error?K.message:String(K)},Z)}finally{this.activeCapabilityAbortControllers.delete(J)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(nm($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",X=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",W=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!J||!X||!W)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=om($.payload?.inputJson);this.pendingApprovalToolCallIds.add(X),this.emitToolCallContentStart({sessionId:Z,toolCallId:X,toolName:W,toolInput:Y});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:X,toolName:W,input:Y,policy:j})).catch((K)=>({approved:!1,reason:K instanceof Error?K.message:`Tool approval request failed: ${String(K)}`}));await this.client.command("approval.respond",{approvalId:J,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var dN={};f(dN,{RemoteRuntimeHost:()=>l4});class l4 extends d${constructor($){super({url:x2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var lN={};f(lN,{SqliteSessionStore:()=>G$});import{existsSync as Qc,mkdirSync as Jc}from"node:fs";import{join as Xc}from"node:path";import{asBool as p7,asOptionalString as K$,asString as B$,ensureSessionSchema as Wc,loadSqliteDb as jc,nowIso as BX,toBoolInt as i7}from"@cline/shared/db";import{resolveDbDataDir as Yc}from"@cline/shared/storage";class G${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Yc()}init(){this.getRawDb()}ensureSessionsDir(){if(!Qc(this.sessionsDirPath))Jc(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return Xc(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=jc(this.sessionDbPath());return Wc($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=BX();this.run(`INSERT OR REPLACE INTO sessions (
|
|
583
583
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
@@ -800,7 +800,7 @@ ${$.instructions.trim()}
|
|
|
800
800
|
max_starts_per_hour = excluded.max_starts_per_hour,
|
|
801
801
|
enabled_by_json = excluded.enabled_by_json,
|
|
802
802
|
enabled_at = excluded.enabled_at,
|
|
803
|
-
updated_at = excluded.updated_at`).run(Z,$.mode,$.applyToAgentCreated?1:0,Q,J,X,$.enabledBy?JSON.stringify($.enabledBy):null,SA($.enabledAt,"enabledAt")??null,W),this.getAutomationPolicy(Z)}}var F5={kind:"system",id:"file_reconciler"},K8={kind:"system",id:"task_manager"},yA={kind:"automation_policy",id:"global"},NZ=new Set(["completed","failed","cancelled","interrupted"]),El=30000,Ml=250;function _$(){return new Date().toISOString()}function IA($){return typeof $==="string"&&$.trim()?$.trim():void 0}function hA($){let Z=Date.parse($);if(!Number.isFinite(Z))throw Error("expiresAt must be a valid ISO-8601 timestamp");if(Z<=Date.now())throw Error("expiresAt must be in the future")}function vA($,Z){let Q=Al($,Z);return Q!==""&&!Q.startsWith("..")&&!Q.startsWith("/")}function qZ($){if(!$||!DB($))return!1;try{return Nl($).isDirectory()}catch{return!1}}function FB($,Z){return JSON.stringify({type:$.type,title:$.title,description:$.description,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot,cwd:$.cwd,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee,modelSelection:$.modelSelection,mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,availableAt:$.availableAt??Z.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible})}function LB($){return JSON.stringify({type:$.type,title:$.title,description:$.description,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot,cwd:$.cwd,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee,modelSelection:$.modelSelection,mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,availableAt:$.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible})}function Rl($,Z){return{taskId:Z.taskId,expectedRevision:Z.revision,type:$.type,title:$.title,description:$.description??null,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot??null,cwd:$.cwd??null,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee??null,modelSelection:$.modelSelection??null,mode:$.mode??null,systemPrompt:$.systemPrompt??null,maxIterations:$.maxIterations??null,timeoutSeconds:$.timeoutSeconds??null,availableAt:$.availableAt??Z.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible,updatedBy:F5}}function Cl($,Z){return{...$,type:Z.type??$.type,title:Z.title??$.title,description:Z.description===null?void 0:Z.description??$.description,instructions:Z.instructions??$.instructions,scope:Z.scope??$.scope,workspaceRoot:Z.workspaceRoot===null?void 0:Z.workspaceRoot??$.workspaceRoot,cwd:Z.cwd===null?void 0:Z.cwd??$.cwd,resourcePaths:Z.resourcePaths??$.resourcePaths,priority:Z.priority??$.priority,assignee:Z.assignee===null?void 0:Z.assignee??$.assignee,modelSelection:Z.modelSelection===null?void 0:Z.modelSelection??$.modelSelection,mode:Z.mode===null?void 0:Z.mode??$.mode,systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt??$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations??$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds??$.timeoutSeconds,availableAt:Z.availableAt??$.availableAt,expiresAt:Z.expiresAt??$.expiresAt,automationEligible:Z.automationEligible??$.automationEligible}}class AZ{runtime;store;ownsStore;globalSpecsDir;watcherDebounceMs;watchFiles;logger;publishEvent;scopes=new Map;activeRuns=new Map;backgroundRuns=new Set;maintenanceTimer;queuedAutomationScopes=new Set;automationEnabled;automationPumping=!1;automationPolicyGeneration=0;started=!1;disposed=!1;constructor($){this.runtime=$.runtime,this.ownsStore=!$.store,this.store=$.store??new OZ({dbPath:$.dbPath}),this.globalSpecsDir=$.globalSpecsDir,this.watcherDebounceMs=Math.max(0,$.watcherDebounceMs??Ml),this.watchFiles=$.watchFiles!==!1,this.automationEnabled=$.automationEnabled!==!1,this.logger=$.logger??Tl,this.publishEvent=$.publish??(()=>{})}async start(){if(this.disposed)throw Error("AgendaTaskManager disposed");if(this.started)return;this.started=!0,this.recoverInterruptedRuns(),await this.reconcileSourceForProjection("global",void 0,"startup");for(let $ of this.store.listWorkspaceRoots())if(qZ($))await this.reconcileSourceForProjection("workspace",$,"startup");this.expireTasks(),this.maintenanceTimer=setInterval(()=>{this.expireTasks(),this.queueAutomation()},El),this.maintenanceTimer.unref?.(),this.queueAutomation()}async dispose(){if(this.disposed)return;if(this.disposed=!0,this.maintenanceTimer)clearInterval(this.maintenanceTimer);for(let $ of this.scopes.values()){if($.timer)clearTimeout($.timer);$.watcher?.close()}this.scopes.clear();for(let $ of this.activeRuns.values())if($.sessionId)await this.runtime.abortSession($.sessionId,"Hub task manager stopped").catch(()=>{});await Promise.allSettled(this.backgroundRuns);for(let[$,Z]of this.activeRuns)this.store.updateRun(Z.runId,{status:"interrupted",completedAt:_$(),error:"Hub task manager stopped before the run completed."}),this.store.updateTaskState($,{status:"failed",currentRunId:null,error:"Hub task manager stopped before the run completed.",updatedBy:K8});if(this.activeRuns.clear(),this.ownsStore)this.store.close()}async createTask($){this.assertUsable(),hA($.expiresAt);let Z=D$($),Q={...$,...Z},J=IA(Q.taskId)??xA("task_");if(await this.reconcileScope(Q.scope,Q.workspaceRoot),this.store.getTask(J))throw Error(`task ${J} already exists`);let X=this.ensureScope(Q.scope,Q.workspaceRoot),W=X.resolveWritePath(J,Q.specPath);if(DB(W)||this.store.getTaskBySpecPath(W))throw Error(`task spec already exists: ${W}`);let j=this.store.createTask({...Q,taskId:J,specPath:W});try{X.writeSpec({...Q,taskId:J},{specPath:W,createOnly:!0})}catch(Y){throw this.store.deleteTask(J),Y}return this.publish("task.created",j),this.expireTask(j),this.queueAutomation(),this.requireTask(J)}async listTasks($={}){if(this.assertUsable(),!$.scope||$.scope==="global")await this.reconcileSourceForProjection("global",void 0,"list");if($.workspaceRoot){if(qZ($.workspaceRoot))await this.reconcileSourceForProjection("workspace",$.workspaceRoot,"list")}else if($.scope!=="global"){for(let Z of this.store.listWorkspaceRoots())if(qZ(Z))await this.reconcileSourceForProjection("workspace",Z,"list")}return this.expireTasks(),this.store.listTasks($)}async getTask($){this.assertUsable();let Z=this.store.getTask($.trim());if(Z?.scope==="workspace"&&qZ(Z.workspaceRoot))await this.reconcileSourceForProjection("workspace",Z.workspaceRoot,"read");else if(Z?.scope==="global")await this.reconcileSourceForProjection("global",void 0,"read");let Q=this.store.getTask($.trim());if(Q)this.expireTask(Q);return this.store.getTask($.trim())}async updateTask($){this.assertUsable();let Z=this.requireTask($.taskId);if(Z.revision!==$.expectedRevision)this.store.updateTask($);if(Z.status==="in_progress")throw Error("an in-progress task cannot be edited");if(Z.status==="completed"||Z.status==="cancelled"||Z.status==="expired")throw Error(`task ${Z.taskId} cannot be edited from ${Z.status}; create a new task instead`);let Q=Cl(Z,$);hA(Q.expiresAt);let J=D$(Q),X={...Q,...J},W={...$,scope:X.scope,workspaceRoot:X.workspaceRoot??null,cwd:X.cwd??null,resourcePaths:X.resourcePaths},j=this.ensureScope(X.scope,X.workspaceRoot),Y=Z.specPath!==void 0&&vA(j.specsDir,Z.specPath);if(!Y)await this.reconcileFileStore(j);let V=j.resolveWritePath(Z.taskId,Y?Z.specPath:void 0);if(V!==Z.specPath&&(DB(V)||this.store.getTaskBySpecPath(V)))throw Error(`task spec already exists: ${V}`);let K;if(Y&&Z.specPath){let F=j.readSpec(Z.specPath);if(!F.ok)throw Error(`task spec is invalid: ${F.error}`);if($.updatedBy.id!==F5.id&&FB(F.spec,Z)!==LB(Z))throw Error(`task spec changed outside the manager; reconcile task ${Z.taskId} and retry`);K=F.contentHash}let B,G;try{B=j.writeSpec(X,{specPath:V,expectedContentHash:K,createOnly:!Y}),G=this.store.updateTask(W)}catch(F){try{if(B&&Y&&Z.specPath)j.writeSpec(Z,{specPath:Z.specPath,expectedContentHash:B.contentHash});else if(B)j.deleteSpec(V,{expectedContentHash:B.contentHash})}catch(L){this.logError("agenda task update rollback failed",L,{taskId:Z.taskId,specPath:V})}throw F}if(!G||!B)throw Error(`unknown task: ${$.taskId}`);let H=this.store.updateTaskState(G.taskId,{status:"pending_approval",approvedRevision:null,currentRunId:null,specPath:B.specPath,error:null,completedAt:null,archivedAt:null,updatedBy:$.updatedBy},G.revision);if(Z.specPath&&Z.specPath!==B.specPath)this.fileStoreForTask(Z).deleteSpec(Z.specPath);let U=H??this.requireTask($.taskId);return this.publish("task.updated",U),this.expireTask(U),this.queueAutomation(),this.requireTask($.taskId)}async approveTask($,Z,Q){this.assertUsable();let J=await this.refreshAndVerifyTaskIntent($);if(this.assertRevision(J,Q),this.isExpired(J))throw this.expireTask(J),Error(`task ${$} has expired`);if(J.status==="approved"&&J.approvedRevision===J.revision)return J;if(J.status!=="pending_approval"&&J.status!=="failed")throw Error(`task ${$} cannot be approved from ${J.status}`);let X=this.store.updateTaskState($,{status:"approved",approvedRevision:J.revision,error:null,updatedBy:Z},J.revision);if(!X)throw Error(`unknown task: ${$}`);return this.publish("task.updated",X),this.queueAutomation(),X}async cancelTask($,Z,Q,J){this.assertUsable();let X=this.requireTask($);if(this.assertRevision(X,Q),X.status==="cancelled")return X;if(X.status==="completed"||X.status==="expired")throw Error(`task ${$} cannot be cancelled from ${X.status}`);let W=X.currentRunId?this.store.getRun(X.currentRunId):void 0,j=J?.trim()||"Agenda task cancelled";if(W&&!NZ.has(W.status))this.store.updateRun(W.runId,{status:"cancelled",completedAt:_$(),error:J?.trim()||void 0});this.activeRuns.delete($);let Y=this.store.updateTaskState($,{status:"cancelled",approvedRevision:null,currentRunId:null,error:J?.trim()||null,updatedBy:Z},X.revision);if(!Y)throw Error(`unknown task: ${$}`);if(this.publish("task.updated",Y,W),W?.sessionId)try{await this.runtime.abortSession(W.sessionId,j)}catch(V){this.logError("agenda task session abort failed",V,{taskId:$,runId:W.runId,sessionId:W.sessionId})}return Y}async runTask($,Z,Q,J){this.assertUsable();let X=await this.refreshAndVerifyTaskIntent($);if(this.assertRevision(X,Q),this.isExpired(X))throw this.expireTask(X),Error(`task ${$} has expired`);if(Date.parse(X.availableAt)>Date.now())throw Error(`task ${$} is not available yet`);if(X.status!=="approved"&&X.status!=="failed")throw Error(`task ${$} must be approved before it can run`);if(X.approvedRevision!==X.revision)throw Error(`task ${$} approval is stale`);if(this.activeRuns.has($)||X.currentRunId)throw Error(`task ${$} already has an active run`);let W=this.store.createRun({taskId:$,taskRevision:X.revision,requestedByClientId:J}),j=this.store.updateTaskState($,{currentRunId:W.runId,lastRunId:W.runId,error:null,completedAt:null,updatedBy:Z},X.revision);if(!j)throw Error(`unknown task: ${$}`);this.activeRuns.set($,{runId:W.runId}),this.publish("task.updated",j,W);try{let Y=await this.runtime.startSession(j,W,J,{unattended:Z.kind==="automation_policy"&&this.store.getAutomationPolicy(j.scope==="workspace"&&j.workspaceRoot?j.workspaceRoot:"global").mode==="unattended"}),V=this.store.getRun(W.runId),K=this.store.getTask($);if(!V||NZ.has(V.status)||K?.status!==X.status||K.currentRunId!==W.runId){if(V&&!NZ.has(V.status))this.store.updateRun(W.runId,{status:"cancelled",sessionId:Y.sessionId,completedAt:_$(),error:"Task changed or was cancelled while its session was starting."});else if(V)this.store.updateRun(W.runId,{sessionId:Y.sessionId});throw this.activeRuns.delete($),await this.runtime.abortSession(Y.sessionId,"Agenda task was cancelled while its session was starting").catch((G)=>this.logError("cancelled agenda task session abort failed",G,{taskId:$,runId:W.runId,sessionId:Y.sessionId})),Error(`task ${$} changed or was cancelled while starting`)}W=this.store.updateRun(W.runId,{status:"running",sessionId:Y.sessionId,startedAt:_$()})??W,j=this.store.updateTaskState($,{status:"in_progress",lastSessionId:Y.sessionId,updatedBy:Z})??j,this.activeRuns.set($,{runId:W.runId,sessionId:Y.sessionId}),this.publish("task.run.started",j,W);let B=this.finishRun(j,W,Y.sessionId);return this.backgroundRuns.add(B),B.finally(()=>this.backgroundRuns.delete(B)),{task:j,run:W}}catch(Y){throw await this.finishRunFailure(j,W,Y),Y}}async getAutomationPolicy($="global"){return this.assertUsable(),this.store.getAutomationPolicy($)}async setAutomationPolicy($,Z){this.assertUsable();let Q=_$(),J=this.store.setAutomationPolicy({...$,enabledBy:$.mode==="manual"?void 0:Z,enabledAt:$.mode==="manual"?void 0:Q});return this.automationPolicyGeneration+=1,this.publishEvent("task.automation.updated",{policy:J}),this.queueAutomation(J.scopeKey),J}notifyAutomationReadinessChanged(){if(!this.disposed)this.queueAutomation()}async finishRun($,Z,Q){try{let J=await this.runtime.runSession(Q,$,Z),X=this.store.getRun(Z.runId);if(!X||NZ.has(X.status))return;if(J.status==="completed"){let W=_$(),j=this.store.updateRun(Z.runId,{status:"completed",completedAt:W,resultSummary:J.summary,error:null})??X,Y=this.store.updateTaskState($.taskId,{status:"completed",currentRunId:null,error:null,completedAt:W,updatedBy:K8})??this.requireTask($.taskId);this.publish("task.run.completed",Y,j)}else if(J.status==="cancelled")await this.cancelTask($.taskId,K8,$.revision,J.error||"Task session was cancelled");else await this.finishRunFailure($,Z,Error(J.error||J.summary||"Task session failed"))}catch(J){await this.finishRunFailure($,Z,J)}finally{this.activeRuns.delete($.taskId);let J=this.store.getTask($.taskId);(J?.scope==="workspace"&&J.workspaceRoot?this.reconcileScope("workspace",J.workspaceRoot):this.reconcileScope("global")).catch((W)=>this.logError("post-run agenda task reconciliation failed",W,{taskId:$.taskId})),this.queueAutomation()}}async finishRunFailure($,Z,Q){let J=this.store.getRun(Z.runId);if(!J||NZ.has(J.status))return;let X=Q instanceof Error?Q.message:String(Q),W=this.store.updateRun(Z.runId,{status:"failed",completedAt:_$(),error:X})??J,j=this.store.getTask($.taskId);if(!j||j.status==="cancelled")return;if(j.currentRunId!==Z.runId){this.activeRuns.delete($.taskId),this.publish("task.run.failed",j,W);return}let Y=this.store.updateTaskState($.taskId,{status:"failed",currentRunId:null,error:X,updatedBy:K8})??j;this.activeRuns.delete($.taskId),this.publish("task.run.failed",Y,W)}ensureScope($,Z){let Q=IA(Z);if($==="workspace"&&!Q)throw Error("workspaceRoot is required for workspace task scope");if($==="workspace"&&!qZ(Q))throw Error("workspaceRoot must be an existing directory");let J=$==="global"?"global":`workspace:${Q}`,X=this.scopes.get(J);if(X)return X.store;let W=new DZ({scope:$,workspaceRoot:Q,taskSpecsDir:$==="global"?this.globalSpecsDir:void 0}),j={store:W},Y=!0;try{W.ensureSpecsDir();let V=this.watchFiles?this.resolveWatchRoot(W.specsDir):void 0;if(V!==void 0)j.watcher=ql(V,(K,B)=>{if(!B||!String(B).endsWith(".task.md"))return;if(j.timer)clearTimeout(j.timer);j.timer=setTimeout(()=>{j.timer=void 0,this.reconcileFileStore(W).catch((G)=>this.logError("agenda task watcher reconciliation failed",G,{specsDir:W.specsDir}))},this.watcherDebounceMs)}),j.watcher.on("error",(K)=>this.logError("agenda task watcher failed",K,{specsDir:W.specsDir}))}catch(V){Y=!1,this.logError("agenda task source could not be attached",V,{specsDir:W.specsDir})}if(Y)this.scopes.set(J,j);return W}async reconcileScope($,Z){let Q=this.ensureScope($,Z);await this.reconcileFileStore(Q)}async reconcileSourceForProjection($,Z,Q){try{await this.reconcileScope($,Z)}catch(J){this.logError(`agenda task source ${Q} reconciliation failed`,J,{scope:$,...Z?{workspaceRoot:Z}:{}})}}async reconcileFileStore($){if(this.disposed)return;let Z=new Set;for(let J of $.listSpecs()){if(Z.add(J.specPath),!J.ok){this.logger.log("agenda task spec is invalid",{severity:"warn",specPath:J.specPath,error:J.error});continue}try{let X=J.spec;if(!X.taskId)X=$.writeSpec({...X,taskId:xA("task_")},{specPath:X.specPath,expectedContentHash:X.contentHash});let W=this.store.getTaskBySpecPath(X.specPath);if(W&&X.taskId&&X.taskId!==W.taskId)this.logger.log("agenda task id is immutable for an existing spec",{severity:"warn",taskId:W.taskId,requestedTaskId:X.taskId,specPath:X.specPath}),X=$.writeSpec({...X,taskId:W.taskId},{specPath:X.specPath,expectedContentHash:X.contentHash});let j=X.taskId?this.store.getTask(X.taskId):void 0,Y=W??j;if(j?.specPath&&j.specPath!==X.specPath){this.logger.log("agenda task id is already owned by another spec",{severity:"warn",taskId:X.taskId,specPath:X.specPath});continue}if(!Y){let V=this.store.createTask(CX(X,F5));this.publish("task.created",V),this.expireTask(V);continue}if(Y.archivedAt){let V=Y.status==="cancelled"&&Y.error==="Task spec was deleted.",K=this.store.updateTaskState(Y.taskId,{status:V?"pending_approval":Y.status,approvedRevision:V?null:Y.approvedRevision,archivedAt:null,error:V?null:Y.error,updatedBy:F5});if(K)Y=K,this.publish("task.updated",K)}if(FB(X,Y)===LB(Y))continue;if(Y.status==="in_progress"){this.logger.log("agenda task edit deferred until its run completes",{severity:"warn",taskId:Y.taskId});continue}if(Y.status==="completed"||Y.status==="cancelled"||Y.status==="expired"){this.logger.log("terminal agenda task edits are not applied",{severity:"warn",taskId:Y.taskId,status:Y.status}),$.writeSpec(Y,{specPath:X.specPath,expectedContentHash:X.contentHash});continue}await this.updateTask(Rl(X,Y))}catch(X){this.logError("agenda task spec reconciliation failed",X,{specPath:J.spec.specPath})}}let Q=this.store.listTasks({scope:$.scope,workspaceRoot:$.workspaceRoot,includeArchived:!0,limit:1000});for(let J of Q){if(!J.specPath||!vA($.specsDir,J.specPath)||Z.has(J.specPath)||J.archivedAt)continue;if(J.status==="in_progress")await this.cancelTask(J.taskId,F5,J.revision,"Task spec was deleted.");let X=this.store.updateTaskState(J.taskId,{status:J.status==="completed"||J.status==="expired"?J.status:"cancelled",approvedRevision:null,currentRunId:null,error:J.status==="cancelled"?J.error??null:"Task spec was deleted.",archivedAt:_$(),updatedBy:F5});if(X)this.publish("task.deleted",X)}this.queueAutomation()}expireTasks(){for(let $ of this.store.listTasks({limit:1000}))this.expireTask($)}expireTask($){if(!this.isExpired($))return;if($.currentRunId||$.status==="in_progress"||$.status==="completed"||$.status==="cancelled"||$.status==="expired")return;let Z=this.store.updateTaskState($.taskId,{status:"expired",approvedRevision:null,currentRunId:null,error:"Task expired before it was started.",updatedBy:K8});if(Z)this.publish("task.updated",Z)}isExpired($){return Date.parse($.expiresAt)<=Date.now()}recoverInterruptedRuns(){let $=_$();for(let Z of this.store.listRuns({status:["starting","running"],limit:1000})){this.store.updateRun(Z.runId,{status:"interrupted",completedAt:$,error:"Hub restarted while this task was running."});let Q=this.store.getTask(Z.taskId);if(!Q||Q.currentRunId!==Z.runId)continue;if(Q.status==="completed"||Q.status==="cancelled"||Q.status==="expired"){this.store.updateTaskState(Q.taskId,{currentRunId:null});continue}if(Z.status==="starting"&&Q.approvedRevision===Z.taskRevision&&Q.revision===Z.taskRevision&&!this.isExpired(Q)){this.store.updateTaskState(Q.taskId,{status:"approved",currentRunId:null,error:"Hub restarted before this task session was linked.",updatedBy:K8});continue}this.store.updateTaskState(Q.taskId,{status:Z.status==="starting"?"pending_approval":"failed",approvedRevision:Z.status==="starting"?null:Q.approvedRevision,currentRunId:null,error:"Hub restarted while this task was running.",updatedBy:K8})}}queueAutomation($){if(this.disposed||!this.automationEnabled)return;if($)this.queuedAutomationScopes.add($);else for(let Z of this.store.listAutomationPolicies())this.queuedAutomationScopes.add(Z.scopeKey);if(this.automationPumping)return;queueMicrotask(()=>{this.pumpAutomation().catch((Z)=>this.logError("agenda task automation pump failed",Z,{}))})}async pumpAutomation(){if(this.disposed||this.automationPumping)return;this.automationPumping=!0;let $=this.automationPolicyGeneration;try{while(this.queuedAutomationScopes.size>0){let Z=this.queuedAutomationScopes.values().next().value;if(!Z)break;this.queuedAutomationScopes.delete(Z);let Q=this.store.getAutomationPolicy(Z);if(Q.mode==="manual")continue;this.expireTasks();let J=this.store.listRuns({limit:1000}).filter((j)=>Date.parse(j.claimedAt)>=Date.now()-3600000).length,X=Math.min(Math.max(0,Q.maxConcurrentRuns-this.activeRuns.size),Math.max(0,Q.maxStartsPerHour-J));if(X<=0)continue;let W=this.store.listTasks({statuses:["pending_approval","approved"],...Z==="global"?{}:{scope:"workspace",workspaceRoot:Z},automationEligible:!0,availableBefore:_$(),limit:1000});for(let j of W){if(X<=0)break;if($!==this.automationPolicyGeneration)return;try{let Y=j;if(Y.status==="pending_approval"){if(!this.canAutomaticallyApprove(Y,Q))continue;Y=await this.approveTask(Y.taskId,yA,Y.revision)}if($!==this.automationPolicyGeneration)return;if(Q.mode==="auto_start"&&this.runtime.isInteractiveClientAvailable?.()!==!0)continue;await this.runTask(Y.taskId,yA,Y.revision),X-=1}catch(Y){this.logError("agenda task automation start failed",Y,{taskId:j.taskId})}}}}finally{if(this.automationPumping=!1,this.queuedAutomationScopes.size>0)this.queueAutomation()}}canAutomaticallyApprove($,Z){let Q=[$.createdBy,$.updatedBy];if(Q.some((J)=>J.kind==="system"&&J.id==="file_reconciler"))return!1;if(!Z.applyToAgentCreated&&Q.some((J)=>J.kind==="agent"))return!1;return this.taskChainDepth($)<=Z.maxChainDepth}taskChainDepth($){let Z=0,Q=$,J=new Set([$.taskId]);while(Q.originTaskId){if(J.has(Q.originTaskId))return Number.POSITIVE_INFINITY;J.add(Q.originTaskId);let X=this.store.getTask(Q.originTaskId);if(!X)break;Z+=1,Q=X}return Z}fileStoreForTask($){return this.ensureScope($.scope,$.workspaceRoot)}async refreshAndVerifyTaskIntent($){let Z=this.requireTask($);await this.reconcileScope(Z.scope,Z.workspaceRoot);let Q=this.requireTask($);if(Q.archivedAt)throw Error(`task ${$} no longer has an active task spec`);if(!Q.specPath)throw Error(`task ${$} has no canonical task spec`);let J;try{J=this.fileStoreForTask(Q).readSpec(Q.specPath)}catch(X){throw Error(`task ${$} task spec is unavailable: ${X instanceof Error?X.message:String(X)}`)}if(!J.ok)throw Error(`task ${$} task spec is invalid: ${J.error}`);if(J.spec.taskId!==Q.taskId||FB(J.spec,Q)!==LB(Q))throw Error(`task ${$} task spec does not match revision ${Q.revision}`);return Q}requireTask($){let Z=$.trim();if(!Z)throw Error("taskId is required");let Q=this.store.getTask(Z);if(!Q)throw Error(`unknown task: ${Z}`);return Q}assertRevision($,Z){if($.revision!==Z)throw Error(`task ${$.taskId} is at revision ${$.revision}; the requested revision is stale`)}publish($,Z,Q){this.publishEvent($,{task:Z,...Q?{run:Q}:{}},Q?.sessionId??Z.lastSessionId)}resolveWatchRoot($){try{return Ol.native($)}catch(Z){this.logError("agenda task watcher disabled: specs dir could not be resolved",Z,{specsDir:$});return}}logError($,Z,Q){if(this.logger.error)this.logger.error($,{...Q,error:Z});else this.logger.log($,{...Q,error:Z,severity:"error"})}assertUsable(){if(this.disposed)throw Error("AgendaTaskManager disposed")}}import{createSessionId as bl}from"@cline/shared";import{createSessionId as wl}from"@cline/shared";function Pl($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function fl($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function wX($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Pl($.status),participants:Z?[...Z.participants.values()]:[],metadata:fl($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...J?{aggregateUsage:{...J}}:{}}}function h($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function m($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function c2($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function E0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function o1($,Z,Q){return{version:"v1",event:$,eventId:wl("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return wX(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function W1($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[J,X]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return V$({session:Q,messages:J,usage:X?.usage,aggregateUsage:X?.aggregateUsage})}function _B($,Z,Q,J,X={}){let W=$.sessionState.get(Z);if(W){if(X.interactive!==void 0)W.interactive=X.interactive;if(J==="creator"&&!W.createdByClientId)W.createdByClientId=Q;if(!W.participants.has(Q))W.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return W}let j={createdByClientId:Q,interactive:X.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}function mA($,Z,Q,J,X={}){let W=$.sessionState.get(Z);if(W){if(X.interactive!==void 0)W.interactive=X.interactive;if(!W.participants.has(Q))W.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return W}let j={interactive:X.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}async function bX($,Z){let Q=bl("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};let W;try{W=await $.sessionHost.getSession(J)}catch{W=void 0}let j=typeof W?.metadata?.agendaTaskId==="string"?W.metadata.agendaTaskId:void 0;return await new Promise((Y)=>{let V=$.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy,agendaTaskId:j},J);$.pendingApprovals.set(Q,{sessionId:J,resolve:Y,requestedEvent:V}),$.publish(V)})}function cA($,Z){let Q=[];for(let J of $.pendingApprovals.values()){if(!J.requestedEvent)continue;if(Z&&J.sessionId!==Z)continue;Q.push(J.requestedEvent)}return Q}function zB($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function OB($,Z,Q){let J=0;for(let[X,W]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:X,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(X),W.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:X,approved:!1,cancelled:!0,reason:Q},W.sessionId)),J+=1}return J}async function uA($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return m(Z,"approval_not_found",`Unknown approval: ${Q}`);let X=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,W=Z.payload?.approved===!0,j=zB($,Q,{approved:W,reason:X});if(!j)return m(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:W,reason:X},j.sessionId)),h(Z,{approvalId:Q,approved:W})}import{createSessionId as xl}from"@cline/shared";function Sl($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var dA={debug:10,info:20,warn:30,error:40,silent:50};function kl(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function a($,Z,Q={}){if(dA[$]<dA[kl()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([X,W])=>[X,Sl(W)]).filter(([,X])=>X!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function TZ($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);a("error",$,{error:Q})}async function lA($,Z,Q,J,X,W){let j=xl("capreq_"),Y=performance.now();return a("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:X}),await new Promise((V,K)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:X,capabilityName:Q,onProgress:W,resolve:(B)=>{if(a(B.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:X,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-Y)}),!B.ok){K(Error(B.error||`Capability ${Q} was rejected by ${X}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:X,capabilityName:Q,payload:J},Z)),a("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:X})})}function pA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return h(Z,{requestId:Q,ignored:!0});if((Z.clientId?.trim()||"")!==J.targetClientId)return m(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return m(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(W),h(Z,{requestId:Q})}function u2($,Z,Q){let J=0;for(let[X,W]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:X,...W}))continue;$.pendingCapabilityRequests.delete(X),a("warn","capability.request.cancelled",{requestId:X,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:Q}),W.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:X,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:Q},W.sessionId)),J+=1}return J}async function iA($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",X=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!X)return m(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},j=await $.requestCapability(Q,J,W,X);return h(Z,j)}catch(W){return m(Z,"capability_request_failed",W instanceof Error?W.message:String(W))}}function rA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return h(Z,{requestId:Q,ignored:!0});let X=Z.clientId?.trim()||"";if(X!==J.targetClientId)return m(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return m(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);$.pendingCapabilityRequests.delete(Q);let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return a(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:X,ok:Y,error:j}),J.resolve({ok:Y,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:X,ok:Y,payload:W,error:j},J.sessionId)),h(Z,{requestId:Q,ok:Y})}import{createSessionId as yl}from"@cline/shared";function aA($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||yl("client_");return $.clients.set(J,{clientId:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),h(Z,{clientId:J})}function nA($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return m(Z,"client_not_found","Client is not registered with this hub.");let X=c2(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),X)J.metadata=JSON.parse(JSON.stringify(X));if(Array.isArray(Z.payload?.capabilities))J.capabilities=Z.payload.capabilities.flatMap((W)=>{if(!W||typeof W!=="object"||Array.isArray(W))return[];let j=W;if(typeof j.name!=="string"||!j.name.trim())return[];return[{name:j.name.trim(),...typeof j.description==="string"?{description:j.description}:{},...Array.isArray(j.scopes)&&j.scopes.every((Y)=>typeof Y==="string")?{scopes:j.scopes}:{}}]});return h(Z)}function oA($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return h(Z)}function sA($,Z){return h(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as Il,CONNECTOR_PLATFORMS as hl,connectorChannelsFromPlatforms as vl,listConnectorCatalog as gl,mergeConnectorConnectArgs as ml,shouldIncludeConnectorField as cl}from"@cline/shared";import{withConnectorStore as NB}from"@cline/shared/db";O0();function B8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function SX($){return typeof $==="string"?$.trim():void 0}function tA($){if(!B8($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function ul(){return NB(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function qB(){return{available:vl(),active:s2(),configured:ul()}}function dl($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function ll($,Z){let Q={};for(let X of $.fields)Q[X.flag]=Z[X.flag]??X.initialValue??"";let J={};for(let X of $.fields){if(!cl(X,Q))continue;dl(X,Q),J[X.flag]=Q[X.flag]}return J}function pl($){if(!B8($))throw Error("connector.configure payload must be an object.");let Z=SX($.channel);if(!Z)throw Error("channel is required");let Q=hl.find((G)=>G.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(gl().map((G)=>G.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let X=tA($.values),W=ll(Q,X),j=B8($.security)?$.security:{},Y=j.enabled===!0,V=tA(j.values);if(Y&&Q.security)for(let G of Q.security.fields){let H=V[G.key];if(!H)throw Error(G.requiredMessage);let U=G.validate?.(H);if(U)throw Error(U)}let K=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},B=Il(Q,W,K);return NB((G)=>G.upsertConfig({channel:Z,type:Z,values:W,security:K,updateConnectArgs:(H)=>ml(Q,H.connection.connectArgs,B,{replaceSecurityArgs:H.config?.security?.enabled===!0||K.enabled})})),qB()}function il($){if(!B8($))throw Error("connector.delete_config payload must be an object.");let Z=SX($.channel);if(!Z)throw Error("channel is required");return NB((Q)=>Q.deleteConfig(Z)),qB()}function rl($){return Array.isArray($)?$.filter((Z)=>typeof Z==="string"):[]}function AB(){let $=e2();if(!$)throw Error("connector supervision is unavailable in this hub; start connectors with the CLI instead");return $}function eA($){if(!B8($))throw Error("payload must be an object.");let Z=SX($.channel);if(!Z)throw Error("channel is required");let Q=SX($.instanceId);if(!Q)throw Error("instanceId is required");return{channel:Z,instanceId:Q}}async function al($){let{channel:Z,instanceId:Q}=eA($),J=B8($)?$:{};return await AB().start({channel:Z,instanceId:Q,args:rl(J.args),restart:J.restart===!0})}async function nl($){let{channel:Z,instanceId:Q}=eA($),J=B8($)?$:{};return{stopped:await AB().stop({channel:Z,instanceId:Q,disableAutostart:J.disableAutostart!==!1}),channel:Z,instanceId:Q}}function ol($){return $==="connector.configure"||$==="connector.delete_config"||$==="connector.start"||$==="connector.stop"}function EZ($,Z,Q){if(!ol(Z.command))return;t1($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function $T($,Z){try{if(Z.command==="connector.channels")return h(Z,qB());if(Z.command==="connector.configure"){let Q=pl(Z.payload);return EZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.delete_config"){let Q=il(Z.payload);return EZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.start"){let Q=await al(Z.payload);return EZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.stop"){let Q=await nl(Z.payload);return EZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.supervised")return h(Z,{supervised:AB().list()});return m(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return EZ($,Z,!1),m(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var sl=30000;function tl($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function el($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function $p($,Z){let Q=$.activeRpcTurnCountBySession;Q.set(Z,(Q.get(Z)??0)+1);let J=!1;return()=>{if(J)return;J=!0;let X=(Q.get(Z)??1)-1;if(X<=0)Q.delete(Z);else Q.set(Z,X)}}function ZT($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return m($,r6,J)}function Zp($){return $?$:void 0}function Qp($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function Jp($,Z,Q,J){let X=performance.now(),W=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},Y=setInterval(()=>{if(W)return;let B=Math.round(performance.now()-X);a("warn","run.heartbeat",{...j,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...J?{timeoutMs:J}:{}},Q.sessionId))},sl),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!W)return;a("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-X),finishReason:B?.finishReason})},(B)=>{if(!W)return;a("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-X),error:B})});let K;try{if(!J)return await V;return await Promise.race([V,new Promise((B,G)=>{K=setTimeout(()=>{let H=`Hub run ${Z.command} timed out after ${J}ms.`;W=!0,clearInterval(Y),G(Error(H)),a("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-X)}),OB($,(U)=>U.sessionId===Q.sessionId,H),u2($,(U)=>U.sessionId===Q.sessionId,H),$.sessionHost.abort(Q.sessionId,H).catch((U)=>{a("error","run.timeout_abort_failed",{...j,error:U})})},J)})])}finally{if(W=!0,clearInterval(Y),K)clearTimeout(K)}}async function MZ($,Z){let Q=E0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},X=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!X.trim())return m(Z,"invalid_session_input","session input requires a prompt string");if(!await $.sessionHost.getSession(Q))return ZT(Z,Q);$.publish($.buildEvent("run.started",{...Z.requestId?{requestId:Z.requestId}:{},...Z.clientId?{clientId:Z.clientId}:{}},Q));let j=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,Y=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,V=Qp(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let K=$p($,Q),B;try{try{B=await Jp($,Z,{sessionId:Q,prompt:X,mode:Zp(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:Y,timeoutMs:V},V)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(j$(H))return ZT(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(B){let H=await W1($,Q),U=el(B);if($.publish($.buildEvent(tl(B.finishReason),{reason:B.finishReason,...U?{error:U}:{},result:B,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q)}finally{K()}let G=await W1($,Q);return h(Z,B||G?{...B?{result:B}:{},...G?{snapshot:G}:{}}:void 0)}async function QT($,Z){let Q=E0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";OB($,(X)=>X.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(X){a("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:X})}finally{u2($,(X)=>X.sessionId===Q,J)}return h(Z,{applied:!0})}async function JT($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","run.proceed_while_running requires a sessionId");if(typeof $.sessionHost.proceedWhileRunning!=="function")return m(Z,"unsupported_command","This runtime does not support proceeding while commands are running.");let J=typeof Z.payload?.toolCallId==="string"&&Z.payload.toolCallId.trim().length>0?Z.payload.toolCallId.trim():void 0,X=await $.sessionHost.proceedWhileRunning(Q,J);return h(Z,{detachedCount:X})}async function XT($,Z){let Q=H4(Z.payload?.payload);if(!Q)return m(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),h(Z,{applied:!0})}import{join as Xp}from"node:path";import{createSessionId as Wp}from"@cline/shared";import{loadSqliteDb as jp}from"@cline/shared/db";import{resolveDbDataDir as Yp}from"@cline/shared/storage";var Vp=32,Kp=604800000;class L5 extends Error{retryable=!0;constructor($,Z,Q){super(`Session ${$} queue is full (${Z} pending runs, limit ${Q}); retry later.`);this.name="HubRunAdmissionRejectedError"}}function TB($){let Z=$?.replace(/[^a-zA-Z0-9_-]/g,"-");return Xp(Yp(),Z?`hub-runs-${Z}.db`:"hub-runs.db")}class CZ{db;maxPendingPerSession;closed=!1;constructor($={}){this.db=jp($.dbPath??TB($.ownerId)),this.maxPendingPerSession=$.maxPendingPerSession??Vp,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
|
|
803
|
+
updated_at = excluded.updated_at`).run(Z,$.mode,$.applyToAgentCreated?1:0,Q,J,X,$.enabledBy?JSON.stringify($.enabledBy):null,SA($.enabledAt,"enabledAt")??null,W),this.getAutomationPolicy(Z)}}var F5={kind:"system",id:"file_reconciler"},K8={kind:"system",id:"task_manager"},yA={kind:"automation_policy",id:"global"},NZ=new Set(["completed","failed","cancelled","interrupted"]),El=30000,Ml=250;function _$(){return new Date().toISOString()}function IA($){return typeof $==="string"&&$.trim()?$.trim():void 0}function hA($){let Z=Date.parse($);if(!Number.isFinite(Z))throw Error("expiresAt must be a valid ISO-8601 timestamp");if(Z<=Date.now())throw Error("expiresAt must be in the future")}function vA($,Z){let Q=Al($,Z);return Q!==""&&!Q.startsWith("..")&&!Q.startsWith("/")}function qZ($){if(!$||!DB($))return!1;try{return Nl($).isDirectory()}catch{return!1}}function FB($,Z){return JSON.stringify({type:$.type,title:$.title,description:$.description,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot,cwd:$.cwd,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee,modelSelection:$.modelSelection,mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,availableAt:$.availableAt??Z.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible})}function LB($){return JSON.stringify({type:$.type,title:$.title,description:$.description,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot,cwd:$.cwd,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee,modelSelection:$.modelSelection,mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,availableAt:$.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible})}function Rl($,Z){return{taskId:Z.taskId,expectedRevision:Z.revision,type:$.type,title:$.title,description:$.description??null,instructions:$.instructions,scope:$.scope,workspaceRoot:$.workspaceRoot??null,cwd:$.cwd??null,resourcePaths:$.resourcePaths,priority:$.priority,assignee:$.assignee??null,modelSelection:$.modelSelection??null,mode:$.mode??null,systemPrompt:$.systemPrompt??null,maxIterations:$.maxIterations??null,timeoutSeconds:$.timeoutSeconds??null,availableAt:$.availableAt??Z.availableAt,expiresAt:$.expiresAt,automationEligible:$.automationEligible,updatedBy:F5}}function Cl($,Z){return{...$,type:Z.type??$.type,title:Z.title??$.title,description:Z.description===null?void 0:Z.description??$.description,instructions:Z.instructions??$.instructions,scope:Z.scope??$.scope,workspaceRoot:Z.workspaceRoot===null?void 0:Z.workspaceRoot??$.workspaceRoot,cwd:Z.cwd===null?void 0:Z.cwd??$.cwd,resourcePaths:Z.resourcePaths??$.resourcePaths,priority:Z.priority??$.priority,assignee:Z.assignee===null?void 0:Z.assignee??$.assignee,modelSelection:Z.modelSelection===null?void 0:Z.modelSelection??$.modelSelection,mode:Z.mode===null?void 0:Z.mode??$.mode,systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt??$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations??$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds??$.timeoutSeconds,availableAt:Z.availableAt??$.availableAt,expiresAt:Z.expiresAt??$.expiresAt,automationEligible:Z.automationEligible??$.automationEligible}}class AZ{runtime;store;ownsStore;globalSpecsDir;watcherDebounceMs;watchFiles;logger;publishEvent;scopes=new Map;activeRuns=new Map;backgroundRuns=new Set;maintenanceTimer;queuedAutomationScopes=new Set;automationEnabled;automationPumping=!1;automationPolicyGeneration=0;started=!1;disposed=!1;constructor($){this.runtime=$.runtime,this.ownsStore=!$.store,this.store=$.store??new OZ({dbPath:$.dbPath}),this.globalSpecsDir=$.globalSpecsDir,this.watcherDebounceMs=Math.max(0,$.watcherDebounceMs??Ml),this.watchFiles=$.watchFiles!==!1,this.automationEnabled=$.automationEnabled!==!1,this.logger=$.logger??Tl,this.publishEvent=$.publish??(()=>{})}async start(){if(this.disposed)throw Error("AgendaTaskManager disposed");if(this.started)return;this.started=!0,this.recoverInterruptedRuns(),await this.reconcileSourceForProjection("global",void 0,"startup");for(let $ of this.store.listWorkspaceRoots())if(qZ($))await this.reconcileSourceForProjection("workspace",$,"startup");this.expireTasks(),this.maintenanceTimer=setInterval(()=>{this.expireTasks(),this.queueAutomation()},El),this.maintenanceTimer.unref?.(),this.queueAutomation()}async dispose(){if(this.disposed)return;if(this.disposed=!0,this.maintenanceTimer)clearInterval(this.maintenanceTimer);for(let $ of this.scopes.values()){if($.timer)clearTimeout($.timer);$.watcher?.close()}this.scopes.clear();for(let $ of this.activeRuns.values())if($.sessionId)await this.runtime.abortSession($.sessionId,"Hub task manager stopped").catch(()=>{});await Promise.allSettled(this.backgroundRuns);for(let[$,Z]of this.activeRuns)this.store.updateRun(Z.runId,{status:"interrupted",completedAt:_$(),error:"Hub task manager stopped before the run completed."}),this.store.updateTaskState($,{status:"failed",currentRunId:null,error:"Hub task manager stopped before the run completed.",updatedBy:K8});if(this.activeRuns.clear(),this.ownsStore)this.store.close()}async createTask($){this.assertUsable(),hA($.expiresAt);let Z=D$($),Q={...$,...Z},J=IA(Q.taskId)??xA("task_");if(await this.reconcileScope(Q.scope,Q.workspaceRoot),this.store.getTask(J))throw Error(`task ${J} already exists`);let X=this.ensureScope(Q.scope,Q.workspaceRoot),W=X.resolveWritePath(J,Q.specPath);if(DB(W)||this.store.getTaskBySpecPath(W))throw Error(`task spec already exists: ${W}`);let j=this.store.createTask({...Q,taskId:J,specPath:W});try{X.writeSpec({...Q,taskId:J},{specPath:W,createOnly:!0})}catch(Y){throw this.store.deleteTask(J),Y}return this.publish("task.created",j),this.expireTask(j),this.queueAutomation(),this.requireTask(J)}async listTasks($={}){if(this.assertUsable(),!$.scope||$.scope==="global")await this.reconcileSourceForProjection("global",void 0,"list");if($.workspaceRoot){if(qZ($.workspaceRoot))await this.reconcileSourceForProjection("workspace",$.workspaceRoot,"list")}else if($.scope!=="global"){for(let Z of this.store.listWorkspaceRoots())if(qZ(Z))await this.reconcileSourceForProjection("workspace",Z,"list")}return this.expireTasks(),this.store.listTasks($)}async getTask($){this.assertUsable();let Z=this.store.getTask($.trim());if(Z?.scope==="workspace"&&qZ(Z.workspaceRoot))await this.reconcileSourceForProjection("workspace",Z.workspaceRoot,"read");else if(Z?.scope==="global")await this.reconcileSourceForProjection("global",void 0,"read");let Q=this.store.getTask($.trim());if(Q)this.expireTask(Q);return this.store.getTask($.trim())}async updateTask($){this.assertUsable();let Z=this.requireTask($.taskId);if(Z.revision!==$.expectedRevision)this.store.updateTask($);if(Z.status==="in_progress")throw Error("an in-progress task cannot be edited");if(Z.status==="completed"||Z.status==="cancelled"||Z.status==="expired")throw Error(`task ${Z.taskId} cannot be edited from ${Z.status}; create a new task instead`);let Q=Cl(Z,$);hA(Q.expiresAt);let J=D$(Q),X={...Q,...J},W={...$,scope:X.scope,workspaceRoot:X.workspaceRoot??null,cwd:X.cwd??null,resourcePaths:X.resourcePaths},j=this.ensureScope(X.scope,X.workspaceRoot),Y=Z.specPath!==void 0&&vA(j.specsDir,Z.specPath);if(!Y)await this.reconcileFileStore(j);let V=j.resolveWritePath(Z.taskId,Y?Z.specPath:void 0);if(V!==Z.specPath&&(DB(V)||this.store.getTaskBySpecPath(V)))throw Error(`task spec already exists: ${V}`);let K;if(Y&&Z.specPath){let F=j.readSpec(Z.specPath);if(!F.ok)throw Error(`task spec is invalid: ${F.error}`);if($.updatedBy.id!==F5.id&&FB(F.spec,Z)!==LB(Z))throw Error(`task spec changed outside the manager; reconcile task ${Z.taskId} and retry`);K=F.contentHash}let B,G;try{B=j.writeSpec(X,{specPath:V,expectedContentHash:K,createOnly:!Y}),G=this.store.updateTask(W)}catch(F){try{if(B&&Y&&Z.specPath)j.writeSpec(Z,{specPath:Z.specPath,expectedContentHash:B.contentHash});else if(B)j.deleteSpec(V,{expectedContentHash:B.contentHash})}catch(L){this.logError("agenda task update rollback failed",L,{taskId:Z.taskId,specPath:V})}throw F}if(!G||!B)throw Error(`unknown task: ${$.taskId}`);let H=this.store.updateTaskState(G.taskId,{status:"pending_approval",approvedRevision:null,currentRunId:null,specPath:B.specPath,error:null,completedAt:null,archivedAt:null,updatedBy:$.updatedBy},G.revision);if(Z.specPath&&Z.specPath!==B.specPath)this.fileStoreForTask(Z).deleteSpec(Z.specPath);let U=H??this.requireTask($.taskId);return this.publish("task.updated",U),this.expireTask(U),this.queueAutomation(),this.requireTask($.taskId)}async approveTask($,Z,Q){this.assertUsable();let J=await this.refreshAndVerifyTaskIntent($);if(this.assertRevision(J,Q),this.isExpired(J))throw this.expireTask(J),Error(`task ${$} has expired`);if(J.status==="approved"&&J.approvedRevision===J.revision)return J;if(J.status!=="pending_approval"&&J.status!=="failed")throw Error(`task ${$} cannot be approved from ${J.status}`);let X=this.store.updateTaskState($,{status:"approved",approvedRevision:J.revision,error:null,updatedBy:Z},J.revision);if(!X)throw Error(`unknown task: ${$}`);return this.publish("task.updated",X),this.queueAutomation(),X}async cancelTask($,Z,Q,J){this.assertUsable();let X=this.requireTask($);if(this.assertRevision(X,Q),X.status==="cancelled")return X;if(X.status==="completed"||X.status==="expired")throw Error(`task ${$} cannot be cancelled from ${X.status}`);let W=X.currentRunId?this.store.getRun(X.currentRunId):void 0,j=J?.trim()||"Agenda task cancelled";if(W&&!NZ.has(W.status))this.store.updateRun(W.runId,{status:"cancelled",completedAt:_$(),error:J?.trim()||void 0});this.activeRuns.delete($);let Y=this.store.updateTaskState($,{status:"cancelled",approvedRevision:null,currentRunId:null,error:J?.trim()||null,updatedBy:Z},X.revision);if(!Y)throw Error(`unknown task: ${$}`);if(this.publish("task.updated",Y,W),W?.sessionId)try{await this.runtime.abortSession(W.sessionId,j)}catch(V){this.logError("agenda task session abort failed",V,{taskId:$,runId:W.runId,sessionId:W.sessionId})}return Y}async runTask($,Z,Q,J){this.assertUsable();let X=await this.refreshAndVerifyTaskIntent($);if(this.assertRevision(X,Q),this.isExpired(X))throw this.expireTask(X),Error(`task ${$} has expired`);if(Date.parse(X.availableAt)>Date.now())throw Error(`task ${$} is not available yet`);if(X.status!=="approved"&&X.status!=="failed")throw Error(`task ${$} must be approved before it can run`);if(X.approvedRevision!==X.revision)throw Error(`task ${$} approval is stale`);if(this.activeRuns.has($)||X.currentRunId)throw Error(`task ${$} already has an active run`);let W=this.store.createRun({taskId:$,taskRevision:X.revision,requestedByClientId:J}),j=this.store.updateTaskState($,{currentRunId:W.runId,lastRunId:W.runId,error:null,completedAt:null,updatedBy:Z},X.revision);if(!j)throw Error(`unknown task: ${$}`);this.activeRuns.set($,{runId:W.runId}),this.publish("task.updated",j,W);try{let Y=await this.runtime.startSession(j,W,J,{unattended:Z.kind==="automation_policy"&&this.store.getAutomationPolicy(j.scope==="workspace"&&j.workspaceRoot?j.workspaceRoot:"global").mode==="unattended"}),V=this.store.getRun(W.runId),K=this.store.getTask($);if(!V||NZ.has(V.status)||K?.status!==X.status||K.currentRunId!==W.runId){if(V&&!NZ.has(V.status))this.store.updateRun(W.runId,{status:"cancelled",sessionId:Y.sessionId,completedAt:_$(),error:"Task changed or was cancelled while its session was starting."});else if(V)this.store.updateRun(W.runId,{sessionId:Y.sessionId});throw this.activeRuns.delete($),await this.runtime.abortSession(Y.sessionId,"Agenda task was cancelled while its session was starting").catch((G)=>this.logError("cancelled agenda task session abort failed",G,{taskId:$,runId:W.runId,sessionId:Y.sessionId})),Error(`task ${$} changed or was cancelled while starting`)}W=this.store.updateRun(W.runId,{status:"running",sessionId:Y.sessionId,startedAt:_$()})??W,j=this.store.updateTaskState($,{status:"in_progress",lastSessionId:Y.sessionId,updatedBy:Z})??j,this.activeRuns.set($,{runId:W.runId,sessionId:Y.sessionId}),this.publish("task.run.started",j,W);let B=this.finishRun(j,W,Y.sessionId);return this.backgroundRuns.add(B),B.finally(()=>this.backgroundRuns.delete(B)),{task:j,run:W}}catch(Y){throw await this.finishRunFailure(j,W,Y),Y}}async getAutomationPolicy($="global"){return this.assertUsable(),this.store.getAutomationPolicy($)}async setAutomationPolicy($,Z){this.assertUsable();let Q=_$(),J=this.store.setAutomationPolicy({...$,enabledBy:$.mode==="manual"?void 0:Z,enabledAt:$.mode==="manual"?void 0:Q});return this.automationPolicyGeneration+=1,this.publishEvent("task.automation.updated",{policy:J}),this.queueAutomation(J.scopeKey),J}notifyAutomationReadinessChanged(){if(!this.disposed)this.queueAutomation()}async finishRun($,Z,Q){try{let J=await this.runtime.runSession(Q,$,Z),X=this.store.getRun(Z.runId);if(!X||NZ.has(X.status))return;if(J.status==="completed"){let W=_$(),j=this.store.updateRun(Z.runId,{status:"completed",completedAt:W,resultSummary:J.summary,error:null})??X,Y=this.store.updateTaskState($.taskId,{status:"completed",currentRunId:null,error:null,completedAt:W,updatedBy:K8})??this.requireTask($.taskId);this.publish("task.run.completed",Y,j)}else if(J.status==="cancelled")await this.cancelTask($.taskId,K8,$.revision,J.error||"Task session was cancelled");else await this.finishRunFailure($,Z,Error(J.error||J.summary||"Task session failed"))}catch(J){await this.finishRunFailure($,Z,J)}finally{this.activeRuns.delete($.taskId);let J=this.store.getTask($.taskId);(J?.scope==="workspace"&&J.workspaceRoot?this.reconcileScope("workspace",J.workspaceRoot):this.reconcileScope("global")).catch((W)=>this.logError("post-run agenda task reconciliation failed",W,{taskId:$.taskId})),this.queueAutomation()}}async finishRunFailure($,Z,Q){let J=this.store.getRun(Z.runId);if(!J||NZ.has(J.status))return;let X=Q instanceof Error?Q.message:String(Q),W=this.store.updateRun(Z.runId,{status:"failed",completedAt:_$(),error:X})??J,j=this.store.getTask($.taskId);if(!j||j.status==="cancelled")return;if(j.currentRunId!==Z.runId){this.activeRuns.delete($.taskId),this.publish("task.run.failed",j,W);return}let Y=this.store.updateTaskState($.taskId,{status:"failed",currentRunId:null,error:X,updatedBy:K8})??j;this.activeRuns.delete($.taskId),this.publish("task.run.failed",Y,W)}ensureScope($,Z){let Q=IA(Z);if($==="workspace"&&!Q)throw Error("workspaceRoot is required for workspace task scope");if($==="workspace"&&!qZ(Q))throw Error("workspaceRoot must be an existing directory");let J=$==="global"?"global":`workspace:${Q}`,X=this.scopes.get(J);if(X)return X.store;let W=new DZ({scope:$,workspaceRoot:Q,taskSpecsDir:$==="global"?this.globalSpecsDir:void 0}),j={store:W},Y=!0;try{W.ensureSpecsDir();let V=this.watchFiles?this.resolveWatchRoot(W.specsDir):void 0;if(V!==void 0)j.watcher=ql(V,(K,B)=>{if(!B||!String(B).endsWith(".task.md"))return;if(j.timer)clearTimeout(j.timer);j.timer=setTimeout(()=>{j.timer=void 0,this.reconcileFileStore(W).catch((G)=>this.logError("agenda task watcher reconciliation failed",G,{specsDir:W.specsDir}))},this.watcherDebounceMs)}),j.watcher.on("error",(K)=>this.logError("agenda task watcher failed",K,{specsDir:W.specsDir}))}catch(V){Y=!1,this.logError("agenda task source could not be attached",V,{specsDir:W.specsDir})}if(Y)this.scopes.set(J,j);return W}async reconcileScope($,Z){let Q=this.ensureScope($,Z);await this.reconcileFileStore(Q)}async reconcileSourceForProjection($,Z,Q){try{await this.reconcileScope($,Z)}catch(J){this.logError(`agenda task source ${Q} reconciliation failed`,J,{scope:$,...Z?{workspaceRoot:Z}:{}})}}async reconcileFileStore($){if(this.disposed)return;let Z=new Set;for(let J of $.listSpecs()){if(Z.add(J.specPath),!J.ok){this.logger.log("agenda task spec is invalid",{severity:"warn",specPath:J.specPath,error:J.error});continue}try{let X=J.spec;if(!X.taskId)X=$.writeSpec({...X,taskId:xA("task_")},{specPath:X.specPath,expectedContentHash:X.contentHash});let W=this.store.getTaskBySpecPath(X.specPath);if(W&&X.taskId&&X.taskId!==W.taskId)this.logger.log("agenda task id is immutable for an existing spec",{severity:"warn",taskId:W.taskId,requestedTaskId:X.taskId,specPath:X.specPath}),X=$.writeSpec({...X,taskId:W.taskId},{specPath:X.specPath,expectedContentHash:X.contentHash});let j=X.taskId?this.store.getTask(X.taskId):void 0,Y=W??j;if(j?.specPath&&j.specPath!==X.specPath){this.logger.log("agenda task id is already owned by another spec",{severity:"warn",taskId:X.taskId,specPath:X.specPath});continue}if(!Y){let V=this.store.createTask(CX(X,F5));this.publish("task.created",V),this.expireTask(V);continue}if(Y.archivedAt){let V=Y.status==="cancelled"&&Y.error==="Task spec was deleted.",K=this.store.updateTaskState(Y.taskId,{status:V?"pending_approval":Y.status,approvedRevision:V?null:Y.approvedRevision,archivedAt:null,error:V?null:Y.error,updatedBy:F5});if(K)Y=K,this.publish("task.updated",K)}if(FB(X,Y)===LB(Y))continue;if(Y.status==="in_progress"){this.logger.log("agenda task edit deferred until its run completes",{severity:"warn",taskId:Y.taskId});continue}if(Y.status==="completed"||Y.status==="cancelled"||Y.status==="expired"){this.logger.log("terminal agenda task edits are not applied",{severity:"warn",taskId:Y.taskId,status:Y.status}),$.writeSpec(Y,{specPath:X.specPath,expectedContentHash:X.contentHash});continue}await this.updateTask(Rl(X,Y))}catch(X){this.logError("agenda task spec reconciliation failed",X,{specPath:J.spec.specPath})}}let Q=this.store.listTasks({scope:$.scope,workspaceRoot:$.workspaceRoot,includeArchived:!0,limit:1000});for(let J of Q){if(!J.specPath||!vA($.specsDir,J.specPath)||Z.has(J.specPath)||J.archivedAt)continue;if(J.status==="in_progress")await this.cancelTask(J.taskId,F5,J.revision,"Task spec was deleted.");let X=this.store.updateTaskState(J.taskId,{status:J.status==="completed"||J.status==="expired"?J.status:"cancelled",approvedRevision:null,currentRunId:null,error:J.status==="cancelled"?J.error??null:"Task spec was deleted.",archivedAt:_$(),updatedBy:F5});if(X)this.publish("task.deleted",X)}this.queueAutomation()}expireTasks(){for(let $ of this.store.listTasks({limit:1000}))this.expireTask($)}expireTask($){if(!this.isExpired($))return;if($.currentRunId||$.status==="in_progress"||$.status==="completed"||$.status==="cancelled"||$.status==="expired")return;let Z=this.store.updateTaskState($.taskId,{status:"expired",approvedRevision:null,currentRunId:null,error:"Task expired before it was started.",updatedBy:K8});if(Z)this.publish("task.updated",Z)}isExpired($){return Date.parse($.expiresAt)<=Date.now()}recoverInterruptedRuns(){let $=_$();for(let Z of this.store.listRuns({status:["starting","running"],limit:1000})){this.store.updateRun(Z.runId,{status:"interrupted",completedAt:$,error:"Hub restarted while this task was running."});let Q=this.store.getTask(Z.taskId);if(!Q||Q.currentRunId!==Z.runId)continue;if(Q.status==="completed"||Q.status==="cancelled"||Q.status==="expired"){this.store.updateTaskState(Q.taskId,{currentRunId:null});continue}if(Z.status==="starting"&&Q.approvedRevision===Z.taskRevision&&Q.revision===Z.taskRevision&&!this.isExpired(Q)){this.store.updateTaskState(Q.taskId,{status:"approved",currentRunId:null,error:"Hub restarted before this task session was linked.",updatedBy:K8});continue}this.store.updateTaskState(Q.taskId,{status:Z.status==="starting"?"pending_approval":"failed",approvedRevision:Z.status==="starting"?null:Q.approvedRevision,currentRunId:null,error:"Hub restarted while this task was running.",updatedBy:K8})}}queueAutomation($){if(this.disposed||!this.automationEnabled)return;if($)this.queuedAutomationScopes.add($);else for(let Z of this.store.listAutomationPolicies())this.queuedAutomationScopes.add(Z.scopeKey);if(this.automationPumping)return;queueMicrotask(()=>{this.pumpAutomation().catch((Z)=>this.logError("agenda task automation pump failed",Z,{}))})}async pumpAutomation(){if(this.disposed||this.automationPumping)return;this.automationPumping=!0;let $=this.automationPolicyGeneration;try{while(this.queuedAutomationScopes.size>0){let Z=this.queuedAutomationScopes.values().next().value;if(!Z)break;this.queuedAutomationScopes.delete(Z);let Q=this.store.getAutomationPolicy(Z);if(Q.mode==="manual")continue;this.expireTasks();let J=this.store.listRuns({limit:1000}).filter((j)=>Date.parse(j.claimedAt)>=Date.now()-3600000).length,X=Math.min(Math.max(0,Q.maxConcurrentRuns-this.activeRuns.size),Math.max(0,Q.maxStartsPerHour-J));if(X<=0)continue;let W=this.store.listTasks({statuses:["pending_approval","approved"],...Z==="global"?{}:{scope:"workspace",workspaceRoot:Z},automationEligible:!0,availableBefore:_$(),limit:1000});for(let j of W){if(X<=0)break;if($!==this.automationPolicyGeneration)return;try{let Y=j;if(Y.status==="pending_approval"){if(!this.canAutomaticallyApprove(Y,Q))continue;Y=await this.approveTask(Y.taskId,yA,Y.revision)}if($!==this.automationPolicyGeneration)return;if(Q.mode==="auto_start"&&this.runtime.isInteractiveClientAvailable?.()!==!0)continue;await this.runTask(Y.taskId,yA,Y.revision),X-=1}catch(Y){this.logError("agenda task automation start failed",Y,{taskId:j.taskId})}}}}finally{if(this.automationPumping=!1,this.queuedAutomationScopes.size>0)this.queueAutomation()}}canAutomaticallyApprove($,Z){let Q=[$.createdBy,$.updatedBy];if(Q.some((J)=>J.kind==="system"&&J.id==="file_reconciler"))return!1;if(!Z.applyToAgentCreated&&Q.some((J)=>J.kind==="agent"))return!1;return this.taskChainDepth($)<=Z.maxChainDepth}taskChainDepth($){let Z=0,Q=$,J=new Set([$.taskId]);while(Q.originTaskId){if(J.has(Q.originTaskId))return Number.POSITIVE_INFINITY;J.add(Q.originTaskId);let X=this.store.getTask(Q.originTaskId);if(!X)break;Z+=1,Q=X}return Z}fileStoreForTask($){return this.ensureScope($.scope,$.workspaceRoot)}async refreshAndVerifyTaskIntent($){let Z=this.requireTask($);await this.reconcileScope(Z.scope,Z.workspaceRoot);let Q=this.requireTask($);if(Q.archivedAt)throw Error(`task ${$} no longer has an active task spec`);if(!Q.specPath)throw Error(`task ${$} has no canonical task spec`);let J;try{J=this.fileStoreForTask(Q).readSpec(Q.specPath)}catch(X){throw Error(`task ${$} task spec is unavailable: ${X instanceof Error?X.message:String(X)}`)}if(!J.ok)throw Error(`task ${$} task spec is invalid: ${J.error}`);if(J.spec.taskId!==Q.taskId||FB(J.spec,Q)!==LB(Q))throw Error(`task ${$} task spec does not match revision ${Q.revision}`);return Q}requireTask($){let Z=$.trim();if(!Z)throw Error("taskId is required");let Q=this.store.getTask(Z);if(!Q)throw Error(`unknown task: ${Z}`);return Q}assertRevision($,Z){if($.revision!==Z)throw Error(`task ${$.taskId} is at revision ${$.revision}; the requested revision is stale`)}publish($,Z,Q){this.publishEvent($,{task:Z,...Q?{run:Q}:{}},Q?.sessionId??Z.lastSessionId)}resolveWatchRoot($){try{return Ol.native($)}catch(Z){this.logError("agenda task watcher disabled: specs dir could not be resolved",Z,{specsDir:$});return}}logError($,Z,Q){if(this.logger.error)this.logger.error($,{...Q,error:Z});else this.logger.log($,{...Q,error:Z,severity:"error"})}assertUsable(){if(this.disposed)throw Error("AgendaTaskManager disposed")}}import{createSessionId as bl}from"@cline/shared";import{createSessionId as wl}from"@cline/shared";function Pl($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function fl($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function wX($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Pl($.status),participants:Z?[...Z.participants.values()]:[],metadata:fl($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...J?{aggregateUsage:{...J}}:{}}}function h($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function m($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function c2($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function E0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function o1($,Z,Q){return{version:"v1",event:$,eventId:wl("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return wX(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function W1($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return V$({session:Q,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function _B($,Z,Q,J,X={}){let W=$.sessionState.get(Z);if(W){if(X.interactive!==void 0)W.interactive=X.interactive;if(J==="creator"&&!W.createdByClientId)W.createdByClientId=Q;if(!W.participants.has(Q))W.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return W}let j={createdByClientId:Q,interactive:X.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}function mA($,Z,Q,J,X={}){let W=$.sessionState.get(Z);if(W){if(X.interactive!==void 0)W.interactive=X.interactive;if(!W.participants.has(Q))W.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return W}let j={interactive:X.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}async function bX($,Z){let Q=bl("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};let W;try{W=await $.sessionHost.getSession(J)}catch{W=void 0}let j=typeof W?.metadata?.agendaTaskId==="string"?W.metadata.agendaTaskId:void 0;return await new Promise((Y)=>{let V=$.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy,agendaTaskId:j},J);$.pendingApprovals.set(Q,{sessionId:J,resolve:Y,requestedEvent:V}),$.publish(V)})}function cA($,Z){let Q=[];for(let J of $.pendingApprovals.values()){if(!J.requestedEvent)continue;if(Z&&J.sessionId!==Z)continue;Q.push(J.requestedEvent)}return Q}function zB($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function OB($,Z,Q){let J=0;for(let[X,W]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:X,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(X),W.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:X,approved:!1,cancelled:!0,reason:Q},W.sessionId)),J+=1}return J}async function uA($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return m(Z,"approval_not_found",`Unknown approval: ${Q}`);let X=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,W=Z.payload?.approved===!0,j=zB($,Q,{approved:W,reason:X});if(!j)return m(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:W,reason:X},j.sessionId)),h(Z,{approvalId:Q,approved:W})}import{createSessionId as xl}from"@cline/shared";function Sl($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var dA={debug:10,info:20,warn:30,error:40,silent:50};function kl(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function a($,Z,Q={}){if(dA[$]<dA[kl()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([X,W])=>[X,Sl(W)]).filter(([,X])=>X!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function TZ($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);a("error",$,{error:Q})}async function lA($,Z,Q,J,X,W){let j=xl("capreq_"),Y=performance.now();return a("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:X}),await new Promise((V,K)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:X,capabilityName:Q,onProgress:W,resolve:(B)=>{if(a(B.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:X,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-Y)}),!B.ok){K(Error(B.error||`Capability ${Q} was rejected by ${X}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:X,capabilityName:Q,payload:J},Z)),a("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:X})})}function pA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return h(Z,{requestId:Q,ignored:!0});if((Z.clientId?.trim()||"")!==J.targetClientId)return m(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return m(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(W),h(Z,{requestId:Q})}function u2($,Z,Q){let J=0;for(let[X,W]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:X,...W}))continue;$.pendingCapabilityRequests.delete(X),a("warn","capability.request.cancelled",{requestId:X,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:Q}),W.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:X,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:Q},W.sessionId)),J+=1}return J}async function iA($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",X=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!X)return m(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},j=await $.requestCapability(Q,J,W,X);return h(Z,j)}catch(W){return m(Z,"capability_request_failed",W instanceof Error?W.message:String(W))}}function rA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return h(Z,{requestId:Q,ignored:!0});let X=Z.clientId?.trim()||"";if(X!==J.targetClientId)return m(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return m(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);$.pendingCapabilityRequests.delete(Q);let W=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return a(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:X,ok:Y,error:j}),J.resolve({ok:Y,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:X,ok:Y,payload:W,error:j},J.sessionId)),h(Z,{requestId:Q,ok:Y})}import{createSessionId as yl}from"@cline/shared";function aA($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||yl("client_");return $.clients.set(J,{clientId:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),h(Z,{clientId:J})}function nA($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return m(Z,"client_not_found","Client is not registered with this hub.");let X=c2(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),X)J.metadata=JSON.parse(JSON.stringify(X));if(Array.isArray(Z.payload?.capabilities))J.capabilities=Z.payload.capabilities.flatMap((W)=>{if(!W||typeof W!=="object"||Array.isArray(W))return[];let j=W;if(typeof j.name!=="string"||!j.name.trim())return[];return[{name:j.name.trim(),...typeof j.description==="string"?{description:j.description}:{},...Array.isArray(j.scopes)&&j.scopes.every((Y)=>typeof Y==="string")?{scopes:j.scopes}:{}}]});return h(Z)}function oA($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return h(Z)}function sA($,Z){return h(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as Il,CONNECTOR_PLATFORMS as hl,connectorChannelsFromPlatforms as vl,listConnectorCatalog as gl,mergeConnectorConnectArgs as ml,shouldIncludeConnectorField as cl}from"@cline/shared";import{withConnectorStore as NB}from"@cline/shared/db";O0();function B8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function SX($){return typeof $==="string"?$.trim():void 0}function tA($){if(!B8($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function ul(){return NB(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function qB(){return{available:vl(),active:s2(),configured:ul()}}function dl($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function ll($,Z){let Q={};for(let X of $.fields)Q[X.flag]=Z[X.flag]??X.initialValue??"";let J={};for(let X of $.fields){if(!cl(X,Q))continue;dl(X,Q),J[X.flag]=Q[X.flag]}return J}function pl($){if(!B8($))throw Error("connector.configure payload must be an object.");let Z=SX($.channel);if(!Z)throw Error("channel is required");let Q=hl.find((G)=>G.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(gl().map((G)=>G.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let X=tA($.values),W=ll(Q,X),j=B8($.security)?$.security:{},Y=j.enabled===!0,V=tA(j.values);if(Y&&Q.security)for(let G of Q.security.fields){let H=V[G.key];if(!H)throw Error(G.requiredMessage);let U=G.validate?.(H);if(U)throw Error(U)}let K=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},B=Il(Q,W,K);return NB((G)=>G.upsertConfig({channel:Z,type:Z,values:W,security:K,updateConnectArgs:(H)=>ml(Q,H.connection.connectArgs,B,{replaceSecurityArgs:H.config?.security?.enabled===!0||K.enabled})})),qB()}function il($){if(!B8($))throw Error("connector.delete_config payload must be an object.");let Z=SX($.channel);if(!Z)throw Error("channel is required");return NB((Q)=>Q.deleteConfig(Z)),qB()}function rl($){return Array.isArray($)?$.filter((Z)=>typeof Z==="string"):[]}function AB(){let $=e2();if(!$)throw Error("connector supervision is unavailable in this hub; start connectors with the CLI instead");return $}function eA($){if(!B8($))throw Error("payload must be an object.");let Z=SX($.channel);if(!Z)throw Error("channel is required");let Q=SX($.instanceId);if(!Q)throw Error("instanceId is required");return{channel:Z,instanceId:Q}}async function al($){let{channel:Z,instanceId:Q}=eA($),J=B8($)?$:{};return await AB().start({channel:Z,instanceId:Q,args:rl(J.args),restart:J.restart===!0})}async function nl($){let{channel:Z,instanceId:Q}=eA($),J=B8($)?$:{};return{stopped:await AB().stop({channel:Z,instanceId:Q,disableAutostart:J.disableAutostart!==!1}),channel:Z,instanceId:Q}}function ol($){return $==="connector.configure"||$==="connector.delete_config"||$==="connector.start"||$==="connector.stop"}function EZ($,Z,Q){if(!ol(Z.command))return;t1($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function $T($,Z){try{if(Z.command==="connector.channels")return h(Z,qB());if(Z.command==="connector.configure"){let Q=pl(Z.payload);return EZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.delete_config"){let Q=il(Z.payload);return EZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.start"){let Q=await al(Z.payload);return EZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.stop"){let Q=await nl(Z.payload);return EZ($,Z,!0),h(Z,Q)}if(Z.command==="connector.supervised")return h(Z,{supervised:AB().list()});return m(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return EZ($,Z,!1),m(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var sl=30000;function tl($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function el($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function $p($,Z){let Q=$.activeRpcTurnCountBySession;Q.set(Z,(Q.get(Z)??0)+1);let J=!1;return()=>{if(J)return;J=!0;let X=(Q.get(Z)??1)-1;if(X<=0)Q.delete(Z);else Q.set(Z,X)}}function ZT($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return m($,r6,J)}function Zp($){return $?$:void 0}function Qp($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function Jp($,Z,Q,J){let X=performance.now(),W=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},Y=setInterval(()=>{if(W)return;let B=Math.round(performance.now()-X);a("warn","run.heartbeat",{...j,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...J?{timeoutMs:J}:{}},Q.sessionId))},sl),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!W)return;a("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-X),finishReason:B?.finishReason})},(B)=>{if(!W)return;a("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-X),error:B})});let K;try{if(!J)return await V;return await Promise.race([V,new Promise((B,G)=>{K=setTimeout(()=>{let H=`Hub run ${Z.command} timed out after ${J}ms.`;W=!0,clearInterval(Y),G(Error(H)),a("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-X)}),OB($,(U)=>U.sessionId===Q.sessionId,H),u2($,(U)=>U.sessionId===Q.sessionId,H),$.sessionHost.abort(Q.sessionId,H).catch((U)=>{a("error","run.timeout_abort_failed",{...j,error:U})})},J)})])}finally{if(W=!0,clearInterval(Y),K)clearTimeout(K)}}async function MZ($,Z){let Q=E0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},X=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!X.trim())return m(Z,"invalid_session_input","session input requires a prompt string");if(!await $.sessionHost.getSession(Q))return ZT(Z,Q);$.publish($.buildEvent("run.started",{...Z.requestId?{requestId:Z.requestId}:{},...Z.clientId?{clientId:Z.clientId}:{}},Q));let j=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,Y=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,V=Qp(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let K=$p($,Q),B;try{try{B=await Jp($,Z,{sessionId:Q,prompt:X,mode:Zp(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:Y,timeoutMs:V},V)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(j$(H))return ZT(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(B){let H=await W1($,Q),U=el(B);if($.publish($.buildEvent(tl(B.finishReason),{reason:B.finishReason,...U?{error:U}:{},result:B,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q)}finally{K()}let G=await W1($,Q);return h(Z,B||G?{...B?{result:B}:{},...G?{snapshot:G}:{}}:void 0)}async function QT($,Z){let Q=E0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";OB($,(X)=>X.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(X){a("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:X})}finally{u2($,(X)=>X.sessionId===Q,J)}return h(Z,{applied:!0})}async function JT($,Z){let Q=E0(Z);if(!Q)return m(Z,"invalid_session_id","run.proceed_while_running requires a sessionId");if(typeof $.sessionHost.proceedWhileRunning!=="function")return m(Z,"unsupported_command","This runtime does not support proceeding while commands are running.");let J=typeof Z.payload?.toolCallId==="string"&&Z.payload.toolCallId.trim().length>0?Z.payload.toolCallId.trim():void 0,X=await $.sessionHost.proceedWhileRunning(Q,J);return h(Z,{detachedCount:X})}async function XT($,Z){let Q=H4(Z.payload?.payload);if(!Q)return m(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),h(Z,{applied:!0})}import{join as Xp}from"node:path";import{createSessionId as Wp}from"@cline/shared";import{loadSqliteDb as jp}from"@cline/shared/db";import{resolveDbDataDir as Yp}from"@cline/shared/storage";var Vp=32,Kp=604800000;class L5 extends Error{retryable=!0;constructor($,Z,Q){super(`Session ${$} queue is full (${Z} pending runs, limit ${Q}); retry later.`);this.name="HubRunAdmissionRejectedError"}}function TB($){let Z=$?.replace(/[^a-zA-Z0-9_-]/g,"-");return Xp(Yp(),Z?`hub-runs-${Z}.db`:"hub-runs.db")}class CZ{db;maxPendingPerSession;closed=!1;constructor($={}){this.db=jp($.dbPath??TB($.ownerId)),this.maxPendingPerSession=$.maxPendingPerSession??Vp,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
|
|
804
804
|
CREATE TABLE IF NOT EXISTS hub_runs (
|
|
805
805
|
accepted_seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
806
806
|
run_id TEXT NOT NULL UNIQUE,
|
|
@@ -1035,7 +1035,7 @@ ${V}`:""}`);let K=Ba($);if(QW($))throw Error(`Skill uninstall completed, but ${$
|
|
|
1035
1035
|
`,"utf8"),Oo(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Do(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
|
|
1036
1036
|
`,"utf8")}ensureDir(){if(!nG(this.dirPath))_o(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(nG(this.statePath))No(this.statePath)}}var HM={};f(HM,{ChatViewStateSchema:()=>sG,ChatSummarySchema:()=>kW,ChatSessionStatusSchema:()=>fW,ChatSessionConfigSchema:()=>PW,ChatMessageSchema:()=>SW,ChatMessageRoleSchema:()=>wW,ChatMessageImageSchema:()=>bW});import{z as c}from"zod";var PW=c.object({workspaceRoot:c.string().min(1),cwd:c.string().optional(),provider:c.string().min(1),model:c.string().min(1),mode:c.enum(["act","plan"]).default("act"),apiKey:c.string(),systemPrompt:c.string().optional(),rules:c.string().optional(),maxIterations:c.number().int().positive().optional(),enableTools:c.boolean(),enableSpawn:c.boolean().optional(),enableTeams:c.boolean().optional(),autoApproveTools:c.boolean().optional(),missionStepInterval:c.number().int().positive().optional(),missionTimeIntervalMs:c.number().int().positive().optional()}),fW=c.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),wW=c.enum(["user","assistant","tool","system","status","error"]),bW=c.object({id:c.string().min(1),mediaType:c.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:c.string().min(1)}),SW=c.object({id:c.string().min(1),sessionId:c.string().nullable(),role:wW,content:c.string(),images:c.array(bW).optional(),createdAt:c.number().int().nonnegative(),meta:c.object({stream:c.enum(["stdout","stderr"]).optional(),toolName:c.string().optional(),iteration:c.number().int().nonnegative().optional(),agentId:c.string().optional(),conversationId:c.string().optional(),hookEventName:c.string().optional(),inputTokens:c.number().int().nonnegative().optional(),outputTokens:c.number().int().nonnegative().optional(),checkpoint:c.object({ref:c.string(),createdAt:c.number().int().nonnegative(),runCount:c.number().int().positive(),kind:c.enum(["stash","commit"]).optional()}).optional()}).optional()}),kW=c.object({toolCalls:c.number().int().nonnegative(),tokensIn:c.number().int().nonnegative(),tokensOut:c.number().int().nonnegative()}),sG=c.object({sessionId:c.string().nullable(),status:fW,config:PW,messages:c.array(SW),rawTranscript:c.string(),error:c.string().nullable(),summary:kW});var UM={};f(UM,{CORE_BUILD_VERSION:()=>W3});var W3=H2;import{Agent as qs,createAgentRuntime as As}from"@cline/agents";var FM={};f(FM,{loadLlmsConfigFromFile:()=>eG,defineLlmsConfig:()=>tG});import{readFile as Eo}from"node:fs/promises";import Mo from"node:path";function tG($){return $}async function eG($){let Z=Mo.resolve($),Q=await Eo(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(X){let W=X instanceof Error?X.message:String(X);throw Error(`Failed to parse JSON config at "${Z}": ${W}`)}return Ro(J,Z)}function Ro($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let J=$.providers;if(!Array.isArray(J))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!J.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var NM={};f(NM,{createLlmsSdk:()=>ZH,DefaultLlmsSdk:()=>j3});import{BUILT_IN_PROVIDER_IDS as _M,createHandler as fo,createHandlerAsync as wo,getProviderCollection as bo,hasProvider as zM,registerAsyncHandler as So,registerHandler as ko,registerModel as xo,registerProvider as OM}from"@cline/llms";function LM($){return $?{...$}:{}}function Co($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function Po($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function DM($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class $H{providers=new Map;register($){Po($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...LM($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Co($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...LM($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class j3{configuredProviders=new $H;constructor($){this.applyConfig($)}createHandler($){return fo(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return wo(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(OM($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)ko($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)So($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);OM({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){xo($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[..._M]}async getBuiltInProviders(){return(await Promise.all(_M.map((Z)=>bo(Z)))).filter((Z)=>Z!==void 0).map((Z)=>DM({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=zM(Z.id),J=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,X=typeof J==="string"&&zM(J);if(!Q&&!X)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function ZH($){return new j3($)}oK();async function yo(){return Promise.resolve().then(() => (dX(),eT))}function fs(){return new Date().toISOString()}var ws="cline",bs="cline-pass";function Ss($){if(EM($)!=="providers.json")return;let Z=JH($);if(EM(Z)!=="settings")return;return JH(Z)}class b1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Ps(),this.dataDir=$.dataDir??Ss(this.filePath),this.dataDir||!$.filePath)X3({providerSettingsManager:this,dataDir:this.dataDir});if(sZ(this),oZ(this.read()),QH(this.filePath))try{TM(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!QH(this.filePath))return E2();try{let $=Es(this.filePath,"utf8"),Z=JSON.parse($),Q=z4.safeParse(Z);if(Q.success){oZ(Q.data);let J=Q.data.providers.cline?.settings?.auth;return W0(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!J?.accessToken} clineAccessTokenHash=${u0(J?.accessToken)} clineRefreshTokenHash=${u0(J?.refreshToken)}`),Q.data}}catch{}return E2()}write($){let Z=z4.parse($),Q=JH(this.filePath);if(!QH(Q))Ts(Q,{recursive:!0,mode:448});let J=`${this.filePath}.${process.pid}.tmp`;try{Cs(J,`${JSON.stringify(Z,null,2)}
|
|
1037
1037
|
`,{encoding:"utf8",mode:384}),Ms(J,this.filePath)}catch(X){throw Rs(J,{force:!0}),X}try{TM(this.filePath,384)}catch{}oZ(Z)}saveProviderSettings($,Z={}){let Q=_4.parse($),J=this.read(),X=Q.provider,W=Z.setLastUsed!==!1,j=J.providers[X],Y=Z.tokenSource??j?.tokenSource??"manual",V={...J,providers:{...J.providers,[X]:{settings:Q,updatedAt:fs(),tokenSource:Y}},lastUsedProvider:W?X:J.lastUsedProvider};this.write(V);let K=J.providers.cline?.settings?.auth,B=Q.provider==="cline"?Q.auth:V.providers.cline?.settings?.auth,G=!!K?.accessToken&&!B?.accessToken;return W0(`providers.save providerId=${X} tokenSource=${Y} clineAuthWasPresent=${!!K?.accessToken} clineAuthIsPresent=${!!B?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,X=R0(Z)?.storageProviderId;if(!X||X===Z)return Q;let W=$.providers[X]?.settings;if(!W)return Q;return _4.parse({...W.auth?{auth:W.auth}:{},...W.apiKey?{apiKey:W.apiKey}:{},...W.baseUrl?{baseUrl:W.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}getVoiceInputSettings(){return this.read().modes.voiceInput}setVoiceInputSettings($){let Z=this.read();if($)Z.modes.voiceInput=OJ.parse($);else delete Z.modes.voiceInput;return this.write(Z),Z}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===bs&&Z.isClinePassEnabled===!1)return ws;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return N1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return N1(Z,$)}async refreshCatalog(){try{await A2({})}catch{}}}O0();Q8();import{normalizeUserInput as ks}from"@cline/shared";import{nanoid as xs}from"nanoid";class MM{list($){return $?x1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((V)=>V.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:x1($),updated:!1};let X=$.pendingPrompts[J];if(!X)return{sessionId:Z.sessionId,prompts:x1($),updated:!1};let W=Z.prompt===void 0?X.prompt:ks(Z.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=Z.delivery??X.delivery,Y={...X,prompt:W,mode:Z.mode??X.mode,delivery:j};return $.pendingPrompts.splice(J,1),Is($,Y,J,X.delivery),{sessionId:Z.sessionId,prompts:x1($),prompt:xW(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((W)=>W.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:x1($),removed:!1};let[X]=$.pendingPrompts.splice(J,1);return{sessionId:Z.sessionId,prompts:x1($),prompt:X?xW(X):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:J,delivery:X,userImages:W,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),K={...V,prompt:Q,mode:J??V.mode,userImages:W??V.userImages,userFiles:j??V.userFiles};if(X==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...K,delivery:"steer"});else $.pendingPrompts.push(K)}else{let V={id:`pending_${Date.now()}_${xs(5)}`,prompt:Q,mode:J,delivery:X,userImages:W,userFiles:j};if(X==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return x1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((J)=>J.delivery==="steer");if(Z<0)return{prompts:x1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:x1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:x1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),x1($)}clear($){return $.pendingPrompts.length=0,[]}}class XH{deps;service=new MM;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}discardQueue($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:x1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let J=!0;try{let X=await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles});if(ys(X))J=!1}catch{J=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,J&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=xW(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function ys($){return typeof $==="object"&&$!==null&&"finishReason"in $&&$.finishReason==="error"}function xW($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function x1($){return $.pendingPrompts.map(xW)}function Is($,Z,Q,J){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(J==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}O0();class yW{deps;constructor($){this.deps=$}lastKnownIdentityBySession=new Map;static MAX_IDENTITY_SNAPSHOTS=512;dispatchAgentEvent($,Z,Q){let J=this.deps.getSession($),X={sessionId:$,config:Z,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=VY(Q);if(!!J&&(!W.agentId||W.agentId===WH(J.agent))){let Y={agentId:WH(J.agent),conversationId:J.agent.getConversationId(),...J?.runtime.teamRuntime?{teamRole:"lead"}:{}};this.rememberSessionIdentity($,Y),xQ(X,Q,{...Y,isPrimaryAgentEvent:!0});return}xQ(X,Q,{...J?{}:this.lastKnownIdentityBySession.get($),isPrimaryAgentEvent:!1})}rememberSessionIdentity($,Z){if(this.lastKnownIdentityBySession.delete($),this.lastKnownIdentityBySession.set($,Z),this.lastKnownIdentityBySession.size>yW.MAX_IDENTITY_SNAPSHOTS){let Q=this.lastKnownIdentityBySession.keys().next().value;if(Q!==void 0)this.lastKnownIdentityBySession.delete(Q)}}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(CK(Q,Z),Z.type==="agent_event"){let J={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};xQ(J,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let J=k$({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:WH(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(J)t$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...J})}}if(await PK($,Z,this.deps.invokeBackendOptional),Q)fK(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,J){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,J);return}if(Z.name==="automation_event"){let K=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!K)return;let B=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!B)return;await K.ingestEvent(B);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let X=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,W=typeof X?.sessionId==="string"&&X.sessionId.trim().length>0?X.sessionId.trim():$,j=typeof X?.prompt==="string"?X.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":X?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let X=this.deps.getSession($)?.config.telemetry??Q;if(!X||!Z||typeof Z!=="object")return;let W=Z,j=typeof W.pluginName==="string"&&W.pluginName?W.pluginName:"unknown";if(W.kind==="event"){let Y=typeof W.event==="string"?W.event.trim():"";if(!Y)return;let V={...W.properties&&typeof W.properties==="object"?W.properties:{},plugin_name:j,session_id:$};if(W.required===!0)X.captureRequired(`plugin.${Y}`,V);else X.capture({event:`plugin.${Y}`,properties:V});return}if(W.kind==="metric"){let Y=typeof W.name==="string"?W.name.trim():"",V=typeof W.value==="number"?W.value:NaN;if(!Y||Number.isNaN(V))return;let K={...W.attributes&&typeof W.attributes==="object"?W.attributes:{},plugin_name:j},B=typeof W.description==="string"?W.description:void 0,G=W.required===!0,H=`plugin.${Y}`;if(W.metric==="counter")X.recordCounter(H,V,K,B,G);else if(W.metric==="histogram")X.recordHistogram(H,V,K,B,G);else if(W.metric==="gauge")X.recordGauge(H,V,K,B,G)}}handlePluginLog($,Z,Q){let J=this.deps.getSession($),X=Q??J?.config.extensionContext?.logger??J?.config.logger;if(!X||!Z||typeof Z!=="object")return;let W=Z,j=typeof W.message==="string"?W.message:"";if(!j)return;let Y=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(Y.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)Y.pluginName=W.pluginName;if(W.level==="debug"){X.debug(j,Y);return}if(W.level==="error"){if(X.error)X.error(j,Y);else X.log(j,{...Y,severity:"error"});return}X.log(j,Y)}}function WH($){return $.getAgentId()}function jH($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:x$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function YH($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function RM($,Z,...Q){let J=YH($,Z);if(!J)throw Error(`session service method not available: ${Z}`);return Promise.resolve(J.apply($,Q))}async function CM($,Z,...Q){let J=YH($,Z);if(!J)return;await Promise.resolve(J.apply($,Q))}async function PM($,Z,...Q){let J=YH($,Z);if(!J)return;return await Promise.resolve(J.apply($,Q))}u1();O0();function VH($,Z,Q){return{onSubAgentEvent:(J)=>$.onAgentEvent(Q,Z,J),onSubAgentStart:(J)=>{let X=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(J.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let W=k$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:X?.getTeamId(),teamName:X?.getTeamName(),createdByAgentId:J.parentAgentId});if(W)t$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...W});y5(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:J.parentAgentId,agentId:J.subAgentId,...W}),$.invokeBackendOptional("handleSubAgentStart",Q,J)},onSubAgentEnd:(J)=>{let X=$.getSession(Q)?.runtime.teamRuntime,W=$.subAgentStarts.get(J.subAgentId),j=W?Date.now()-W.startedAt:0,Y=J.result?.text?J.result.text.split(`
|
|
1038
|
-
`).length:0;y5(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...k$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:X?.getTeamId(),teamName:X?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function KH($,Z,Q,J){let X=VH($,Z,Q);return D2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?E6({cwd:Z.cwd,telemetry:Z.telemetry,...O1[w$({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)j.push(KH($,Z,Q,J));return b$(j)},...X})}import{readFile as hs,stat as vs}from"node:fs/promises";var gs=20480000;async function fM($){let Z=await vs($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>gs)throw Error("File is too large to read into context.");let Q=await hs($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var wM=5000,HH;function rs($,Z){if(HH)return;HH=iF().then(()=>{return}).catch((Q)=>{HH=void 0,$?.error?.("Detached command log recovery failed",{error:Q}),y1(Z,{component:"core",operation:"command.detached_log_recovery",error:Q,severity:"warn",handled:!0})})}function Y3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function as($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=Y3(Z.inputTokens),J=Y3(Z.outputTokens),X=Y3(Z.cacheReadTokens),W=Y3(Z.cacheWriteTokens),j=Y3(Z.totalCost);if(Q===void 0||J===void 0||X===void 0||W===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:X,cacheWriteTokens:W,totalCost:j}}function ns($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function bM($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class F${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;events=new k7;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new d2;runCommandExecutionController=new c8;constructor($){let Z=cs();if(Z)is(Z);let Q=B1($.distinctId);this.distinctId=Q,this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new O5,this.createAgentInstance=$.createAgent??((J)=>new U2(J)),this.defaultCapabilities=i0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new b1,this.oauthTokenManager=$.oauthTokenManager??new N5({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,rs(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new XH({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new yW({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,X,W)=>{this.invoke("persistSessionMessages",J,X,W).catch((j)=>{let Y=this.sessions.get(J);(Y?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:J,error:j}),y1(Y?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:j,severity:"warn",handled:!0,context:{sessionId:J,providerId:Y?.config.providerId,modelId:Y?.config.modelId}})})},enqueuePendingPrompt:(J,X)=>this.pendingPromptsController.enqueue(J,X),invokeBackendOptional:(J,...X)=>this.invokeOptional(J,...X)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||ds(),J=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),X=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),W=J&&!X?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=W?{...$.config,cwd:W.cwd,workspaceRoot:W.workspace_root}:await XL($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,W)}async startResolvedSession($,Z,Q,J){let X=$.source??J0.CLI,W=L0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?Q4(Y):g0(),K=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!K)throw Error("session service method not available: ensureSessionsDir");let B=BH(K,Z),G=BH(B,`${Z}.messages.json`),H=BH(B,`${Z}.json`),U=x$($.config),F=$.interactive===!0&&!j.prompt?.trim(),L=V1.parse({version:1,session_id:Z,source:X,pid:process.pid,started_at:W,status:F?"idle":"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:U,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:G}),D,z;if(Q&&Y.length>0&&!j.prompt?.trim()){let u=J??await this.invokeOptionalValue("readSessionManifest",Z);if(u)L=u,D={manifestPath:H,messagesPath:u.messages_path||G,compactionPath:u.compaction_path,manifest:u},z=await this.invokeOptionalValue("readSessionCompactionState",Z)}let O=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:B,rootMessagesPath:D?.messagesPath??G,manifest:L});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,O);let A=i0(this.defaultCapabilities,$.capabilities),q=A?.toolExecutors??this.toolExecutors,N=$.localRuntime,T=N?.extensionContext?.logger??N?.logger,C=N?.extensionContext?.automation,r=N?.extensionContext?.telemetry??N?.telemetry??this.defaultTelemetry,y,x={getSession:(u)=>this.sessions.get(u),subAgentStarts:this.subAgentStarts,onAgentEvent:(u,F0,k0)=>this.eventBridge.dispatchAgentEvent(u,F0,k0),invokeBackendOptional:(u,...F0)=>this.invokeOptional(u,...F0)};y=await Qz({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:A,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(u)=>{if(u.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,u.payload,T);return}this.eventBridge.handlePluginEvent(Z,u,C,r)},onTeamEvent:(u)=>{this.eventBridge.handleTeamEvent(Z,u),y.config.onTeamEvent?.(u)},createSpawnTool:()=>KH(x,y.config,Z,q),createSubAgentLifecycleCallbacks:(u)=>VH(x,u,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(u)=>{await this.persistSessionMetadata(Z,()=>u)}});let E=v0(TJ({...D?.manifest.metadata??{},...j.sessionMetadata??{}},y.gitState),{mode:j.mode,version:y.config.extensionContext?.client?.version});if(!D)L.metadata=E;let g=await this.runtimeBuilder.build({...y.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController}),b=y.config,n=y.providerConfig;if(g.teamRuntime&&!b.teamName?.trim())b.teamName=g.teamRuntime.getTeamName();let k=async()=>{let u=this.sessions.get(Z);if(!u||!$2(u.config.providerId))return!1;try{return await this.syncOAuthCredentials(u,{forceRefresh:!0}),!0}catch{return!1}};g.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:k});let I=[...g.tools,...b.extraTools??[]],d=g.extensions??y.extensions,Z0=j.initialCompactionState,m0,G0=t5(b),H1=Z0??z,r0=H1?{...H1,conversation_id:H1.conversation_id?.trim()||Z}:void 0,N$=e5({compact:G0,getState:()=>m0?.compactionState,saveState:async(u,F0)=>{let k0=m0;if(!k0)return;let a0={...u,conversation_id:k0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(k0,a0,F0)).updated)b.logger?.debug?.("Skipped stale session compaction state",{sessionId:k0.sessionId,sourceMessageCount:a0.source_message_count})}catch(a2){b.logger?.error?.("Failed to persist session compaction state",{sessionId:k0.sessionId,error:a2}),y1(b.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:a2,context:{sessionId:k0.sessionId,providerId:b.providerId,modelId:b.modelId}})}}}),U1={distinctId:this.distinctId,sessionId:Z,providerId:n.providerId,modelId:n.modelId,apiKey:n.apiKey,baseUrl:n.baseUrl,headers:n.headers,onAuthError:k,knownModels:n.knownModels,providerConfig:n,thinking:b.thinking,reasoningEffort:b.reasoningEffort??n.reasoningEffort,thinkingBudgetTokens:b.thinkingBudgetTokens,maxTokensPerTurn:b.maxTokensPerTurn,temperature:b.temperature,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:N$,tools:I,modelTools:g.modelTools,hooks:y.hooks,extensions:d,hookErrorMode:b.hookErrorMode,initialMessages:y.effectiveInput.initialMessages,userFileContentLoader:fM,toolPolicies:y.toolPolicies,requestToolApproval:y.requestToolApproval?async(u)=>{let F0=y.requestToolApproval,k0=this.sessions.get(Z);if(k0)await this.markTurnPending(k0);try{if(!F0)return{approved:!1,reason:"Tool approval callback is not configured."};return await F0(u)}finally{let a0=this.sessions.get(Z);if(a0?.status==="pending")await this.markTurnRunning(a0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:g.completionPolicy,consumePendingUserMessage:()=>{let u=this.pendingPromptsController.consumeSteer(Z);return u?s7(u.prompt,u.mode??b.mode):void 0},logger:g.logger??b.logger,extensionContext:b.extensionContext,onEvent:(u)=>this.eventBridge.dispatchAgentEvent(Z,b,u)};U1.hooks={...U1.hooks,onEvent:async(u)=>{if(await y.hooks?.onEvent?.(u),u.type!=="assistant-message")return;let F0=this.sessions.get(Z);if(!F0)return;let k0=F0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,k0,b.systemPrompt)}catch(a0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:a0}),y1(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:a0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:b.providerId,modelId:b.modelId}})}}};let c0=this.createAgentInstance(U1);if(U1.onEvent)c0.subscribeEvents(U1.onEvent);g.registerLeadAgent?.(c0);let e0=k$({agentId:c0.getAgentId(),conversationId:c0.getConversationId(),teamId:g.teamRuntime?.getTeamId(),teamName:g.teamRuntime?.getTeamName(),teamRole:g.teamRuntime?"lead":void 0});if(Xz(b,Z,Q,U,e0),e0)t$(b.telemetry,{ulid:Z,modelId:b.modelId,provider:b.providerId,...e0});if(g.teamRuntime)P3(b.telemetry,{ulid:Z,teamId:g.teamRuntime.getTeamId(),teamName:g.teamRuntime.getTeamName(),leadAgentId:c0.getAgentId(),restoredFromPersistence:g.teamRestoredFromPersistence===!0});let o={sessionId:Z,config:b,sessionMetadata:E,...D?{artifacts:D}:{},source:X,startedAt:D?.manifest.started_at??W,updatedAt:D?.manifest.ended_at??D?.manifest.started_at??W,pendingPrompt:L.prompt,runtime:g,agent:c0,started:!1,status:D?.manifest.status??(F?"idle":"running"),aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:r0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:y.pluginSandboxShutdown,submitAndExitObserved:!1,taskCompletedEmitted:!1,lastInteractiveTurnFinishReason:void 0};if(m0=o,o.compactionState&&!this.isCompactionStateForSession(o.sessionId,o.compactionState,o))o.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:o.sessionId,conversationId:o.compactionState.conversation_id}),o.compactionState=void 0;if(this.sessions.set(Z,o),D)await this.refreshActiveSessionGitMetadata(o,y.gitState);if(Y.length>0&&!D)try{await this.ensureSessionPersisted(o),await this.invoke("persistSessionMessages",Z,Y,o.config.systemPrompt)}catch(u){o.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:Z,error:u}),y1(o.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:u,severity:"warn",handled:!0,context:{sessionId:Z,providerId:o.config.providerId,modelId:o.config.modelId}})}this.emitStatus(Z,o.status);let F1;try{if(j.prompt?.trim())if(F1=await this.executeTurn(o,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!o.interactive)await this.finalizeSingleRun(o,F1.finishReason);else await this.completeInteractiveTurn(o,F1.finishReason)}catch(u){if(o.interactive&&o.aborting)F1=await this.completeAbortedInteractiveTurn(o);else{y1(o.config.telemetry,{component:"core",operation:"session.start",error:u,severity:"error",handled:!1,context:{sessionId:o.sessionId,providerId:o.config.providerId,modelId:o.config.modelId}});try{await this.failSession(o)}catch(F0){o.config.logger?.error?.("Session failure cleanup threw",{sessionId:o.sessionId,error:F0})}throw u}}return{sessionId:Z,manifest:L,manifestPath:H,messagesPath:G,result:F1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),J=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let X=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,X.finishReason);else await this.completeInteractiveTurn(Z,X.finishReason);if(X.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)});return X}catch(X){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw y1(Z.config.telemetry,{component:"core",operation:"session.submit",error:X,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),X}}async getAccumulatedUsage($){let Z=lV(this.usageBySession.get($)),Q=lV(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;if(Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,Q.drainingPendingPrompts)this.pendingPromptsController.discardQueue(Q);Q.agent.abort(Z)}async proceedWhileRunning($,Z){return this.runCommandExecutionController.proceedWhileRunning($,Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!P0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!P0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return jH(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return P9(J);let X=await this.readManifest(Q);return X?eJ(X):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(P9),J=new Set(Q.map((X)=>X.sessionId));for(let X of this.sessions.values()){if(J.has(X.sessionId))continue;Q.unshift(jH(X))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),X=J?void 0:await this.getSession(Q);if(!(J??X))return{updated:!1};if(J){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,K=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,J,void 0,Y))return{updated:!1};J.agent.restore(Y)}return await this.persistActiveSessionCompactionState(J,Z,K)}if(!await this.canPersistCompactionState(Q,Z,void 0,X))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(bM(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let X=Z.conversation_id?.trim();if(!X)return!0;if(X===$)return!0;let W=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return W?X===W:!1}async canPersistCompactionState($,Z,Q,J,X){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let W=X??Q?.agent.getMessages()??await this.readSessionMessages($);return Z2(Z,W)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let J=$.compactionState,X=J!==void 0&&Z2(J,Q??$.agent.getMessages())!==void 0;if(J&&(X?bM(Z,J):Date.parse(Z.updated_at)<Date.parse(J.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),X=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=X;try{return await J}finally{if($.compactionStateWriteQueue===X)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let J=Q.agent.getMessages();if(J.length>0)return J}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return b2(Q.messagesPath);let J=await this.readManifest(Z);return b2(J?.messages_path)}async dispatchHookEvent($){await nO($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=z6(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let X={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)X.reasoningEffort=void 0,X.thinkingBudgetTokens=void 0;let W={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(X),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(W),Q.providerId||Q.modelId)await this.mutateSessionManifest(J,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let J=$.sessionId,W=(this.manifestMutationQueues.get(J)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",J)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=W.then(()=>{return},()=>{return});this.manifestMutationQueues.set(J,j);try{return await W}finally{if(this.manifestMutationQueues.get(J)===j)this.manifestMutationQueues.delete(J)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim(),X=Q?.userImages?.length,W=Q?.userFiles?.length;if(!J&&!X&&!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;if(await this.ensureSessionPersisted($),!$.pendingPrompt){$.pendingPrompt=J;try{await this.invokeOptionalValue("updateSession",{sessionId:$.sessionId,prompt:J})}catch(j){$.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:$.sessionId,error:j})}}await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(wK($,j.finishReason)){let Y=await bK($);if(Y.length===0)break;let V=SK($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(o7($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),J=g0();if($.persistedMessages=Q,$.started=$.started||Q.length>0,Q.length>0)try{await this.ensureSessionPersisted($),await this.invoke("persistSessionMessages",$.sessionId,Q,$.config.systemPrompt)}catch(X){$.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:$.sessionId,error:X}),y1($.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}})}return this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let X=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??g0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=g0(),$.turnUsageByAgent=new Map,q3($.config.telemetry,$.sessionId,$.config.mode),E8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=X?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),K=await this.runWithAuthRetry($,V,W);$.started=!0;let B=kQ(K.messages,K,W);$.persistedMessages=B;let G=w9($.turnUsageByAgent?.values()??[]),H=I0(j,K.usage),U=I0(I0(g0(),K.usage),G),F=I0(Y,U);return this.usageBySession.set($.sessionId,H),this.aggregateUsageBySession.set($.sessionId,F),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:H.totalCost,aggregatedAgentsCost:F.totalCost,usage:H,aggregateUsage:F})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,K),K}catch(V){y1($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}});try{await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt)}catch(K){$.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:$.sessionId,error:K})}throw V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((J)=>J.name===N0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,$.taskCompletedEmitted=!0,x5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}emitTaskCompletedOnTeardown($,Z){if($.taskCompletedEmitted||$.submitAndExitObserved)return;if(!($.interactive?$.lastInteractiveTurnFinishReason==="completed"&&!$.aborting&&$.agent.canStartRun():Z==="completed"))return;$.taskCompletedEmitted=!0,x5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=x$($.config),J=ps(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let X=await m8(J,Q);Wz($.config.telemetry,X);let W=s7(X.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,X.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:W,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=x$($.config);if($.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt}),$.compactionState){if(!(await this.persistActiveSessionCompactionState($,$.compactionState)).updated)$.compactionState=void 0}}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await aY(x$($.config));if(!Q||!$.artifacts)return;if(rY($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(J)=>TJ({...J??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,X=Z(J?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:X}))?.updated===!1)return;Q.sessionMetadata=X,Q.artifacts.manifest.metadata=X}async finalizeSingleRun($,Z){if(o7($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"session_error":"session_complete",endReason:Z})}async failSession($){$.lastInteractiveTurnFinishReason="error",await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(this.emitTaskCompletedOnTeardown($,Z.status),UX($),!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z.shutdownReason));let Q=[],J=(X,W)=>{Q.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:X,error:W,severity:"warn"}),y1($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:X,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(X){J("update_status",X)}}try{await $.agent.shutdown(Z.shutdownReason)}catch(X){J("agent_shutdown",X)}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(X){J("runtime_shutdown",X)}try{await $.pluginSandboxShutdown?.()}catch(X){J("plugin_sandbox_shutdown",X)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){this.emitTaskCompletedOnTeardown($);let Q=[],J=(X,W)=>{Q.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:X,error:W,severity:"warn"}),y1($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:X,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};if(!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z));try{await $.agent.shutdown(Z)}catch(X){J("agent_shutdown",X)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(X){J("runtime_shutdown",X)}try{await $.pluginSandboxShutdown?.()}catch(X){J("plugin_sandbox_shutdown",X)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let X=await this.mutateSessionManifest($,(W)=>{if(W.status=Z,P0(Z))delete W.ended_at,W.exit_code=null;else W.ended_at=J.endedAt??L0(),W.exit_code=typeof Q==="number"?Q:null});if(!X)return;$.status=Z,$.updatedAt=J.endedAt??L0(),$.endedAt=P0(Z)?null:X.ended_at,$.exitCode=X.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!$2($.config.providerId)||!ls(J))throw J;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(J){if(J instanceof L8)throw Error(`${J.providerId} requires re-authentication.`);throw J}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new c$($);throw y1(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>us(J)?J:GH($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return k$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=I0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let J=GH(Z),X=`${Q}.messages.json`,W;try{W=ms($)}catch{return g0()}let j=g0();for(let Y of W){if(!Y.endsWith(".messages.json"))continue;if(Y===X)continue;let V=GH($,Y);if(V===J)continue;let K=await b2(V);if(K.length===0)continue;j=I0(j,Q4(K))}return j}withPersistedAggregateUsageFloor($,Z){let Q=as(Z.metadata?.aggregateUsage);if(Q)return ns($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:V$({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),wM))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(wM)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return RM(this.sessionService,$,...Z)}invokeOptional($,...Z){return CM(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return PM(this.sessionService,$,...Z)}}function ss($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function ts($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function uX($={}){let Z=async(J)=>J,Q=new F$({sessionService:new U$(new G$),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let X=(J.cwd?.trim()||J.workspaceRoot).trim(),W=await Q.startSession({source:J0.CORE,mode:"automation",sessionMetadata:v0(void 0,{mode:"automation",trigger:J.source}),interactive:!1,config:{providerId:os(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:X,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:ts(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(J,X){let W=await Q.runTurn({sessionId:J,prompt:X.prompt,userImages:X.attachments?.userImages,userFiles:X.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:ss(W)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}var UH=2000;function SM($){let Z="idle",Q=0,J,X,W=!1,j=(K)=>{if(W)return;W=!0,$.exit(K)},Y=(K)=>{if(Q=Math.max(Q,K.exitCode),Z==="forced"||Z==="finished")return;if(Z="forced",X)clearTimeout(X),X=void 0;try{$.onForcedExit?.({...K,exitCode:Q})}finally{j(Q)}};return{request:(K)=>{if(Q=Math.max(Q,K.exitCode),J)return J;return Z="shutting_down",X=setTimeout(()=>{Y({reason:`shutdown deadline exceeded after ${K.reason}`,exitCode:Q})},$.deadlineMs),J=(async()=>{try{await Promise.resolve().then(()=>$.cleanup())}catch(B){Q=Math.max(Q,1),$.onCleanupError?.(B)}finally{if(X)clearTimeout(X),X=void 0;if(Z==="shutting_down")Z="finished",j(Q)}})(),J},force:Y,getState:()=>Z}}import{release as es}from"node:os";import{createClineTelemetryServiceConfig as $t}from"@cline/shared";O0();GZ();var Zt=300000,Qt=5000;function kM(){let $=$t({metadata:{extension_version:W3,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:es()}}),Z=v2($),Q,J=()=>{try{return Q??=new b1,Q.getProviderSettings("cline")?.auth}catch{return}},X,W=()=>{let Y=J(),V=Y?.accountId?.trim();if(!Y||!V)return;let K=`${V}:${Y.organizationId??""}`;if(K===X)return;X=K,I1(Z.telemetry,{id:V,provider:"cline",organizationId:Y.organizationId,organizationName:Y.organizationName,memberId:Y.memberId})};W();let j=setInterval(W,Zt);return j.unref?.(),{telemetry:Z.telemetry,dispose:async()=>{clearInterval(j);let Y;await Promise.race([(async()=>{await Z.flush(),await Z.dispose()})(),new Promise((V)=>{Y=setTimeout(V,Qt),Y.unref?.()})]),clearTimeout(Y)}}}Xt(process.env.CLINE_VCR);var xM,FH,jt=new Promise(($,Z)=>{xM=$,FH=Z});jt.catch(()=>{return});var Yt=5000,Vt=250;function Kt($){return $ instanceof Error&&$.code==="EADDRINUSE"}async function Bt($,Z){for(;;)try{return await U8(Z)}catch(Q){if(!Kt(Q)&&!H8(Q)||Date.now()>=$)throw Q;await new Promise((J)=>setTimeout(J,Vt))}}function Gt($){let Z=process.cwd(),Q,J,X;for(let W=0;W<$.length;W+=1){let j=$[W],Y=$[W+1];if(j==="--cwd"&&Y){Z=Y,W+=1;continue}if(j==="--host"&&Y){Q=Y,W+=1;continue}if(j==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))J=V;W+=1;continue}if(j==="--pathname"&&Y)X=Y,W+=1}return{cwd:Z,host:Q,port:J,pathname:X}}function Ht($){if($ instanceof Jt)return!0;if($ instanceof Error){if($.name==="AbortError")return!0;if($.code==="ABORT_ERR")return!0}return!1}async function Ut(){let $=Gt(process.argv.slice(2));process.chdir($.cwd);let Z=i1({host:$.host,port:$.port,pathname:$.pathname}),Q=kM(),J=(L)=>L instanceof Error?L.stack||L.message:String(L),X,W,j,Y=(L)=>{if(X)return X.request(L);if(!W||L.exitCode>W.exitCode)W=L;if(!j)j=setTimeout(()=>{let D=W??L;try{process.stderr.write(`[hub-daemon] startup did not reach shutdown coordination after ${D.reason}; forcing process exit
|
|
1038
|
+
`).length:0;y5(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...k$({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:X?.getTeamId(),teamName:X?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function KH($,Z,Q,J){let X=VH($,Z,Q);return D2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?E6({cwd:Z.cwd,telemetry:Z.telemetry,...O1[w$({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)j.push(KH($,Z,Q,J));return b$(j)},...X})}import{readFile as hs,stat as vs}from"node:fs/promises";var gs=20480000;async function fM($){let Z=await vs($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>gs)throw Error("File is too large to read into context.");let Q=await hs($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var wM=5000,HH;function rs($,Z){if(HH)return;HH=iF().then(()=>{return}).catch((Q)=>{HH=void 0,$?.error?.("Detached command log recovery failed",{error:Q}),y1(Z,{component:"core",operation:"command.detached_log_recovery",error:Q,severity:"warn",handled:!0})})}function Y3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function as($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=Y3(Z.inputTokens),J=Y3(Z.outputTokens),X=Y3(Z.cacheReadTokens),W=Y3(Z.cacheWriteTokens),j=Y3(Z.totalCost);if(Q===void 0||J===void 0||X===void 0||W===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:X,cacheWriteTokens:W,totalCost:j}}function ns($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function bM($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class F${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;events=new k7;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new d2;runCommandExecutionController=new c8;constructor($){let Z=cs();if(Z)is(Z);let Q=B1($.distinctId);this.distinctId=Q,this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new O5,this.createAgentInstance=$.createAgent??((J)=>new U2(J)),this.defaultCapabilities=i0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new b1,this.oauthTokenManager=$.oauthTokenManager??new N5({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,rs(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new XH({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new yW({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,X,W)=>{this.invoke("persistSessionMessages",J,X,W).catch((j)=>{let Y=this.sessions.get(J);(Y?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:J,error:j}),y1(Y?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:j,severity:"warn",handled:!0,context:{sessionId:J,providerId:Y?.config.providerId,modelId:Y?.config.modelId}})})},enqueuePendingPrompt:(J,X)=>this.pendingPromptsController.enqueue(J,X),invokeBackendOptional:(J,...X)=>this.invokeOptional(J,...X)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||ds(),J=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),X=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),W=J&&!X?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=W?{...$.config,cwd:W.cwd,workspaceRoot:W.workspace_root}:await XL($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,W)}async startResolvedSession($,Z,Q,J){let X=$.source??J0.CLI,W=L0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?Q4(Y):g0(),K=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!K)throw Error("session service method not available: ensureSessionsDir");let B=BH(K,Z),G=BH(B,`${Z}.messages.json`),H=BH(B,`${Z}.json`),U=x$($.config),F=$.interactive===!0&&!j.prompt?.trim(),L=V1.parse({version:1,session_id:Z,source:X,pid:process.pid,started_at:W,status:F?"idle":"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:U,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:G}),D,z;if(Q&&Y.length>0&&!j.prompt?.trim()){let u=J??await this.invokeOptionalValue("readSessionManifest",Z);if(u)L=u,D={manifestPath:H,messagesPath:u.messages_path||G,compactionPath:u.compaction_path,manifest:u},z=await this.invokeOptionalValue("readSessionCompactionState",Z)}let O=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:B,rootMessagesPath:D?.messagesPath??G,manifest:L});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,O);let A=i0(this.defaultCapabilities,$.capabilities),q=A?.toolExecutors??this.toolExecutors,N=$.localRuntime,T=N?.extensionContext?.logger??N?.logger,C=N?.extensionContext?.automation,r=N?.extensionContext?.telemetry??N?.telemetry??this.defaultTelemetry,y,x={getSession:(u)=>this.sessions.get(u),subAgentStarts:this.subAgentStarts,onAgentEvent:(u,F0,k0)=>this.eventBridge.dispatchAgentEvent(u,F0,k0),invokeBackendOptional:(u,...F0)=>this.invokeOptional(u,...F0)};y=await Qz({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:A,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(u)=>{if(u.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,u.payload,T);return}this.eventBridge.handlePluginEvent(Z,u,C,r)},onTeamEvent:(u)=>{this.eventBridge.handleTeamEvent(Z,u),y.config.onTeamEvent?.(u)},createSpawnTool:()=>KH(x,y.config,Z,q),createSubAgentLifecycleCallbacks:(u)=>VH(x,u,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(u)=>{await this.persistSessionMetadata(Z,()=>u)}});let E=v0(TJ({...D?.manifest.metadata??{},...j.sessionMetadata??{}},y.gitState),{mode:j.mode,version:y.config.extensionContext?.client?.version});if(!D)L.metadata=E;let g=await this.runtimeBuilder.build({...y.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController}),b=y.config,n=y.providerConfig;if(g.teamRuntime&&!b.teamName?.trim())b.teamName=g.teamRuntime.getTeamName();let k=async()=>{let u=this.sessions.get(Z);if(!u||!$2(u.config.providerId))return!1;try{return await this.syncOAuthCredentials(u,{forceRefresh:!0}),!0}catch{return!1}};g.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:k});let I=[...g.tools,...b.extraTools??[]],d=g.extensions??y.extensions,Z0=j.initialCompactionState,m0,G0=t5(b),H1=Z0??z,r0=H1?{...H1,conversation_id:H1.conversation_id?.trim()||Z}:void 0,N$=e5({compact:G0,getState:()=>m0?.compactionState,saveState:async(u,F0)=>{let k0=m0;if(!k0)return;let a0={...u,conversation_id:k0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(k0,a0,F0)).updated)b.logger?.debug?.("Skipped stale session compaction state",{sessionId:k0.sessionId,sourceMessageCount:a0.source_message_count})}catch(a2){b.logger?.error?.("Failed to persist session compaction state",{sessionId:k0.sessionId,error:a2}),y1(b.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:a2,context:{sessionId:k0.sessionId,providerId:b.providerId,modelId:b.modelId}})}}}),U1={distinctId:this.distinctId,sessionId:Z,providerId:n.providerId,modelId:n.modelId,apiKey:n.apiKey,baseUrl:n.baseUrl,headers:n.headers,onAuthError:k,knownModels:n.knownModels,providerConfig:n,thinking:b.thinking,reasoningEffort:b.reasoningEffort??n.reasoningEffort,thinkingBudgetTokens:b.thinkingBudgetTokens,maxTokensPerTurn:b.maxTokensPerTurn,temperature:b.temperature,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:N$,tools:I,modelTools:g.modelTools,hooks:y.hooks,extensions:d,hookErrorMode:b.hookErrorMode,initialMessages:y.effectiveInput.initialMessages,userFileContentLoader:fM,toolPolicies:y.toolPolicies,requestToolApproval:y.requestToolApproval?async(u)=>{let F0=y.requestToolApproval,k0=this.sessions.get(Z);if(k0)await this.markTurnPending(k0);try{if(!F0)return{approved:!1,reason:"Tool approval callback is not configured."};return await F0(u)}finally{let a0=this.sessions.get(Z);if(a0?.status==="pending")await this.markTurnRunning(a0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:g.completionPolicy,consumePendingUserMessage:()=>{let u=this.pendingPromptsController.consumeSteer(Z);return u?s7(u.prompt,u.mode??b.mode):void 0},logger:g.logger??b.logger,extensionContext:b.extensionContext,onEvent:(u)=>this.eventBridge.dispatchAgentEvent(Z,b,u)};U1.hooks={...U1.hooks,onEvent:async(u)=>{if(await y.hooks?.onEvent?.(u),u.type!=="assistant-message")return;let F0=this.sessions.get(Z);if(!F0)return;let k0=F0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,k0,b.systemPrompt)}catch(a0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:a0}),y1(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:a0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:b.providerId,modelId:b.modelId}})}}};let c0=this.createAgentInstance(U1);if(U1.onEvent)c0.subscribeEvents(U1.onEvent);g.registerLeadAgent?.(c0);let e0=k$({agentId:c0.getAgentId(),conversationId:c0.getConversationId(),teamId:g.teamRuntime?.getTeamId(),teamName:g.teamRuntime?.getTeamName(),teamRole:g.teamRuntime?"lead":void 0});if(Xz(b,Z,Q,U,e0),e0)t$(b.telemetry,{ulid:Z,modelId:b.modelId,provider:b.providerId,...e0});if(g.teamRuntime)P3(b.telemetry,{ulid:Z,teamId:g.teamRuntime.getTeamId(),teamName:g.teamRuntime.getTeamName(),leadAgentId:c0.getAgentId(),restoredFromPersistence:g.teamRestoredFromPersistence===!0});let o={sessionId:Z,config:b,sessionMetadata:E,...D?{artifacts:D}:{},source:X,startedAt:D?.manifest.started_at??W,updatedAt:D?.manifest.ended_at??D?.manifest.started_at??W,pendingPrompt:L.prompt,runtime:g,agent:c0,started:!1,status:D?.manifest.status??(F?"idle":"running"),aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:r0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:y.pluginSandboxShutdown,submitAndExitObserved:!1,taskCompletedEmitted:!1,lastInteractiveTurnFinishReason:void 0};if(m0=o,o.compactionState&&!this.isCompactionStateForSession(o.sessionId,o.compactionState,o))o.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:o.sessionId,conversationId:o.compactionState.conversation_id}),o.compactionState=void 0;if(this.sessions.set(Z,o),D)await this.refreshActiveSessionGitMetadata(o,y.gitState);if(Y.length>0&&!D)try{await this.ensureSessionPersisted(o),await this.invoke("persistSessionMessages",Z,Y,o.config.systemPrompt)}catch(u){o.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:Z,error:u}),y1(o.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:u,severity:"warn",handled:!0,context:{sessionId:Z,providerId:o.config.providerId,modelId:o.config.modelId}})}this.emitStatus(Z,o.status);let F1;try{if(j.prompt?.trim())if(F1=await this.executeTurn(o,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!o.interactive)await this.finalizeSingleRun(o,F1.finishReason);else await this.completeInteractiveTurn(o,F1.finishReason)}catch(u){if(o.interactive&&o.aborting)F1=await this.completeAbortedInteractiveTurn(o);else{y1(o.config.telemetry,{component:"core",operation:"session.start",error:u,severity:"error",handled:!1,context:{sessionId:o.sessionId,providerId:o.config.providerId,modelId:o.config.modelId}});try{await this.failSession(o)}catch(F0){o.config.logger?.error?.("Session failure cleanup threw",{sessionId:o.sessionId,error:F0})}throw u}}return{sessionId:Z,manifest:L,manifestPath:H,messagesPath:G,result:F1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),J=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let X=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,X.finishReason);else await this.completeInteractiveTurn(Z,X.finishReason);if(X.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)});return X}catch(X){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw y1(Z.config.telemetry,{component:"core",operation:"session.submit",error:X,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),X}}async getAccumulatedUsage($){let Z=lV(this.usageBySession.get($)),Q=lV(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;if(Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,Q.drainingPendingPrompts)this.pendingPromptsController.discardQueue(Q);Q.agent.abort(Z)}async proceedWhileRunning($,Z){return this.runCommandExecutionController.proceedWhileRunning($,Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!P0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!P0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return jH(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return P9(J);let X=await this.readManifest(Q);return X?eJ(X):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(P9),J=new Set(Q.map((X)=>X.sessionId));for(let X of this.sessions.values()){if(J.has(X.sessionId))continue;Q.unshift(jH(X))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),X=J?void 0:await this.getSession(Q);if(!(J??X))return{updated:!1};if(J){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,K=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,J,void 0,Y))return{updated:!1};J.agent.restore(Y)}return await this.persistActiveSessionCompactionState(J,Z,K)}if(!await this.canPersistCompactionState(Q,Z,void 0,X))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(bM(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let X=Z.conversation_id?.trim();if(!X)return!0;if(X===$)return!0;let W=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return W?X===W:!1}async canPersistCompactionState($,Z,Q,J,X){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let W=X??Q?.agent.getMessages()??await this.readSessionMessages($);return Z2(Z,W)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let J=$.compactionState,X=J!==void 0&&Z2(J,Q??$.agent.getMessages())!==void 0;if(J&&(X?bM(Z,J):Date.parse(Z.updated_at)<Date.parse(J.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),X=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=X;try{return await J}finally{if($.compactionStateWriteQueue===X)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let J=Q.agent.getMessages();if(J.length>0)return J}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return b2(Q.messagesPath);let J=await this.readManifest(Z);return b2(J?.messages_path)}async dispatchHookEvent($){await nO($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=z6(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let X={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)X.reasoningEffort=void 0,X.thinkingBudgetTokens=void 0;let W={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(X),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(W),Q.providerId||Q.modelId)await this.mutateSessionManifest(J,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let J=$.sessionId,W=(this.manifestMutationQueues.get(J)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",J)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=W.then(()=>{return},()=>{return});this.manifestMutationQueues.set(J,j);try{return await W}finally{if(this.manifestMutationQueues.get(J)===j)this.manifestMutationQueues.delete(J)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim(),X=Q?.userImages?.length,W=Q?.userFiles?.length;if(!J&&!X&&!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;if(await this.ensureSessionPersisted($),!$.pendingPrompt){$.pendingPrompt=J;try{await this.invokeOptionalValue("updateSession",{sessionId:$.sessionId,prompt:J})}catch(j){$.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:$.sessionId,error:j})}}await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(wK($,j.finishReason)){let Y=await bK($);if(Y.length===0)break;let V=SK($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(o7($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),J=g0();if($.persistedMessages=Q,$.started=$.started||Q.length>0,Q.length>0)try{await this.ensureSessionPersisted($),await this.invoke("persistSessionMessages",$.sessionId,Q,$.config.systemPrompt)}catch(X){$.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:$.sessionId,error:X}),y1($.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}})}return this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let X=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??g0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=g0(),$.turnUsageByAgent=new Map,q3($.config.telemetry,$.sessionId,$.config.mode),E8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=X?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),K=await this.runWithAuthRetry($,V,W);$.started=!0;let B=kQ(K.messages,K,W);$.persistedMessages=B;let G=w9($.turnUsageByAgent?.values()??[]),H=I0(j,K.usage),U=I0(I0(g0(),K.usage),G),F=I0(Y,U);return this.usageBySession.set($.sessionId,H),this.aggregateUsageBySession.set($.sessionId,F),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:H.totalCost,aggregatedAgentsCost:F.totalCost,usage:H,aggregateUsage:F})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,K),K}catch(V){y1($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}});try{await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt)}catch(K){$.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:$.sessionId,error:K})}throw V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((J)=>J.name===N0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,$.taskCompletedEmitted=!0,x5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}emitTaskCompletedOnTeardown($,Z){if($.taskCompletedEmitted||$.submitAndExitObserved)return;if(!($.interactive?$.lastInteractiveTurnFinishReason==="completed"&&!$.aborting&&$.agent.canStartRun():Z==="completed"))return;$.taskCompletedEmitted=!0,x5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=x$($.config),J=ps(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let X=await m8(J,Q);Wz($.config.telemetry,X);let W=s7(X.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,X.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:W,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=x$($.config);if($.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt}),$.compactionState){if(!(await this.persistActiveSessionCompactionState($,$.compactionState)).updated)$.compactionState=void 0}}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await aY(x$($.config));if(!Q||!$.artifacts)return;if(rY($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(J)=>TJ({...J??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,X=Z(J?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:X}))?.updated===!1)return;Q.sessionMetadata=X,Q.artifacts.manifest.metadata=X}async finalizeSingleRun($,Z){if(o7($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"session_error":"session_complete",endReason:Z})}async failSession($){$.lastInteractiveTurnFinishReason="error",await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(this.emitTaskCompletedOnTeardown($,Z.status),UX($),!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z.shutdownReason));let Q=[],J=(X,W)=>{Q.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:X,error:W,severity:"warn"}),y1($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:X,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(X){J("update_status",X)}}try{await $.agent.shutdown(Z.shutdownReason)}catch(X){J("agent_shutdown",X)}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(X){J("runtime_shutdown",X)}try{await $.pluginSandboxShutdown?.()}catch(X){J("plugin_sandbox_shutdown",X)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){this.emitTaskCompletedOnTeardown($);let Q=[],J=(X,W)=>{Q.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:X,error:W,severity:"warn"}),y1($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:X,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};if(!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z));try{await $.agent.shutdown(Z)}catch(X){J("agent_shutdown",X)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(X){J("runtime_shutdown",X)}try{await $.pluginSandboxShutdown?.()}catch(X){J("plugin_sandbox_shutdown",X)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let X=await this.mutateSessionManifest($,(W)=>{if(W.status=Z,P0(Z))delete W.ended_at,W.exit_code=null;else W.ended_at=J.endedAt??L0(),W.exit_code=typeof Q==="number"?Q:null});if(!X)return;$.status=Z,$.updatedAt=J.endedAt??L0(),$.endedAt=P0(Z)?null:X.ended_at,$.exitCode=X.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!$2($.config.providerId)||!ls(J))throw J;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(J){if(J instanceof L8)throw Error(`${J.providerId} requires re-authentication.`);throw J}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new c$($);throw y1(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>us(J)?J:GH($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return k$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=I0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let J=GH(Z),X=`${Q}.messages.json`,W;try{W=ms($)}catch{return g0()}let j=g0();for(let Y of W){if(!Y.endsWith(".messages.json"))continue;if(Y===X)continue;let V=GH($,Y);if(V===J)continue;let K=await b2(V);if(K.length===0)continue;j=I0(j,Q4(K))}return j}withPersistedAggregateUsageFloor($,Z){let Q=as(Z.metadata?.aggregateUsage);if(Q)return ns($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:V$({session:Z,usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),wM))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(wM)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return RM(this.sessionService,$,...Z)}invokeOptional($,...Z){return CM(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return PM(this.sessionService,$,...Z)}}function ss($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function ts($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function uX($={}){let Z=async(J)=>J,Q=new F$({sessionService:new U$(new G$),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let X=(J.cwd?.trim()||J.workspaceRoot).trim(),W=await Q.startSession({source:J0.CORE,mode:"automation",sessionMetadata:v0(void 0,{mode:"automation",trigger:J.source}),interactive:!1,config:{providerId:os(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:X,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:ts(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(J,X){let W=await Q.runTurn({sessionId:J,prompt:X.prompt,userImages:X.attachments?.userImages,userFiles:X.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:ss(W)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}var UH=2000;function SM($){let Z="idle",Q=0,J,X,W=!1,j=(K)=>{if(W)return;W=!0,$.exit(K)},Y=(K)=>{if(Q=Math.max(Q,K.exitCode),Z==="forced"||Z==="finished")return;if(Z="forced",X)clearTimeout(X),X=void 0;try{$.onForcedExit?.({...K,exitCode:Q})}finally{j(Q)}};return{request:(K)=>{if(Q=Math.max(Q,K.exitCode),J)return J;return Z="shutting_down",X=setTimeout(()=>{Y({reason:`shutdown deadline exceeded after ${K.reason}`,exitCode:Q})},$.deadlineMs),J=(async()=>{try{await Promise.resolve().then(()=>$.cleanup())}catch(B){Q=Math.max(Q,1),$.onCleanupError?.(B)}finally{if(X)clearTimeout(X),X=void 0;if(Z==="shutting_down")Z="finished",j(Q)}})(),J},force:Y,getState:()=>Z}}import{release as es}from"node:os";import{createClineTelemetryServiceConfig as $t}from"@cline/shared";O0();GZ();var Zt=300000,Qt=5000;function kM(){let $=$t({metadata:{extension_version:W3,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:es()}}),Z=v2($),Q,J=()=>{try{return Q??=new b1,Q.getProviderSettings("cline")?.auth}catch{return}},X,W=()=>{let Y=J(),V=Y?.accountId?.trim();if(!Y||!V)return;let K=`${V}:${Y.organizationId??""}`;if(K===X)return;X=K,I1(Z.telemetry,{id:V,provider:"cline",organizationId:Y.organizationId,organizationName:Y.organizationName,memberId:Y.memberId})};W();let j=setInterval(W,Zt);return j.unref?.(),{telemetry:Z.telemetry,dispose:async()=>{clearInterval(j);let Y;await Promise.race([(async()=>{await Z.flush(),await Z.dispose()})(),new Promise((V)=>{Y=setTimeout(V,Qt),Y.unref?.()})]),clearTimeout(Y)}}}Xt(process.env.CLINE_VCR);var xM,FH,jt=new Promise(($,Z)=>{xM=$,FH=Z});jt.catch(()=>{return});var Yt=5000,Vt=250;function Kt($){return $ instanceof Error&&$.code==="EADDRINUSE"}async function Bt($,Z){for(;;)try{return await U8(Z)}catch(Q){if(!Kt(Q)&&!H8(Q)||Date.now()>=$)throw Q;await new Promise((J)=>setTimeout(J,Vt))}}function Gt($){let Z=process.cwd(),Q,J,X;for(let W=0;W<$.length;W+=1){let j=$[W],Y=$[W+1];if(j==="--cwd"&&Y){Z=Y,W+=1;continue}if(j==="--host"&&Y){Q=Y,W+=1;continue}if(j==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))J=V;W+=1;continue}if(j==="--pathname"&&Y)X=Y,W+=1}return{cwd:Z,host:Q,port:J,pathname:X}}function Ht($){if($ instanceof Jt)return!0;if($ instanceof Error){if($.name==="AbortError")return!0;if($.code==="ABORT_ERR")return!0}return!1}async function Ut(){let $=Gt(process.argv.slice(2));process.chdir($.cwd);let Z=i1({host:$.host,port:$.port,pathname:$.pathname}),Q=kM(),J=(L)=>L instanceof Error?L.stack||L.message:String(L),X,W,j,Y=(L)=>{if(X)return X.request(L);if(!W||L.exitCode>W.exitCode)W=L;if(!j)j=setTimeout(()=>{let D=W??L;try{process.stderr.write(`[hub-daemon] startup did not reach shutdown coordination after ${D.reason}; forcing process exit
|
|
1039
1039
|
`)}finally{process.exit(D.exitCode)}},UH);return},V=!1,K=(L,D)=>{if(V)return;V=!0,process.stderr.write(`[hub-daemon] ${L}: ${J(D)}
|
|
1040
1040
|
`),Y({reason:L,exitCode:1})},B=0,G=(L)=>{if(B+=1,B>1){if(X){X.force({reason:`second termination signal (${L})`,exitCode:0});return}if(j)clearTimeout(j),j=void 0;process.exit(W?.exitCode??0);return}Y({reason:L,exitCode:0})};process.on("SIGINT",()=>G("SIGINT")),process.on("SIGTERM",()=>G("SIGTERM")),process.on("uncaughtException",(L)=>{K("uncaughtException",L)}),process.on("unhandledRejection",(L)=>{if(Ht(L)){let D=L instanceof Error?L.message:String(L);process.stderr.write(`[hub-daemon] ignored abort rejection: ${D}
|
|
1041
1041
|
`);return}K("unhandledRejection",L)});let H=Date.now()+Yt,U;try{U=await Bt(H,{workspaceRoot:$.cwd,onShutdownRequested:()=>{Y({reason:"authenticated HTTP shutdown request",exitCode:0})},host:Z.host,port:Z.port,pathname:Z.pathname,owner:Wt()==="production"?Z1():s0(),telemetry:Q.telemetry,runtimeHandlers:uX({telemetry:Q.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(L){throw await Q.dispose().catch(()=>{return}),L}let F=new A8({cleanupInstance:(L,D)=>P5(L,D)});if(T8(F),X=SM({deadlineMs:UH,cleanup:async()=>{let L=[];try{F.dispose()}catch(z){L.push(z)}finally{T8(void 0)}let D=U.beginClose();await Promise.allSettled([D.transportStopped]);try{await Q.dispose()}catch(z){L.push(z)}try{await D.closed}catch(z){L.push(z)}if(L.length>0)throw AggregateError(L,"hub daemon shutdown cleanup failed")},exit:(L)=>process.exit(L),onCleanupError:(L)=>{process.stderr.write(`[hub-daemon] shutdown cleanup failed: ${J(L)}
|