clavue 9.7.5 → 9.7.6

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.
Files changed (2) hide show
  1. package/dist/cli.js +4 -4
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -4183,7 +4183,7 @@ This tool's schema was not sent to the API \u2014 it was not in the discovered-t
4183
4183
  `)}function logQueryProfileReport(){ENABLED&&logForDebugging(getQueryProfileReport())}var ENABLED,memorySnapshots2,queryCount,firstTokenTime,init_queryProfiler=__esm({"src/utils/queryProfiler.ts"(){init_debug();init_envUtils();init_profilerBase();ENABLED=isEnvTruthy3(process.env.CLAUDE_CODE_PROFILE_QUERY),memorySnapshots2=new Map,queryCount=0,firstTokenTime=null;__name(startQueryProfile,"startQueryProfile");__name(queryCheckpoint,"queryCheckpoint");__name(endQueryProfile,"endQueryProfile");__name(getSlowWarning,"getSlowWarning");__name(getQueryProfileReport,"getQueryProfileReport");__name(getPhaseSummary,"getPhaseSummary");__name(logQueryProfileReport,"logQueryProfileReport")}});function normalizeToolName(name){return String(name??"").trim()}function getToolBlocksFromContent(content){return Array.isArray(content)?content.filter(block=>!!block&&typeof block=="object"&&block.type==="tool_use"):[]}function hasToolResultBlocks(content){return Array.isArray(content)?content.some(block=>!!block&&typeof block=="object"&&block.type==="tool_result"):!1}function getToolBlocksFromMessage(message){return getToolBlocksFromContent(message.message?.content??message.content)}function hasGpt5ConvergenceReminder(message){if(message.type!=="user"||message.isMeta!==!0)return!1;let content=message.message?.content??message.content;return(typeof content=="string"?content:Array.isArray(content)?content.filter(block=>!!block&&typeof block=="object"&&block.type==="text").map(block=>String(block.text??"")).join(`
4184
4184
  `):"").includes("<gpt5-search-convergence>")}function classifyToolBatch(toolBlocks){let hasAction=!1,hasExploration=!1,hasUnknown=!1;for(let block of toolBlocks){let name=normalizeToolName(block.name);if(!name){hasUnknown=!0;continue}if(ACTION_TOOL_NAMES.has(name)){hasAction=!0;continue}if(EXPLORATION_TOOL_NAMES.has(name)){hasExploration=!0;continue}hasUnknown=!0}return{hasAction,hasExploration,hasUnknown}}function isGpt5SearchConvergenceMainThread({querySource,agentId}){if(agentId)return!1;let value=String(querySource??"").toLowerCase();return value==="sdk"||value==="repl_main_thread"||value.startsWith("repl_main_thread:")}function countRecentConsecutiveGpt5ExplorationTurns(messages){let count4=0;for(let index=messages.length-1;index>=0;index--){let message=messages[index];if(!message||hasGpt5ConvergenceReminder(message))continue;if(message.type==="user"){if(hasToolResultBlocks(message.message?.content??message.content))continue;break}if(message.type!=="assistant")continue;let toolBlocks=getToolBlocksFromMessage(message);if(toolBlocks.length===0)break;let classification=classifyToolBatch(toolBlocks);if(classification.hasAction||classification.hasUnknown)break;classification.hasExploration&&count4++}return count4}function buildReminderMessage(count4,developmentMode){return["<gpt5-search-convergence>",`You have just completed ${count4} consecutive tool rounds that only searched, listed, or read context. Stop broadening the search.`,developmentMode?"This is a development execution turn. Use the evidence already gathered to state the current hypothesis, then edit, run a targeted command, verify, ask one necessary question, or answer. Do not call Read, ReadFiles, Grep, Glob, WebSearch, WebFetch, ToolSearch, or Skill again unless you name the exact missing fact and why it is necessary.":"Use the evidence already gathered to state the current hypothesis, then either make the next concrete edit/command or answer the user. Do not call Read, ReadFiles, Grep, Glob, WebSearch, WebFetch, ToolSearch, or Skill again unless you name the exact missing fact and why it is necessary.","</gpt5-search-convergence>"].join(`
4185
4185
  `)}function buildStopMessage(count4,developmentMode){return["<gpt5-search-convergence>",`Stopped GPT-5 search loop after ${count4} consecutive search/read-only tool rounds.`,developmentMode?"If implementation is still required, identify the best next edit or command from the evidence already collected instead of searching again.":"Return a concise answer from the evidence already collected. If implementation is still required, identify the best next edit or command instead of searching again.","</gpt5-search-convergence>"].join(`
4186
- `)}function evaluateGpt5SearchConvergence({messages,currentToolUseBlocks,querySource,agentId,isGpt5Route,reminderThreshold=DEFAULT_REMINDER_THRESHOLD,stopThreshold=DEFAULT_STOP_THRESHOLD,userTurnText}){if(!isGpt5Route)return{action:"none",consecutiveExplorationTurns:0,reason:"not_gpt5_route"};if(!isGpt5SearchConvergenceMainThread({querySource,agentId}))return{action:"none",consecutiveExplorationTurns:0,reason:"not_foreground_main_thread"};let currentClassification=classifyToolBatch([...currentToolUseBlocks]);if(currentToolUseBlocks.length===0||currentClassification.hasAction||currentClassification.hasUnknown||!currentClassification.hasExploration)return{action:"none",consecutiveExplorationTurns:0,reason:"current_turn_not_search_only"};let nextMessages=[...messages,{type:"assistant",message:{content:[...currentToolUseBlocks]}}],consecutiveExplorationTurns=countRecentConsecutiveGpt5ExplorationTurns(nextMessages),developmentMode=isDevelopmentExecutionPrompt(userTurnText),effectiveReminderThreshold=developmentMode?Math.min(reminderThreshold,DEVELOPMENT_REMINDER_THRESHOLD):reminderThreshold,effectiveStopThreshold=developmentMode?Math.min(stopThreshold,DEVELOPMENT_STOP_THRESHOLD):stopThreshold;return consecutiveExplorationTurns>=effectiveStopThreshold?{action:"stop",consecutiveExplorationTurns,reason:developmentMode?"gpt5_development_search_loop_stop_threshold":"gpt5_search_loop_stop_threshold",message:buildStopMessage(consecutiveExplorationTurns,developmentMode)}:consecutiveExplorationTurns>=effectiveReminderThreshold?{action:"remind",consecutiveExplorationTurns,reason:developmentMode?"gpt5_development_search_loop_reminder_threshold":"gpt5_search_loop_reminder_threshold",message:buildReminderMessage(consecutiveExplorationTurns,developmentMode)}:{action:"none",consecutiveExplorationTurns,reason:"below_threshold"}}var EXPLORATION_TOOL_NAMES,ACTION_TOOL_NAMES,DEFAULT_REMINDER_THRESHOLD,DEFAULT_STOP_THRESHOLD,DEVELOPMENT_REMINDER_THRESHOLD,DEVELOPMENT_STOP_THRESHOLD,init_gpt5SearchConvergence=__esm({"src/query/gpt5SearchConvergence.ts"(){init_gpt5EffortIntent();EXPLORATION_TOOL_NAMES=new Set(["Read","ReadFiles","Grep","Glob","WebFetch","WebSearch","ToolSearch","Skill"]),ACTION_TOOL_NAMES=new Set(["Edit","MultiEdit","Write","NotebookEdit","Bash","PowerShell","Agent","TaskCreate","TaskUpdate","TaskList","TaskGet","TaskOutput","TodoWrite","EnterPlanMode","VerifyPlan","AskUserQuestion","SendMessage","TeamCreate","ExitPlanMode"]),DEFAULT_REMINDER_THRESHOLD=3,DEFAULT_STOP_THRESHOLD=5,DEVELOPMENT_REMINDER_THRESHOLD=3,DEVELOPMENT_STOP_THRESHOLD=6;__name(normalizeToolName,"normalizeToolName");__name(getToolBlocksFromContent,"getToolBlocksFromContent");__name(hasToolResultBlocks,"hasToolResultBlocks");__name(getToolBlocksFromMessage,"getToolBlocksFromMessage");__name(hasGpt5ConvergenceReminder,"hasGpt5ConvergenceReminder");__name(classifyToolBatch,"classifyToolBatch");__name(isGpt5SearchConvergenceMainThread,"isGpt5SearchConvergenceMainThread");__name(countRecentConsecutiveGpt5ExplorationTurns,"countRecentConsecutiveGpt5ExplorationTurns");__name(buildReminderMessage,"buildReminderMessage");__name(buildStopMessage,"buildStopMessage");__name(evaluateGpt5SearchConvergence,"evaluateGpt5SearchConvergence")}});function shouldPersistContentReplacements(querySource){return querySource.startsWith("agent:")||querySource.startsWith("repl_main_thread")}function selectUnboundedResultToolNames(tools){let out=new Set;for(let t2 of tools)Number.isFinite(t2.maxResultSizeChars)||out.add(t2.name);return out}function nextAutoCompactTracking(args){let{compactionResult,consecutiveFailures,prevTracking,mintTurnId}=args;return compactionResult?{compacted:!0,turnId:mintTurnId(),turnCounter:0,consecutiveFailures:0}:consecutiveFailures!==void 0?{...prevTracking??{compacted:!1,turnId:"",turnCounter:0},consecutiveFailures}:prevTracking}function nextTaskBudgetRemaining(args){let{prev,total,finalContextTokens}=args;return Math.max(0,(prev??total)-finalContextTokens)}function nextQueryChainTracking(args){let{prev,mintChainId}=args;return prev?{chainId:prev.chainId,depth:prev.depth+1}:{chainId:mintChainId(),depth:0}}function formatAutoCompactUserMessage(input2){let postTok=input2.truePostCompactTokenCount??input2.postCompactTokenCount??0,preTokForDisplay=input2.preCompactTokenCount??0,cacheSuffix="",cr=input2.compactionCacheReadTokens??0,rate=input2.compactionCacheHitRate;return rate!=null&&rate>0?cacheSuffix=` \xB7 cache hit ${Math.round(rate*100)}%`:cr>0&&(cacheSuffix=` \xB7 cache read ${cr}`),`Context compacted \u2192 ${(postTok/1e3).toFixed(1)}k tokens (from ~${(preTokForDisplay/1e3).toFixed(1)}k, ${input2.durationSeconds}s)${cacheSuffix}`}function buildAutoCompactSucceededEvent(args){let{originalMessageCount,compactionResult,queryChainId,queryDepth}=args,{summaryMessages,attachments,hookResults,preCompactTokenCount,postCompactTokenCount,truePostCompactTokenCount,compactionUsage}=compactionResult,cacheRead=compactionUsage?.cache_read_input_tokens??0,cacheCreation=compactionUsage?.cache_creation_input_tokens??0,total=compactionUsage?compactionUsage.input_tokens+cacheCreation+cacheRead+compactionUsage.output_tokens:0;return{originalMessageCount,compactedMessageCount:summaryMessages.length+attachments.length+hookResults.length,preCompactTokenCount,postCompactTokenCount,truePostCompactTokenCount,compactionInputTokens:compactionUsage?.input_tokens,compactionOutputTokens:compactionUsage?.output_tokens,compactionCacheReadTokens:cacheRead,compactionCacheCreationTokens:cacheCreation,compactionTotalTokens:total,queryChainId,queryDepth}}var init_turn_loop_pre=__esm({"src/runtime/turn-loop-pre.ts"(){__name(shouldPersistContentReplacements,"shouldPersistContentReplacements");__name(selectUnboundedResultToolNames,"selectUnboundedResultToolNames");__name(nextAutoCompactTracking,"nextAutoCompactTracking");__name(nextTaskBudgetRemaining,"nextTaskBudgetRemaining");__name(nextQueryChainTracking,"nextQueryChainTracking");__name(formatAutoCompactUserMessage,"formatAutoCompactUserMessage");__name(buildAutoCompactSucceededEvent,"buildAutoCompactSucceededEvent")}});function contextCollapseOwnsRecovery(args){return args.contextCollapseFeatureOn&&args.contextCollapseEnabled&&args.autoCompactEnabled}function shouldCheckBlockingTokenLimit(args){return args.routeDecision&&(args.routeDecision.recoveryMode==="off"||args.routeDecision.recoveryMode),!(args.hadCompactionThisTurn||args.querySource==="compact"||args.querySource==="session_memory"||args.reactiveCompactEnabled&&args.autoCompactEnabled||args.collapseOwnsRecovery)}function shouldRunHeapPressureLadder(args){return!(args.querySource==="compact"||args.querySource==="session_memory"||args.heapSoftBlockDisabled||args.routeDecision?.recoveryMode==="off")}function buildHeapHardBlockGuidance(input2){let{conversationEmpty,gcAvailable,usedMb,limitMb}=input2,restartMb=Math.max(16384,limitMb*2);return conversationEmpty&&gcAvailable?`Conversation is empty but ${usedMb}MB is still resident after a forced GC. This points to a leaked large object (open MCP transport, background task buffer, or skill keeping references). Restart with CLAVUE_MAX_OLD_SPACE_SIZE_MB=${restartMb} to continue.`:gcAvailable?`Run /clear to free memory in-session, or /exit and restart with CLAVUE_MAX_OLD_SPACE_SIZE_MB=${restartMb} for a larger heap.`:"Run /clear or /exit. (Tip: Clavue normally launches with --expose-gc so /clear can free memory immediately, but CLAVUE_DISABLE_HEAP_REEXEC appears to be set or you launched node directly. Restart without it to enable in-session recovery.)"}function getActiveSubsystemsForTurn(routeDecision){let allowAdvanced=!routeDecision||routeDecision.recoveryMode!=="off";return{snip:allowAdvanced,collapse:allowAdvanced,reactive:allowAdvanced}}var init_turn_loop_route=__esm({"src/runtime/turn-loop-route.ts"(){__name(contextCollapseOwnsRecovery,"contextCollapseOwnsRecovery");__name(shouldCheckBlockingTokenLimit,"shouldCheckBlockingTokenLimit");__name(shouldRunHeapPressureLadder,"shouldRunHeapPressureLadder");__name(buildHeapHardBlockGuidance,"buildHeapHardBlockGuidance");__name(getActiveSubsystemsForTurn,"getActiveSubsystemsForTurn")}});function isWithheldMaxOutputTokens(msg){return msg?.type==="assistant"&&msg.apiError==="max_output_tokens"}function shouldWithholdDispatchMessage(input2){return input2.collapseWithholdsPromptTooLong||input2.reactiveWithholdsPromptTooLong||input2.reactiveWithholdsMediaSize||input2.withholdsMaxOutputTokens}function buildObservableDispatchMessage(message,tools){if(message.type!=="assistant")return message;let clonedContent;for(let i3=0;i3<message.message.content.length;i3++){let block=message.message.content[i3];if(block.type==="tool_use"&&typeof block.input=="object"&&block.input!==null){let tool=findToolByName(tools,block.name);if(tool?.backfillObservableInput){let originalInput=block.input,inputCopy={...originalInput};tool.backfillObservableInput(inputCopy),Object.keys(inputCopy).some(k2=>!(k2 in originalInput))&&(clonedContent??=[...message.message.content],clonedContent[i3]={...block,input:inputCopy})}}}return clonedContent?{...message,message:{...message.message,content:clonedContent}}:message}function buildMissingToolResultBlocks(assistantMessages,errorMessage4,createUserMessage2){let out=[];for(let assistantMessage of assistantMessages){let toolUseBlocks=assistantMessage.message.content.filter(content=>content.type==="tool_use");for(let toolUse of toolUseBlocks)out.push(createUserMessage2({content:[{type:"tool_result",content:errorMessage4,is_error:!0,tool_use_id:toolUse.id}],toolUseResult:errorMessage4,sourceToolAssistantUUID:assistantMessage.uuid}))}return out}var init_turn_loop_dispatch=__esm({"src/runtime/turn-loop-dispatch.ts"(){init_Tool();__name(isWithheldMaxOutputTokens,"isWithheldMaxOutputTokens");__name(shouldWithholdDispatchMessage,"shouldWithholdDispatchMessage");__name(buildObservableDispatchMessage,"buildObservableDispatchMessage");__name(buildMissingToolResultBlocks,"buildMissingToolResultBlocks")}});function buildNextTurnState(params){return{messages:[...params.messagesForQuery,...params.assistantMessages,...params.toolResults,...params.convergenceReminderMessages],toolUseContext:params.toolUseContext,autoCompactTracking:params.autoCompactTracking,turnCount:params.nextTurnCount,maxOutputTokensRecoveryCount:0,emptyPostToolResponseRecoveryCount:0,hasAttemptedReactiveCompact:!1,pendingToolUseSummary:params.pendingToolUseSummary,maxOutputTokensOverride:void 0,stopHookActive:params.stopHookActive,stopHookConsecutiveBlocks:params.stopHookConsecutiveBlocks,transition:{reason:"next_turn"}}}var init_turn_loop_post_turn=__esm({"src/runtime/turn-loop-post-turn.ts"(){__name(buildNextTurnState,"buildNextTurnState")}});function buildContextWindowEscalation(params){if(params.hasAttemptedContextWindowSwap||isEnvTruthy3(process.env.CLAVUE_DISABLE_CONTEXT_WINDOW_SWAP))return null;let tokenGap=getPromptTooLongTokenGap(params.lastMessage),currentTokenCount=tokenCountWithEstimation2(params.messagesForQuery),requiredTokens=tokenGap?currentTokenCount+tokenGap:currentTokenCount,escalation=resolveContextWindowEscalation("mainLoop",requiredTokens);if(!escalation||escalation.model===params.currentModel)return null;let widerModel=escalation.model,originalModel=params.toolUseContext.options.mainLoopModel,widerRouteKeys=getModelRouteKeysForRole2("mainLoop"),widerRouteResolution=getCurrentCodingRouteResolution(widerModel,widerRouteKeys),nextToolUseContext={...params.toolUseContext,options:{...params.toolUseContext.options,mainLoopModel:widerModel,routeDecision:widerRouteResolution.decision,modelRouteKeys:widerRouteKeys,routeSnapshot:widerRouteResolution.snapshot}};return{state:{messages:params.messagesForQuery,toolUseContext:nextToolUseContext,autoCompactTracking:params.autoCompactTracking,maxOutputTokensRecoveryCount:params.maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount:params.emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact:params.hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap:!0,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount:params.turnCount,transition:{reason:"context_window_escalation_retry"}},nextToolUseContext,nextRouteDecision:widerRouteResolution.decision,widerModel,originalModel,requiredTokens}}var init_turn_loop_recover=__esm({"src/runtime/turn-loop-recover.ts"(){init_errors7();init_modelRoles();init_nativeWorkflowCompatibility();init_tokens();init_envUtils();__name(buildContextWindowEscalation,"buildContextWindowEscalation")}});var init_errorIds=__esm({"src/constants/errorIds.ts"(){}});async function generateToolUseSummary({tools,signal,isNonInteractiveSession,lastAssistantText}){if(tools.length===0)return null;try{let toolSummaries=tools.map(tool=>{let inputStr=truncateJson(tool.input,300),outputStr=truncateJson(tool.output,300);return`Tool: ${tool.name}
4186
+ `)}function evaluateGpt5SearchConvergence({messages,currentToolUseBlocks,querySource,agentId,isGpt5Route,reminderThreshold=DEFAULT_REMINDER_THRESHOLD,stopThreshold=DEFAULT_STOP_THRESHOLD,userTurnText}){if(!isGpt5Route)return{action:"none",consecutiveExplorationTurns:0,reason:"not_gpt5_route"};if(!isGpt5SearchConvergenceMainThread({querySource,agentId}))return{action:"none",consecutiveExplorationTurns:0,reason:"not_foreground_main_thread"};let currentClassification=classifyToolBatch([...currentToolUseBlocks]);if(currentToolUseBlocks.length===0||currentClassification.hasAction||currentClassification.hasUnknown||!currentClassification.hasExploration)return{action:"none",consecutiveExplorationTurns:0,reason:"current_turn_not_search_only"};let nextMessages=[...messages,{type:"assistant",message:{content:[...currentToolUseBlocks]}}],consecutiveExplorationTurns=countRecentConsecutiveGpt5ExplorationTurns(nextMessages),developmentMode=isDevelopmentExecutionPrompt(userTurnText),effectiveReminderThreshold=developmentMode?Math.min(reminderThreshold,DEVELOPMENT_REMINDER_THRESHOLD):reminderThreshold,effectiveStopThreshold=developmentMode?Math.min(stopThreshold,DEVELOPMENT_STOP_THRESHOLD):stopThreshold;return consecutiveExplorationTurns>=effectiveStopThreshold?{action:"stop",consecutiveExplorationTurns,reason:developmentMode?"gpt5_development_search_loop_stop_threshold":"gpt5_search_loop_stop_threshold",message:buildStopMessage(consecutiveExplorationTurns,developmentMode)}:consecutiveExplorationTurns>=effectiveReminderThreshold?{action:"remind",consecutiveExplorationTurns,reason:developmentMode?"gpt5_development_search_loop_reminder_threshold":"gpt5_search_loop_reminder_threshold",message:buildReminderMessage(consecutiveExplorationTurns,developmentMode)}:{action:"none",consecutiveExplorationTurns,reason:"below_threshold"}}var EXPLORATION_TOOL_NAMES,ACTION_TOOL_NAMES,DEFAULT_REMINDER_THRESHOLD,DEFAULT_STOP_THRESHOLD,DEVELOPMENT_REMINDER_THRESHOLD,DEVELOPMENT_STOP_THRESHOLD,init_gpt5SearchConvergence=__esm({"src/query/gpt5SearchConvergence.ts"(){init_gpt5EffortIntent();EXPLORATION_TOOL_NAMES=new Set(["Read","ReadFiles","Grep","Glob","WebFetch","WebSearch","ToolSearch","Skill"]),ACTION_TOOL_NAMES=new Set(["Edit","MultiEdit","Write","NotebookEdit","Bash","PowerShell","Agent","TaskCreate","TaskUpdate","TaskList","TaskGet","TaskOutput","TodoWrite","EnterPlanMode","VerifyPlan","AskUserQuestion","SendMessage","TeamCreate","ExitPlanMode"]),DEFAULT_REMINDER_THRESHOLD=3,DEFAULT_STOP_THRESHOLD=5,DEVELOPMENT_REMINDER_THRESHOLD=3,DEVELOPMENT_STOP_THRESHOLD=6;__name(normalizeToolName,"normalizeToolName");__name(getToolBlocksFromContent,"getToolBlocksFromContent");__name(hasToolResultBlocks,"hasToolResultBlocks");__name(getToolBlocksFromMessage,"getToolBlocksFromMessage");__name(hasGpt5ConvergenceReminder,"hasGpt5ConvergenceReminder");__name(classifyToolBatch,"classifyToolBatch");__name(isGpt5SearchConvergenceMainThread,"isGpt5SearchConvergenceMainThread");__name(countRecentConsecutiveGpt5ExplorationTurns,"countRecentConsecutiveGpt5ExplorationTurns");__name(buildReminderMessage,"buildReminderMessage");__name(buildStopMessage,"buildStopMessage");__name(evaluateGpt5SearchConvergence,"evaluateGpt5SearchConvergence")}});function shouldPersistContentReplacements(querySource){return querySource.startsWith("agent:")||querySource.startsWith("repl_main_thread")}function selectUnboundedResultToolNames(tools){let out=new Set;for(let t2 of tools)Number.isFinite(t2.maxResultSizeChars)||out.add(t2.name);return out}function nextAutoCompactTracking(args){let{compactionResult,consecutiveFailures,prevTracking,mintTurnId}=args;return compactionResult?{compacted:!0,turnId:mintTurnId(),turnCounter:0,consecutiveFailures:0}:consecutiveFailures!==void 0?{...prevTracking??{compacted:!1,turnId:"",turnCounter:0},consecutiveFailures}:prevTracking}function nextTaskBudgetRemaining(args){let{prev,total,finalContextTokens}=args;return Math.max(0,(prev??total)-finalContextTokens)}function nextQueryChainTracking(args){let{prev,mintChainId}=args;return prev?{chainId:prev.chainId,depth:prev.depth+1}:{chainId:mintChainId(),depth:0}}function formatAutoCompactUserMessage(input2){let postTok=input2.truePostCompactTokenCount??input2.postCompactTokenCount??0,preTokForDisplay=input2.preCompactTokenCount??0,cacheSuffix="",cr=input2.compactionCacheReadTokens??0,rate=input2.compactionCacheHitRate;return rate!=null&&rate>0?cacheSuffix=` \xB7 cache hit ${Math.round(rate*100)}%`:cr>0&&(cacheSuffix=` \xB7 cache read ${cr}`),`Context compacted \u2192 ${(postTok/1e3).toFixed(1)}k tokens (from ~${(preTokForDisplay/1e3).toFixed(1)}k, ${input2.durationSeconds}s)${cacheSuffix}`}function buildAutoCompactSucceededEvent(args){let{originalMessageCount,compactionResult,queryChainId,queryDepth}=args,{summaryMessages,attachments,hookResults,preCompactTokenCount,postCompactTokenCount,truePostCompactTokenCount,compactionUsage}=compactionResult,cacheRead=compactionUsage?.cache_read_input_tokens??0,cacheCreation=compactionUsage?.cache_creation_input_tokens??0,total=compactionUsage?compactionUsage.input_tokens+cacheCreation+cacheRead+compactionUsage.output_tokens:0;return{originalMessageCount,compactedMessageCount:summaryMessages.length+attachments.length+hookResults.length,preCompactTokenCount,postCompactTokenCount,truePostCompactTokenCount,compactionInputTokens:compactionUsage?.input_tokens,compactionOutputTokens:compactionUsage?.output_tokens,compactionCacheReadTokens:cacheRead,compactionCacheCreationTokens:cacheCreation,compactionTotalTokens:total,queryChainId,queryDepth}}var init_turn_loop_pre=__esm({"src/runtime/turn-loop-pre.ts"(){__name(shouldPersistContentReplacements,"shouldPersistContentReplacements");__name(selectUnboundedResultToolNames,"selectUnboundedResultToolNames");__name(nextAutoCompactTracking,"nextAutoCompactTracking");__name(nextTaskBudgetRemaining,"nextTaskBudgetRemaining");__name(nextQueryChainTracking,"nextQueryChainTracking");__name(formatAutoCompactUserMessage,"formatAutoCompactUserMessage");__name(buildAutoCompactSucceededEvent,"buildAutoCompactSucceededEvent")}});function contextCollapseOwnsRecovery(args){return args.contextCollapseFeatureOn&&args.contextCollapseEnabled&&args.autoCompactEnabled}function shouldCheckBlockingTokenLimit(args){return args.routeDecision&&(args.routeDecision.recoveryMode==="off"||args.routeDecision.recoveryMode),!(args.hadCompactionThisTurn||args.querySource==="compact"||args.querySource==="session_memory"||args.reactiveCompactEnabled&&args.autoCompactEnabled||args.collapseOwnsRecovery)}function shouldRunHeapPressureLadder(args){return!(args.querySource==="compact"||args.querySource==="session_memory"||args.heapSoftBlockDisabled||args.routeDecision?.recoveryMode==="off")}function buildHeapHardBlockGuidance(input2){let{conversationEmpty,gcAvailable,usedMb,limitMb}=input2,restartMb=Math.max(16384,limitMb*2);return conversationEmpty&&gcAvailable?`Conversation is empty but ${usedMb}MB is still resident after a forced GC. This points to a leaked large object (open MCP transport, background task buffer, or skill keeping references). Restart with CLAVUE_MAX_OLD_SPACE_SIZE_MB=${restartMb} to continue.`:gcAvailable?`Run /clear to free memory in-session, or /exit and restart with CLAVUE_MAX_OLD_SPACE_SIZE_MB=${restartMb} for a larger heap.`:"Run /clear or /exit. (Tip: Clavue normally launches with --expose-gc so /clear can free memory immediately, but CLAVUE_DISABLE_HEAP_REEXEC appears to be set or you launched node directly. Restart without it to enable in-session recovery.)"}function getActiveSubsystemsForTurn(routeDecision){let allowAdvanced=!routeDecision||routeDecision.recoveryMode!=="off";return{snip:allowAdvanced,collapse:allowAdvanced,reactive:allowAdvanced}}var init_turn_loop_route=__esm({"src/runtime/turn-loop-route.ts"(){__name(contextCollapseOwnsRecovery,"contextCollapseOwnsRecovery");__name(shouldCheckBlockingTokenLimit,"shouldCheckBlockingTokenLimit");__name(shouldRunHeapPressureLadder,"shouldRunHeapPressureLadder");__name(buildHeapHardBlockGuidance,"buildHeapHardBlockGuidance");__name(getActiveSubsystemsForTurn,"getActiveSubsystemsForTurn")}});function isWithheldMaxOutputTokens(msg){return msg?.type==="assistant"&&msg.apiError==="max_output_tokens"}function shouldWithholdDispatchMessage(input2){return input2.collapseWithholdsPromptTooLong||input2.reactiveWithholdsPromptTooLong||input2.reactiveWithholdsMediaSize||input2.withholdsMaxOutputTokens}function buildObservableDispatchMessage(message,tools){if(message.type!=="assistant")return message;let clonedContent;for(let i3=0;i3<message.message.content.length;i3++){let block=message.message.content[i3];if(block.type==="tool_use"&&typeof block.input=="object"&&block.input!==null){let tool=findToolByName(tools,block.name);if(tool?.backfillObservableInput){let originalInput=block.input,inputCopy={...originalInput};tool.backfillObservableInput(inputCopy),Object.keys(inputCopy).some(k2=>!(k2 in originalInput))&&(clonedContent??=[...message.message.content],clonedContent[i3]={...block,input:inputCopy})}}}return clonedContent?{...message,message:{...message.message,content:clonedContent}}:message}function buildMissingToolResultBlocks(assistantMessages,errorMessage4,createUserMessage2){let out=[];for(let assistantMessage of assistantMessages){let toolUseBlocks=assistantMessage.message.content.filter(content=>content.type==="tool_use");for(let toolUse of toolUseBlocks)out.push(createUserMessage2({content:[{type:"tool_result",content:errorMessage4,is_error:!0,tool_use_id:toolUse.id}],toolUseResult:errorMessage4,sourceToolAssistantUUID:assistantMessage.uuid}))}return out}var init_turn_loop_dispatch=__esm({"src/runtime/turn-loop-dispatch.ts"(){init_Tool();__name(isWithheldMaxOutputTokens,"isWithheldMaxOutputTokens");__name(shouldWithholdDispatchMessage,"shouldWithholdDispatchMessage");__name(buildObservableDispatchMessage,"buildObservableDispatchMessage");__name(buildMissingToolResultBlocks,"buildMissingToolResultBlocks")}});function buildNextTurnState(params){return{messages:[...params.messagesForQuery,...params.assistantMessages,...params.toolResults,...params.convergenceReminderMessages],toolUseContext:params.toolUseContext,autoCompactTracking:params.autoCompactTracking,turnCount:params.nextTurnCount,maxOutputTokensRecoveryCount:0,emptyPostToolResponseRecoveryCount:0,hasAttemptedReactiveCompact:!1,pendingToolUseSummary:params.pendingToolUseSummary,maxOutputTokensOverride:void 0,stopHookActive:params.stopHookActive,stopHookConsecutiveBlocks:params.stopHookConsecutiveBlocks,transition:{reason:params.toolResults.length>0?"tools_executed":"next_turn"}}}var init_turn_loop_post_turn=__esm({"src/runtime/turn-loop-post-turn.ts"(){__name(buildNextTurnState,"buildNextTurnState")}});function buildContextWindowEscalation(params){if(params.hasAttemptedContextWindowSwap||isEnvTruthy3(process.env.CLAVUE_DISABLE_CONTEXT_WINDOW_SWAP))return null;let tokenGap=getPromptTooLongTokenGap(params.lastMessage),currentTokenCount=tokenCountWithEstimation2(params.messagesForQuery),requiredTokens=tokenGap?currentTokenCount+tokenGap:currentTokenCount,escalation=resolveContextWindowEscalation("mainLoop",requiredTokens);if(!escalation||escalation.model===params.currentModel)return null;let widerModel=escalation.model,originalModel=params.toolUseContext.options.mainLoopModel,widerRouteKeys=getModelRouteKeysForRole2("mainLoop"),widerRouteResolution=getCurrentCodingRouteResolution(widerModel,widerRouteKeys),nextToolUseContext={...params.toolUseContext,options:{...params.toolUseContext.options,mainLoopModel:widerModel,routeDecision:widerRouteResolution.decision,modelRouteKeys:widerRouteKeys,routeSnapshot:widerRouteResolution.snapshot}};return{state:{messages:params.messagesForQuery,toolUseContext:nextToolUseContext,autoCompactTracking:params.autoCompactTracking,maxOutputTokensRecoveryCount:params.maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount:params.emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact:params.hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap:!0,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount:params.turnCount,transition:{reason:"context_window_escalation_retry"}},nextToolUseContext,nextRouteDecision:widerRouteResolution.decision,widerModel,originalModel,requiredTokens}}var init_turn_loop_recover=__esm({"src/runtime/turn-loop-recover.ts"(){init_errors7();init_modelRoles();init_nativeWorkflowCompatibility();init_tokens();init_envUtils();__name(buildContextWindowEscalation,"buildContextWindowEscalation")}});var init_errorIds=__esm({"src/constants/errorIds.ts"(){}});async function generateToolUseSummary({tools,signal,isNonInteractiveSession,lastAssistantText}){if(tools.length===0)return null;try{let toolSummaries=tools.map(tool=>{let inputStr=truncateJson(tool.input,300),outputStr=truncateJson(tool.output,300);return`Tool: ${tool.name}
4187
4187
  Input: ${inputStr}
4188
4188
  Output: ${outputStr}`}).join(`
4189
4189
 
@@ -4276,13 +4276,13 @@ ${extra}`:""}`}var init_consolidationPrompt=__esm({"src/services/autoDream/conso
4276
4276
 
4277
4277
  Sessions since last consolidation (${sessionIds.length}):
4278
4278
  ${sessionIds.map(id=>`- ${id}`).join(`
4279
- `)}`,prompt=buildConsolidationPrompt(memoryRoot,transcriptDir,extra),result2=await runForkedAgent({promptMessages:[createUserMessage({content:prompt})],cacheSafeParams:createCacheSafeParams(context2),canUseTool:createAutoMemCanUseTool(memoryRoot),querySource:"auto_dream",forkLabel:"auto_dream",skipTranscript:!0,overrides:{abortController},onMessage:makeDreamProgressWatcher(taskId,setAppState)});completeDreamTask(taskId,setAppState);let dreamState=context2.toolUseContext.getAppState().tasks?.[taskId];appendSystemMessage&&isDreamTask(dreamState)&&dreamState.filesTouched.length>0&&appendSystemMessage({...createMemorySavedMessage(dreamState.filesTouched),verb:"Improved"}),logForDebugging(`[autoDream] completed \u2014 cache: read=${result2.totalUsage.cache_read_input_tokens} created=${result2.totalUsage.cache_creation_input_tokens}`),logEvent("tengu_auto_dream_completed",{cache_read:result2.totalUsage.cache_read_input_tokens,cache_created:result2.totalUsage.cache_creation_input_tokens,output:result2.totalUsage.output_tokens,sessions_reviewed:sessionIds.length})}catch(e2){if(abortController.signal.aborted){logForDebugging("[autoDream] aborted by user");return}logForDebugging(`[autoDream] fork failed: ${e2.message}`),logEvent("tengu_auto_dream_failed",{}),failDreamTask(taskId,setAppState),await rollbackConsolidationLock(priorMtime)}},"runAutoDream")}function makeDreamProgressWatcher(taskId,setAppState){return msg=>{if(msg.type!=="assistant")return;let text="",toolUseCount=0,touchedPaths=[];for(let block of msg.message.content)if(block.type==="text")text+=block.text;else if(block.type==="tool_use"&&(toolUseCount++,block.name===FILE_EDIT_TOOL_NAME||block.name===FILE_WRITE_TOOL_NAME)){let input2=block.input;typeof input2.file_path=="string"&&touchedPaths.push(input2.file_path)}addDreamTurn(taskId,{text:text.trim(),toolUseCount},touchedPaths,setAppState)}}async function executeAutoDream(context2,appendSystemMessage){await runner?.(context2,appendSystemMessage)}var SESSION_SCAN_INTERVAL_MS,DEFAULTS,runner,init_autoDream=__esm({"src/services/autoDream/autoDream.ts"(){init_forkedAgent();init_messages4();init_debug();init_analytics();init_growthbook();init_paths2();init_config5();init_sessionStorage();init_state();init_extractMemories();init_consolidationPrompt();init_consolidationLock();init_DreamTask();init_constants16();init_prompt4();SESSION_SCAN_INTERVAL_MS=600*1e3,DEFAULTS={minHours:24,minSessions:5};__name(getConfig3,"getConfig");__name(isGateOpen,"isGateOpen");__name(isForced,"isForced");runner=null;__name(initAutoDream,"initAutoDream");__name(makeDreamProgressWatcher,"makeDreamProgressWatcher");__name(executeAutoDream,"executeAutoDream")}});async function*handleStopHooks(messagesForQuery,assistantMessages,systemPrompt,userContext,systemContext,toolUseContext,querySource,stopHookActive){let hookStartTime=Date.now(),stopHookContext={messages:[...messagesForQuery,...assistantMessages],systemPrompt,userContext,systemContext,toolUseContext,querySource};(querySource==="repl_main_thread"||querySource==="sdk")&&saveCacheSafeParams(createCacheSafeParams(stopHookContext)),isBareMode()||(isEnvDefinedFalsy(process.env.CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION)||executePromptSuggestion(stopHookContext),toolUseContext.agentId||executeAutoDream(stopHookContext,toolUseContext.appendSystemMessage));try{let blockingErrors=[],permissionMode=toolUseContext.getAppState().toolPermissionContext.mode,generator=executeStopHooks(permissionMode,toolUseContext.abortController.signal,void 0,stopHookActive??!1,toolUseContext.agentId,toolUseContext,[...messagesForQuery,...assistantMessages],toolUseContext.agentType),stopHookToolUseID="",hookCount=0,preventedContinuation=!1,stopReason="",hasOutput=!1,hookErrors=[],hookInfos=[];for await(let result2 of generator){if(result2.message){if(yield result2.message,result2.message.type==="progress"&&result2.message.toolUseID){stopHookToolUseID=result2.message.toolUseID,hookCount++;let progressData=result2.message.data;progressData.command&&hookInfos.push({command:progressData.command,promptText:progressData.promptText})}if(result2.message.type==="attachment"){let attachment=result2.message.attachment;if("hookEvent"in attachment&&(attachment.hookEvent==="Stop"||attachment.hookEvent==="SubagentStop")&&(attachment.type==="hook_non_blocking_error"?(hookErrors.push(attachment.stderr||`Exit code ${attachment.exitCode}`),hasOutput=!0):attachment.type==="hook_error_during_execution"?(hookErrors.push(attachment.content),hasOutput=!0):attachment.type==="hook_success"&&(attachment.stdout&&attachment.stdout.trim()||attachment.stderr&&attachment.stderr.trim())&&(hasOutput=!0),"durationMs"in attachment&&"command"in attachment)){let info=hookInfos.find(i3=>i3.command===attachment.command&&i3.durationMs===void 0);info&&(info.durationMs=attachment.durationMs)}}}if(result2.blockingError){let userMessage=createUserMessage({content:getStopHookMessage(result2.blockingError),isMeta:!0});blockingErrors.push(userMessage),yield userMessage,hasOutput=!0,hookErrors.push(result2.blockingError.blockingError)}if(result2.preventContinuation&&(preventedContinuation=!0,stopReason=result2.stopReason||"Stop hook prevented continuation",yield createAttachmentMessage({type:"hook_stopped_continuation",message:stopReason,hookName:"Stop",toolUseID:stopHookToolUseID,hookEvent:"Stop"})),toolUseContext.abortController.signal.aborted)return logEvent("tengu_pre_stop_hooks_cancelled",{queryChainId:toolUseContext.queryTracking?.chainId,queryDepth:toolUseContext.queryTracking?.depth}),yield createUserInterruptionMessage({toolUse:!1}),{blockingErrors:[],preventContinuation:!0}}if(hookCount>0&&(yield createStopHookSummaryMessage(hookCount,hookInfos,hookErrors,preventedContinuation,stopReason,hasOutput,"suggestion",stopHookToolUseID),hookErrors.length>0)){let expandShortcut=getShortcutDisplay("app:toggleTranscript","Global","ctrl+o");toolUseContext.addNotification?.({key:"stop-hook-error",text:`Stop hook error occurred \xB7 ${expandShortcut} to see`,priority:"immediate"})}if(preventedContinuation)return{blockingErrors:[],preventContinuation:!0};if(blockingErrors.length>0)return{blockingErrors,preventContinuation:!1};if(isTeammate()){let teammateName=getAgentName()??"",teamName=getTeamName()??"",teammateBlockingErrors=[],teammatePreventedContinuation=!1,teammateStopReason,teammateHookToolUseID="",taskListId=getTaskListId(),inProgressTasks=(await listTasks(taskListId)).filter(t2=>t2.status==="in_progress"&&t2.owner===teammateName);for(let task of inProgressTasks){let taskCompletedGenerator=executeTaskCompletedHooks(task.id,task.subject,task.description,teammateName,teamName,permissionMode,toolUseContext.abortController.signal,void 0,toolUseContext);for await(let result2 of taskCompletedGenerator){if(result2.message&&(result2.message.type==="progress"&&result2.message.toolUseID&&(teammateHookToolUseID=result2.message.toolUseID),yield result2.message),result2.blockingError){let userMessage=createUserMessage({content:getTaskCompletedHookMessage(result2.blockingError),isMeta:!0});teammateBlockingErrors.push(userMessage),yield userMessage}if(result2.preventContinuation&&(teammatePreventedContinuation=!0,teammateStopReason=result2.stopReason||"TaskCompleted hook prevented continuation",yield createAttachmentMessage({type:"hook_stopped_continuation",message:teammateStopReason,hookName:"TaskCompleted",toolUseID:teammateHookToolUseID,hookEvent:"TaskCompleted"})),toolUseContext.abortController.signal.aborted)return{blockingErrors:[],preventContinuation:!0}}}let teammateIdleGenerator=executeTeammateIdleHooks(teammateName,teamName,permissionMode,toolUseContext.abortController.signal);for await(let result2 of teammateIdleGenerator){if(result2.message&&(result2.message.type==="progress"&&result2.message.toolUseID&&(teammateHookToolUseID=result2.message.toolUseID),yield result2.message),result2.blockingError){let userMessage=createUserMessage({content:getTeammateIdleHookMessage(result2.blockingError),isMeta:!0});teammateBlockingErrors.push(userMessage),yield userMessage}if(result2.preventContinuation&&(teammatePreventedContinuation=!0,teammateStopReason=result2.stopReason||"TeammateIdle hook prevented continuation",yield createAttachmentMessage({type:"hook_stopped_continuation",message:teammateStopReason,hookName:"TeammateIdle",toolUseID:teammateHookToolUseID,hookEvent:"TeammateIdle"})),toolUseContext.abortController.signal.aborted)return{blockingErrors:[],preventContinuation:!0}}if(teammatePreventedContinuation)return{blockingErrors:[],preventContinuation:!0};if(teammateBlockingErrors.length>0)return{blockingErrors:teammateBlockingErrors,preventContinuation:!1}}return{blockingErrors:[],preventContinuation:!1}}catch(error40){let durationMs=Date.now()-hookStartTime;return logEvent("tengu_stop_hook_error",{duration:durationMs,queryChainId:toolUseContext.queryTracking?.chainId,queryDepth:toolUseContext.queryTracking?.depth}),yield createSystemMessage(`Stop hook failed: ${errorMessage(error40)}`,"warning"),{blockingErrors:[],preventContinuation:!1}}}var init_stopHooks=__esm({"src/query/stopHooks.ts"(){init_shortcutFormat();init_paths2();init_analytics();init_attachments2();init_debug();init_errors2();init_hooks3();init_messages4();init_tasks();init_teammate();init_autoDream();init_promptSuggestion();init_envUtils();init_forkedAgent();__name(handleStopHooks,"handleStopHooks")}});function buildQueryConfig(){return{sessionId:getSessionId(),gates:{streamingToolExecution:checkStatsigFeatureGate_CACHED_MAY_BE_STALE("tengu_streaming_tool_execution2"),emitToolUseSummaries:isEnvTruthy3(process.env.CLAUDE_CODE_EMIT_TOOL_USE_SUMMARIES),isAnt:process.env.USER_TYPE==="ant",fastModeEnabled:!isEnvTruthy3(process.env.CLAUDE_CODE_DISABLE_FAST_MODE)}}}var init_config6=__esm({"src/query/config.ts"(){init_state();init_growthbook();init_envUtils();__name(buildQueryConfig,"buildQueryConfig")}});import{randomUUID as randomUUID26}from"crypto";function productionDeps(){return{callModel:queryModelWithStreaming,microcompact:microcompactMessages,autocompact:autoCompactIfNeeded,uuid:randomUUID26}}var init_deps=__esm({"src/query/deps.ts"(){init_claude();init_autoCompact();init_microCompact();__name(productionDeps,"productionDeps")}});var VERBOSE_RE,VERBOSE_RE_G,init_tokenBudget=__esm({"src/utils/tokenBudget.ts"(){VERBOSE_RE=/\b(?:use|spend)\s+(\d+(?:\.\d+)?)\s*(k|m|b)\s*tokens?\b/i,VERBOSE_RE_G=new RegExp(VERBOSE_RE.source,"gi")}});var init_tokenBudget2=__esm({"src/query/tokenBudget.ts"(){init_tokenBudget()}});function messageHasOnlyToolResults(message){if(message?.type!=="user")return!1;let content=message.message.content;return Array.isArray(content)&&content.length>0&&content.every(block=>"type"in block&&block.type==="tool_result")}function assistantMessageHasVisibleText(message){return message?.type!=="assistant"?!1:message.message.content.some(block=>block.type==="text"&&block.text.trim().length>0)}function isEmptyPostToolFollowUpTurn(lastAssistantMessage,lastInputMessage,toolResultCount=0){return lastAssistantMessage?.type==="assistant"&&lastAssistantMessage.message.stop_reason==="end_turn"&&!assistantMessageHasVisibleText(lastAssistantMessage)&&(toolResultCount>0||messageHasOnlyToolResults(lastInputMessage))}var init_emptyPostToolFollowup=__esm({"src/query/emptyPostToolFollowup.ts"(){__name(messageHasOnlyToolResults,"messageHasOnlyToolResults");__name(assistantMessageHasVisibleText,"assistantMessageHasVisibleText");__name(isEmptyPostToolFollowUpTurn,"isEmptyPostToolFollowUpTurn")}});function getPendingAgentFollowupContinuation({assistantMessageCount,toolUseContext,turnCount,maxTurns}){if(assistantMessageCount===0)return null;let agentId=toolUseContext.agentId;if(!agentId)return null;let task=toolUseContext.getAppState().tasks[agentId];if(!isLocalAgentTask(task)||task.pendingMessages.length===0)return null;let nextTurnCount=turnCount+1;if(maxTurns&&nextTurnCount>maxTurns)return{type:"max_turns",nextTurnCount};let drained=drainPendingMessages(agentId,toolUseContext.getAppState,toolUseContext.setAppStateForTasks??toolUseContext.setAppState);return drained.length===0?null:{type:"continue",nextTurnCount,attachments:drained.map(msg=>createAttachmentMessage({type:"queued_command",prompt:msg,origin:{kind:"coordinator"},isMeta:!0}))}}var init_pendingAgentFollowup=__esm({"src/query/pendingAgentFollowup.ts"(){init_attachments2();init_LocalAgentTask();__name(getPendingAgentFollowupContinuation,"getPendingAgentFollowupContinuation")}});var LegacyMemoryBridge_exports={};__export(LegacyMemoryBridge_exports,{createLegacyMemoryBridge:()=>createLegacyMemoryBridge,getDefaultLegacyMemoryBridge:()=>getDefaultLegacyMemoryBridge,parseHandoffSidecar:()=>parseHandoffSidecar,resetLegacyBridgeForTests:()=>resetLegacyBridgeForTests});import{readFile as readFile29}from"fs/promises";function createLegacyMemoryBridge(config3={}){if(bridgeInstance)return bridgeInstance;let enabled=config3.enabled??!0,bridge2={async promoteTranscriptSegment(messages){if(!(!enabled||!messages?.length))try{log(`promoteTranscriptSegment called with ${messages.length} messages. Phase 0.7: \u4EC5\u8BB0\u5F55\uFF0C\u672A\u6765\u5C06\u8F6C\u6362\u4E3A MemoryEvent \u5E76\u5199\u5165 EventLog + KnowledgeGraph\u3002`)}catch(err2){log(`promoteTranscriptSegment failed safely: ${err2?.message}`)}},async importHandoffSidecar(path29){if(!(!enabled||!path29))try{let basename63=path29.split(/[\\/]/).pop()||path29,content=await readFile29(path29,"utf8"),parsed=parseHandoffSidecar(content),eventLog=getDefaultEventLog(),stateStore=getDefaultHandoffStateStore(),kg=getDefaultKnowledgeGraph(),handoffEvent={type:"HandoffImported",agentId:"legacy-migration",sessionId:parsed.sessionId||void 0,payload:{path:path29,basename:basename63,...parsed,importedAt:new Date().toISOString()},metadata:{reason:"legacy-handoff-sidecar",triggeredBy:"system"}};await eventLog.append(handoffEvent),await stateStore.applyEvents([handoffEvent]),await kg.ingestHandoffEvent(handoffEvent),log(`importHandoffSidecar \u6210\u529F\u89E3\u6790\u771F\u5B9E sidecar \u5E76\u751F\u6210 Event + State + KG: ${basename63} (entities=${kg.entityCount})`)}catch(err2){log(`importHandoffSidecar failed safely: ${err2?.message}`)}},async getLegacyTranscriptView(){return[]}};return bridgeInstance=bridge2,bridge2}function resetLegacyBridgeForTests(){bridgeInstance=null}function getDefaultLegacyMemoryBridge(){return createLegacyMemoryBridge()}function parseHandoffSidecar(content){let result2={},fmMatch=content.match(/^---\n([\s\S]*?)\n---/);if(fmMatch){let lines=fmMatch[1].split(`
4279
+ `)}`,prompt=buildConsolidationPrompt(memoryRoot,transcriptDir,extra),result2=await runForkedAgent({promptMessages:[createUserMessage({content:prompt})],cacheSafeParams:createCacheSafeParams(context2),canUseTool:createAutoMemCanUseTool(memoryRoot),querySource:"auto_dream",forkLabel:"auto_dream",skipTranscript:!0,overrides:{abortController},onMessage:makeDreamProgressWatcher(taskId,setAppState)});completeDreamTask(taskId,setAppState);let dreamState=context2.toolUseContext.getAppState().tasks?.[taskId];appendSystemMessage&&isDreamTask(dreamState)&&dreamState.filesTouched.length>0&&appendSystemMessage({...createMemorySavedMessage(dreamState.filesTouched),verb:"Improved"}),logForDebugging(`[autoDream] completed \u2014 cache: read=${result2.totalUsage.cache_read_input_tokens} created=${result2.totalUsage.cache_creation_input_tokens}`),logEvent("tengu_auto_dream_completed",{cache_read:result2.totalUsage.cache_read_input_tokens,cache_created:result2.totalUsage.cache_creation_input_tokens,output:result2.totalUsage.output_tokens,sessions_reviewed:sessionIds.length})}catch(e2){if(abortController.signal.aborted){logForDebugging("[autoDream] aborted by user");return}logForDebugging(`[autoDream] fork failed: ${e2.message}`),logEvent("tengu_auto_dream_failed",{}),failDreamTask(taskId,setAppState),await rollbackConsolidationLock(priorMtime)}},"runAutoDream")}function makeDreamProgressWatcher(taskId,setAppState){return msg=>{if(msg.type!=="assistant")return;let text="",toolUseCount=0,touchedPaths=[];for(let block of msg.message.content)if(block.type==="text")text+=block.text;else if(block.type==="tool_use"&&(toolUseCount++,block.name===FILE_EDIT_TOOL_NAME||block.name===FILE_WRITE_TOOL_NAME)){let input2=block.input;typeof input2.file_path=="string"&&touchedPaths.push(input2.file_path)}addDreamTurn(taskId,{text:text.trim(),toolUseCount},touchedPaths,setAppState)}}async function executeAutoDream(context2,appendSystemMessage){await runner?.(context2,appendSystemMessage)}var SESSION_SCAN_INTERVAL_MS,DEFAULTS,runner,init_autoDream=__esm({"src/services/autoDream/autoDream.ts"(){init_forkedAgent();init_messages4();init_debug();init_analytics();init_growthbook();init_paths2();init_config5();init_sessionStorage();init_state();init_extractMemories();init_consolidationPrompt();init_consolidationLock();init_DreamTask();init_constants16();init_prompt4();SESSION_SCAN_INTERVAL_MS=600*1e3,DEFAULTS={minHours:24,minSessions:5};__name(getConfig3,"getConfig");__name(isGateOpen,"isGateOpen");__name(isForced,"isForced");runner=null;__name(initAutoDream,"initAutoDream");__name(makeDreamProgressWatcher,"makeDreamProgressWatcher");__name(executeAutoDream,"executeAutoDream")}});async function*handleStopHooks(messagesForQuery,assistantMessages,systemPrompt,userContext,systemContext,toolUseContext,querySource,stopHookActive){let hookStartTime=Date.now(),stopHookContext={messages:[...messagesForQuery,...assistantMessages],systemPrompt,userContext,systemContext,toolUseContext,querySource};(querySource==="repl_main_thread"||querySource==="sdk")&&saveCacheSafeParams(createCacheSafeParams(stopHookContext)),isBareMode()||(isEnvDefinedFalsy(process.env.CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION)||executePromptSuggestion(stopHookContext),toolUseContext.agentId||executeAutoDream(stopHookContext,toolUseContext.appendSystemMessage));try{let blockingErrors=[],permissionMode=toolUseContext.getAppState().toolPermissionContext.mode,generator=executeStopHooks(permissionMode,toolUseContext.abortController.signal,void 0,stopHookActive??!1,toolUseContext.agentId,toolUseContext,[...messagesForQuery,...assistantMessages],toolUseContext.agentType),stopHookToolUseID="",hookCount=0,preventedContinuation=!1,stopReason="",hasOutput=!1,hookErrors=[],hookInfos=[];for await(let result2 of generator){if(result2.message){if(yield result2.message,result2.message.type==="progress"&&result2.message.toolUseID){stopHookToolUseID=result2.message.toolUseID,hookCount++;let progressData=result2.message.data;progressData.command&&hookInfos.push({command:progressData.command,promptText:progressData.promptText})}if(result2.message.type==="attachment"){let attachment=result2.message.attachment;if("hookEvent"in attachment&&(attachment.hookEvent==="Stop"||attachment.hookEvent==="SubagentStop")&&(attachment.type==="hook_non_blocking_error"?(hookErrors.push(attachment.stderr||`Exit code ${attachment.exitCode}`),hasOutput=!0):attachment.type==="hook_error_during_execution"?(hookErrors.push(attachment.content),hasOutput=!0):attachment.type==="hook_success"&&(attachment.stdout&&attachment.stdout.trim()||attachment.stderr&&attachment.stderr.trim())&&(hasOutput=!0),"durationMs"in attachment&&"command"in attachment)){let info=hookInfos.find(i3=>i3.command===attachment.command&&i3.durationMs===void 0);info&&(info.durationMs=attachment.durationMs)}}}if(result2.blockingError){let userMessage=createUserMessage({content:getStopHookMessage(result2.blockingError),isMeta:!0});blockingErrors.push(userMessage),yield userMessage,hasOutput=!0,hookErrors.push(result2.blockingError.blockingError)}if(result2.preventContinuation&&(preventedContinuation=!0,stopReason=result2.stopReason||"Stop hook prevented continuation",yield createAttachmentMessage({type:"hook_stopped_continuation",message:stopReason,hookName:"Stop",toolUseID:stopHookToolUseID,hookEvent:"Stop"})),toolUseContext.abortController.signal.aborted)return logEvent("tengu_pre_stop_hooks_cancelled",{queryChainId:toolUseContext.queryTracking?.chainId,queryDepth:toolUseContext.queryTracking?.depth}),yield createUserInterruptionMessage({toolUse:!1}),{blockingErrors:[],preventContinuation:!0}}if(hookCount>0&&(yield createStopHookSummaryMessage(hookCount,hookInfos,hookErrors,preventedContinuation,stopReason,hasOutput,"suggestion",stopHookToolUseID),hookErrors.length>0)){let expandShortcut=getShortcutDisplay("app:toggleTranscript","Global","ctrl+o");toolUseContext.addNotification?.({key:"stop-hook-error",text:`Stop hook error occurred \xB7 ${expandShortcut} to see`,priority:"immediate"})}if(preventedContinuation)return{blockingErrors:[],preventContinuation:!0};if(blockingErrors.length>0)return{blockingErrors,preventContinuation:!1};if(isTeammate()){let teammateName=getAgentName()??"",teamName=getTeamName()??"",teammateBlockingErrors=[],teammatePreventedContinuation=!1,teammateStopReason,teammateHookToolUseID="",taskListId=getTaskListId(),inProgressTasks=(await listTasks(taskListId)).filter(t2=>t2.status==="in_progress"&&t2.owner===teammateName);for(let task of inProgressTasks){let taskCompletedGenerator=executeTaskCompletedHooks(task.id,task.subject,task.description,teammateName,teamName,permissionMode,toolUseContext.abortController.signal,void 0,toolUseContext);for await(let result2 of taskCompletedGenerator){if(result2.message&&(result2.message.type==="progress"&&result2.message.toolUseID&&(teammateHookToolUseID=result2.message.toolUseID),yield result2.message),result2.blockingError){let userMessage=createUserMessage({content:getTaskCompletedHookMessage(result2.blockingError),isMeta:!0});teammateBlockingErrors.push(userMessage),yield userMessage}if(result2.preventContinuation&&(teammatePreventedContinuation=!0,teammateStopReason=result2.stopReason||"TaskCompleted hook prevented continuation",yield createAttachmentMessage({type:"hook_stopped_continuation",message:teammateStopReason,hookName:"TaskCompleted",toolUseID:teammateHookToolUseID,hookEvent:"TaskCompleted"})),toolUseContext.abortController.signal.aborted)return{blockingErrors:[],preventContinuation:!0}}}let teammateIdleGenerator=executeTeammateIdleHooks(teammateName,teamName,permissionMode,toolUseContext.abortController.signal);for await(let result2 of teammateIdleGenerator){if(result2.message&&(result2.message.type==="progress"&&result2.message.toolUseID&&(teammateHookToolUseID=result2.message.toolUseID),yield result2.message),result2.blockingError){let userMessage=createUserMessage({content:getTeammateIdleHookMessage(result2.blockingError),isMeta:!0});teammateBlockingErrors.push(userMessage),yield userMessage}if(result2.preventContinuation&&(teammatePreventedContinuation=!0,teammateStopReason=result2.stopReason||"TeammateIdle hook prevented continuation",yield createAttachmentMessage({type:"hook_stopped_continuation",message:teammateStopReason,hookName:"TeammateIdle",toolUseID:teammateHookToolUseID,hookEvent:"TeammateIdle"})),toolUseContext.abortController.signal.aborted)return{blockingErrors:[],preventContinuation:!0}}if(teammatePreventedContinuation)return{blockingErrors:[],preventContinuation:!0};if(teammateBlockingErrors.length>0)return{blockingErrors:teammateBlockingErrors,preventContinuation:!1}}return{blockingErrors:[],preventContinuation:!1}}catch(error40){let durationMs=Date.now()-hookStartTime;return logEvent("tengu_stop_hook_error",{duration:durationMs,queryChainId:toolUseContext.queryTracking?.chainId,queryDepth:toolUseContext.queryTracking?.depth}),yield createSystemMessage(`Stop hook failed: ${errorMessage(error40)}`,"warning"),{blockingErrors:[],preventContinuation:!1}}}var init_stopHooks=__esm({"src/query/stopHooks.ts"(){init_shortcutFormat();init_paths2();init_analytics();init_attachments2();init_debug();init_errors2();init_hooks3();init_messages4();init_tasks();init_teammate();init_autoDream();init_promptSuggestion();init_envUtils();init_forkedAgent();__name(handleStopHooks,"handleStopHooks")}});function buildQueryConfig(){return{sessionId:getSessionId(),gates:{streamingToolExecution:checkStatsigFeatureGate_CACHED_MAY_BE_STALE("tengu_streaming_tool_execution2"),emitToolUseSummaries:isEnvTruthy3(process.env.CLAUDE_CODE_EMIT_TOOL_USE_SUMMARIES),isAnt:process.env.USER_TYPE==="ant",fastModeEnabled:!isEnvTruthy3(process.env.CLAUDE_CODE_DISABLE_FAST_MODE)}}}var init_config6=__esm({"src/query/config.ts"(){init_state();init_growthbook();init_envUtils();__name(buildQueryConfig,"buildQueryConfig")}});import{randomUUID as randomUUID26}from"crypto";function productionDeps(){return{callModel:queryModelWithStreaming,microcompact:microcompactMessages,autocompact:autoCompactIfNeeded,uuid:randomUUID26}}var init_deps=__esm({"src/query/deps.ts"(){init_claude();init_autoCompact();init_microCompact();__name(productionDeps,"productionDeps")}});var VERBOSE_RE,VERBOSE_RE_G,init_tokenBudget=__esm({"src/utils/tokenBudget.ts"(){VERBOSE_RE=/\b(?:use|spend)\s+(\d+(?:\.\d+)?)\s*(k|m|b)\s*tokens?\b/i,VERBOSE_RE_G=new RegExp(VERBOSE_RE.source,"gi")}});var init_tokenBudget2=__esm({"src/query/tokenBudget.ts"(){init_tokenBudget()}});function messageHasOnlyToolResults(message){if(message?.type!=="user")return!1;let content=message.message.content;return Array.isArray(content)&&content.length>0&&content.every(block=>"type"in block&&block.type==="tool_result")}function assistantMessageHasVisibleText(message){return message?.type!=="assistant"?!1:message.message.content.some(block=>block.type==="text"&&block.text.trim().length>0)}function followsToolResults(lastInputMessage,toolResultCount=0){return toolResultCount>0||messageHasOnlyToolResults(lastInputMessage)}function isEmptyPostToolFollowUpTurn(lastAssistantMessage,lastInputMessage,toolResultCount=0){return lastAssistantMessage?.type==="assistant"&&lastAssistantMessage.message.stop_reason==="end_turn"&&!assistantMessageHasVisibleText(lastAssistantMessage)&&followsToolResults(lastInputMessage,toolResultCount)}function didEndWithoutVisiblePostToolReply(params){if(!params.shouldRecoverEmptyPostToolResponse)return!1;let isFollowingToolResults=params.isFollowingToolResults||followsToolResults(params.lastInputMessage,params.toolResultCount??0),isRetryingEmptyPostToolResponse=params.isRetryingEmptyPostToolResponse===!0;return params.assistantMessageCount===0?isFollowingToolResults||isRetryingEmptyPostToolResponse:params.assistantMessageCount>0&&(isEmptyPostToolFollowUpTurn(params.lastAssistantMessage,params.lastInputMessage,params.toolResultCount??0)||(isFollowingToolResults||isRetryingEmptyPostToolResponse)&&params.lastAssistantMessage?.type==="assistant"&&params.lastAssistantMessage.message.stop_reason==="end_turn"&&!assistantMessageHasVisibleText(params.lastAssistantMessage))}var init_emptyPostToolFollowup=__esm({"src/query/emptyPostToolFollowup.ts"(){__name(messageHasOnlyToolResults,"messageHasOnlyToolResults");__name(assistantMessageHasVisibleText,"assistantMessageHasVisibleText");__name(followsToolResults,"followsToolResults");__name(isEmptyPostToolFollowUpTurn,"isEmptyPostToolFollowUpTurn");__name(didEndWithoutVisiblePostToolReply,"didEndWithoutVisiblePostToolReply")}});function getPendingAgentFollowupContinuation({assistantMessageCount,toolUseContext,turnCount,maxTurns}){if(assistantMessageCount===0)return null;let agentId=toolUseContext.agentId;if(!agentId)return null;let task=toolUseContext.getAppState().tasks[agentId];if(!isLocalAgentTask(task)||task.pendingMessages.length===0)return null;let nextTurnCount=turnCount+1;if(maxTurns&&nextTurnCount>maxTurns)return{type:"max_turns",nextTurnCount};let drained=drainPendingMessages(agentId,toolUseContext.getAppState,toolUseContext.setAppStateForTasks??toolUseContext.setAppState);return drained.length===0?null:{type:"continue",nextTurnCount,attachments:drained.map(msg=>createAttachmentMessage({type:"queued_command",prompt:msg,origin:{kind:"coordinator"},isMeta:!0}))}}var init_pendingAgentFollowup=__esm({"src/query/pendingAgentFollowup.ts"(){init_attachments2();init_LocalAgentTask();__name(getPendingAgentFollowupContinuation,"getPendingAgentFollowupContinuation")}});var LegacyMemoryBridge_exports={};__export(LegacyMemoryBridge_exports,{createLegacyMemoryBridge:()=>createLegacyMemoryBridge,getDefaultLegacyMemoryBridge:()=>getDefaultLegacyMemoryBridge,parseHandoffSidecar:()=>parseHandoffSidecar,resetLegacyBridgeForTests:()=>resetLegacyBridgeForTests});import{readFile as readFile29}from"fs/promises";function createLegacyMemoryBridge(config3={}){if(bridgeInstance)return bridgeInstance;let enabled=config3.enabled??!0,bridge2={async promoteTranscriptSegment(messages){if(!(!enabled||!messages?.length))try{log(`promoteTranscriptSegment called with ${messages.length} messages. Phase 0.7: \u4EC5\u8BB0\u5F55\uFF0C\u672A\u6765\u5C06\u8F6C\u6362\u4E3A MemoryEvent \u5E76\u5199\u5165 EventLog + KnowledgeGraph\u3002`)}catch(err2){log(`promoteTranscriptSegment failed safely: ${err2?.message}`)}},async importHandoffSidecar(path29){if(!(!enabled||!path29))try{let basename63=path29.split(/[\\/]/).pop()||path29,content=await readFile29(path29,"utf8"),parsed=parseHandoffSidecar(content),eventLog=getDefaultEventLog(),stateStore=getDefaultHandoffStateStore(),kg=getDefaultKnowledgeGraph(),handoffEvent={type:"HandoffImported",agentId:"legacy-migration",sessionId:parsed.sessionId||void 0,payload:{path:path29,basename:basename63,...parsed,importedAt:new Date().toISOString()},metadata:{reason:"legacy-handoff-sidecar",triggeredBy:"system"}};await eventLog.append(handoffEvent),await stateStore.applyEvents([handoffEvent]),await kg.ingestHandoffEvent(handoffEvent),log(`importHandoffSidecar \u6210\u529F\u89E3\u6790\u771F\u5B9E sidecar \u5E76\u751F\u6210 Event + State + KG: ${basename63} (entities=${kg.entityCount})`)}catch(err2){log(`importHandoffSidecar failed safely: ${err2?.message}`)}},async getLegacyTranscriptView(){return[]}};return bridgeInstance=bridge2,bridge2}function resetLegacyBridgeForTests(){bridgeInstance=null}function getDefaultLegacyMemoryBridge(){return createLegacyMemoryBridge()}function parseHandoffSidecar(content){let result2={},fmMatch=content.match(/^---\n([\s\S]*?)\n---/);if(fmMatch){let lines=fmMatch[1].split(`
4280
4280
  `);for(let line of lines){let[key,...rest2]=line.split(":");if(!key||rest2.length===0)continue;let value=rest2.join(":").trim().replace(/^["']|["']$/g,"");if(key==="schemaVersion"&&(result2.schemaVersion=value),key==="sessionId"&&(result2.sessionId=value),key==="createdAt"&&(result2.createdAt=value),key==="trigger"&&(result2.trigger=value),key==="tokenCountAtCompact"&&value!=="null"){let n3=parseInt(value,10);result2.tokenCountAtCompact=Number.isFinite(n3)?n3:null}}}let extractSection=__name(title=>{let re2=new RegExp(`## ${title}\\n([\\s\\S]*?)(?=\\n## |$)`,"i"),m3=content.match(re2);if(!m3)return;let text=m3[1].trim();if(!(!text||text.includes("_(missing")||text.includes("_(none")))return text},"extractSection");result2.taskScope=extractSection("Task Scope"),result2.activeWorkState=extractSection("Active Work State"),result2.exactNextStep=extractSection("Exact Next Step");let decisionsText=extractSection("Key Decisions and Invariants");decisionsText&&(result2.keyDecisions=decisionsText.split(`
4281
4281
  `).map(l=>l.replace(/^- /,"").trim()).filter(Boolean));let filesText=extractSection("Files In Play");return filesText&&(result2.filesInPlay=filesText.split(`
4282
4282
  `).map(l=>l.replace(/^- /,"").trim()).filter(Boolean)),result2}var log,bridgeInstance,init_LegacyMemoryBridge=__esm({"src/agent-os/memory/legacy/LegacyMemoryBridge.ts"(){init_debug();init_SimpleInMemoryEventLog();init_SimpleHandoffStateStore();init_SimpleInMemoryKnowledgeGraph();log=__name((...args)=>{logForDebugging(`[LegacyMemoryBridge] ${args.map(arg=>typeof arg=="string"?arg:JSON.stringify(arg)).join(" ")}`)},"log"),bridgeInstance=null;__name(createLegacyMemoryBridge,"createLegacyMemoryBridge");__name(resetLegacyBridgeForTests,"resetLegacyBridgeForTests");__name(getDefaultLegacyMemoryBridge,"getDefaultLegacyMemoryBridge");__name(parseHandoffSidecar,"parseHandoffSidecar")}});var MemoryGovernor_exports={};__export(MemoryGovernor_exports,{DecisionQualityProjection:()=>DecisionQualityProjection,DefaultGovernorStrategy:()=>DefaultGovernorStrategy,HandoffHistoryProjection:()=>HandoffHistoryProjection,MemoryGovernor:()=>MemoryGovernor,ProjectionEngine:()=>ProjectionEngineImpl,RecentKnowledgeProjection:()=>RecentKnowledgeProjection,SimpleHandoffStateStore:()=>SimpleHandoffStateStore,SimpleInMemoryEventLog:()=>SimpleInMemoryEventLog,SimpleInMemoryKnowledgeGraph:()=>SimpleInMemoryKnowledgeGraph,createLegacyMemoryBridge:()=>createLegacyMemoryBridge,getDefaultEventLog:()=>getDefaultEventLog,getDefaultHandoffHistoryProjection:()=>getDefaultHandoffHistoryProjection,getDefaultHandoffStateStore:()=>getDefaultHandoffStateStore,getDefaultKnowledgeGraph:()=>getDefaultKnowledgeGraph,getDefaultLegacyMemoryBridge:()=>getDefaultLegacyMemoryBridge,getDefaultMemoryGovernor:()=>getDefaultMemoryGovernor,getDefaultProjectionEngine:()=>getDefaultProjectionEngine,getRouteCMemoryBaseDir:()=>getRouteCMemoryBaseDir,isRouteCMemoryPersistEnabled:()=>isRouteCMemoryPersistEnabled,parseHandoffSidecar:()=>parseHandoffSidecar,resetDefaultEventLogForTests:()=>resetDefaultEventLogForTests,resetDefaultHandoffStateStoreForTests:()=>resetDefaultHandoffStateStoreForTests,resetDefaultKnowledgeGraphForTests:()=>resetDefaultKnowledgeGraphForTests,resetGovernorForTests:()=>resetGovernorForTests,resetHandoffHistoryProjectionForTests:()=>resetHandoffHistoryProjectionForTests,resetLegacyBridgeForTests:()=>resetLegacyBridgeForTests,resetProjectionEngineForTests:()=>resetProjectionEngineForTests,shouldEnableRouteCMemoryPersistence:()=>shouldEnableRouteCMemoryPersistence});function getDefaultMemoryGovernor(){return defaultGovernor||(defaultGovernor=new MemoryGovernor({enabled:!0,allowControl:!1})),defaultGovernor}function resetGovernorForTests(){defaultGovernor=null}var DefaultGovernorStrategy,MemoryGovernor,defaultGovernor,init_MemoryGovernor=__esm({"src/agent-os/memory/governor/MemoryGovernor.ts"(){init_SimpleInMemoryKnowledgeGraph();init_HandoffHistoryProjection();init_ProjectionEngine();init_debug();init_LegacyMemoryBridge();init_SimpleInMemoryEventLog();init_HandoffHistoryProjection();init_SimpleHandoffStateStore();init_SimpleInMemoryKnowledgeGraph();init_FilePersistence();init_ProjectionEngine();DefaultGovernorStrategy=class{static{__name(this,"DefaultGovernorStrategy")}async decide(context2){let decisions=[],{currentTokenUsage,recentCompactionHistory=[],activeWorkUnitsCount=0,recentHandoffCount=0,recentDecisionCount=0}=context2;if(currentTokenUsage<=.5)return decisions;let kg=getDefaultKnowledgeGraph(),handoffProjection=getDefaultHandoffHistoryProjection(),projectionEngine=getDefaultProjectionEngine(),qualityQuery=context2.currentPrimaryTaskScope?`handoff \u6062\u590D\u8D28\u91CF ${context2.currentPrimaryTaskScope}`:"handoff recovery quality decision good",qualityInsights=await kg.semanticSearch(qualityQuery,2),hasGoodRecovery=qualityInsights.some(({entity})=>{let txt=JSON.stringify(entity.attributes).toLowerCase();return/恢复质量很好|恢复好|good recovery|高质量|成功|有效|positive/.test(txt)&&!/差|bad|poor|失败/.test(txt)}),decisionQualityBoost=hasGoodRecovery?.07:qualityInsights.length>0?.03:0,qualityFragment=hasGoodRecovery?"\u5386\u53F2\u7C7B\u4F3C\u51B3\u7B56\u6062\u590D\u8D28\u91CF\u826F\u597D\uFF0C":qualityInsights.length>0?"\u53C2\u8003KG\u5386\u53F2\u51B3\u7B56\u4FE1\u53F7\uFF0C":"",recentHandoffDetails=handoffProjection.getRecentHandoffs();if(currentTokenUsage>.78&&decisions.push({action:{type:"compact",strategy:"standard"},confidence:.82,rationale:`\u5F53\u524D token \u4F7F\u7528\u7387 ${Math.round(currentTokenUsage*100)}%\uFF0C\u8D85\u8FC7 78% \u9608\u503C\uFF0C\u5EFA\u8BAE\u6267\u884C\u6807\u51C6\u538B\u7F29\u3002`,triggeredBy:["token_pressure"]}),currentTokenUsage>.9){let deepConf=.91,deepRationale=`Token \u4F7F\u7528\u7387\u5DF2\u8FBE ${Math.round(currentTokenUsage*100)}%\uFF0C\u98CE\u9669\u6781\u9AD8\uFF0C\u5EFA\u8BAE\u6267\u884C\u6DF1\u5EA6\u538B\u7F29\u3002`,deepTriggered=["token_pressure","critical"];(qualityInsights.length>0||decisionQualityBoost>0)&&(deepRationale+=` ${qualityFragment}KG \u53C2\u8003\u5386\u53F2\u538B\u7F29/\u6062\u590D\u6548\u679C\u3002`,deepTriggered=[...deepTriggered,"kg_semantic","decision_quality"],hasGoodRecovery&&(deepConf=Math.min(.96,deepConf+decisionQualityBoost)));try{let dq=await projectionEngine.getProjection("decisionQuality");dq?.data?.qualityScore!=null&&(deepRationale+=` \u51B3\u7B56\u8D28\u91CF\u6295\u5F71\u5206\u6570 ${dq.data.qualityScore.toFixed(2)}\u3002`,deepTriggered=[...deepTriggered,"projection_engine"])}catch{}decisions.push({action:{type:"compact",strategy:"deep"},confidence:deepConf,rationale:deepRationale,triggeredBy:deepTriggered})}if(recentCompactionHistory.length>=2){let lastTwo=recentCompactionHistory.slice(-2),recoveries=lastTwo.map(c4=>{let before2=typeof c4.tokensBefore=="number"&&Number.isFinite(c4.tokensBefore)?c4.tokensBefore:0,after2=typeof c4.tokensAfter=="number"&&Number.isFinite(c4.tokensAfter)?c4.tokensAfter:0,ratio=before2>0?after2/before2:1;return Math.min(Math.max(ratio,0),2)}),rapidRecovery=recoveries.every(r2=>r2<.6),avgRecovery=recoveries.reduce((a2,b3)=>a2+b3,0)/recoveries.length,highChurn=!1;if(lastTwo[0]?.timestamp&&lastTwo[1]?.timestamp){let intervalMs=lastTwo[1].timestamp-lastTwo[0].timestamp;highChurn=intervalMs>0&&intervalMs<480*1e3}if((rapidRecovery||highChurn)&&currentTokenUsage>.62){let confidence=highChurn?.85:.78,reason=highChurn?"\u77ED\u65F6\u95F4\u5185\u591A\u6B21\u538B\u7F29\uFF08churn\uFF09\uFF0Ctoken \u6062\u590D\u5DEE\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u521B\u5EFA handoff \u4FDD\u62A4\u7ED3\u6784\u5316\u72B6\u6001\uFF0C\u907F\u514D\u6A21\u578B\u53CD\u590D\u505A\u4F4E\u6548\u6458\u8981\u3002":"\u6700\u8FD1\u4E24\u6B21\u538B\u7F29\u540E token \u5FEB\u901F\u56DE\u5347\uFF0C\u5EFA\u8BAE\u521B\u5EFA\u9636\u6BB5\u6027 handoff sidecar\uFF0C\u5C06\u91CD\u8981\u72B6\u6001\u5916\u90E8\u5316\uFF0C\u907F\u514D\u53CD\u590D\u538B\u7F29\u635F\u5931\u8D28\u91CF\u3002";decisions.push({action:{type:"create_handoff",scope:"current_phase"},confidence,rationale:reason,triggeredBy:highChurn?["frequent_compaction","high_churn","poor_recovery"]:["frequent_compaction","rapid_context_regrowth"]})}avgRecovery>.72&&currentTokenUsage>.7&&recentCompactionHistory.length>=3&&decisions.push({action:{type:"create_handoff",scope:"current_phase"},confidence:.72,rationale:`\u6700\u8FD1 ${recentCompactionHistory.length} \u6B21\u538B\u7F29\u5E73\u5747\u6062\u590D\u7387 ${(avgRecovery*100).toFixed(0)}%\uFF0C\u6548\u7387\u4F4E\u4E0B\uFF0C\u5EFA\u8BAE handoff\u3002`,triggeredBy:["poor_compaction_efficiency"]})}if(recentHandoffCount>=2&&currentTokenUsage>.65){let handoffDeepConf=.79,handoffDeepRationale=`\u6700\u8FD1\u5DF2\u6267\u884C ${recentHandoffCount} \u6B21 handoff\uFF08\u6295\u5F71\u8BE6\u60C5 ${recentHandoffDetails.length}\uFF09\u4F46 token \u538B\u529B\u4ECD\u9AD8`,handoffDeepTriggered=["frequent_handoff","persistent_pressure","handoff_projection"];(qualityInsights.length>0||decisionQualityBoost>0)&&(handoffDeepRationale+=`\uFF0C${qualityFragment}KG \u53C2\u8003\u5386\u53F2\u6548\u679C`,handoffDeepTriggered=[...handoffDeepTriggered,"kg_semantic","decision_quality"],hasGoodRecovery&&(handoffDeepConf=Math.min(.88,handoffDeepConf+decisionQualityBoost*.5))),handoffDeepRationale+="\uFF0C\u5EFA\u8BAE\u6267\u884C\u6DF1\u5EA6\u538B\u7F29\u4EE5\u83B7\u5F97\u66F4\u597D\u6062\u590D\u3002",decisions.push({action:{type:"compact",strategy:"deep"},confidence:handoffDeepConf,rationale:handoffDeepRationale,triggeredBy:handoffDeepTriggered})}if((recentDecisionCount??0)>=3&&currentTokenUsage>.6){let searchQuery=context2.currentPrimaryTaskScope||"handoff quality compaction",kgInsights=await kg.semanticSearch(searchQuery,3),enrichedRationale=`KG \u4E2D\u5DF2\u79EF\u7D2F ${recentDecisionCount} \u6761\u5386\u53F2\u51B3\u7B56\uFF0C\u5F53\u524D token \u538B\u529B\u8F83\u9AD8\uFF0C\u5EFA\u8BAE handoff \u4EE5\u4FDD\u62A4\u957F\u671F\u7ED3\u6784\u5316\u77E5\u8BC6\uFF0C\u907F\u514D\u5728\u9AD8\u8D1F\u8F7D\u4E0B\u4E22\u5931\u5173\u952E\u4E0A\u4E0B\u6587\u3002`;if(qualityFragment&&(enrichedRationale+=` ${qualityFragment}`),kgInsights.length>0){let insightSummary=kgInsights.map(i3=>(i3.entity.attributes.taskScope||i3.entity.attributes.content||"").toString().slice(0,60)).filter(Boolean).join("; ");insightSummary&&(enrichedRationale+=` \u53C2\u8003 KG \u5386\u53F2: ${insightSummary}\u3002`)}let kgConf=(kgInsights.length>0?.85:.81)+decisionQualityBoost;decisions.push({action:{type:"create_handoff",scope:"current_phase"},confidence:Math.min(.95,kgConf),rationale:enrichedRationale,triggeredBy:kgInsights.length>0||decisionQualityBoost>0?["knowledge_graph","historical_decisions","semantic_context","pressure","decision_quality"]:["knowledge_graph","historical_decisions","pressure"]})}let isHeavyModel=typeof context2.model=="string"&&/gpt-5|claude-4|deepseek|o3|gemini-2\.5|sonnet-4/i.test(context2.model);if(activeWorkUnitsCount>=3&&currentTokenUsage>.58&&currentTokenUsage<.82){let workConf=Math.min(.75+(isHeavyModel?.12:0),.92),workRationale=isHeavyModel?`\u91CD\u6A21\u578B\uFF08${context2.model}\uFF09+ ${activeWorkUnitsCount} \u4E2A\u6D3B\u8DC3\u5DE5\u4F5C\u5355\u5143 + \u4E2D\u7B49\u538B\u529B\uFF0C\u5F3A\u70C8\u5EFA\u8BAE handoff\uFF0C\u907F\u514D\u6A21\u578B\u5728\u9AD8 token \u4E0B\u53CD\u590D\u505A\u4F4E\u6548\u8BB0\u5FC6\u5DE5\u4F5C\u3002`:`\u5F53\u524D\u6709 ${activeWorkUnitsCount} \u4E2A\u6D3B\u8DC3\u5DE5\u4F5C\u5355\u5143\u4E14 token \u538B\u529B\u4E2D\u7B49\uFF0C\u5EFA\u8BAE\u521B\u5EFA\u5DE5\u4F5C\u76F8\u5173 handoff\uFF0C\u4FDD\u62A4\u7ED3\u6784\u5316\u72B6\u6001\u3002`,workTriggered=isHeavyModel?["active_workload","moderate_pressure","heavy_model"]:["active_workload","moderate_pressure"];(decisionQualityBoost>0||qualityInsights.length>0)&&(workConf=Math.min(.95,workConf+decisionQualityBoost),workRationale+=` ${qualityFragment}KG \u5386\u53F2\u5DE5\u4F5C\u51B3\u7B56\u53C2\u8003\u3002`,workTriggered=[...workTriggered,"kg_semantic_context","decision_quality","handoff_projection"]);try{let rk=await projectionEngine.getProjection("recentKnowledge");rk?.data?.summary&&(workRationale+=` \u77E5\u8BC6\u6295\u5F71: ${String(rk.data.summary).slice(0,40)}\u3002`,workTriggered=[...workTriggered,"projection_engine"])}catch{}decisions.push({action:{type:"create_handoff",scope:"active_work"},confidence:workConf,rationale:workRationale,triggeredBy:workTriggered})}if(activeWorkUnitsCount>=2&&currentTokenUsage>.5&&currentTokenUsage<.78&&decisionQualityBoost>0){let proactiveConf=Math.min(.82,.66+decisionQualityBoost);decisions.push({action:{type:"create_handoff",scope:"active_work"},confidence:proactiveConf,rationale:`${qualityFragment}\u6D3B\u8DC3\u5DE5\u4F5C\uFF08${activeWorkUnitsCount} \u5355\u5143\uFF0C\u6295\u5F71 handoff \u4FE1\u53F7 ${recentHandoffDetails.length}\uFF09+ \u57FA\u4E8E KG \u5386\u53F2\u6062\u590D\u8D28\u91CF\uFF0C\u4E3B\u52A8\u5EFA\u8BAE handoff \u4FDD\u62A4\u7ED3\u6784\u5316\u72B6\u6001\uFF08\u63D0\u524D\u4ECB\u5165\uFF09\u3002`,triggeredBy:["active_workload","decision_quality_kg","kg_semantic","handoff_projection","proactive_protection"]})}return decisions}},MemoryGovernor=class{static{__name(this,"MemoryGovernor")}strategy;config;constructor(config3={}){this.config={enabled:config3.enabled??!0,strategy:config3.strategy??new DefaultGovernorStrategy,allowControl:config3.allowControl??!1},this.strategy=this.config.strategy}async onTurn(context2){if(!this.config.enabled)return[];let decisions=await this.strategy.decide(context2);return this.logDecisions(decisions,context2),this.config.allowControl?decisions.map(d=>d.action):decisions.map(d=>d.action)}async onExplicitInstruction(instruction){return[]}setStrategy(strategy){this.strategy=strategy}logDecisions(decisions,context2){decisions.length!==0&&logForDebugging(`[MemoryGovernor] Decisions for this turn: ${JSON.stringify({tokenUsage:context2.currentTokenUsage,decisions:decisions.map(d=>({action:d.action,confidence:d.confidence,rationale:d.rationale}))})}`)}},defaultGovernor=null;__name(getDefaultMemoryGovernor,"getDefaultMemoryGovernor");__name(resetGovernorForTests,"resetGovernorForTests")}});var TurnContextBuilder_exports={};__export(TurnContextBuilder_exports,{buildTurnContext:()=>buildTurnContext,recordCompactionOutcome:()=>recordCompactionOutcome,resetContextForTests:()=>resetContextForTests});function recordCompactionOutcome(outcome){try{compactionHistory.push({timestamp:outcome.timestamp??Date.now(),trigger:outcome.trigger,tokensBefore:outcome.tokensBefore,tokensAfter:outcome.tokensAfter,strategy:outcome.strategy}),compactionHistory.length>MAX_HISTORY2&&compactionHistory.shift()}catch{}}function buildTurnContext(params){try{let activeWorkUnitsCount=(getWorkRuntime?.()?.getUnits?.()??[]).filter(u4=>{let status2=u4?.status;return status2&&!["completed","failed","killed"].includes(status2)}).length,handoffProjection=getDefaultHandoffHistoryProjection(),pinnedSnapshot,activePlan=null,activeTodosCount=0;try{let pinned=buildPinnedContextSync({messages:params.messagesForPinned||[]});if(pinnedSnapshot=pinned?JSON.stringify({plan:pinned.plan?pinned.plan.slice(0,200):null,todos:(pinned.todos||[]).slice(0,5)}):void 0,activePlan=getPlan()||null,isTodoV2Enabled()){let tasks2=listTasks(getTaskListId()).catch(()=>[]);activeTodosCount=pinned?.todos?.length||0}}catch{}return{currentTokenUsage:Math.max(0,Math.min(1,params.currentTokenUsage)),recentTokenGrowthRate:params.recentTokenGrowthRate,recentCompactionHistory:[...compactionHistory],activeWorkUnitsCount,hasHighPriorityWork:activeWorkUnitsCount>0,currentPrimaryTaskScope:params.currentPrimaryTaskScope,recentModelLatencyMs:params.recentModelLatencyMs,model:params.model,isAutoCompact:params.isAutoCompact,recentHandoffCount:handoffProjection.getRecentHandoffCount(),recentDecisionCount:0,pinnedSnapshot,activePlan:activePlan||void 0,activeTodosCount,structuredStateAvailable:!!(pinnedSnapshot||activePlan)}}catch{return{currentTokenUsage:params.currentTokenUsage,recentCompactionHistory:[...compactionHistory],activeWorkUnitsCount:0,model:params.model,recentHandoffCount:0,recentDecisionCount:0}}}function resetContextForTests(){compactionHistory=[]}var MAX_HISTORY2,compactionHistory,init_TurnContextBuilder=__esm({"src/agent-os/memory/context/TurnContextBuilder.ts"(){init_work();init_HandoffHistoryProjection();init_pinnedContext();init_plans();init_tasks();MAX_HISTORY2=5,compactionHistory=[];__name(recordCompactionOutcome,"recordCompactionOutcome");__name(buildTurnContext,"buildTurnContext");__name(resetContextForTests,"resetContextForTests")}});function getStopHookMaxLoops(){let raw=process.env.CLAVUE_STOP_HOOK_MAX_LOOPS;if(!raw)return STOP_HOOK_MAX_LOOPS_DEFAULT;let parsed=Number.parseInt(raw,10);return!Number.isFinite(parsed)||parsed<=0?STOP_HOOK_MAX_LOOPS_DEFAULT:parsed}function getLatestUserTurnText(messages){for(let i3=messages.length-1;i3>=0;i3--){let message=messages[i3];if(!message||message.type!=="user"||message.isMeta||message.isVisibleInTranscriptOnly||message.isVirtual||message.toolUseResult!==void 0)continue;let text=getUserMessageText(message)?.trim();if(text)return text}}function relieveTurnLoopHeapPressure(toolUseContext){toolUseContext.loadedNestedMemoryPaths?.clear?.()}async function*queryLoop(params,consumedCommandUuids){var _stack=[];try{let{systemPrompt,userContext,systemContext,canUseTool,fallbackModel,querySource,maxTurns,skipCacheWrite}=params;let deps=params.deps??productionDeps();let state2={messages:params.messages,toolUseContext:params.toolUseContext,maxOutputTokensOverride:params.maxOutputTokensOverride,autoCompactTracking:void 0,stopHookActive:void 0,maxOutputTokensRecoveryCount:0,emptyPostToolResponseRecoveryCount:0,hasAttemptedReactiveCompact:!1,turnCount:1,pendingToolUseSummary:void 0,stopHookConsecutiveBlocks:0,transition:void 0};let budgetTracker=null;let taskBudgetRemaining;let userTurnText=getLatestUserTurnText(state2.messages);let config3=buildQueryConfig();let pendingMemoryPrefetch=__using(_stack,startRelevantMemoryPrefetch(state2.messages,state2.toolUseContext));for(;;){let{toolUseContext}=state2,{messages,autoCompactTracking,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,maxOutputTokensOverride,pendingToolUseSummary,stopHookActive,stopHookConsecutiveBlocks,turnCount}=state2,routeDecision=toolUseContext.options.routeDecision,allowAdvancedRecovery=!routeDecision||routeDecision.recoveryMode!=="off",activeFromDecision=getActiveSubsystemsForTurn(routeDecision),activeSubsystems={snip:!1,collapse:!1,reactive:reactiveCompact2&&activeFromDecision.reactive},useSnip=activeSubsystems.snip,useCollapse=activeSubsystems.collapse,useReactive=activeSubsystems.reactive,pendingSkillPrefetch=skillPrefetch2?.startSkillDiscoveryPrefetch(null,messages,toolUseContext);yield{type:"stream_request_start"},observeTurnMemory({querySource,agentId:toolUseContext.agentId}).catch(()=>{}),queryCheckpoint("query_fn_entry"),toolUseContext.agentId||headlessProfilerCheckpoint("query_started");let queryTracking=nextQueryChainTracking({prev:toolUseContext.queryTracking,mintChainId:deps.uuid}),queryChainIdForAnalytics=queryTracking.chainId;toolUseContext={...toolUseContext,queryTracking};let messagesForQuery=[...getMessagesAfterCompactBoundary(messages)];isBoundaryV2Enabled()&&toolUseContext.agentId;let governorRecommendations=[];try{let{getDefaultMemoryGovernor:getDefaultMemoryGovernor2}=await Promise.resolve().then(()=>(init_MemoryGovernor(),MemoryGovernor_exports)),{buildTurnContext:buildTurnContext2}=await Promise.resolve().then(()=>(init_TurnContextBuilder(),TurnContextBuilder_exports)),approxTokenRatio=Math.min(messagesForQuery.length*120/12e4,1.2),ctx=buildTurnContext2({currentTokenUsage:approxTokenRatio,model:toolUseContext?.mainLoopModel||void 0,isAutoCompact:!1,messagesForPinned:messagesForQuery,currentPrimaryTaskScope:void 0});governorRecommendations=await getDefaultMemoryGovernor2().onTurn(ctx)||[],governorRecommendations.length>0&&logForDebugging(`[MemoryGovernor][turn] recs=${JSON.stringify(governorRecommendations.map(r2=>({type:r2.type,strategy:r2.strategy,scope:r2.scope})))}`)}catch(e2){logForDebugging(`[MemoryGovernor][turn] integration failed safely: ${e2?.message||e2}`)}if(governorRecommendations.some(r2=>r2?.type==="create_handoff"&&(r2.confidence||0)>.78)){logForDebugging("[MemoryGovernor] High-confidence create_handoff recommended \u2014 executing structured execution state protection (Governor control authority).");try{let{getDefaultEventLog:getDefaultEventLog2,getDefaultKnowledgeGraph:getDefaultKnowledgeGraph2}=await Promise.resolve().then(()=>(init_MemoryGovernor(),MemoryGovernor_exports)),handoffEvent={type:"StrongHandoffRequested",agentId:"governor",payload:{trigger:"high_confidence_governor",currentPrimaryTaskScope:toolUseContext?.currentPrimaryTaskScope,reason:"protect_execution_state_from_transcript_loss"}};await getDefaultEventLog2().append(handoffEvent);let kg=getDefaultKnowledgeGraph2();typeof kg.promoteCurrentExecutionState=="function"?await kg.promoteCurrentExecutionState({source:"governor_handoff"}):logForDebugging("[MemoryGovernor] KG promote hook not present yet \u2014 event recorded for later consumption.")}catch(e2){logForDebugging(`[MemoryGovernor] Governor-controlled handoff failed safely: ${e2?.message||e2}`)}}let routeCStructuredProjection="";try{let projection=await buildMainTurnContextProjectionForPrompt();projection&&projection.trim().length>50&&(routeCStructuredProjection=projection,logForDebugging(`[RouteC] Prepared structured projection for V2 pinned context (len=${projection.length}).`))}catch(e2){logForDebugging(`[RouteC] projection preparation skipped safely: ${e2?.message||e2}`)}let tracking=autoCompactTracking,persistReplacements=shouldPersistContentReplacements(querySource);messagesForQuery=await applyToolResultBudget(messagesForQuery,toolUseContext.contentReplacementState,persistReplacements?records=>{recordContentReplacement(records,toolUseContext.agentId).catch(logError2)}:void 0,selectUnboundedResultToolNames(toolUseContext.options.tools));let snipTokensFreed=0;if(useSnip){queryCheckpoint("query_snip_start");let snipResult=snipModule.snipCompactIfNeeded(messagesForQuery);messagesForQuery=snipResult.messages,snipTokensFreed=snipResult.tokensFreed,snipResult.boundaryMessage&&(yield snipResult.boundaryMessage),queryCheckpoint("query_snip_end")}queryCheckpoint("query_microcompact_start");let pinnedForSkip=buildPinnedContextSync({messages:messagesForQuery,agentId:toolUseContext.agentId}),skipToolUseIds=derivePinnedToolUseIds(messagesForQuery,pinnedForSkip);messagesForQuery=(await deps.microcompact(messagesForQuery,toolUseContext,querySource,skipToolUseIds)).messages;let pendingCacheEdits2=void 0;queryCheckpoint("query_microcompact_end"),useCollapse&&(messagesForQuery=(await contextCollapse2.applyCollapsesIfNeeded(messagesForQuery,toolUseContext,querySource)).messages);let workStateBlock=getWorkStateProjectionAttachment(),systemContextForPrompt=workStateBlock?{...systemContext,clavue_work_state:workStateBlock}:systemContext,fullSystemPrompt=appendSystemContext(systemPrompt,systemContextForPrompt);queryCheckpoint("query_autocompact_start");let compactStartMs=Date.now(),effectiveSnipTokensFreed=snipTokensFreed;for(let rec of governorRecommendations)rec&&rec.type==="compact"&&rec.strategy&&(logForDebugging(`[RouteC] Governor driving compact strategy: ${rec.strategy} (conf=${rec.confidence})`),rec.strategy==="deep"?effectiveSnipTokensFreed=Math.max(effectiveSnipTokensFreed||0,12e3):rec.strategy==="light"&&(effectiveSnipTokensFreed=Math.min(effectiveSnipTokensFreed||0,2e3)));let{compactionResult,consecutiveFailures,failureReason}=await deps.autocompact(messagesForQuery,toolUseContext,{systemPrompt,userContext,systemContext,toolUseContext,forkContextMessages:messagesForQuery},querySource,tracking,effectiveSnipTokensFreed),compactDurS=((Date.now()-compactStartMs)/1e3).toFixed(1);if(queryCheckpoint("query_autocompact_end"),failureReason&&(yield createSystemMessage(failureReason,"warning")),compactionResult){recordCompactForWorkState(),logEvent("tengu_auto_compact_succeeded",buildAutoCompactSucceededEvent({originalMessageCount:messages.length,compactionResult,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}));try{let{getDefaultEventLog:getDefaultEventLog2,getDefaultKnowledgeGraph:getDefaultKnowledgeGraph2}=await Promise.resolve().then(()=>(init_MemoryGovernor(),MemoryGovernor_exports)),event={type:"CompactionCompleted",agentId:"system",payload:{trigger:"auto",tokenReduction:compactionResult.preCompactTokenCount-compactionResult.postCompactTokenCount,hadStructuredProjection:!!routeCStructuredProjection}};await getDefaultEventLog2().append(event);let kg=getDefaultKnowledgeGraph2();typeof kg.ingestCompactionCompleted=="function"&&await kg.ingestCompactionCompleted(event)}catch(e2){logForDebugging(`[RouteC] post-compact promotion skipped safely: ${e2?.message||e2}`)}params.taskBudget&&(taskBudgetRemaining=nextTaskBudgetRemaining({prev:taskBudgetRemaining,total:params.taskBudget.total,finalContextTokens:finalContextTokensFromLastResponse(messagesForQuery)})),tracking=nextAutoCompactTracking({compactionResult,consecutiveFailures:void 0,prevTracking:tracking,mintTurnId:deps.uuid});let postCompactMessages=buildPostCompactMessages(compactionResult);for(let message of postCompactMessages)yield message;yield createSystemMessage(formatAutoCompactUserMessage({truePostCompactTokenCount:compactionResult.truePostCompactTokenCount,postCompactTokenCount:compactionResult.postCompactTokenCount,preCompactTokenCount:compactionResult.preCompactTokenCount,compactionCacheReadTokens:compactionResult.compactionCacheReadTokens,compactionCacheHitRate:compactionResult.compactionCacheHitRate,durationSeconds:compactDurS}),"informational"),messagesForQuery=postCompactMessages}else consecutiveFailures!==void 0&&(tracking=nextAutoCompactTracking({compactionResult:void 0,consecutiveFailures,prevTracking:tracking,mintTurnId:deps.uuid}));if(toolUseContext={...toolUseContext,messages:messagesForQuery},isBoundaryV2Enabled()&&!toolUseContext.agentId){let pinnedForResponses=await buildPinnedContext({messages:messagesForQuery,context:toolUseContext}),pinnedSections=renderPinnedForEmergencySummary(pinnedForResponses).sections,userRequestSection=pinnedForResponses.recentUserRequests.length>0?["# Recent user requests",...pinnedForResponses.recentUserRequests.map((request,index)=>index+1+". "+request)].join(`
4283
4283
  `):"",routeCProjectionSection=routeCStructuredProjection||await buildMainTurnContextProjectionForPrompt();setV2PinnedContext([...pinnedSections,userRequestSection,routeCProjectionSection].filter(section=>section.trim().length>0).join(`
4284
4284
 
4285
- `))}let assistantMessages=[],toolResults=[],toolUseBlocks=[],needsFollowUp=!1;queryCheckpoint("query_setup_start");let streamingToolExecutor=config3.gates.streamingToolExecution?new StreamingToolExecutor(toolUseContext.options.tools,canUseTool,toolUseContext):null,appState2=toolUseContext.getAppState(),permissionMode=appState2.toolPermissionContext.mode,currentModel=getRuntimeMainLoopModel({permissionMode,mainLoopModel:toolUseContext.options.mainLoopModel,exceeds200kTokens:permissionMode==="plan"&&doesMostRecentAssistantMessageExceed200k(messagesForQuery)});{let cooldown=getModelFallbackCooldown(currentModel);cooldown&&(currentModel=cooldown.fallbackModel,logForDebugging(`Model fallback cooldown active: using ${currentModel} (primary in cooldown until ${new Date(cooldown.until).toISOString()})`))}queryCheckpoint("query_setup_end"),recordRouteDecision(currentModel);let dumpPromptsFetch=config3.gates.isAnt?createDumpPromptsFetch(toolUseContext.agentId??config3.sessionId):void 0,collapseOwnsIt=contextCollapseOwnsRecovery({contextCollapseFeatureOn:useCollapse,contextCollapseEnabled:contextCollapse2?.isContextCollapseEnabled()??!1,autoCompactEnabled:isAutoCompactEnabled()}),mediaRecoveryEnabled=useReactive;if(shouldCheckBlockingTokenLimit({hadCompactionThisTurn:!!compactionResult,querySource,reactiveCompactEnabled:reactiveCompact2?.isReactiveCompactEnabled()??!1,autoCompactEnabled:isAutoCompactEnabled(),collapseOwnsRecovery:collapseOwnsIt,routeDecision})){let{isAtBlockingLimit}=calculateTokenWarningState(tokenCountWithEstimation(messagesForQuery)-snipTokensFreed,toolUseContext.options.mainLoopModel);if(isAtBlockingLimit)return yield createAssistantAPIErrorMessage({content:PROMPT_TOO_LONG_ERROR_MESSAGE,error:"invalid_request"}),{reason:"blocking_limit"}}if(shouldRunHeapPressureLadder({querySource,heapSoftBlockDisabled:isEnvTruthy3(process.env.CLAVUE_DISABLE_HEAP_SOFT_BLOCK),routeDecision})){let heapPressure=getHeapPressureState();if(heapPressure.isAboveCriticalThreshold){relieveTurnLoopHeapPressure(toolUseContext);let freed=tryForceMajorGc("query-pressure-ladder-pre-check");freed!==null&&freed>0&&(heapPressure=getHeapPressureState())}if(heapPressure.isAboveHardBlockThreshold){let usedMb=Math.round(heapPressure.heapUsedBytes/1048576),limitMb=Math.round(heapPressure.heapSizeLimitBytes/(1024*1024)),headroomMb=Math.round(heapPressure.availableHeadroomBytes/(1024*1024)),gcAvailable=isForceMajorGcAvailable(),conversationEmpty=messagesForQuery.length===0,guidance=buildHeapHardBlockGuidance({conversationEmpty,gcAvailable,usedMb,limitMb});return yield createSystemMessage(`Heap is critically full (${usedMb}MB / ${limitMb}MB, only ${headroomMb}MB free) and auto-compact could not free enough memory. Refusing to send the next request to avoid an OOM crash. ${guidance}`,"error"),{reason:"heap_soft_block"}}if(heapPressure.isAboveCriticalThreshold){let usedMb=Math.round(heapPressure.heapUsedBytes/1048576),limitMb=Math.round(heapPressure.heapSizeLimitBytes/(1024*1024)),headroomMb=Math.round(heapPressure.availableHeadroomBytes/(1024*1024)),snapshot2=getPostCompactionAutoCompactState(),nextStreak=(snapshot2?.criticalWarningStreak??0)+1;setPostCompactionAutoCompactState({...snapshot2??{baselineTokenCount:null},criticalWarningStreak:nextStreak}),(nextStreak===1||nextStreak===CRITICAL_WARNING_STREAK_ESCALATE||nextStreak>CRITICAL_WARNING_STREAK_ESCALATE&&nextStreak%CRITICAL_WARNING_REPEAT_INTERVAL===0)&&(nextStreak>=CRITICAL_WARNING_STREAK_ESCALATE?yield createSystemMessage(`Heap is still at ${usedMb}MB / ${limitMb}MB after ${nextStreak} consecutive turns. V8 retains freed pages on long sessions, so further auto-compaction cannot lower this number \u2014 token compression has nothing left to shed. Run /clear to free the conversation in-session, or /exit and restart with CLAVUE_MAX_OLD_SPACE_SIZE_MB=${Math.max(16384,limitMb*2)} for a larger heap.`,"error"):yield createSystemMessage(`Heap is at ${usedMb}MB / ${limitMb}MB (${headroomMb}MB free) after compaction. Continuing the request \u2014 Clavue will keep compacting as needed. If this persists, V8 may be holding freed pages; run /clear or /compact to recover headroom.`,"warning"))}else{let snapshot2=getPostCompactionAutoCompactState();snapshot2?.criticalWarningStreak&&setPostCompactionAutoCompactState({...snapshot2,criticalWarningStreak:0})}}let attemptWithFallback=!0,fallbackAttempts=0,triedFallbackModels=new Set;queryCheckpoint("query_api_loop_start");try{for(;attemptWithFallback;){attemptWithFallback=!1;try{let streamingFallbackOccured=!1;queryCheckpoint("query_api_streaming_start");for await(let message of deps.callModel({messages:prependUserContext(messagesForQuery,userContext),systemPrompt:fullSystemPrompt,thinkingConfig:toolUseContext.options.thinkingConfig,tools:toolUseContext.options.tools,signal:toolUseContext.abortController.signal,options:{async getToolPermissionContext(){return toolUseContext.getAppState().toolPermissionContext},model:currentModel,...config3.gates.fastModeEnabled&&{fastMode:appState2.fastMode},toolChoice:void 0,isNonInteractiveSession:toolUseContext.options.isNonInteractiveSession,fallbackModel,fallbackChain:getFullFallbackChain(currentModel,getRoutingSnapshot(),"server_error",void 0,triedFallbackModels),onStreamingFallback:__name(()=>{streamingFallbackOccured=!0},"onStreamingFallback"),querySource,modelRouteKeys:toolUseContext.options.modelRouteKeys,agents:toolUseContext.options.agentDefinitions.activeAgents,allowedAgentTypes:toolUseContext.options.agentDefinitions.allowedAgentTypes,routeDecision,routeSnapshot:toolUseContext.options.routeSnapshot,hasAppendSystemPrompt:!!toolUseContext.options.appendSystemPrompt,maxOutputTokensOverride,fetchOverride:dumpPromptsFetch,mcpTools:appState2.mcp.tools,hasPendingMcpServers:appState2.mcp.clients.some(c4=>c4.type==="pending"),queryTracking,effortValue:appState2.effortValue,userTurnText,advisorModel:appState2.advisorModel,skipCacheWrite,agentId:toolUseContext.agentId,parentAgentId:toolUseContext.parentAgentId,addNotification:toolUseContext.addNotification,...params.taskBudget&&{taskBudget:{total:params.taskBudget.total,...taskBudgetRemaining!==void 0&&{remaining:taskBudgetRemaining}}}}})){if(streamingFallbackOccured){for(let msg of assistantMessages)yield{type:"tombstone",message:msg};logEvent("tengu_orphaned_messages_tombstoned",{orphanedMessageCount:assistantMessages.length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}),assistantMessages.length=0,toolResults.length=0,toolUseBlocks.length=0,needsFollowUp=!1,streamingToolExecutor&&(streamingToolExecutor.discard(),streamingToolExecutor=new StreamingToolExecutor(toolUseContext.options.tools,canUseTool,toolUseContext))}let yieldMessage=buildObservableDispatchMessage(message,toolUseContext.options.tools),collapseWithholdsPromptTooLong=useCollapse&&(contextCollapse2?.isWithheldPromptTooLong(message,isPromptTooLongMessage,querySource)??!1);if(shouldWithholdDispatchMessage({collapseWithholdsPromptTooLong,reactiveWithholdsPromptTooLong:reactiveCompact2?.isWithheldPromptTooLong(message)??!1,reactiveWithholdsMediaSize:mediaRecoveryEnabled&&(reactiveCompact2?.isWithheldMediaSizeError(message)??!1),withholdsMaxOutputTokens:isWithheldMaxOutputTokens(message)})||(yield yieldMessage),message.type==="assistant"){assistantMessages.push(message);let msgToolUseBlocks=message.message.content.filter(content=>content.type==="tool_use");if(msgToolUseBlocks.length>0&&(toolUseBlocks.push(...msgToolUseBlocks),needsFollowUp=!0),streamingToolExecutor&&!toolUseContext.abortController.signal.aborted)for(let toolBlock of msgToolUseBlocks)streamingToolExecutor.addTool(toolBlock,message)}if(streamingToolExecutor&&!toolUseContext.abortController.signal.aborted)for(let result2 of streamingToolExecutor.getCompletedResults())result2.message&&(yield result2.message,toolResults.push(...normalizeMessagesForAPI([result2.message],toolUseContext.options.tools).filter(_3=>_3.type==="user")))}queryCheckpoint("query_api_streaming_end")}catch(innerError){if(innerError instanceof FallbackTriggeredError){let nextModel=innerError.fallbackModel;if(fallbackAttempts++,triedFallbackModels.add(innerError.originalModel.toLowerCase()),triedFallbackModels.add(nextModel.toLowerCase()),fallbackAttempts>MAX_FALLBACK_ATTEMPTS)throw innerError;currentModel=nextModel,attemptWithFallback=!0,recordModelFallbackCooldown(innerError.originalModel,nextModel);for(let missingToolResult of buildMissingToolResultBlocks(assistantMessages,`Model fallback triggered: ${innerError.originalModel} \u2192 ${nextModel}`,createUserMessage))yield missingToolResult;assistantMessages.length=0,toolResults.length=0,toolUseBlocks.length=0,needsFollowUp=!1;let fallbackRouteKeys=getModelRouteKeysForRole("fallback"),fallbackRouteResolution=getCurrentCodingRouteResolution(nextModel,fallbackRouteKeys);routeDecision=fallbackRouteResolution.decision,toolUseContext={...toolUseContext,options:{...toolUseContext.options,mainLoopModel:nextModel,routeDecision,modelRouteKeys:fallbackRouteKeys,routeSnapshot:fallbackRouteResolution.snapshot}},streamingToolExecutor&&(streamingToolExecutor.discard(),streamingToolExecutor=new StreamingToolExecutor(toolUseContext.options.tools,canUseTool,toolUseContext)),process.env.USER_TYPE==="ant"&&(messagesForQuery=stripSignatureBlocks(messagesForQuery)),logEvent("tengu_model_fallback_triggered",{original_model:innerError.originalModel,fallback_model:nextModel,attempt:fallbackAttempts,entrypoint:"cli",queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}),yield createSystemMessage(`Switched to ${renderModelName(nextModel)} due to ${innerError.originalModel} being unavailable`,"debug");continue}throw innerError}}}catch(error40){logError2(error40);let errorMessage4=error40 instanceof Error?error40.message:String(error40);return logEvent("tengu_query_error",{assistantMessages:assistantMessages.length,toolUses:assistantMessages.flatMap(_3=>_3.message.content.filter(content=>content.type==="tool_use")).length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}),error40 instanceof ImageSizeError||error40 instanceof ImageResizeError?(yield createAssistantAPIErrorMessage({content:error40.message}),{reason:"image_error"}):(yield*yieldMissingToolResultBlocks(assistantMessages,errorMessage4),yield createAssistantAPIErrorMessage({content:errorMessage4}),logAntError("Query error",error40),isUnsafeStreamingFallbackError(error40)?{reason:"completed"}:{reason:"model_error",error:error40})}if(assistantMessages.length>0&&executePostSamplingHooks([...messagesForQuery,...assistantMessages],systemPrompt,userContext,systemContext,toolUseContext,querySource),toolUseContext.abortController.signal.aborted){if(streamingToolExecutor)for await(let update3 of streamingToolExecutor.getRemainingResults())update3.message&&(yield update3.message);else yield*yieldMissingToolResultBlocks(assistantMessages,"Interrupted by user");return toolUseContext.abortController.signal.reason!=="interrupt"&&(yield createUserInterruptionMessage({toolUse:!1})),{reason:"aborted_streaming"}}if(pendingToolUseSummary){let summary=await pendingToolUseSummary;summary&&(yield summary)}if(!needsFollowUp){let pendingAgentFollowup=getPendingAgentFollowupContinuation({assistantMessageCount:assistantMessages.length,toolUseContext,turnCount,maxTurns});if(pendingAgentFollowup?.type==="max_turns")return yield createAttachmentMessage({type:"max_turns_reached",maxTurns,turnCount:pendingAgentFollowup.nextTurnCount}),{reason:"max_turns",turnCount:pendingAgentFollowup.nextTurnCount};if(pendingAgentFollowup?.type==="continue"){for(let attachment of pendingAgentFollowup.attachments)yield attachment;state2={messages:[...messagesForQuery,...assistantMessages,...pendingAgentFollowup.attachments],toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount:0,emptyPostToolResponseRecoveryCount:0,hasAttemptedReactiveCompact:!1,hasAttemptedContextWindowSwap,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount:pendingAgentFollowup.nextTurnCount,transition:{reason:"next_turn"}};continue}let lastMessage=assistantMessages.at(-1);if(assistantMessages.length>0&&isEmptyPostToolFollowUpTurn(lastMessage,messagesForQuery.at(-1),toolResults.length)&&allowAdvancedRecovery&&emptyPostToolResponseRecoveryCount<EMPTY_POST_TOOL_RESPONSE_RECOVERY_LIMIT){let recoveryMessage=createUserMessage({content:"Continue directly from the completed tool results. Do not restart the audit or repeat progress updates. Give the user the next concrete findings or changes now.",isMeta:!0});state2={messages:[...messagesForQuery,...assistantMessages,...toolResults,recoveryMessage],toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount:emptyPostToolResponseRecoveryCount+1,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,pendingToolUseSummary:void 0,maxOutputTokensOverride:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"next_turn"}};continue}let isWithheld413=lastMessage?.type==="assistant"&&lastMessage.isApiErrorMessage&&isPromptTooLongMessage(lastMessage),isWithheldMedia=mediaRecoveryEnabled&&reactiveCompact2?.isWithheldMediaSizeError(lastMessage);if(isWithheld413){let escalationCtx=buildContextWindowEscalation({lastMessage,messagesForQuery,currentModel,toolUseContext,hasAttemptedContextWindowSwap,hasAttemptedReactiveCompact,autoCompactTracking:tracking,turnCount,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount});if(escalationCtx){currentModel=escalationCtx.widerModel,yield*yieldMissingToolResultBlocks(assistantMessages,"Context window overflow \u2014 switching to wider-window model"),assistantMessages.length=0,toolResults.length=0,toolUseBlocks.length=0,needsFollowUp=!1,toolUseContext=escalationCtx.nextToolUseContext,routeDecision=escalationCtx.nextRouteDecision,streamingToolExecutor&&(streamingToolExecutor.discard(),streamingToolExecutor=new StreamingToolExecutor(toolUseContext.options.tools,canUseTool,toolUseContext)),logEvent("tengu_context_window_escalation",{original_model:escalationCtx.originalModel,escalated_model:escalationCtx.widerModel,required_tokens:escalationCtx.requiredTokens,query_chain_id:queryChainIdForAnalytics,query_depth:queryTracking.depth}),state2=escalationCtx.state;continue}if(useCollapse&&state2.transition?.reason!=="collapse_drain_retry"){let drained=contextCollapse2.recoverFromOverflow(messagesForQuery,querySource);if(drained.committed>0){state2={messages:drained.messages,toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"collapse_drain_retry",committed:drained.committed}};continue}}}if((isWithheld413||isWithheldMedia)&&useReactive){let compacted=await reactiveCompact2.tryReactiveCompact({hasAttempted:hasAttemptedReactiveCompact,querySource,aborted:toolUseContext.abortController.signal.aborted,messages:messagesForQuery,reason:isWithheldMedia?"media_size":"prompt_too_long",cacheSafeParams:{systemPrompt,userContext,systemContext,toolUseContext,forkContextMessages:messagesForQuery}});if(compacted){params.taskBudget&&(taskBudgetRemaining=nextTaskBudgetRemaining({prev:taskBudgetRemaining,total:params.taskBudget.total,finalContextTokens:finalContextTokensFromLastResponse(messagesForQuery)}));let postCompactMessages=buildPostCompactMessages(compacted);for(let msg of postCompactMessages)yield msg;state2={messages:postCompactMessages,toolUseContext,autoCompactTracking:void 0,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact:!0,hasAttemptedContextWindowSwap,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"reactive_compact_retry"}};continue}return yield lastMessage,executeStopFailureHooks(lastMessage,toolUseContext),{reason:isWithheldMedia?"image_error":"prompt_too_long"}}else if(useCollapse&&isWithheld413)return yield lastMessage,executeStopFailureHooks(lastMessage,toolUseContext),{reason:"prompt_too_long"};if(isWithheldMaxOutputTokens(lastMessage)){let capEnabled=getFeatureValue_CACHED_MAY_BE_STALE("tengu_otk_slot_v1",!1);if(allowAdvancedRecovery&&capEnabled&&maxOutputTokensOverride===void 0&&!process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS){logEvent("tengu_max_tokens_escalate",{escalatedTo:ESCALATED_MAX_TOKENS}),state2={messages:messagesForQuery,toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,maxOutputTokensOverride:ESCALATED_MAX_TOKENS,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"max_output_tokens_escalate"}};continue}if(allowAdvancedRecovery&&maxOutputTokensRecoveryCount<MAX_OUTPUT_TOKENS_RECOVERY_LIMIT){let recoveryMessage=createUserMessage({content:"Output token limit hit. Resume directly \u2014 no apology, no recap of what you were doing. Pick up mid-thought if that is where the cut happened. Break remaining work into smaller pieces.",isMeta:!0});state2={messages:[...messagesForQuery,...assistantMessages,recoveryMessage],toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount:maxOutputTokensRecoveryCount+1,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"max_output_tokens_recovery",attempt:maxOutputTokensRecoveryCount+1}};continue}yield lastMessage}if(lastMessage?.isApiErrorMessage)return executeStopFailureHooks(lastMessage,toolUseContext),{reason:"completed"};let stopHookResult=yield*handleStopHooks(messagesForQuery,assistantMessages,systemPrompt,userContext,systemContext,toolUseContext,querySource,stopHookActive);if(stopHookResult.preventContinuation)return{reason:"stop_hook_prevented"};if(stopHookResult.blockingErrors.length>0){let nextStopHookBlocks=stopHookConsecutiveBlocks+1;if(nextStopHookBlocks>=getStopHookMaxLoops())return yield createSystemMessage(`Stop hook blocked ${nextStopHookBlocks} consecutive times; aborting to avoid an infinite loop. Adjust the hook or set CLAVUE_STOP_HOOK_MAX_LOOPS to a higher value if this is intentional.`,"warning"),logEvent("tengu_stop_hook_loop_capped",{consecutiveBlocks:nextStopHookBlocks}),{reason:"stop_hook_prevented"};if(!allowAdvancedRecovery)return yield createSystemMessage("Stop hook blocked; recovery disabled by route policy.","warning"),{reason:"stop_hook_prevented"};state2={messages:[...messagesForQuery,...assistantMessages,...stopHookResult.blockingErrors],toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount:0,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:!0,stopHookConsecutiveBlocks:nextStopHookBlocks,turnCount,transition:{reason:"stop_hook_blocking"}};continue}return{reason:"completed"}}let shouldPreventContinuation=!1,updatedToolUseContext=toolUseContext;queryCheckpoint("query_tool_execution_start"),streamingToolExecutor?logEvent("tengu_streaming_tool_execution_used",{tool_count:toolUseBlocks.length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}):logEvent("tengu_streaming_tool_execution_not_used",{tool_count:toolUseBlocks.length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth});let toolUpdates=streamingToolExecutor?streamingToolExecutor.getRemainingResults():runTools(toolUseBlocks,assistantMessages,canUseTool,toolUseContext);for await(let update3 of toolUpdates)update3.message&&(yield update3.message,update3.message.type==="attachment"&&update3.message.attachment.type==="hook_stopped_continuation"&&(shouldPreventContinuation=!0),toolResults.push(...normalizeMessagesForAPI([update3.message],toolUseContext.options.tools).filter(_3=>_3.type==="user"))),update3.newContext&&(updatedToolUseContext={...update3.newContext,queryTracking});queryCheckpoint("query_tool_execution_end"),recordToolUsesForWorkState(toolUseBlocks);let nextPendingToolUseSummary;if(config3.gates.emitToolUseSummaries&&toolUseBlocks.length>0&&!toolUseContext.abortController.signal.aborted&&!toolUseContext.agentId){let lastAssistantMessage=assistantMessages.at(-1),lastAssistantText;if(lastAssistantMessage){let textBlocks=lastAssistantMessage.message.content.filter(block=>block.type==="text");if(textBlocks.length>0){let lastTextBlock=textBlocks.at(-1);lastTextBlock&&"text"in lastTextBlock&&(lastAssistantText=lastTextBlock.text)}}nextPendingToolUseSummary=buildPendingToolUseSummary({toolUseBlocks,toolResults,abortSignal:toolUseContext.abortController.signal,isNonInteractiveSession:toolUseContext.options.isNonInteractiveSession,lastAssistantText})}if(toolUseContext.abortController.signal.aborted){toolUseContext.abortController.signal.reason!=="interrupt"&&(yield createUserInterruptionMessage({toolUse:!0}));let nextTurnCountOnAbort=turnCount+1;return maxTurns&&nextTurnCountOnAbort>maxTurns&&(yield createAttachmentMessage({type:"max_turns_reached",maxTurns,turnCount:nextTurnCountOnAbort})),{reason:"aborted_tools"}}if(shouldPreventContinuation)return{reason:"hook_stopped"};tracking?.compacted&&(tracking.turnCounter++,logEvent("tengu_post_autocompact_turn",{turnId:tracking.turnId,turnCounter:tracking.turnCounter,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth})),logEvent("tengu_query_before_attachments",{messagesForQueryCount:messagesForQuery.length,assistantMessagesCount:assistantMessages.length,toolResultsCount:toolResults.length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth});let sleepRan=toolUseBlocks.some(b3=>b3.name===SLEEP_TOOL_NAME),isMainThread=querySource.startsWith("repl_main_thread")||querySource==="sdk",currentAgentId=toolUseContext.agentId,queuedCommandsSnapshot=getCommandsByMaxPriority(sleepRan?"later":"next").filter(cmd=>isSlashCommand(cmd)?!1:isMainThread?cmd.agentId===void 0:cmd.mode==="task-notification"&&cmd.agentId===currentAgentId);for await(let attachment of getAttachmentMessages(null,updatedToolUseContext,null,queuedCommandsSnapshot,[...messagesForQuery,...assistantMessages,...toolResults],querySource))yield attachment,toolResults.push(attachment);if(pendingMemoryPrefetch&&pendingMemoryPrefetch.settledAt!==null&&pendingMemoryPrefetch.consumedOnIteration===-1){let memoryAttachments=filterDuplicateMemoryAttachments(await pendingMemoryPrefetch.promise,toolUseContext.readFileState);for(let memAttachment of memoryAttachments){let msg=createAttachmentMessage(memAttachment);yield msg,toolResults.push(msg)}pendingMemoryPrefetch.consumedOnIteration=turnCount-1}if(skillPrefetch2&&pendingSkillPrefetch){let skillAttachments=await skillPrefetch2.collectSkillDiscoveryPrefetch(pendingSkillPrefetch);for(let att of skillAttachments){let msg=createAttachmentMessage(att);yield msg,toolResults.push(msg)}}let consumedCommands=queuedCommandsSnapshot.filter(cmd=>cmd.mode==="prompt"||cmd.mode==="task-notification");if(consumedCommands.length>0){for(let cmd of consumedCommands)cmd.uuid&&(consumedCommandUuids.push(cmd.uuid),notifyCommandLifecycle(cmd.uuid,"started"));remove2(consumedCommands)}let fileChangeAttachmentCount=count2(toolResults,tr=>tr.type==="attachment"&&tr.attachment.type==="edited_text_file");logEvent("tengu_query_after_attachments",{totalToolResultsCount:toolResults.length,fileChangeAttachmentCount,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}),updatedToolUseContext=refreshToolsForNextTurn({updatedToolUseContext,routeDecision});let toolUseContextWithQueryTracking={...updatedToolUseContext,queryTracking},nextTurnCount=turnCount+1;if(maxTurns&&nextTurnCount>maxTurns)return yield createAttachmentMessage({type:"max_turns_reached",maxTurns,turnCount:nextTurnCount}),{reason:"max_turns",turnCount:nextTurnCount};let gpt5SearchConvergence=evaluateGpt5SearchConvergence({messages:messagesForQuery,currentToolUseBlocks:toolUseBlocks,querySource,agentId:toolUseContext.agentId,isGpt5Route:isGpt5xFamilyModel(currentModel)||isGpt5xFamilyModel(routeDecision?.model),userTurnText});gpt5SearchConvergence.action!=="none"&&logEvent("tengu_gpt5_search_convergence",{action:gpt5SearchConvergence.action,reason:gpt5SearchConvergence.reason,consecutiveExplorationTurns:gpt5SearchConvergence.consecutiveExplorationTurns,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth});let convergenceReminderMessages=gpt5SearchConvergence.action==="remind"||gpt5SearchConvergence.action==="stop"?[createUserMessage({content:gpt5SearchConvergence.message,isMeta:!0})]:[];queryCheckpoint("query_recursive_call"),state2=buildNextTurnState({messagesForQuery,assistantMessages,toolResults,convergenceReminderMessages,toolUseContext:toolUseContextWithQueryTracking,autoCompactTracking:tracking,nextTurnCount,pendingToolUseSummary:nextPendingToolUseSummary,stopHookActive,stopHookConsecutiveBlocks})}}catch(_2){var _error=_2,_hasError=!0}finally{__callDispose(_stack,_error,_hasError)}}var reactiveCompact2,contextCollapse2,skillPrefetch2,jobClassifier2,snipModule,taskSummaryModule,STOP_HOOK_MAX_LOOPS_DEFAULT,MAX_OUTPUT_TOKENS_RECOVERY_LIMIT,EMPTY_POST_TOOL_RESPONSE_RECOVERY_LIMIT,CRITICAL_WARNING_STREAK_ESCALATE,CRITICAL_WARNING_REPEAT_INTERVAL,MAX_FALLBACK_ATTEMPTS,init_turn_loop_orchestrator=__esm({"src/runtime/turn-loop-orchestrator.ts"(){init_withRetry();init_streamingFallbackSafety();init_modelFallbackCooldown();init_autoCompact();init_compact2();init_v2ArchiveState();init_pinnedContext();init_renderPinned();init_pinnedContextCore();init_ProjectionEngine();init_featureModules();init_boundaryV2();init_analytics();init_imageValidation();init_imageResizer();init_systemPromptType();init_log3();init_errors7();init_debug();init_messages4();init_api3();init_attachments2();init_messageQueueManager();init_commandLifecycle();init_headlessProfiler();init_model();init_modelRoles();init_modelFallbackChain();init_nativeWorkflowCompatibility();init_tokens();init_context();init_growthbook();init_prompt13();init_postSamplingHooks();init_hooks3();init_dumpPrompts();init_StreamingToolExecutor();init_queryProfiler();init_toolOrchestration();init_toolResultStorage();init_gpt5SearchConvergence();init_gpt5EffortIntent();init_turn_loop_pre();init_turn_loop_route();init_turn_loop_dispatch();init_turn_loop_post_turn();init_turn_loop_recover();init_turn_loop_tool_loop();init_runtime3();init_sessionStorage();init_heapPressure();init_forceMajorGc();init_envUtils();init_stopHooks();init_config6();init_deps();init_state();init_tokenBudget2();init_array4();init_emptyPostToolFollowup();init_pendingAgentFollowup();({reactiveCompact:reactiveCompact2,contextCollapse:contextCollapse2}=featureModules),{skillPrefetch:skillPrefetch2,jobClassifier:jobClassifier2}=featureModules,{snipCompact:snipModule,taskSummary:taskSummaryModule}=featureModules,STOP_HOOK_MAX_LOOPS_DEFAULT=8;__name(getStopHookMaxLoops,"getStopHookMaxLoops");__name(getLatestUserTurnText,"getLatestUserTurnText");__name(relieveTurnLoopHeapPressure,"relieveTurnLoopHeapPressure");MAX_OUTPUT_TOKENS_RECOVERY_LIMIT=3,EMPTY_POST_TOOL_RESPONSE_RECOVERY_LIMIT=1,CRITICAL_WARNING_STREAK_ESCALATE=3,CRITICAL_WARNING_REPEAT_INTERVAL=10,MAX_FALLBACK_ATTEMPTS=3;__name(queryLoop,"queryLoop")}});async function*query(params){let consumedCommandUuids=[],terminal=yield*queryLoop(params,consumedCommandUuids);for(let uuid3 of consumedCommandUuids)notifyCommandLifecycle(uuid3,"completed");return terminal}var init_query2=__esm({"src/query.ts"(){init_turn_loop_orchestrator();init_state();init_commandLifecycle();__name(query,"query")}});var EMPTY_USAGE,init_emptyUsage=__esm({"src/services/api/emptyUsage.ts"(){EMPTY_USAGE={input_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0,output_tokens:0,server_tool_use:{web_search_requests:0,web_fetch_requests:0},service_tier:"standard",cache_creation:{ephemeral_1h_input_tokens:0,ephemeral_5m_input_tokens:0},inference_geo:"",iterations:[],speed:"standard"}}});import fs7 from"node:fs";import path17 from"node:path";function buildEfficiencyLedgerEntry(input2){let cacheRead=positiveNumber2(input2.usage.cache_read_input_tokens),cacheCreation=positiveNumber2(input2.usage.cache_creation_input_tokens),inputTokens=positiveNumber2(input2.usage.input_tokens),outputTokens=positiveNumber2(input2.usage.output_tokens),totalInputTokens=inputTokens+cacheRead+cacheCreation,totalTokens=totalInputTokens+outputTokens,billableInputTokens=inputTokens+cacheCreation,cacheHitRate=totalInputTokens>0?roundRatio(cacheRead/totalInputTokens):0,freshInputRatio=totalInputTokens>0?roundRatio(billableInputTokens/totalInputTokens):0,estimatedInputTokenSavings=cacheRead,estimatedInputTokenSavingsRate=totalInputTokens>0?roundRatio(estimatedInputTokenSavings/totalInputTokens):0;return{schema:"clavue_efficiency_v1",createdAt:new Date().toISOString(),model:input2.model,querySource:input2.querySource,messageCount:input2.messageCount,messageTokens:input2.messageTokens,durationMs:positiveNumber2(input2.durationMs),inputTokens,outputTokens,cacheReadTokens:cacheRead,cacheCreationTokens:cacheCreation,billableInputTokens,totalInputTokens,totalTokens,cacheHitRate,freshInputRatio,estimatedInputTokenSavings,estimatedInputTokenSavingsRate,costUSD:positiveNumber2(input2.costUSD),fastMode:input2.fastMode===!0,isGpt5x:isGpt5xFamily(input2.model)}}function recordEfficiencyLedgerEntry(input2){if(isEnvTruthy3(process.env.CLAVUE_DISABLE_EFFICIENCY_LEDGER))return;let entry=buildEfficiencyLedgerEntry(input2),filePath=resolveEfficiencyLedgerPath();try{fs7.mkdirSync(path17.dirname(filePath),{recursive:!0}),fs7.appendFileSync(filePath,`${JSON.stringify(entry)}
4285
+ `))}let assistantMessages=[],toolResults=[],toolUseBlocks=[],needsFollowUp=!1;queryCheckpoint("query_setup_start");let streamingToolExecutor=config3.gates.streamingToolExecution?new StreamingToolExecutor(toolUseContext.options.tools,canUseTool,toolUseContext):null,appState2=toolUseContext.getAppState(),permissionMode=appState2.toolPermissionContext.mode,currentModel=getRuntimeMainLoopModel({permissionMode,mainLoopModel:toolUseContext.options.mainLoopModel,exceeds200kTokens:permissionMode==="plan"&&doesMostRecentAssistantMessageExceed200k(messagesForQuery)});{let cooldown=getModelFallbackCooldown(currentModel);cooldown&&(currentModel=cooldown.fallbackModel,logForDebugging(`Model fallback cooldown active: using ${currentModel} (primary in cooldown until ${new Date(cooldown.until).toISOString()})`))}queryCheckpoint("query_setup_end"),recordRouteDecision(currentModel);let dumpPromptsFetch=config3.gates.isAnt?createDumpPromptsFetch(toolUseContext.agentId??config3.sessionId):void 0,collapseOwnsIt=contextCollapseOwnsRecovery({contextCollapseFeatureOn:useCollapse,contextCollapseEnabled:contextCollapse2?.isContextCollapseEnabled()??!1,autoCompactEnabled:isAutoCompactEnabled()}),mediaRecoveryEnabled=useReactive;if(shouldCheckBlockingTokenLimit({hadCompactionThisTurn:!!compactionResult,querySource,reactiveCompactEnabled:reactiveCompact2?.isReactiveCompactEnabled()??!1,autoCompactEnabled:isAutoCompactEnabled(),collapseOwnsRecovery:collapseOwnsIt,routeDecision})){let{isAtBlockingLimit}=calculateTokenWarningState(tokenCountWithEstimation(messagesForQuery)-snipTokensFreed,toolUseContext.options.mainLoopModel);if(isAtBlockingLimit)return yield createAssistantAPIErrorMessage({content:PROMPT_TOO_LONG_ERROR_MESSAGE,error:"invalid_request"}),{reason:"blocking_limit"}}if(shouldRunHeapPressureLadder({querySource,heapSoftBlockDisabled:isEnvTruthy3(process.env.CLAVUE_DISABLE_HEAP_SOFT_BLOCK),routeDecision})){let heapPressure=getHeapPressureState();if(heapPressure.isAboveCriticalThreshold){relieveTurnLoopHeapPressure(toolUseContext);let freed=tryForceMajorGc("query-pressure-ladder-pre-check");freed!==null&&freed>0&&(heapPressure=getHeapPressureState())}if(heapPressure.isAboveHardBlockThreshold){let usedMb=Math.round(heapPressure.heapUsedBytes/1048576),limitMb=Math.round(heapPressure.heapSizeLimitBytes/(1024*1024)),headroomMb=Math.round(heapPressure.availableHeadroomBytes/(1024*1024)),gcAvailable=isForceMajorGcAvailable(),conversationEmpty=messagesForQuery.length===0,guidance=buildHeapHardBlockGuidance({conversationEmpty,gcAvailable,usedMb,limitMb});return yield createSystemMessage(`Heap is critically full (${usedMb}MB / ${limitMb}MB, only ${headroomMb}MB free) and auto-compact could not free enough memory. Refusing to send the next request to avoid an OOM crash. ${guidance}`,"error"),{reason:"heap_soft_block"}}if(heapPressure.isAboveCriticalThreshold){let usedMb=Math.round(heapPressure.heapUsedBytes/1048576),limitMb=Math.round(heapPressure.heapSizeLimitBytes/(1024*1024)),headroomMb=Math.round(heapPressure.availableHeadroomBytes/(1024*1024)),snapshot2=getPostCompactionAutoCompactState(),nextStreak=(snapshot2?.criticalWarningStreak??0)+1;setPostCompactionAutoCompactState({...snapshot2??{baselineTokenCount:null},criticalWarningStreak:nextStreak}),(nextStreak===1||nextStreak===CRITICAL_WARNING_STREAK_ESCALATE||nextStreak>CRITICAL_WARNING_STREAK_ESCALATE&&nextStreak%CRITICAL_WARNING_REPEAT_INTERVAL===0)&&(nextStreak>=CRITICAL_WARNING_STREAK_ESCALATE?yield createSystemMessage(`Heap is still at ${usedMb}MB / ${limitMb}MB after ${nextStreak} consecutive turns. V8 retains freed pages on long sessions, so further auto-compaction cannot lower this number \u2014 token compression has nothing left to shed. Run /clear to free the conversation in-session, or /exit and restart with CLAVUE_MAX_OLD_SPACE_SIZE_MB=${Math.max(16384,limitMb*2)} for a larger heap.`,"error"):yield createSystemMessage(`Heap is at ${usedMb}MB / ${limitMb}MB (${headroomMb}MB free) after compaction. Continuing the request \u2014 Clavue will keep compacting as needed. If this persists, V8 may be holding freed pages; run /clear or /compact to recover headroom.`,"warning"))}else{let snapshot2=getPostCompactionAutoCompactState();snapshot2?.criticalWarningStreak&&setPostCompactionAutoCompactState({...snapshot2,criticalWarningStreak:0})}}let attemptWithFallback=!0,fallbackAttempts=0,triedFallbackModels=new Set;queryCheckpoint("query_api_loop_start");try{for(;attemptWithFallback;){attemptWithFallback=!1;try{let streamingFallbackOccured=!1;queryCheckpoint("query_api_streaming_start");for await(let message of deps.callModel({messages:prependUserContext(messagesForQuery,userContext),systemPrompt:fullSystemPrompt,thinkingConfig:toolUseContext.options.thinkingConfig,tools:toolUseContext.options.tools,signal:toolUseContext.abortController.signal,options:{async getToolPermissionContext(){return toolUseContext.getAppState().toolPermissionContext},model:currentModel,...config3.gates.fastModeEnabled&&{fastMode:appState2.fastMode},toolChoice:void 0,isNonInteractiveSession:toolUseContext.options.isNonInteractiveSession,fallbackModel,fallbackChain:getFullFallbackChain(currentModel,getRoutingSnapshot(),"server_error",void 0,triedFallbackModels),onStreamingFallback:__name(()=>{streamingFallbackOccured=!0},"onStreamingFallback"),querySource,modelRouteKeys:toolUseContext.options.modelRouteKeys,agents:toolUseContext.options.agentDefinitions.activeAgents,allowedAgentTypes:toolUseContext.options.agentDefinitions.allowedAgentTypes,routeDecision,routeSnapshot:toolUseContext.options.routeSnapshot,hasAppendSystemPrompt:!!toolUseContext.options.appendSystemPrompt,maxOutputTokensOverride,fetchOverride:dumpPromptsFetch,mcpTools:appState2.mcp.tools,hasPendingMcpServers:appState2.mcp.clients.some(c4=>c4.type==="pending"),queryTracking,effortValue:appState2.effortValue,userTurnText,advisorModel:appState2.advisorModel,skipCacheWrite,agentId:toolUseContext.agentId,parentAgentId:toolUseContext.parentAgentId,addNotification:toolUseContext.addNotification,...params.taskBudget&&{taskBudget:{total:params.taskBudget.total,...taskBudgetRemaining!==void 0&&{remaining:taskBudgetRemaining}}}}})){if(streamingFallbackOccured){for(let msg of assistantMessages)yield{type:"tombstone",message:msg};logEvent("tengu_orphaned_messages_tombstoned",{orphanedMessageCount:assistantMessages.length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}),assistantMessages.length=0,toolResults.length=0,toolUseBlocks.length=0,needsFollowUp=!1,streamingToolExecutor&&(streamingToolExecutor.discard(),streamingToolExecutor=new StreamingToolExecutor(toolUseContext.options.tools,canUseTool,toolUseContext))}let yieldMessage=buildObservableDispatchMessage(message,toolUseContext.options.tools),collapseWithholdsPromptTooLong=useCollapse&&(contextCollapse2?.isWithheldPromptTooLong(message,isPromptTooLongMessage,querySource)??!1);if(shouldWithholdDispatchMessage({collapseWithholdsPromptTooLong,reactiveWithholdsPromptTooLong:reactiveCompact2?.isWithheldPromptTooLong(message)??!1,reactiveWithholdsMediaSize:mediaRecoveryEnabled&&(reactiveCompact2?.isWithheldMediaSizeError(message)??!1),withholdsMaxOutputTokens:isWithheldMaxOutputTokens(message)})||(yield yieldMessage),message.type==="assistant"){assistantMessages.push(message);let msgToolUseBlocks=message.message.content.filter(content=>content.type==="tool_use");if(msgToolUseBlocks.length>0&&(toolUseBlocks.push(...msgToolUseBlocks),needsFollowUp=!0),streamingToolExecutor&&!toolUseContext.abortController.signal.aborted)for(let toolBlock of msgToolUseBlocks)streamingToolExecutor.addTool(toolBlock,message)}if(streamingToolExecutor&&!toolUseContext.abortController.signal.aborted)for(let result2 of streamingToolExecutor.getCompletedResults())result2.message&&(yield result2.message,toolResults.push(...normalizeMessagesForAPI([result2.message],toolUseContext.options.tools).filter(_3=>_3.type==="user")))}queryCheckpoint("query_api_streaming_end")}catch(innerError){if(innerError instanceof FallbackTriggeredError){let nextModel=innerError.fallbackModel;if(fallbackAttempts++,triedFallbackModels.add(innerError.originalModel.toLowerCase()),triedFallbackModels.add(nextModel.toLowerCase()),fallbackAttempts>MAX_FALLBACK_ATTEMPTS)throw innerError;currentModel=nextModel,attemptWithFallback=!0,recordModelFallbackCooldown(innerError.originalModel,nextModel);for(let missingToolResult of buildMissingToolResultBlocks(assistantMessages,`Model fallback triggered: ${innerError.originalModel} \u2192 ${nextModel}`,createUserMessage))yield missingToolResult;assistantMessages.length=0,toolResults.length=0,toolUseBlocks.length=0,needsFollowUp=!1;let fallbackRouteKeys=getModelRouteKeysForRole("fallback"),fallbackRouteResolution=getCurrentCodingRouteResolution(nextModel,fallbackRouteKeys);routeDecision=fallbackRouteResolution.decision,toolUseContext={...toolUseContext,options:{...toolUseContext.options,mainLoopModel:nextModel,routeDecision,modelRouteKeys:fallbackRouteKeys,routeSnapshot:fallbackRouteResolution.snapshot}},streamingToolExecutor&&(streamingToolExecutor.discard(),streamingToolExecutor=new StreamingToolExecutor(toolUseContext.options.tools,canUseTool,toolUseContext)),process.env.USER_TYPE==="ant"&&(messagesForQuery=stripSignatureBlocks(messagesForQuery)),logEvent("tengu_model_fallback_triggered",{original_model:innerError.originalModel,fallback_model:nextModel,attempt:fallbackAttempts,entrypoint:"cli",queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}),yield createSystemMessage(`Switched to ${renderModelName(nextModel)} due to ${innerError.originalModel} being unavailable`,"debug");continue}throw innerError}}}catch(error40){logError2(error40);let errorMessage4=error40 instanceof Error?error40.message:String(error40);return logEvent("tengu_query_error",{assistantMessages:assistantMessages.length,toolUses:assistantMessages.flatMap(_3=>_3.message.content.filter(content=>content.type==="tool_use")).length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}),error40 instanceof ImageSizeError||error40 instanceof ImageResizeError?(yield createAssistantAPIErrorMessage({content:error40.message}),{reason:"image_error"}):(yield*yieldMissingToolResultBlocks(assistantMessages,errorMessage4),yield createAssistantAPIErrorMessage({content:errorMessage4}),logAntError("Query error",error40),isUnsafeStreamingFallbackError(error40)?{reason:"completed"}:{reason:"model_error",error:error40})}if(assistantMessages.length>0&&executePostSamplingHooks([...messagesForQuery,...assistantMessages],systemPrompt,userContext,systemContext,toolUseContext,querySource),toolUseContext.abortController.signal.aborted){if(streamingToolExecutor)for await(let update3 of streamingToolExecutor.getRemainingResults())update3.message&&(yield update3.message);else yield*yieldMissingToolResultBlocks(assistantMessages,"Interrupted by user");return toolUseContext.abortController.signal.reason!=="interrupt"&&(yield createUserInterruptionMessage({toolUse:!1})),{reason:"aborted_streaming"}}if(pendingToolUseSummary){let summary=await pendingToolUseSummary;summary&&(yield summary)}if(!needsFollowUp){let pendingAgentFollowup=getPendingAgentFollowupContinuation({assistantMessageCount:assistantMessages.length,toolUseContext,turnCount,maxTurns});if(pendingAgentFollowup?.type==="max_turns")return yield createAttachmentMessage({type:"max_turns_reached",maxTurns,turnCount:pendingAgentFollowup.nextTurnCount}),{reason:"max_turns",turnCount:pendingAgentFollowup.nextTurnCount};if(pendingAgentFollowup?.type==="continue"){for(let attachment of pendingAgentFollowup.attachments)yield attachment;state2={messages:[...messagesForQuery,...assistantMessages,...pendingAgentFollowup.attachments],toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount:0,emptyPostToolResponseRecoveryCount:0,hasAttemptedReactiveCompact:!1,hasAttemptedContextWindowSwap,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount:pendingAgentFollowup.nextTurnCount,transition:{reason:"next_turn"}};continue}let lastInputMessage=messagesForQuery.at(-1),lastMessage=assistantMessages.at(-1),isVisibleMainThread=querySource.startsWith("repl_main_thread"),isFollowingToolResults=followsToolResults(lastInputMessage,toolResults.length)||state2.transition?.reason==="tools_executed",isRetryingEmptyPostToolResponse=state2.transition?.reason==="empty_post_tool_recovery",shouldRecoverEmptyPostToolResponse=isVisibleMainThread||isRetryingEmptyPostToolResponse,endedWithoutVisibleAssistantReply=didEndWithoutVisiblePostToolReply({assistantMessageCount:assistantMessages.length,lastAssistantMessage:lastMessage,lastInputMessage,toolResultCount:toolResults.length,isFollowingToolResults,isRetryingEmptyPostToolResponse,shouldRecoverEmptyPostToolResponse});if(endedWithoutVisibleAssistantReply&&allowAdvancedRecovery&&emptyPostToolResponseRecoveryCount<EMPTY_POST_TOOL_RESPONSE_RECOVERY_LIMIT){let recoveryMessage=createUserMessage({content:"Continue directly from the completed tool results. Do not restart the audit or repeat progress updates. Give the user the next concrete findings or changes now.",isMeta:!0});state2={messages:[...messagesForQuery,...assistantMessages,...toolResults,recoveryMessage],toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount:emptyPostToolResponseRecoveryCount+1,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,pendingToolUseSummary:void 0,maxOutputTokensOverride:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"empty_post_tool_recovery"}};continue}if(endedWithoutVisibleAssistantReply)return yield createAssistantAPIErrorMessage({content:'API Error: The provider returned no visible response after tool results. Clavue stopped instead of silently idling; send a follow-up like "continue" to resume from the saved tool output.',error:"unknown"}),{reason:"model_error",error:"empty_post_tool_response"};if(assistantMessages.length===0&&isVisibleMainThread)return yield createAssistantAPIErrorMessage({content:"API Error: The provider returned no response. Clavue stopped instead of silently idling; retry the request or check provider status/configuration.",error:"unknown"}),{reason:"model_error",error:"empty_model_response"};let isWithheld413=lastMessage?.type==="assistant"&&lastMessage.isApiErrorMessage&&isPromptTooLongMessage(lastMessage),isWithheldMedia=mediaRecoveryEnabled&&reactiveCompact2?.isWithheldMediaSizeError(lastMessage);if(isWithheld413){let escalationCtx=buildContextWindowEscalation({lastMessage,messagesForQuery,currentModel,toolUseContext,hasAttemptedContextWindowSwap,hasAttemptedReactiveCompact,autoCompactTracking:tracking,turnCount,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount});if(escalationCtx){currentModel=escalationCtx.widerModel,yield*yieldMissingToolResultBlocks(assistantMessages,"Context window overflow \u2014 switching to wider-window model"),assistantMessages.length=0,toolResults.length=0,toolUseBlocks.length=0,needsFollowUp=!1,toolUseContext=escalationCtx.nextToolUseContext,routeDecision=escalationCtx.nextRouteDecision,streamingToolExecutor&&(streamingToolExecutor.discard(),streamingToolExecutor=new StreamingToolExecutor(toolUseContext.options.tools,canUseTool,toolUseContext)),logEvent("tengu_context_window_escalation",{original_model:escalationCtx.originalModel,escalated_model:escalationCtx.widerModel,required_tokens:escalationCtx.requiredTokens,query_chain_id:queryChainIdForAnalytics,query_depth:queryTracking.depth}),state2=escalationCtx.state;continue}if(useCollapse&&state2.transition?.reason!=="collapse_drain_retry"){let drained=contextCollapse2.recoverFromOverflow(messagesForQuery,querySource);if(drained.committed>0){state2={messages:drained.messages,toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"collapse_drain_retry",committed:drained.committed}};continue}}}if((isWithheld413||isWithheldMedia)&&useReactive){let compacted=await reactiveCompact2.tryReactiveCompact({hasAttempted:hasAttemptedReactiveCompact,querySource,aborted:toolUseContext.abortController.signal.aborted,messages:messagesForQuery,reason:isWithheldMedia?"media_size":"prompt_too_long",cacheSafeParams:{systemPrompt,userContext,systemContext,toolUseContext,forkContextMessages:messagesForQuery}});if(compacted){params.taskBudget&&(taskBudgetRemaining=nextTaskBudgetRemaining({prev:taskBudgetRemaining,total:params.taskBudget.total,finalContextTokens:finalContextTokensFromLastResponse(messagesForQuery)}));let postCompactMessages=buildPostCompactMessages(compacted);for(let msg of postCompactMessages)yield msg;state2={messages:postCompactMessages,toolUseContext,autoCompactTracking:void 0,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact:!0,hasAttemptedContextWindowSwap,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"reactive_compact_retry"}};continue}return yield lastMessage,executeStopFailureHooks(lastMessage,toolUseContext),{reason:isWithheldMedia?"image_error":"prompt_too_long"}}else if(useCollapse&&isWithheld413)return yield lastMessage,executeStopFailureHooks(lastMessage,toolUseContext),{reason:"prompt_too_long"};if(isWithheldMaxOutputTokens(lastMessage)){let capEnabled=getFeatureValue_CACHED_MAY_BE_STALE("tengu_otk_slot_v1",!1);if(allowAdvancedRecovery&&capEnabled&&maxOutputTokensOverride===void 0&&!process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS){logEvent("tengu_max_tokens_escalate",{escalatedTo:ESCALATED_MAX_TOKENS}),state2={messages:messagesForQuery,toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,maxOutputTokensOverride:ESCALATED_MAX_TOKENS,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"max_output_tokens_escalate"}};continue}if(allowAdvancedRecovery&&maxOutputTokensRecoveryCount<MAX_OUTPUT_TOKENS_RECOVERY_LIMIT){let recoveryMessage=createUserMessage({content:"Output token limit hit. Resume directly \u2014 no apology, no recap of what you were doing. Pick up mid-thought if that is where the cut happened. Break remaining work into smaller pieces.",isMeta:!0});state2={messages:[...messagesForQuery,...assistantMessages,recoveryMessage],toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount:maxOutputTokensRecoveryCount+1,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:void 0,stopHookConsecutiveBlocks:0,turnCount,transition:{reason:"max_output_tokens_recovery",attempt:maxOutputTokensRecoveryCount+1}};continue}yield lastMessage}if(lastMessage?.isApiErrorMessage)return executeStopFailureHooks(lastMessage,toolUseContext),{reason:"completed"};let stopHookResult=yield*handleStopHooks(messagesForQuery,assistantMessages,systemPrompt,userContext,systemContext,toolUseContext,querySource,stopHookActive);if(stopHookResult.preventContinuation)return{reason:"stop_hook_prevented"};if(stopHookResult.blockingErrors.length>0){let nextStopHookBlocks=stopHookConsecutiveBlocks+1;if(nextStopHookBlocks>=getStopHookMaxLoops())return yield createSystemMessage(`Stop hook blocked ${nextStopHookBlocks} consecutive times; aborting to avoid an infinite loop. Adjust the hook or set CLAVUE_STOP_HOOK_MAX_LOOPS to a higher value if this is intentional.`,"warning"),logEvent("tengu_stop_hook_loop_capped",{consecutiveBlocks:nextStopHookBlocks}),{reason:"stop_hook_prevented"};if(!allowAdvancedRecovery)return yield createSystemMessage("Stop hook blocked; recovery disabled by route policy.","warning"),{reason:"stop_hook_prevented"};state2={messages:[...messagesForQuery,...assistantMessages,...stopHookResult.blockingErrors],toolUseContext,autoCompactTracking:tracking,maxOutputTokensRecoveryCount:0,emptyPostToolResponseRecoveryCount,hasAttemptedReactiveCompact,hasAttemptedContextWindowSwap,maxOutputTokensOverride:void 0,pendingToolUseSummary:void 0,stopHookActive:!0,stopHookConsecutiveBlocks:nextStopHookBlocks,turnCount,transition:{reason:"stop_hook_blocking"}};continue}return{reason:"completed"}}let shouldPreventContinuation=!1,updatedToolUseContext=toolUseContext;queryCheckpoint("query_tool_execution_start"),streamingToolExecutor?logEvent("tengu_streaming_tool_execution_used",{tool_count:toolUseBlocks.length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}):logEvent("tengu_streaming_tool_execution_not_used",{tool_count:toolUseBlocks.length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth});let toolUpdates=streamingToolExecutor?streamingToolExecutor.getRemainingResults():runTools(toolUseBlocks,assistantMessages,canUseTool,toolUseContext);for await(let update3 of toolUpdates)update3.message&&(yield update3.message,update3.message.type==="attachment"&&update3.message.attachment.type==="hook_stopped_continuation"&&(shouldPreventContinuation=!0),toolResults.push(...normalizeMessagesForAPI([update3.message],toolUseContext.options.tools).filter(_3=>_3.type==="user"))),update3.newContext&&(updatedToolUseContext={...update3.newContext,queryTracking});queryCheckpoint("query_tool_execution_end"),recordToolUsesForWorkState(toolUseBlocks);let nextPendingToolUseSummary;if(config3.gates.emitToolUseSummaries&&toolUseBlocks.length>0&&!toolUseContext.abortController.signal.aborted&&!toolUseContext.agentId){let lastAssistantMessage=assistantMessages.at(-1),lastAssistantText;if(lastAssistantMessage){let textBlocks=lastAssistantMessage.message.content.filter(block=>block.type==="text");if(textBlocks.length>0){let lastTextBlock=textBlocks.at(-1);lastTextBlock&&"text"in lastTextBlock&&(lastAssistantText=lastTextBlock.text)}}nextPendingToolUseSummary=buildPendingToolUseSummary({toolUseBlocks,toolResults,abortSignal:toolUseContext.abortController.signal,isNonInteractiveSession:toolUseContext.options.isNonInteractiveSession,lastAssistantText})}if(toolUseContext.abortController.signal.aborted){toolUseContext.abortController.signal.reason!=="interrupt"&&(yield createUserInterruptionMessage({toolUse:!0}));let nextTurnCountOnAbort=turnCount+1;return maxTurns&&nextTurnCountOnAbort>maxTurns&&(yield createAttachmentMessage({type:"max_turns_reached",maxTurns,turnCount:nextTurnCountOnAbort})),{reason:"aborted_tools"}}if(shouldPreventContinuation)return{reason:"hook_stopped"};tracking?.compacted&&(tracking.turnCounter++,logEvent("tengu_post_autocompact_turn",{turnId:tracking.turnId,turnCounter:tracking.turnCounter,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth})),logEvent("tengu_query_before_attachments",{messagesForQueryCount:messagesForQuery.length,assistantMessagesCount:assistantMessages.length,toolResultsCount:toolResults.length,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth});let sleepRan=toolUseBlocks.some(b3=>b3.name===SLEEP_TOOL_NAME),isMainThread=querySource.startsWith("repl_main_thread")||querySource==="sdk",currentAgentId=toolUseContext.agentId,queuedCommandsSnapshot=getCommandsByMaxPriority(sleepRan?"later":"next").filter(cmd=>isSlashCommand(cmd)?!1:isMainThread?cmd.agentId===void 0:cmd.mode==="task-notification"&&cmd.agentId===currentAgentId);for await(let attachment of getAttachmentMessages(null,updatedToolUseContext,null,queuedCommandsSnapshot,[...messagesForQuery,...assistantMessages,...toolResults],querySource))yield attachment,toolResults.push(attachment);if(pendingMemoryPrefetch&&pendingMemoryPrefetch.settledAt!==null&&pendingMemoryPrefetch.consumedOnIteration===-1){let memoryAttachments=filterDuplicateMemoryAttachments(await pendingMemoryPrefetch.promise,toolUseContext.readFileState);for(let memAttachment of memoryAttachments){let msg=createAttachmentMessage(memAttachment);yield msg,toolResults.push(msg)}pendingMemoryPrefetch.consumedOnIteration=turnCount-1}if(skillPrefetch2&&pendingSkillPrefetch){let skillAttachments=await skillPrefetch2.collectSkillDiscoveryPrefetch(pendingSkillPrefetch);for(let att of skillAttachments){let msg=createAttachmentMessage(att);yield msg,toolResults.push(msg)}}let consumedCommands=queuedCommandsSnapshot.filter(cmd=>cmd.mode==="prompt"||cmd.mode==="task-notification");if(consumedCommands.length>0){for(let cmd of consumedCommands)cmd.uuid&&(consumedCommandUuids.push(cmd.uuid),notifyCommandLifecycle(cmd.uuid,"started"));remove2(consumedCommands)}let fileChangeAttachmentCount=count2(toolResults,tr=>tr.type==="attachment"&&tr.attachment.type==="edited_text_file");logEvent("tengu_query_after_attachments",{totalToolResultsCount:toolResults.length,fileChangeAttachmentCount,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth}),updatedToolUseContext=refreshToolsForNextTurn({updatedToolUseContext,routeDecision});let toolUseContextWithQueryTracking={...updatedToolUseContext,queryTracking},nextTurnCount=turnCount+1;if(maxTurns&&nextTurnCount>maxTurns)return yield createAttachmentMessage({type:"max_turns_reached",maxTurns,turnCount:nextTurnCount}),{reason:"max_turns",turnCount:nextTurnCount};let gpt5SearchConvergence=evaluateGpt5SearchConvergence({messages:messagesForQuery,currentToolUseBlocks:toolUseBlocks,querySource,agentId:toolUseContext.agentId,isGpt5Route:isGpt5xFamilyModel(currentModel)||isGpt5xFamilyModel(routeDecision?.model),userTurnText});gpt5SearchConvergence.action!=="none"&&logEvent("tengu_gpt5_search_convergence",{action:gpt5SearchConvergence.action,reason:gpt5SearchConvergence.reason,consecutiveExplorationTurns:gpt5SearchConvergence.consecutiveExplorationTurns,queryChainId:queryChainIdForAnalytics,queryDepth:queryTracking.depth});let convergenceReminderMessages=gpt5SearchConvergence.action==="remind"||gpt5SearchConvergence.action==="stop"?[createUserMessage({content:gpt5SearchConvergence.message,isMeta:!0})]:[];queryCheckpoint("query_recursive_call"),state2=buildNextTurnState({messagesForQuery,assistantMessages,toolResults,convergenceReminderMessages,toolUseContext:toolUseContextWithQueryTracking,autoCompactTracking:tracking,nextTurnCount,pendingToolUseSummary:nextPendingToolUseSummary,stopHookActive,stopHookConsecutiveBlocks})}}catch(_2){var _error=_2,_hasError=!0}finally{__callDispose(_stack,_error,_hasError)}}var reactiveCompact2,contextCollapse2,skillPrefetch2,jobClassifier2,snipModule,taskSummaryModule,STOP_HOOK_MAX_LOOPS_DEFAULT,MAX_OUTPUT_TOKENS_RECOVERY_LIMIT,EMPTY_POST_TOOL_RESPONSE_RECOVERY_LIMIT,CRITICAL_WARNING_STREAK_ESCALATE,CRITICAL_WARNING_REPEAT_INTERVAL,MAX_FALLBACK_ATTEMPTS,init_turn_loop_orchestrator=__esm({"src/runtime/turn-loop-orchestrator.ts"(){init_withRetry();init_streamingFallbackSafety();init_modelFallbackCooldown();init_autoCompact();init_compact2();init_v2ArchiveState();init_pinnedContext();init_renderPinned();init_pinnedContextCore();init_ProjectionEngine();init_featureModules();init_boundaryV2();init_analytics();init_imageValidation();init_imageResizer();init_systemPromptType();init_log3();init_errors7();init_debug();init_messages4();init_api3();init_attachments2();init_messageQueueManager();init_commandLifecycle();init_headlessProfiler();init_model();init_modelRoles();init_modelFallbackChain();init_nativeWorkflowCompatibility();init_tokens();init_context();init_growthbook();init_prompt13();init_postSamplingHooks();init_hooks3();init_dumpPrompts();init_StreamingToolExecutor();init_queryProfiler();init_toolOrchestration();init_toolResultStorage();init_gpt5SearchConvergence();init_gpt5EffortIntent();init_turn_loop_pre();init_turn_loop_route();init_turn_loop_dispatch();init_turn_loop_post_turn();init_turn_loop_recover();init_turn_loop_tool_loop();init_runtime3();init_sessionStorage();init_heapPressure();init_forceMajorGc();init_envUtils();init_stopHooks();init_config6();init_deps();init_state();init_tokenBudget2();init_array4();init_emptyPostToolFollowup();init_pendingAgentFollowup();({reactiveCompact:reactiveCompact2,contextCollapse:contextCollapse2}=featureModules),{skillPrefetch:skillPrefetch2,jobClassifier:jobClassifier2}=featureModules,{snipCompact:snipModule,taskSummary:taskSummaryModule}=featureModules,STOP_HOOK_MAX_LOOPS_DEFAULT=8;__name(getStopHookMaxLoops,"getStopHookMaxLoops");__name(getLatestUserTurnText,"getLatestUserTurnText");__name(relieveTurnLoopHeapPressure,"relieveTurnLoopHeapPressure");MAX_OUTPUT_TOKENS_RECOVERY_LIMIT=3,EMPTY_POST_TOOL_RESPONSE_RECOVERY_LIMIT=1,CRITICAL_WARNING_STREAK_ESCALATE=3,CRITICAL_WARNING_REPEAT_INTERVAL=10,MAX_FALLBACK_ATTEMPTS=3;__name(queryLoop,"queryLoop")}});async function*query(params){let consumedCommandUuids=[],terminal=yield*queryLoop(params,consumedCommandUuids);for(let uuid3 of consumedCommandUuids)notifyCommandLifecycle(uuid3,"completed");return terminal}var init_query2=__esm({"src/query.ts"(){init_turn_loop_orchestrator();init_state();init_commandLifecycle();__name(query,"query")}});var EMPTY_USAGE,init_emptyUsage=__esm({"src/services/api/emptyUsage.ts"(){EMPTY_USAGE={input_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0,output_tokens:0,server_tool_use:{web_search_requests:0,web_fetch_requests:0},service_tier:"standard",cache_creation:{ephemeral_1h_input_tokens:0,ephemeral_5m_input_tokens:0},inference_geo:"",iterations:[],speed:"standard"}}});import fs7 from"node:fs";import path17 from"node:path";function buildEfficiencyLedgerEntry(input2){let cacheRead=positiveNumber2(input2.usage.cache_read_input_tokens),cacheCreation=positiveNumber2(input2.usage.cache_creation_input_tokens),inputTokens=positiveNumber2(input2.usage.input_tokens),outputTokens=positiveNumber2(input2.usage.output_tokens),totalInputTokens=inputTokens+cacheRead+cacheCreation,totalTokens=totalInputTokens+outputTokens,billableInputTokens=inputTokens+cacheCreation,cacheHitRate=totalInputTokens>0?roundRatio(cacheRead/totalInputTokens):0,freshInputRatio=totalInputTokens>0?roundRatio(billableInputTokens/totalInputTokens):0,estimatedInputTokenSavings=cacheRead,estimatedInputTokenSavingsRate=totalInputTokens>0?roundRatio(estimatedInputTokenSavings/totalInputTokens):0;return{schema:"clavue_efficiency_v1",createdAt:new Date().toISOString(),model:input2.model,querySource:input2.querySource,messageCount:input2.messageCount,messageTokens:input2.messageTokens,durationMs:positiveNumber2(input2.durationMs),inputTokens,outputTokens,cacheReadTokens:cacheRead,cacheCreationTokens:cacheCreation,billableInputTokens,totalInputTokens,totalTokens,cacheHitRate,freshInputRatio,estimatedInputTokenSavings,estimatedInputTokenSavingsRate,costUSD:positiveNumber2(input2.costUSD),fastMode:input2.fastMode===!0,isGpt5x:isGpt5xFamily(input2.model)}}function recordEfficiencyLedgerEntry(input2){if(isEnvTruthy3(process.env.CLAVUE_DISABLE_EFFICIENCY_LEDGER))return;let entry=buildEfficiencyLedgerEntry(input2),filePath=resolveEfficiencyLedgerPath();try{fs7.mkdirSync(path17.dirname(filePath),{recursive:!0}),fs7.appendFileSync(filePath,`${JSON.stringify(entry)}
4286
4286
  `,"utf8"),recentSummaryCache2=void 0}catch(error40){logForDebugging(`[EfficiencyLedger] failed to append ${filePath}: ${error40 instanceof Error?error40.message:String(error40)}`,{level:"debug"})}}function getRecentEfficiencyLedgerSummary(options){if(isEnvTruthy3(process.env.CLAVUE_DISABLE_EFFICIENCY_LEDGER))return null;let filePath=resolveEfficiencyLedgerPath(),limit=Math.max(1,Math.min(256,Math.trunc(options?.limit??DEFAULT_LEDGER_SUMMARY_LIMIT2))),maxBytes=Math.max(1024,Math.min(1024*1024,Math.trunc(options?.maxBytes??DEFAULT_LEDGER_TAIL_BYTES2))),model=options?.model?.trim().toLowerCase()??"",now2=options?.now??Date.now(),cacheKey=[filePath,model,String(limit),String(maxBytes)].join("\0");if(recentSummaryCache2&&recentSummaryCache2.key===cacheKey&&now2-recentSummaryCache2.readAt<LEDGER_SUMMARY_CACHE_TTL_MS2)return recentSummaryCache2.summary;let summary=readRecentEfficiencyLedgerSummary({filePath,model,limit,maxBytes});return recentSummaryCache2={key:cacheKey,readAt:now2,summary},summary}function resolveEfficiencyLedgerPath(){let override=process.env.CLAVUE_EFFICIENCY_LEDGER_PATH?.trim();return override?path17.resolve(override):path17.join(getCwd(),".clavue","efficiency-ledger.jsonl")}function readRecentEfficiencyLedgerSummary({filePath,model,limit,maxBytes}){let source="";try{let stat59=fs7.statSync(filePath),start=Math.max(0,stat59.size-maxBytes),fd2=fs7.openSync(filePath,"r");try{let buffer2=Buffer.allocUnsafe(stat59.size-start);fs7.readSync(fd2,buffer2,0,buffer2.length,start),source=buffer2.toString("utf8")}finally{fs7.closeSync(fd2)}}catch{return null}let rows=[];for(let line of source.split(/\r?\n/).reverse()){if(rows.length>=limit)break;let trimmed=line.trim();if(!trimmed.startsWith("{"))continue;let entry=parseEfficiencyLedgerLine(trimmed);entry&&(model&&!entry.model.toLowerCase().includes(model)||rows.push(entry))}return rows.length===0?null:summarizeEfficiencyLedgerEntries(rows)}function parseEfficiencyLedgerLine(line){try{let parsed=JSON.parse(line);return parsed.schema!=="clavue_efficiency_v1"||typeof parsed.model!="string"?null:{schema:"clavue_efficiency_v1",createdAt:typeof parsed.createdAt=="string"?parsed.createdAt:"",model:parsed.model,querySource:typeof parsed.querySource=="string"?parsed.querySource:"",messageCount:positiveNumber2(parsed.messageCount),messageTokens:positiveNumber2(parsed.messageTokens),durationMs:positiveNumber2(parsed.durationMs),inputTokens:positiveNumber2(parsed.inputTokens),outputTokens:positiveNumber2(parsed.outputTokens),cacheReadTokens:positiveNumber2(parsed.cacheReadTokens),cacheCreationTokens:positiveNumber2(parsed.cacheCreationTokens),billableInputTokens:positiveNumber2(parsed.billableInputTokens),totalInputTokens:positiveNumber2(parsed.totalInputTokens),totalTokens:positiveNumber2(parsed.totalTokens),cacheHitRate:positiveNumber2(parsed.cacheHitRate),freshInputRatio:positiveNumber2(parsed.freshInputRatio),estimatedInputTokenSavings:positiveNumber2(parsed.estimatedInputTokenSavings),estimatedInputTokenSavingsRate:positiveNumber2(parsed.estimatedInputTokenSavingsRate),costUSD:positiveNumber2(parsed.costUSD),fastMode:parsed.fastMode===!0,isGpt5x:parsed.isGpt5x===!0}}catch{return null}}function summarizeEfficiencyLedgerEntries(entries){let totalInputTokens=0,totalCacheReadTokens=0,totalBillableInputTokens=0,totalEstimatedInputTokenSavings=0,totalDurationMs=0,totalCostUSD=0,gpt5xSampleCount=0;for(let entry of entries)totalInputTokens+=entry.totalInputTokens,totalCacheReadTokens+=entry.cacheReadTokens,totalBillableInputTokens+=entry.billableInputTokens,totalEstimatedInputTokenSavings+=entry.estimatedInputTokenSavings,totalDurationMs+=entry.durationMs,totalCostUSD+=entry.costUSD,entry.isGpt5x&&gpt5xSampleCount++;let sampleCount=entries.length;return{sampleCount,gpt5xSampleCount,avgCacheHitRate:totalInputTokens>0?roundRatio(totalCacheReadTokens/totalInputTokens):0,avgFreshInputRatio:totalInputTokens>0?roundRatio(totalBillableInputTokens/totalInputTokens):0,totalInputTokens,totalCacheReadTokens,totalBillableInputTokens,totalEstimatedInputTokenSavings,avgDurationMs:sampleCount>0?Math.round(totalDurationMs/sampleCount):0,avgCostUSD:sampleCount>0?roundRatio(totalCostUSD/sampleCount):0}}function isGpt5xFamily(model){let normalized=model.trim().toLowerCase();return normalized==="gpt-5"||normalized.startsWith("gpt-5.")||normalized.startsWith("gpt-5-")||normalized.startsWith("gpt5")}function positiveNumber2(value){return Number.isFinite(value)&&value&&value>0?value:0}function roundRatio(value){return Math.round(value*1e4)/1e4}var DEFAULT_LEDGER_TAIL_BYTES2,DEFAULT_LEDGER_SUMMARY_LIMIT2,LEDGER_SUMMARY_CACHE_TTL_MS2,recentSummaryCache2,init_efficiencyLedger=__esm({"src/services/api/efficiencyLedger.ts"(){init_cwd2();init_envUtils();init_debug();DEFAULT_LEDGER_TAIL_BYTES2=64*1024,DEFAULT_LEDGER_SUMMARY_LIMIT2=32,LEDGER_SUMMARY_CACHE_TTL_MS2=1e4;__name(buildEfficiencyLedgerEntry,"buildEfficiencyLedgerEntry");__name(recordEfficiencyLedgerEntry,"recordEfficiencyLedgerEntry");__name(getRecentEfficiencyLedgerSummary,"getRecentEfficiencyLedgerSummary");__name(resolveEfficiencyLedgerPath,"resolveEfficiencyLedgerPath");__name(readRecentEfficiencyLedgerSummary,"readRecentEfficiencyLedgerSummary");__name(parseEfficiencyLedgerLine,"parseEfficiencyLedgerLine");__name(summarizeEfficiencyLedgerEntries,"summarizeEfficiencyLedgerEntries");__name(isGpt5xFamily,"isGpt5xFamily");__name(positiveNumber2,"positiveNumber");__name(roundRatio,"roundRatio")}});function getErrorMessage2(error40){if(error40 instanceof APIError){let body=error40.error;if(body?.error?.message)return body.error.message}return error40 instanceof Error?error40.message:String(error40)}function detectGateway({headers,baseUrl}){if(headers){let headerNames=[];headers.forEach((_2,key)=>headerNames.push(key));for(let[gw,{prefixes}]of Object.entries(GATEWAY_FINGERPRINTS))if(prefixes.some(p=>headerNames.some(h3=>h3.startsWith(p))))return gw}if(baseUrl)try{let host=new URL(baseUrl).hostname.toLowerCase();for(let[gw,suffixes]of Object.entries(GATEWAY_HOST_SUFFIXES))if(suffixes.some(s2=>host.endsWith(s2)))return gw}catch{}}function getAnthropicEnvMetadata(){return{...process.env.ANTHROPIC_BASE_URL?{baseUrl:process.env.ANTHROPIC_BASE_URL}:{},...process.env.ANTHROPIC_MODEL?{envModel:process.env.ANTHROPIC_MODEL}:{},...process.env.ANTHROPIC_SMALL_FAST_MODEL?{envSmallFastModel:process.env.ANTHROPIC_SMALL_FAST_MODEL}:{}}}function getBuildAgeMinutes(){let buildTime=new Date("2026-03-31T11:07:38.661Z").getTime();if(!isNaN(buildTime))return Math.floor((Date.now()-buildTime)/6e4)}function logAPIQuery({model,messagesLength,temperature,betas,permissionMode,querySource,queryTracking,thinkingType,effortValue,fastMode,previousRequestId}){logEvent("tengu_api_query",{model,messagesLength,temperature,provider:getAPIProviderForStatsig(),buildAgeMins:getBuildAgeMinutes(),...betas?.length?{betas:betas.join(",")}:{},permissionMode,querySource,...queryTracking?{queryChainId:queryTracking.chainId,queryDepth:queryTracking.depth}:{},thinkingType,effortValue,fastMode,...previousRequestId?{previousRequestId}:{},...getAnthropicEnvMetadata()})}function logAPIError({error:error40,model,messageCount,messageTokens,durationMs,durationMsIncludingRetries,attempt:attempt2,requestId,clientRequestId,didFallBackToNonStreaming,promptCategory,headers,queryTracking,querySource,llmSpan,fastMode,previousRequestId}){let gateway=detectGateway({headers:error40 instanceof APIError&&error40.headers?error40.headers:headers,baseUrl:process.env.ANTHROPIC_BASE_URL}),errStr=getErrorMessage2(error40),status2=error40 instanceof APIError?String(error40.status):void 0,errorType=classifyAPIError(error40),connectionDetails=extractConnectionErrorDetails(error40);if(connectionDetails){let sslLabel=connectionDetails.isSSLError?" (SSL error)":"";logForDebugging(`Connection error details: code=${connectionDetails.code}${sslLabel}, message=${connectionDetails.message}`,{level:"error"})}let invocation=consumeInvokingRequestId();clientRequestId&&logForDebugging(`API error x-client-request-id=${clientRequestId} (give this to the API team for server-log lookup)`,{level:"error"}),logError2(error40),logEvent("tengu_api_error",{model,error:errStr,status:status2,errorType,messageCount,messageTokens,durationMs,durationMsIncludingRetries,attempt:attempt2,provider:getAPIProviderForStatsig(),requestId:requestId||void 0,...invocation?{invokingRequestId:invocation.invokingRequestId,invocationKind:invocation.invocationKind}:{},clientRequestId:clientRequestId||void 0,didFallBackToNonStreaming,...promptCategory?{promptCategory}:{},...gateway?{gateway}:{},...queryTracking?{queryChainId:queryTracking.chainId,queryDepth:queryTracking.depth}:{},...querySource?{querySource}:{},fastMode,...previousRequestId?{previousRequestId}:{},...getAnthropicEnvMetadata()}),logOTelEvent("api_error",{model,error:errStr,status_code:String(status2),duration_ms:String(durationMs),attempt:String(attempt2),speed:fastMode?"fast":"normal"}),endLLMRequestSpan(llmSpan,{success:!1,statusCode:status2?parseInt(status2):void 0,error:errStr,attempt:attempt2});let teleportInfo=getTeleportedSessionInfo();teleportInfo?.isTeleported&&!teleportInfo.hasLoggedFirstMessage&&(logEvent("tengu_teleport_first_message_error",{session_id:teleportInfo.sessionId,error_type:errorType}),markFirstTeleportMessageLogged())}function logAPISuccess({model,preNormalizedModel,messageCount,messageTokens,usage,durationMs,durationMsIncludingRetries,attempt:attempt2,ttftMs,requestId,stopReason,costUSD,didFallBackToNonStreaming,querySource,gateway,queryTracking,permissionMode,globalCacheStrategy,textContentLength,thinkingContentLength,toolUseContentLengths,connectorTextBlockCount,fastMode,previousRequestId,betas}){let isNonInteractiveSession=getIsNonInteractiveSession(),isPostCompaction=consumePostCompaction(),hasPrintFlag=process.argv.includes("-p")||process.argv.includes("--print"),now2=Date.now(),lastCompletion=getLastApiCompletionTimestamp(),timeSinceLastApiCallMs=lastCompletion!==null?now2-lastCompletion:void 0,invocation=consumeInvokingRequestId();logEvent("tengu_api_success",{model,...preNormalizedModel!==model?{preNormalizedModel}:{},...betas?.length?{betas:betas.join(",")}:{},messageCount,messageTokens,inputTokens:usage.input_tokens,outputTokens:usage.output_tokens,cachedInputTokens:usage.cache_read_input_tokens??0,uncachedInputTokens:usage.cache_creation_input_tokens??0,durationMs,durationMsIncludingRetries,attempt:attempt2,ttftMs:ttftMs??void 0,buildAgeMins:getBuildAgeMinutes(),provider:getAPIProviderForStatsig(),requestId:requestId??void 0,...invocation?{invokingRequestId:invocation.invokingRequestId,invocationKind:invocation.invocationKind}:{},stop_reason:stopReason??void 0,costUSD,didFallBackToNonStreaming,isNonInteractiveSession,print:hasPrintFlag,isTTY:process.stdout.isTTY??!1,querySource,...gateway?{gateway}:{},...queryTracking?{queryChainId:queryTracking.chainId,queryDepth:queryTracking.depth}:{},permissionMode,...globalCacheStrategy?{globalCacheStrategy}:{},...textContentLength!==void 0?{textContentLength}:{},...thinkingContentLength!==void 0?{thinkingContentLength}:{},...toolUseContentLengths!==void 0?{toolUseContentLengths:jsonStringify(toolUseContentLengths)}:{},...connectorTextBlockCount!==void 0?{connectorTextBlockCount}:{},fastMode,...previousRequestId?{previousRequestId}:{},...isPostCompaction?{isPostCompaction}:{},...getAnthropicEnvMetadata(),timeSinceLastApiCallMs}),setLastApiCompletionTimestamp(now2)}function logAPISuccessAndDuration({model,preNormalizedModel,start,startIncludingRetries,ttftMs,usage,attempt:attempt2,messageCount,messageTokens,requestId,stopReason,didFallBackToNonStreaming,querySource,headers,costUSD,queryTracking,permissionMode,newMessages,llmSpan,globalCacheStrategy,requestSetupMs,attemptStartTimes,fastMode,previousRequestId,betas}){let gateway=detectGateway({headers,baseUrl:process.env.ANTHROPIC_BASE_URL}),textContentLength,thinkingContentLength,toolUseContentLengths,connectorTextBlockCount;if(newMessages){let textLen=0,thinkingLen=0,hasToolUse=!1,toolLengths={},connectorCount=0;for(let msg of newMessages)for(let block of msg.message.content)if(block.type==="text")textLen+=block.text.length;else if(block.type==="thinking")thinkingLen+=block.thinking.length;else if(block.type==="tool_use"||block.type==="server_tool_use"||block.type==="mcp_tool_use"){let inputLen=jsonStringify(block.input).length,sanitizedName=sanitizeToolNameForAnalytics(block.name);toolLengths[sanitizedName]=(toolLengths[sanitizedName]??0)+inputLen,hasToolUse=!0}textContentLength=textLen,thinkingContentLength=thinkingLen>0?thinkingLen:void 0,toolUseContentLengths=hasToolUse?toolLengths:void 0,connectorTextBlockCount=connectorCount>0?connectorCount:void 0}let durationMs=Date.now()-start,durationMsIncludingRetries=Date.now()-startIncludingRetries;addToTotalDurationState(durationMsIncludingRetries,durationMs),recordEfficiencyLedgerEntry({model,querySource,messageCount,messageTokens,durationMs,usage,costUSD,fastMode}),logAPISuccess({model,preNormalizedModel,messageCount,messageTokens,usage,durationMs,durationMsIncludingRetries,attempt:attempt2,ttftMs,requestId,stopReason,costUSD,didFallBackToNonStreaming,querySource,gateway,queryTracking,permissionMode,globalCacheStrategy,textContentLength,thinkingContentLength,toolUseContentLengths,connectorTextBlockCount,fastMode,previousRequestId,betas}),logOTelEvent("api_request",{model,input_tokens:String(usage.input_tokens),output_tokens:String(usage.output_tokens),cache_read_tokens:String(usage.cache_read_input_tokens),cache_creation_tokens:String(usage.cache_creation_input_tokens),cost_usd:String(costUSD),duration_ms:String(durationMs),speed:fastMode?"fast":"normal"});let modelOutput,thinkingOutput,hasToolCall;isBetaTracingEnabled()&&newMessages&&(modelOutput=newMessages.flatMap(m3=>m3.message.content.filter(c4=>c4.type==="text").map(c4=>c4.text)).join(`
4287
4287
  `)||void 0,process.env.USER_TYPE==="ant"&&(thinkingOutput=newMessages.flatMap(m3=>m3.message.content.filter(c4=>c4.type==="thinking").map(c4=>c4.thinking)).join(`
4288
4288
  `)||void 0),hasToolCall=newMessages.some(m3=>m3.message.content.some(c4=>c4.type==="tool_use"))),endLLMRequestSpan(llmSpan,{success:!0,inputTokens:usage.input_tokens,outputTokens:usage.output_tokens,cacheReadTokens:usage.cache_read_input_tokens,cacheCreationTokens:usage.cache_creation_input_tokens,attempt:attempt2,modelOutput,thinkingOutput,hasToolCall,ttftMs:ttftMs??void 0,requestSetupMs,attemptStartTimes});let teleportInfo=getTeleportedSessionInfo();teleportInfo?.isTeleported&&!teleportInfo.hasLoggedFirstMessage&&(logEvent("tengu_teleport_first_message_success",{session_id:teleportInfo.sessionId}),markFirstTeleportMessageLogged())}var GATEWAY_FINGERPRINTS,GATEWAY_HOST_SUFFIXES,init_logging=__esm({"src/services/api/logging.ts"(){init_sdk();init_state();init_connectorText();init_debug();init_log3();init_providers();init_slowOperations();init_events();init_sessionTracing();init_agentContext();init_analytics();init_metadata();init_emptyUsage();init_efficiencyLedger();init_errors7();init_errorUtils();__name(getErrorMessage2,"getErrorMessage");GATEWAY_FINGERPRINTS={litellm:{prefixes:["x-litellm-"]},helicone:{prefixes:["helicone-"]},portkey:{prefixes:["x-portkey-"]},"cloudflare-ai-gateway":{prefixes:["cf-aig-"]},kong:{prefixes:["x-kong-"]},braintrust:{prefixes:["x-bt-"]}},GATEWAY_HOST_SUFFIXES={databricks:[".cloud.databricks.com",".azuredatabricks.net",".gcp.databricks.com"]};__name(detectGateway,"detectGateway");__name(getAnthropicEnvMetadata,"getAnthropicEnvMetadata");__name(getBuildAgeMinutes,"getBuildAgeMinutes");__name(logAPIQuery,"logAPIQuery");__name(logAPIError,"logAPIError");__name(logAPISuccess,"logAPISuccess");__name(logAPISuccessAndDuration,"logAPISuccessAndDuration")}});function createDenialTrackingState(){return{consecutiveDenials:0,totalDenials:0}}function recordDenial(state2){return{...state2,consecutiveDenials:state2.consecutiveDenials+1,totalDenials:state2.totalDenials+1}}function recordSuccess(state2){return state2.consecutiveDenials===0?state2:{...state2,consecutiveDenials:0}}function shouldFallbackToPrompting(state2){return state2.consecutiveDenials>=DENIAL_LIMITS.maxConsecutive||state2.totalDenials>=DENIAL_LIMITS.maxTotal}var DENIAL_LIMITS,init_denialTracking=__esm({"src/utils/permissions/denialTracking.ts"(){DENIAL_LIMITS={maxConsecutive:3,maxTotal:20};__name(createDenialTrackingState,"createDenialTrackingState");__name(recordDenial,"recordDenial");__name(recordSuccess,"recordSuccess");__name(shouldFallbackToPrompting,"shouldFallbackToPrompting")}});import{randomUUID as randomUUID27}from"crypto";function saveCacheSafeParams(params){lastCacheSafeParams=params}function getLastCacheSafeParams(){return lastCacheSafeParams}function createCacheSafeParams(context2){return{systemPrompt:context2.systemPrompt,userContext:context2.userContext,systemContext:context2.systemContext,toolUseContext:context2.toolUseContext,forkContextMessages:context2.messages}}function createGetAppStateWithAllowedTools(baseGetAppState,allowedTools){return allowedTools.length===0?baseGetAppState:()=>{let appState2=baseGetAppState();return{...appState2,toolPermissionContext:{...appState2.toolPermissionContext,alwaysAllowRules:{...appState2.toolPermissionContext.alwaysAllowRules,command:[...new Set([...appState2.toolPermissionContext.alwaysAllowRules.command||[],...allowedTools])]}}}}}async function prepareForkedCommandContext(command9,args,context2){let skillContent=(await command9.getPromptForCommand(args,context2)).map(block=>block.type==="text"?block.text:"").join(`
@@ -8516,7 +8516,7 @@ Error: sandbox required but unavailable: ${reason}
8516
8516
 
8517
8517
  `),gracefulShutdownSync(1,"other");return}logForDebugging(`sandbox disabled: ${reason}`,{level:"warn"}),addNotification({key:"sandbox-unavailable",jsx:(0,import_jsx_runtime480.jsxs)(import_jsx_runtime480.Fragment,{children:[(0,import_jsx_runtime480.jsx)(ThemedText,{color:"warning",children:"sandbox disabled"}),(0,import_jsx_runtime480.jsx)(ThemedText,{dimColor:!0,children:" \xB7 /sandbox"})]}),priority:"medium"})}},[addNotification]),SandboxManager.isSandboxingEnabled()&&SandboxManager.initialize(sandboxAskCallback).catch(err2=>{process.stderr.write(`
8518
8518
  \u274C Sandbox Error: ${errorMessage(err2)}
8519
- `),gracefulShutdownSync(1,"other")});let setToolPermissionContext=(0,import_react347.useCallback)((context2,options)=>{setAppState(prev=>({...prev,toolPermissionContext:{...context2,mode:options?.preserveMode?prev.toolPermissionContext.mode:context2.mode}})),setImmediate(setToolUseConfirmQueue2=>{setToolUseConfirmQueue2(currentQueue=>(currentQueue.forEach(item=>{item.recheckPermission()}),currentQueue))},setToolUseConfirmQueue)},[setAppState,setToolUseConfirmQueue]);(0,import_react347.useEffect)(()=>(registerLeaderSetToolPermissionContext(setToolPermissionContext),()=>unregisterLeaderSetToolPermissionContext()),[setToolPermissionContext]);let canUseTool=useCanUseTool_default(setToolUseConfirmQueue,setToolPermissionContext),requestPrompt=(0,import_react347.useCallback)((title,toolInputSummary)=>request=>new Promise((resolve48,reject2)=>{setPromptQueue(prev=>[...prev,{request,title,toolInputSummary,resolve:resolve48,reject:reject2}])}),[]),getToolUseContext=(0,import_react347.useCallback)((messages2,newMessages,abortController2,mainLoopModel2)=>{let s2=store.getState(),computeTools=__name(()=>{let state2=store.getState(),decision=getCurrentCodingRouteResolution(getMainLoopModel(),mainLoopRouteKeys).decision,assembled=assembleToolPool(state2.toolPermissionContext,state2.mcp.tools,decision),merged=mergeAndFilterTools(combinedInitialTools,assembled,state2.toolPermissionContext.mode);return mainThreadAgentDefinition?resolveAgentTools(mainThreadAgentDefinition,merged,!1,!0).resolvedTools:merged},"computeTools"),routeResolution=getCurrentCodingRouteResolution(mainLoopModel2,mainLoopRouteKeys),routeDecision2=routeResolution.decision;return{abortController:abortController2,options:{commands,tools:computeTools(),debug:debug4,verbose:s2.verbose,mainLoopModel:mainLoopModel2,thinkingConfig:s2.thinkingEnabled!==!1?thinkingConfig:{type:"disabled"},mcpClients:mergeClients(initialMcpClients,s2.mcp.clients),mcpResources:s2.mcp.resources,ideInstallationStatus,isNonInteractiveSession:!1,dynamicMcpConfig,theme:theme2,agentDefinitions:allowedAgentTypes?{...s2.agentDefinitions,allowedAgentTypes}:s2.agentDefinitions,customSystemPrompt,appendSystemPrompt,refreshTools:computeTools,routeDecision:routeDecision2,modelRouteKeys:mainLoopRouteKeys,routeSnapshot:routeResolution.snapshot},getAppState:__name(()=>store.getState(),"getAppState"),setAppState,messages:messages2,setMessages,updateFileHistoryState(updater){setAppState(prev=>{let updated=updater(prev.fileHistory);return updated===prev.fileHistory?prev:{...prev,fileHistory:updated}})},updateAttributionState(updater){setAppState(prev=>{let updated=updater(prev.attribution);return updated===prev.attribution?prev:{...prev,attribution:updated}})},openMessageSelector:__name(()=>{disabled||setIsMessageSelectorVisible(!0)},"openMessageSelector"),onChangeAPIKey:reverify,readFileState:readFileState.current,setToolJSX,addNotification,appendSystemMessage:__name(msg=>setMessages(prev=>[...prev,msg]),"appendSystemMessage"),sendOSNotification:__name(opts=>{sendNotification(opts,terminal)},"sendOSNotification"),onChangeDynamicMcpConfig,onInstallIDEExtension:setIDEToInstallExtension,nestedMemoryAttachmentTriggers:new Set,loadedNestedMemoryPaths:loadedNestedMemoryPathsRef.current,dynamicSkillDirTriggers:new Set,discoveredSkillNames:discoveredSkillNamesRef.current,setResponseLength,pushApiMetricsEntry:void 0,setStreamMode,onCompactProgress:__name(event=>{switch(event.type){case"hooks_start":setSpinnerColor("claudeBlue_FOR_SYSTEM_SPINNER"),setSpinnerShimmerColor("claudeBlueShimmer_FOR_SYSTEM_SPINNER"),setSpinnerMessage(event.hookType==="pre_compact"?"Running PreCompact hooks\u2026":event.hookType==="post_compact"?"Running PostCompact hooks\u2026":"Running SessionStart hooks\u2026");break;case"compact_start":setSpinnerMessage("Compacting conversation");break;case"compact_end":setSpinnerMessage(null),setSpinnerColor(null),setSpinnerShimmerColor(null);break}},"onCompactProgress"),setInProgressToolUseIDs,setHasInterruptibleToolInProgress:__name(v2=>{hasInterruptibleToolInProgressRef.current=v2},"setHasInterruptibleToolInProgress"),resume:resume3,setConversationId,requestPrompt:void 0,contentReplacementState:contentReplacementStateRef.current}},[commands,combinedInitialTools,mainThreadAgentDefinition,debug4,initialMcpClients,ideInstallationStatus,dynamicMcpConfig,theme2,allowedAgentTypes,store,setAppState,reverify,addNotification,setMessages,onChangeDynamicMcpConfig,resume3,requestPrompt,disabled,customSystemPrompt,appendSystemPrompt,setConversationId]),handleBackgroundQuery=(0,import_react347.useCallback)(()=>{abortController?.abort("background");let removedNotifications=removeByFilter(cmd=>cmd.mode==="task-notification");(async()=>{let toolUseContext=getToolUseContext(messagesRef.current,[],new AbortController,mainLoopModel),[defaultSystemPrompt,userContext,systemContext]=await Promise.all([getSystemPrompt(toolUseContext.options.tools,mainLoopModel,Array.from(toolPermissionContext.additionalWorkingDirectories.keys()),toolUseContext.options.mcpClients),getUserContext(),getSystemContext()]),systemPrompt=buildEffectiveSystemPrompt({mainThreadAgentDefinition,toolUseContext,customSystemPrompt,defaultSystemPrompt,appendSystemPrompt});toolUseContext.renderedSystemPrompt=systemPrompt;let notificationMessages=(await getQueuedCommandAttachments(removedNotifications).catch(()=>[])).map(createAttachmentMessage),existingPrompts=new Set;for(let m3 of messagesRef.current)m3.type==="attachment"&&m3.attachment.type==="queued_command"&&m3.attachment.commandMode==="task-notification"&&typeof m3.attachment.prompt=="string"&&existingPrompts.add(m3.attachment.prompt);let uniqueNotifications=notificationMessages.filter(m3=>m3.attachment.type==="queued_command"&&(typeof m3.attachment.prompt!="string"||!existingPrompts.has(m3.attachment.prompt)));startBackgroundSession({messages:[...messagesRef.current,...uniqueNotifications],queryParams:{systemPrompt,userContext,systemContext,canUseTool,toolUseContext,querySource:getQuerySourceForREPL()},description:terminalTitle,setAppState,agentDefinition:mainThreadAgentDefinition})})()},[abortController,mainLoopModel,toolPermissionContext,mainThreadAgentDefinition,getToolUseContext,customSystemPrompt,appendSystemPrompt,canUseTool,setAppState]),{handleBackgroundSession}=useSessionBackgrounding({setMessages,setIsLoading:setIsExternalLoading,resetLoadingState,setAbortController,onBackgroundQuery:handleBackgroundQuery}),onQueryEvent=(0,import_react347.useCallback)(event=>{handleMessageFromStream(event,newMessage=>{isCompactBoundaryMessage(newMessage)?(isFullscreenEnvEnabled()?setMessages(old=>[...getMessagesAfterCompactBoundary(old,{includeSnipped:!0}),newMessage]):setMessages(()=>[newMessage]),setConversationId(randomUUID60())):newMessage.type==="progress"&&isEphemeralToolProgress(newMessage.data.type)?setMessages(oldMessages=>{let last2=oldMessages.at(-1);if(last2?.type==="progress"&&last2.parentToolUseID===newMessage.parentToolUseID&&last2.data.type===newMessage.data.type){let copy2=oldMessages.slice();return copy2[copy2.length-1]=newMessage,copy2}return[...oldMessages,newMessage]}):setMessages(oldMessages=>[...oldMessages,newMessage])},newContent=>{setResponseLength(length=>length+newContent.length)},setStreamMode,setStreamingToolUses,tombstonedMessage=>{setMessages(oldMessages=>oldMessages.filter(m3=>m3!==tombstonedMessage)),removeTranscriptMessage(tombstonedMessage.uuid)},setStreamingThinking,metrics=>{let now2=Date.now(),baseline=responseLengthRef.current;apiMetricsRef2.current.push({...metrics,firstTokenTime:now2,lastTokenTime:now2,responseLengthBaseline:baseline,endResponseLength:baseline})},onStreamingText)},[setMessages,setResponseLength,setStreamMode,setStreamingToolUses,setStreamingThinking,onStreamingText]),onQueryImpl=(0,import_react347.useCallback)(async(messagesIncludingNewMessages,newMessages,abortController2,shouldQuery,additionalAllowedTools,mainLoopModelParam,effort)=>{if(shouldQuery){let freshClients=mergeClients(initialMcpClients,store.getState().mcp.clients);diagnosticTracker.handleQueryStart(freshClients);let ideClient=getConnectedIdeClient(freshClients);ideClient&&closeOpenDiffs(ideClient)}if(maybeMarkProjectOnboardingComplete(),!titleDisabled&&!sessionTitle&&!agentTitle&&!haikuTitleAttemptedRef.current){let firstUserMessage=newMessages.find(m3=>m3.type==="user"&&!m3.isMeta),text=firstUserMessage?.type==="user"?getContentText(firstUserMessage.message.content):null;text&&!text.startsWith(`<${LOCAL_COMMAND_STDOUT_TAG}>`)&&!text.startsWith(`<${COMMAND_MESSAGE_TAG}>`)&&!text.startsWith(`<${COMMAND_NAME_TAG2}>`)&&!text.startsWith(`<${BASH_INPUT_TAG}>`)&&(haikuTitleAttemptedRef.current=!0,generateSessionTitle(text,new AbortController().signal).then(title=>{title?setHaikuTitle(title):haikuTitleAttemptedRef.current=!1},()=>{haikuTitleAttemptedRef.current=!1}))}if(store.setState(prev=>{let cur=prev.toolPermissionContext.alwaysAllowRules.command;return cur===additionalAllowedTools||cur?.length===additionalAllowedTools.length&&cur.every((v2,i3)=>v2===additionalAllowedTools[i3])?prev:{...prev,toolPermissionContext:{...prev.toolPermissionContext,alwaysAllowRules:{...prev.toolPermissionContext.alwaysAllowRules,command:additionalAllowedTools}}}}),!shouldQuery){let postCompactMessages=extractPostCompactMessages(newMessages);postCompactMessages&&(setMessages(()=>postCompactMessages),setConversationId(randomUUID60())),resetLoadingState(),setAbortController(null);return}let toolUseContext=getToolUseContext(messagesIncludingNewMessages,newMessages,abortController2,mainLoopModelParam),{tools:freshTools,mcpClients:freshMcpClients}=toolUseContext.options;if(effort!==void 0){let previousGetAppState=toolUseContext.getAppState;toolUseContext.getAppState=()=>({...previousGetAppState(),effortValue:effort})}queryCheckpoint("query_context_loading_start");let[,,defaultSystemPrompt,baseUserContext,systemContext]=await Promise.all([checkAndDisableBypassPermissionsIfNeeded(toolPermissionContext,setAppState),checkAndDisableAutoModeIfNeeded(toolPermissionContext,setAppState,store.getState().fastMode),getSystemPrompt(freshTools,mainLoopModelParam,Array.from(toolPermissionContext.additionalWorkingDirectories.keys()),freshMcpClients),getUserContext(),getSystemContext()]),userContext={...baseUserContext,...getCoordinatorUserContext(freshMcpClients,isScratchpadEnabled()?getScratchpadDir():void 0)};queryCheckpoint("query_context_loading_end");let systemPrompt=buildEffectiveSystemPrompt({mainThreadAgentDefinition,toolUseContext,customSystemPrompt,defaultSystemPrompt,appendSystemPrompt});toolUseContext.renderedSystemPrompt=systemPrompt,queryCheckpoint("query_query_start"),resetTurnHookDuration(),resetTurnToolDuration(),resetTurnClassifierDuration();for await(let event of query({messages:messagesIncludingNewMessages,systemPrompt,userContext,systemContext,canUseTool,toolUseContext,querySource:getQuerySourceForREPL()}))onQueryEvent(event);queryCheckpoint("query_end"),resetLoadingState(),logQueryProfileReport(),await onTurnComplete?.(messagesRef.current)},[initialMcpClients,resetLoadingState,getToolUseContext,toolPermissionContext,setAppState,customSystemPrompt,onTurnComplete,appendSystemPrompt,canUseTool,mainThreadAgentDefinition,onQueryEvent,sessionTitle,titleDisabled]),onQuery=(0,import_react347.useCallback)(async(newMessages,abortController2,shouldQuery,additionalAllowedTools,mainLoopModelParam,onBeforeQueryCallback,input2,effort)=>{if(isAgentSwarmsEnabled()){let teamName=getTeamName(),agentName=getAgentName();teamName&&agentName&&setMemberActive(teamName,agentName,!0)}let thisGeneration=queryGuard.tryStart();if(thisGeneration===null){logEvent("tengu_concurrent_onquery_detected",{}),newMessages.filter(m3=>m3.type==="user"&&!m3.isMeta).map(_2=>getContentText(_2.message.content)).filter(_2=>_2!==null).forEach((msg,i3)=>{enqueue({value:msg,mode:"prompt"}),i3===0&&logEvent("tengu_concurrent_onquery_enqueued",{})});return}let didCompleteQuery=!1;try{resetTimingRefs(),setMessages(oldMessages=>[...oldMessages,...newMessages]),responseLengthRef.current=0,apiMetricsRef2.current=[],setStreamingToolUses([]),setStreamingText(null);let latestMessages=messagesRef.current;if(input2&&await mrOnBeforeQuery(input2,latestMessages,newMessages.length),onBeforeQueryCallback&&input2&&!await onBeforeQueryCallback(input2,latestMessages))return;await onQueryImpl(latestMessages,newMessages,abortController2,shouldQuery,additionalAllowedTools,mainLoopModelParam,effort),didCompleteQuery=!0}finally{if(queryGuard.end(thisGeneration)){if(setLastQueryCompletionTime(Date.now()),skipIdleCheckRef.current=!1,resetLoadingState(),await mrOnTurnComplete(messagesRef.current,abortController2.signal.aborted),didCompleteQuery&&shouldQuery&&!abortController2.signal.aborted){let goalFollowup=await createGoalAutoContinuation(getOriginalCwd());goalFollowup?.nextInput&&goalFollowup.submitNextInput&&enqueue({value:goalFollowup.nextInput,mode:"prompt",skipSlashCommands:!goalFollowup.submitNextInputAsSlashCommand,isMeta:!goalFollowup.submitNextInputAsSlashCommand})}sendBridgeResultRef.current();let budgetInfo,turnDurationMs=Date.now()-loadingStartTimeRef.current-totalPausedMsRef.current,turnOutcome=aggregateTurnOutcome(sliceCurrentTurnMessages(messagesRef.current));abortController2.signal.aborted||stageTurnOutcomeForDigest(turnOutcome),(turnDurationMs>3e4||budgetInfo!==void 0||turnOutcome.hasContent)&&!abortController2.signal.aborted&&!proactiveActive&&(getAllInProcessTeammateTasks(store.getState().tasks).some(t2=>t2.status==="running")?(swarmStartTimeRef.current===null&&(swarmStartTimeRef.current=loadingStartTimeRef.current),budgetInfo&&(swarmBudgetInfoRef.current=budgetInfo)):setMessages(prev=>[...prev,createTurnDurationMessage(turnDurationMs,budgetInfo,count2(prev,isLoggableMessage))])),setAbortController(null)}if(abortController2.signal.reason==="user-cancel"&&!queryGuard.isActive&&inputValueRef.current===""&&getCommandQueueLength()===0&&!store.getState().viewingAgentTaskId){let msgs=messagesRef.current,lastUserMsg=msgs.findLast(selectableUserMessagesFilter);if(lastUserMsg){let idx=msgs.lastIndexOf(lastUserMsg);messagesAfterAreOnlySynthetic(msgs,idx)&&(removeLastFromHistory(),restoreMessageSyncRef.current(lastUserMsg))}}}},[onQueryImpl,setAppState,resetLoadingState,queryGuard,mrOnBeforeQuery,mrOnTurnComplete]),initialMessageRef=(0,import_react347.useRef)(!1);(0,import_react347.useEffect)(()=>{let pending=initialMessage;if(!pending||isLoading||initialMessageRef.current)return;initialMessageRef.current=!0;async function processInitialMessage(initialMsg){if(initialMsg.clearContext){let oldPlanSlug=initialMsg.message.planContent?getPlanSlug():void 0;if(!await clearCurrentConversation()){initialMessageRef.current=!1;return}oldPlanSlug&&setPlanSlug(getSessionId(),oldPlanSlug)}let shouldStorePlanForVerification=initialMsg.message.planContent&&!1;setAppState(prev=>{let updatedToolPermissionContext=initialMsg.mode?applyPermissionUpdates(prev.toolPermissionContext,buildPermissionUpdates(initialMsg.mode,initialMsg.allowedPrompts)):prev.toolPermissionContext;return initialMsg.mode==="auto"&&(updatedToolPermissionContext=stripDangerousPermissionsForAutoMode({...updatedToolPermissionContext,mode:"auto",prePlanMode:void 0})),{...prev,initialMessage:null,toolPermissionContext:updatedToolPermissionContext,...shouldStorePlanForVerification&&{pendingPlanVerification:{plan:initialMsg.message.planContent,verificationStarted:!1,verificationCompleted:!1}}}}),fileHistoryEnabled()&&fileHistoryMakeSnapshot(updater=>{setAppState(prev=>({...prev,fileHistory:updater(prev.fileHistory)}))},initialMsg.message.uuid),await awaitPendingHooks();let content=initialMsg.message.message.content;if(typeof content=="string"&&!initialMsg.message.planContent)onSubmit(content,{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")});else{let newAbortController=createAbortController();setAbortController(newAbortController),onQuery([initialMsg.message],newAbortController,!0,[],mainLoopModel)}setTimeout(ref=>{ref.current=!1},100,initialMessageRef)}__name(processInitialMessage,"processInitialMessage"),processInitialMessage(pending)},[initialMessage,isLoading,setMessages,setAppState,onQuery,mainLoopModel,tools]);let onSubmit=(0,import_react347.useCallback)(async(input2,helpers2,speculationAccept,options)=>{repinScroll();let potentialDrop=expandPastedTextRefs(input2,pastedContents).trim();if(potentialDrop)try{let st=await import("fs/promises").then(m3=>m3.stat(potentialDrop).catch(()=>null));if(st?.isFile()||st?.isDirectory()){let{addToInbox:addToInbox2,listInbox:listInbox2}=await Promise.resolve().then(()=>(init_contextInbox(),contextInbox_exports));try{await addToInbox2(potentialDrop);let newCount=(await listInbox2()).length;setInboxCount(newCount),addNotification({key:"context-drop",text:`\u2705 \u5DF2\u6309\u4F60\u7684\u60F3\u6CD5\u653E\u5165\u5DE6\u4E0A\u89D2\u{1F432}\u4FE1\u7BB1: ${potentialDrop.split(/[\\/]/).pop()}\uFF08\u5171 ${newCount} \u9879\uFF09\u3002\u4E0B\u6B21\u53D1\u9001\u6D88\u606F\u65F6\u4F1A\u81EA\u52A8\u8DDF\u968F\u4E0A\u4E0B\u6587\uFF08\u4F1A\u5728 transcript \u91CC\u770B\u5230\u201C\u{1F432} \u4FE1\u7BB1\u4E0A\u4E0B\u6587\u201D\u6E05\u6670\u63D0\u793A\uFF09\u3002`,color:"claude",priority:"immediate",timeoutMs:3500})}catch(e2){addNotification({key:"context-drop-refused",text:`Context Inbox refused dropped path: ${e2.message}`,color:"warning",priority:"immediate",timeoutMs:5e3})}setInputValue(""),helpers2.setCursorOffset(0);return}}catch{}if(!speculationAccept&&input2.trim().startsWith("/")){let trimmedInput=expandPastedTextRefs(input2,pastedContents).trim(),spaceIndex=trimmedInput.indexOf(" "),commandName=spaceIndex===-1?trimmedInput.slice(1):trimmedInput.slice(1,spaceIndex),commandArgs=spaceIndex===-1?"":trimmedInput.slice(spaceIndex+1).trim(),matchingCommand=commands.find(cmd=>isCommandEnabled(cmd)&&(cmd.name===commandName||cmd.aliases?.includes(commandName)||getCommandName(cmd)===commandName));matchingCommand?.name==="clear"&&idleHintShownRef.current&&(logEvent("tengu_idle_return_action",{action:"hint_converted",variant:idleHintShownRef.current,idleMinutes:Math.round((Date.now()-lastQueryCompletionTimeRef.current)/6e4),messageCount:messagesRef.current.length,totalInputTokens:getTotalInputTokens()}),idleHintShownRef.current=!1);let shouldTreatAsImmediate=queryGuard.isActive&&(matchingCommand?.immediate||options?.fromKeybinding);if(matchingCommand&&shouldTreatAsImmediate&&matchingCommand.type==="local-jsx"){input2.trim()===inputValueRef.current.trim()&&(setInputValue(""),helpers2.setCursorOffset(0),helpers2.clearBuffer(),setPastedContents({}));let pastedTextRefs=parseReferences(input2).filter(r2=>pastedContents[r2.id]?.type==="text"),pastedTextCount=pastedTextRefs.length,pastedTextBytes=pastedTextRefs.reduce((sum2,r2)=>sum2+(pastedContents[r2.id]?.content.length??0),0);logEvent("tengu_paste_text",{pastedTextCount,pastedTextBytes}),logEvent("tengu_immediate_command_executed",{commandName:matchingCommand.name,fromKeybinding:options?.fromKeybinding??!1}),__name(async()=>{let doneWasCalled=!1,onDone=__name((result2,doneOptions)=>{doneWasCalled=!0,setToolJSX({jsx:null,shouldHidePromptInput:!1,clearLocalJSX:!0});let newMessages=[];result2&&doneOptions?.display!=="skip"&&(addNotification({key:`immediate-${matchingCommand.name}`,text:result2,priority:"immediate"}),isFullscreenEnvEnabled()||newMessages.push(createCommandInputMessage(formatCommandInputTags(getCommandName(matchingCommand),commandArgs)),createCommandInputMessage(`<${LOCAL_COMMAND_STDOUT_TAG}>${escapeXml(result2)}</${LOCAL_COMMAND_STDOUT_TAG}>`))),doneOptions?.metaMessages?.length&&newMessages.push(...doneOptions.metaMessages.map(content=>createUserMessage({content,isMeta:!0}))),newMessages.length&&setMessages(prev=>[...prev,...newMessages]),stashedPrompt!==void 0&&(setInputValue(stashedPrompt.text),helpers2.setCursorOffset(stashedPrompt.cursorOffset),setPastedContents(stashedPrompt.pastedContents),setStashedPrompt(void 0))},"onDone"),context2=getToolUseContext(messagesRef.current,[],createAbortController(),mainLoopModel),jsx494=await(await matchingCommand.load()).call(onDone,context2,commandArgs);jsx494&&!doneWasCalled&&setToolJSX({jsx:jsx494,shouldHidePromptInput:!1,isLocalJSXCommand:!0})},"executeImmediateCommand")();return}}if(activeRemote.isRemoteMode&&!input2.trim())return;{let willowMode=getFeatureValue_CACHED_MAY_BE_STALE("tengu_willow_mode","off"),idleThresholdMin=Number(process.env.CLAUDE_CODE_IDLE_THRESHOLD_MINUTES??75),tokenThreshold=Number(process.env.CLAUDE_CODE_IDLE_TOKEN_THRESHOLD??1e5);if(willowMode!=="off"&&!getGlobalConfig().idleReturnDismissed&&!skipIdleCheckRef.current&&!speculationAccept&&!input2.trim().startsWith("/")&&lastQueryCompletionTimeRef.current>0&&getTotalInputTokens()>=tokenThreshold){let idleMinutes=(Date.now()-lastQueryCompletionTimeRef.current)/6e4;if(idleMinutes>=idleThresholdMin&&willowMode==="dialog"){setIdleReturnPending({input:input2,idleMinutes}),setInputValue(""),helpers2.setCursorOffset(0),helpers2.clearBuffer();return}}}options?.fromKeybinding||(addToHistory({display:speculationAccept?input2:prependModeCharacterToInput(input2,inputMode),pastedContents:speculationAccept?{}:pastedContents}),inputMode==="bash"&&prependToShellHistoryCache(input2.trim()));let isSlashCommand3=!speculationAccept&&input2.trim().startsWith("/"),submitsNow=!isLoading||speculationAccept;if(stashedPrompt!==void 0&&!isSlashCommand3&&submitsNow?(setInputValue(stashedPrompt.text),helpers2.setCursorOffset(stashedPrompt.cursorOffset),setPastedContents(stashedPrompt.pastedContents),setStashedPrompt(void 0)):submitsNow&&(options?.fromKeybinding||(setInputValue(""),helpers2.setCursorOffset(0)),setPastedContents({})),submitsNow&&(setInputMode("prompt"),setIDESelection(void 0),setSubmitCount(_2=>_2+1),helpers2.clearBuffer(),tipPickedThisTurnRef.current=!1,!isSlashCommand3&&inputMode==="prompt"&&!speculationAccept&&!activeRemote.isRemoteMode&&(setUserInputOnProcessing(input2),resetTimingRefs())),speculationAccept){let{queryRequired}=await handleSpeculationAccept(speculationAccept.state,speculationAccept.speculationSessionTimeSavedMs,speculationAccept.setAppState,input2,{setMessages,readFileState,cwd:getOriginalCwd()});if(queryRequired){let newAbortController=createAbortController();setAbortController(newAbortController),onQuery([],newAbortController,!0,[],mainLoopModel)}return}if(activeRemote.isRemoteMode&&!isExternalLoading&&!(isSlashCommand3&&isLocalJsxCommandInput(input2))){await sendRemoteInput({input:input2.trim(),pastedContents,onFailed:__name(()=>{inputValueRef.current===""&&(setInputValue(input2),helpers2.setCursorOffset(input2.length),setPastedContents(pastedContents))},"onFailed")});return}await awaitPendingHooks(),await handlePromptSubmit({input:input2,helpers:helpers2,queryGuard,isExternalLoading,mode:inputMode,commands,onInputChange:setInputValue,setPastedContents,setToolJSX,getToolUseContext,messages:messagesRef.current,mainLoopModel,pastedContents,ideSelection,setUserInputOnProcessing,setAbortController,abortController,onQuery,setAppState,querySource:getQuerySourceForREPL(),onBeforeQuery,canUseTool,addNotification,setMessages,streamMode:streamModeRef.current,hasInterruptibleToolInProgress:hasInterruptibleToolInProgressRef.current}),(isSlashCommand3||isLoading)&&stashedPrompt!==void 0&&(setInputValue(stashedPrompt.text),helpers2.setCursorOffset(stashedPrompt.cursorOffset),setPastedContents(stashedPrompt.pastedContents),setStashedPrompt(void 0))},[queryGuard,isLoading,isExternalLoading,inputMode,commands,setInputValue,setInputMode,setPastedContents,setSubmitCount,setIDESelection,setToolJSX,getToolUseContext,mainLoopModel,pastedContents,ideSelection,setUserInputOnProcessing,setAbortController,addNotification,onQuery,stashedPrompt,setStashedPrompt,setAppState,onBeforeQuery,canUseTool,remoteSession,setMessages,awaitPendingHooks,repinScroll]),onAgentSubmit=(0,import_react347.useCallback)(async(input2,task,helpers2)=>{isLocalAgentTask(task)?(appendMessageToLocalAgent(task.id,createUserMessage({content:input2}),setAppState),task.status==="running"?queuePendingMessage(task.id,input2,setAppState):resumeAgentBackground({agentId:task.id,prompt:input2,toolUseContext:getToolUseContext(messagesRef.current,[],new AbortController,mainLoopModel),canUseTool}).catch(err2=>{logForDebugging(`resumeAgentBackground failed: ${errorMessage(err2)}`),addNotification({key:`resume-agent-failed-${task.id}`,jsx:(0,import_jsx_runtime480.jsxs)(ThemedText,{color:"error",children:["Failed to resume agent: ",errorMessage(err2)]}),priority:"low"})})):injectUserMessageToTeammate(task.id,input2,setAppState),setInputValue(""),helpers2.setCursorOffset(0),helpers2.clearBuffer()},[setAppState,setInputValue,getToolUseContext,canUseTool,mainLoopModel,addNotification]),handleAutoRunIssue=(0,import_react347.useCallback)(()=>{let command9=autoRunIssueReason?getAutoRunCommand(autoRunIssueReason):"/issue";setAutoRunIssueReason(null),onSubmit(command9,{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")}).catch(err2=>{logForDebugging(`Auto-run ${command9} failed: ${errorMessage(err2)}`)})},[onSubmit,autoRunIssueReason]),handleCancelAutoRunIssue=(0,import_react347.useCallback)(()=>{setAutoRunIssueReason(null)},[]),handleSurveyRequestFeedback=(0,import_react347.useCallback)(()=>{onSubmit("/feedback",{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")}).catch(err2=>{logForDebugging(`Survey feedback request failed: ${err2 instanceof Error?err2.message:String(err2)}`)})},[onSubmit]),onSubmitRef=(0,import_react347.useRef)(onSubmit);onSubmitRef.current=onSubmit;let handleOpenRateLimitOptions=(0,import_react347.useCallback)(()=>{onSubmitRef.current("/rate-limit-options",{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")})},[]),handleExit=(0,import_react347.useCallback)(async()=>{if(setIsExiting(!0),getCurrentWorktreeSession()!==null){setExitFlow((0,import_jsx_runtime480.jsx)(ExitFlow,{showWorktree:!0,onDone:()=>{},onCancel:()=>{setExitFlow(null),setIsExiting(!1)}}));return}let exitFlowResult=await(await exit_default.load()).call(()=>{});setExitFlow(exitFlowResult),exitFlowResult===null&&setIsExiting(!1)},[]),handleShowMessageSelector=(0,import_react347.useCallback)(()=>{setIsMessageSelectorVisible(prev=>!prev)},[]),rewindConversationTo=(0,import_react347.useCallback)(message=>{let prev=messagesRef.current,messageIndex=prev.lastIndexOf(message);if(messageIndex===-1)return;logEvent("tengu_conversation_rewind",{preRewindMessageCount:prev.length,postRewindMessageCount:messageIndex,messagesRemoved:prev.length-messageIndex,rewindToMessageIndex:messageIndex});try{let sessionId=getSessionId(),survivorUuid=(messageIndex>0?prev[messageIndex-1]:null)?.uuid;if(survivorUuid){let previewSource=message.message?.content,preview="";if(typeof previewSource=="string")preview=previewSource;else if(Array.isArray(previewSource)){for(let block of previewSource)if(block?.type==="text"&&typeof block.text=="string"){preview=block.text;break}}let name=preview.replace(/\s+/g," ").trim().slice(0,60)||`rewind ${new Date().toLocaleTimeString()}`,branchId=`rw-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,parentBranchId=getActiveBranch();recordBranch(sessionId,branchId,name,survivorUuid,parentBranchId),setActiveBranch(branchId),recordHead(sessionId,survivorUuid,"rewind",branchId),flushSessionStorage().catch(()=>{})}}catch(err2){logError2(err2)}let rewoundMessages=prev.slice(0,messageIndex);if(setMessages(rewoundMessages),setConversationId(randomUUID60()),resetMicrocompactState(),isBoundaryV2Enabled()){let sessionId=getSessionId();hydrateV2ArchivedFromTextForSession(sessionId,""),(async()=>{try{let projectDir=getSessionProjectDir()??getProjectDir3(getOriginalCwd()),archived=filterV2ArchiveForResumeMessages(await readV2ArchiveForSession(sessionId,projectDir),rewoundMessages);hydrateV2ArchivedFromTextForSession(sessionId,archived)}catch{}})()}setAppState(prev2=>({...prev2,toolPermissionContext:message.permissionMode&&prev2.toolPermissionContext.mode!==message.permissionMode?{...prev2.toolPermissionContext,mode:message.permissionMode}:prev2.toolPermissionContext,promptSuggestion:{text:null,promptId:null,shownAt:0,acceptedAt:0,generationRequestId:null}}))},[setMessages,setAppState]),restoreMessageSync=(0,import_react347.useCallback)(message=>{rewindConversationTo(message);let r2=textForResubmit(message);if(r2&&(setInputValue(r2.text),setInputMode(r2.mode)),Array.isArray(message.message.content)&&message.message.content.some(block=>block.type==="image")){let imageBlocks=message.message.content.filter(block=>block.type==="image");if(imageBlocks.length>0){let newPastedContents={};imageBlocks.forEach((block,index)=>{if(block.source.type==="base64"){let id=message.imagePasteIds?.[index]??index+1;newPastedContents[id]={id,type:"image",content:block.source.data,mediaType:block.source.media_type}}}),setPastedContents(newPastedContents)}}},[rewindConversationTo,setInputValue]);restoreMessageSyncRef.current=restoreMessageSync;let handleRestoreMessage=(0,import_react347.useCallback)(async message=>{setImmediate((restore,message2)=>restore(message2),restoreMessageSync,message)},[restoreMessageSync]),findRawIndex=__name(uuid3=>{let prefix=uuid3.slice(0,24);return messages.findIndex(m3=>m3.uuid.slice(0,24)===prefix)},"findRawIndex"),messageActionCaps={copy:__name(text=>{setClipboard(text).then(raw=>{raw&&process.stdout.write(raw),addNotification({key:"selection-copied",text:"copied",color:"success",priority:"immediate",timeoutMs:2e3})})},"copy"),edit:__name(async msg=>{let rawIdx=findRawIndex(msg.uuid),raw=rawIdx>=0?messages[rawIdx]:void 0;if(!raw||!selectableUserMessagesFilter(raw))return;let noFileChanges=!await fileHistoryHasAnyChanges(fileHistory,raw.uuid),onlySynthetic=messagesAfterAreOnlySynthetic(messages,rawIdx);noFileChanges&&onlySynthetic?(onCancel(),handleRestoreMessage(raw)):(setMessageSelectorPreselect(raw),setIsMessageSelectorVisible(!0))},"edit")},{enter:enterMessageActions,handlers:messageActionHandlers}=useMessageActions(cursor,setCursor,cursorNavRef,messageActionCaps);async function onInit(){reverify();let memoryFiles=await getMemoryFiles();if(memoryFiles.length>0){let fileList=memoryFiles.map(f3=>` [${f3.type}] ${f3.path} (${f3.content.length} chars)${f3.parent?` (included by ${f3.parent})`:""}`).join(`
8519
+ `),gracefulShutdownSync(1,"other")});let setToolPermissionContext=(0,import_react347.useCallback)((context2,options)=>{setAppState(prev=>({...prev,toolPermissionContext:{...context2,mode:options?.preserveMode?prev.toolPermissionContext.mode:context2.mode}})),setImmediate(setToolUseConfirmQueue2=>{setToolUseConfirmQueue2(currentQueue=>(currentQueue.forEach(item=>{item.recheckPermission()}),currentQueue))},setToolUseConfirmQueue)},[setAppState,setToolUseConfirmQueue]);(0,import_react347.useEffect)(()=>(registerLeaderSetToolPermissionContext(setToolPermissionContext),()=>unregisterLeaderSetToolPermissionContext()),[setToolPermissionContext]);let canUseTool=useCanUseTool_default(setToolUseConfirmQueue,setToolPermissionContext),requestPrompt=(0,import_react347.useCallback)((title,toolInputSummary)=>request=>new Promise((resolve48,reject2)=>{setPromptQueue(prev=>[...prev,{request,title,toolInputSummary,resolve:resolve48,reject:reject2}])}),[]),getToolUseContext=(0,import_react347.useCallback)((messages2,newMessages,abortController2,mainLoopModel2)=>{let s2=store.getState(),computeTools=__name(()=>{let state2=store.getState(),decision=getCurrentCodingRouteResolution(getMainLoopModel(),mainLoopRouteKeys).decision,assembled=assembleToolPool(state2.toolPermissionContext,state2.mcp.tools,decision),merged=mergeAndFilterTools(combinedInitialTools,assembled,state2.toolPermissionContext.mode);return mainThreadAgentDefinition?resolveAgentTools(mainThreadAgentDefinition,merged,!1,!0).resolvedTools:merged},"computeTools"),routeResolution=getCurrentCodingRouteResolution(mainLoopModel2,mainLoopRouteKeys),routeDecision2=routeResolution.decision;return{abortController:abortController2,options:{commands,tools:computeTools(),debug:debug4,verbose:s2.verbose,mainLoopModel:mainLoopModel2,thinkingConfig:s2.thinkingEnabled!==!1?thinkingConfig:{type:"disabled"},mcpClients:mergeClients(initialMcpClients,s2.mcp.clients),mcpResources:s2.mcp.resources,ideInstallationStatus,isNonInteractiveSession:!1,dynamicMcpConfig,theme:theme2,agentDefinitions:allowedAgentTypes?{...s2.agentDefinitions,allowedAgentTypes}:s2.agentDefinitions,customSystemPrompt,appendSystemPrompt,refreshTools:computeTools,routeDecision:routeDecision2,modelRouteKeys:mainLoopRouteKeys,routeSnapshot:routeResolution.snapshot},getAppState:__name(()=>store.getState(),"getAppState"),setAppState,messages:messages2,setMessages,updateFileHistoryState(updater){setAppState(prev=>{let updated=updater(prev.fileHistory);return updated===prev.fileHistory?prev:{...prev,fileHistory:updated}})},updateAttributionState(updater){setAppState(prev=>{let updated=updater(prev.attribution);return updated===prev.attribution?prev:{...prev,attribution:updated}})},openMessageSelector:__name(()=>{disabled||setIsMessageSelectorVisible(!0)},"openMessageSelector"),onChangeAPIKey:reverify,readFileState:readFileState.current,setToolJSX,addNotification,appendSystemMessage:__name(msg=>setMessages(prev=>[...prev,msg]),"appendSystemMessage"),sendOSNotification:__name(opts=>{sendNotification(opts,terminal)},"sendOSNotification"),onChangeDynamicMcpConfig,onInstallIDEExtension:setIDEToInstallExtension,nestedMemoryAttachmentTriggers:new Set,loadedNestedMemoryPaths:loadedNestedMemoryPathsRef.current,dynamicSkillDirTriggers:new Set,discoveredSkillNames:discoveredSkillNamesRef.current,setResponseLength,pushApiMetricsEntry:void 0,setStreamMode,onCompactProgress:__name(event=>{switch(event.type){case"hooks_start":setSpinnerColor("claudeBlue_FOR_SYSTEM_SPINNER"),setSpinnerShimmerColor("claudeBlueShimmer_FOR_SYSTEM_SPINNER"),setSpinnerMessage(event.hookType==="pre_compact"?"Running PreCompact hooks\u2026":event.hookType==="post_compact"?"Running PostCompact hooks\u2026":"Running SessionStart hooks\u2026");break;case"compact_start":setSpinnerMessage("Compacting conversation");break;case"compact_end":setSpinnerMessage(null),setSpinnerColor(null),setSpinnerShimmerColor(null);break}},"onCompactProgress"),setInProgressToolUseIDs,setHasInterruptibleToolInProgress:__name(v2=>{hasInterruptibleToolInProgressRef.current=v2},"setHasInterruptibleToolInProgress"),resume:resume3,setConversationId,requestPrompt:void 0,contentReplacementState:contentReplacementStateRef.current}},[commands,combinedInitialTools,mainThreadAgentDefinition,debug4,initialMcpClients,ideInstallationStatus,dynamicMcpConfig,theme2,allowedAgentTypes,store,setAppState,reverify,addNotification,setMessages,onChangeDynamicMcpConfig,resume3,requestPrompt,disabled,customSystemPrompt,appendSystemPrompt,setConversationId]),handleBackgroundQuery=(0,import_react347.useCallback)(()=>{abortController?.abort("background");let removedNotifications=removeByFilter(cmd=>cmd.mode==="task-notification");(async()=>{let toolUseContext=getToolUseContext(messagesRef.current,[],new AbortController,mainLoopModel),[defaultSystemPrompt,userContext,systemContext]=await Promise.all([getSystemPrompt(toolUseContext.options.tools,mainLoopModel,Array.from(toolPermissionContext.additionalWorkingDirectories.keys()),toolUseContext.options.mcpClients),getUserContext(),getSystemContext()]),systemPrompt=buildEffectiveSystemPrompt({mainThreadAgentDefinition,toolUseContext,customSystemPrompt,defaultSystemPrompt,appendSystemPrompt});toolUseContext.renderedSystemPrompt=systemPrompt;let notificationMessages=(await getQueuedCommandAttachments(removedNotifications).catch(()=>[])).map(createAttachmentMessage),existingPrompts=new Set;for(let m3 of messagesRef.current)m3.type==="attachment"&&m3.attachment.type==="queued_command"&&m3.attachment.commandMode==="task-notification"&&typeof m3.attachment.prompt=="string"&&existingPrompts.add(m3.attachment.prompt);let uniqueNotifications=notificationMessages.filter(m3=>m3.attachment.type==="queued_command"&&(typeof m3.attachment.prompt!="string"||!existingPrompts.has(m3.attachment.prompt)));startBackgroundSession({messages:[...messagesRef.current,...uniqueNotifications],queryParams:{systemPrompt,userContext,systemContext,canUseTool,toolUseContext,querySource:getQuerySourceForREPL()},description:terminalTitle,setAppState,agentDefinition:mainThreadAgentDefinition})})()},[abortController,mainLoopModel,toolPermissionContext,mainThreadAgentDefinition,getToolUseContext,customSystemPrompt,appendSystemPrompt,canUseTool,setAppState]),{handleBackgroundSession}=useSessionBackgrounding({setMessages,setIsLoading:setIsExternalLoading,resetLoadingState,setAbortController,onBackgroundQuery:handleBackgroundQuery}),onQueryEvent=(0,import_react347.useCallback)(event=>{handleMessageFromStream(event,newMessage=>{isCompactBoundaryMessage(newMessage)?(isFullscreenEnvEnabled()?setMessages(old=>[...getMessagesAfterCompactBoundary(old,{includeSnipped:!0}),newMessage]):setMessages(()=>[newMessage]),setConversationId(randomUUID60())):newMessage.type==="progress"&&isEphemeralToolProgress(newMessage.data.type)?setMessages(oldMessages=>{let last2=oldMessages.at(-1);if(last2?.type==="progress"&&last2.parentToolUseID===newMessage.parentToolUseID&&last2.data.type===newMessage.data.type){let copy2=oldMessages.slice();return copy2[copy2.length-1]=newMessage,copy2}return[...oldMessages,newMessage]}):setMessages(oldMessages=>[...oldMessages,newMessage])},newContent=>{setResponseLength(length=>length+newContent.length)},setStreamMode,setStreamingToolUses,tombstonedMessage=>{setMessages(oldMessages=>oldMessages.filter(m3=>m3!==tombstonedMessage)),removeTranscriptMessage(tombstonedMessage.uuid)},setStreamingThinking,metrics=>{let now2=Date.now(),baseline=responseLengthRef.current;apiMetricsRef2.current.push({...metrics,firstTokenTime:now2,lastTokenTime:now2,responseLengthBaseline:baseline,endResponseLength:baseline})},onStreamingText)},[setMessages,setResponseLength,setStreamMode,setStreamingToolUses,setStreamingThinking,onStreamingText]),onQueryImpl=(0,import_react347.useCallback)(async(messagesIncludingNewMessages,newMessages,abortController2,shouldQuery,additionalAllowedTools,mainLoopModelParam,effort)=>{if(shouldQuery){let freshClients=mergeClients(initialMcpClients,store.getState().mcp.clients);diagnosticTracker.handleQueryStart(freshClients);let ideClient=getConnectedIdeClient(freshClients);ideClient&&closeOpenDiffs(ideClient)}if(maybeMarkProjectOnboardingComplete(),!titleDisabled&&!sessionTitle&&!agentTitle&&!haikuTitleAttemptedRef.current){let firstUserMessage=newMessages.find(m3=>m3.type==="user"&&!m3.isMeta),text=firstUserMessage?.type==="user"?getContentText(firstUserMessage.message.content):null;text&&!text.startsWith(`<${LOCAL_COMMAND_STDOUT_TAG}>`)&&!text.startsWith(`<${COMMAND_MESSAGE_TAG}>`)&&!text.startsWith(`<${COMMAND_NAME_TAG2}>`)&&!text.startsWith(`<${BASH_INPUT_TAG}>`)&&(haikuTitleAttemptedRef.current=!0,generateSessionTitle(text,new AbortController().signal).then(title=>{title?setHaikuTitle(title):haikuTitleAttemptedRef.current=!1},()=>{haikuTitleAttemptedRef.current=!1}))}if(store.setState(prev=>{let cur=prev.toolPermissionContext.alwaysAllowRules.command;return cur===additionalAllowedTools||cur?.length===additionalAllowedTools.length&&cur.every((v2,i3)=>v2===additionalAllowedTools[i3])?prev:{...prev,toolPermissionContext:{...prev.toolPermissionContext,alwaysAllowRules:{...prev.toolPermissionContext.alwaysAllowRules,command:additionalAllowedTools}}}}),!shouldQuery){let postCompactMessages=extractPostCompactMessages(newMessages);postCompactMessages&&(setMessages(()=>postCompactMessages),setConversationId(randomUUID60())),resetLoadingState(),setAbortController(null);return}let toolUseContext=getToolUseContext(messagesIncludingNewMessages,newMessages,abortController2,mainLoopModelParam),{tools:freshTools,mcpClients:freshMcpClients}=toolUseContext.options;if(effort!==void 0){let previousGetAppState=toolUseContext.getAppState;toolUseContext.getAppState=()=>({...previousGetAppState(),effortValue:effort})}queryCheckpoint("query_context_loading_start");let[,,defaultSystemPrompt,baseUserContext,systemContext]=await Promise.all([checkAndDisableBypassPermissionsIfNeeded(toolPermissionContext,setAppState),checkAndDisableAutoModeIfNeeded(toolPermissionContext,setAppState,store.getState().fastMode),getSystemPrompt(freshTools,mainLoopModelParam,Array.from(toolPermissionContext.additionalWorkingDirectories.keys()),freshMcpClients),getUserContext(),getSystemContext()]),userContext={...baseUserContext,...getCoordinatorUserContext(freshMcpClients,isScratchpadEnabled()?getScratchpadDir():void 0)};queryCheckpoint("query_context_loading_end");let systemPrompt=buildEffectiveSystemPrompt({mainThreadAgentDefinition,toolUseContext,customSystemPrompt,defaultSystemPrompt,appendSystemPrompt});toolUseContext.renderedSystemPrompt=systemPrompt,queryCheckpoint("query_query_start"),resetTurnHookDuration(),resetTurnToolDuration(),resetTurnClassifierDuration();for await(let event of query({messages:messagesIncludingNewMessages,systemPrompt,userContext,systemContext,canUseTool,toolUseContext,querySource:getQuerySourceForREPL()}))onQueryEvent(event);queryCheckpoint("query_end"),resetLoadingState(),logQueryProfileReport(),await onTurnComplete?.(messagesRef.current)},[initialMcpClients,resetLoadingState,getToolUseContext,toolPermissionContext,setAppState,customSystemPrompt,onTurnComplete,appendSystemPrompt,canUseTool,mainThreadAgentDefinition,onQueryEvent,sessionTitle,titleDisabled]),onQuery=(0,import_react347.useCallback)(async(newMessages,abortController2,shouldQuery,additionalAllowedTools,mainLoopModelParam,onBeforeQueryCallback,input2,effort)=>{if(isAgentSwarmsEnabled()){let teamName=getTeamName(),agentName=getAgentName();teamName&&agentName&&setMemberActive(teamName,agentName,!0)}let thisGeneration=queryGuard.tryStart();if(thisGeneration===null){logEvent("tengu_concurrent_onquery_detected",{}),newMessages.filter(m3=>m3.type==="user"&&!m3.isMeta).map(_2=>getContentText(_2.message.content)).filter(_2=>_2!==null).forEach((msg,i3)=>{enqueue({value:msg,mode:"prompt"}),i3===0&&logEvent("tengu_concurrent_onquery_enqueued",{})});return}let didCompleteQuery=!1;try{resetTimingRefs(),setMessages(oldMessages=>[...oldMessages,...newMessages]),responseLengthRef.current=0,apiMetricsRef2.current=[],setStreamingToolUses([]),setStreamingText(null);let latestMessages=messagesRef.current;try{if(input2&&await mrOnBeforeQuery(input2,latestMessages,newMessages.length),onBeforeQueryCallback&&input2&&!await onBeforeQueryCallback(input2,latestMessages)){setMessages(oldMessages=>[...oldMessages,createSystemMessage("Request was cancelled before contacting the provider.","warning")]);return}await onQueryImpl(latestMessages,newMessages,abortController2,shouldQuery,additionalAllowedTools,mainLoopModelParam,effort),didCompleteQuery=!0}catch(err2){if(abortController2.signal.aborted)return;logError2(err2);let message=errorMessage(err2);setMessages(oldMessages=>[...oldMessages,createAssistantAPIErrorMessage({content:`API Error: Request failed before a response could be displayed: ${message}`,error:"unknown",errorDetails:message})])}}finally{if(queryGuard.end(thisGeneration)){if(setLastQueryCompletionTime(Date.now()),skipIdleCheckRef.current=!1,resetLoadingState(),await mrOnTurnComplete(messagesRef.current,abortController2.signal.aborted),didCompleteQuery&&shouldQuery&&!abortController2.signal.aborted){let goalFollowup=await createGoalAutoContinuation(getOriginalCwd());goalFollowup?.nextInput&&goalFollowup.submitNextInput&&enqueue({value:goalFollowup.nextInput,mode:"prompt",skipSlashCommands:!goalFollowup.submitNextInputAsSlashCommand,isMeta:!goalFollowup.submitNextInputAsSlashCommand})}sendBridgeResultRef.current();let budgetInfo,turnDurationMs=Date.now()-loadingStartTimeRef.current-totalPausedMsRef.current,turnOutcome=aggregateTurnOutcome(sliceCurrentTurnMessages(messagesRef.current));abortController2.signal.aborted||stageTurnOutcomeForDigest(turnOutcome),(turnDurationMs>3e4||budgetInfo!==void 0||turnOutcome.hasContent)&&!abortController2.signal.aborted&&!proactiveActive&&(getAllInProcessTeammateTasks(store.getState().tasks).some(t2=>t2.status==="running")?(swarmStartTimeRef.current===null&&(swarmStartTimeRef.current=loadingStartTimeRef.current),budgetInfo&&(swarmBudgetInfoRef.current=budgetInfo)):setMessages(prev=>[...prev,createTurnDurationMessage(turnDurationMs,budgetInfo,count2(prev,isLoggableMessage))])),setAbortController(null)}if(abortController2.signal.reason==="user-cancel"&&!queryGuard.isActive&&inputValueRef.current===""&&getCommandQueueLength()===0&&!store.getState().viewingAgentTaskId){let msgs=messagesRef.current,lastUserMsg=msgs.findLast(selectableUserMessagesFilter);if(lastUserMsg){let idx=msgs.lastIndexOf(lastUserMsg);messagesAfterAreOnlySynthetic(msgs,idx)&&(removeLastFromHistory(),restoreMessageSyncRef.current(lastUserMsg))}}}},[onQueryImpl,setAppState,resetLoadingState,queryGuard,mrOnBeforeQuery,mrOnTurnComplete]),initialMessageRef=(0,import_react347.useRef)(!1);(0,import_react347.useEffect)(()=>{let pending=initialMessage;if(!pending||isLoading||initialMessageRef.current)return;initialMessageRef.current=!0;async function processInitialMessage(initialMsg){if(initialMsg.clearContext){let oldPlanSlug=initialMsg.message.planContent?getPlanSlug():void 0;if(!await clearCurrentConversation()){initialMessageRef.current=!1;return}oldPlanSlug&&setPlanSlug(getSessionId(),oldPlanSlug)}let shouldStorePlanForVerification=initialMsg.message.planContent&&!1;setAppState(prev=>{let updatedToolPermissionContext=initialMsg.mode?applyPermissionUpdates(prev.toolPermissionContext,buildPermissionUpdates(initialMsg.mode,initialMsg.allowedPrompts)):prev.toolPermissionContext;return initialMsg.mode==="auto"&&(updatedToolPermissionContext=stripDangerousPermissionsForAutoMode({...updatedToolPermissionContext,mode:"auto",prePlanMode:void 0})),{...prev,initialMessage:null,toolPermissionContext:updatedToolPermissionContext,...shouldStorePlanForVerification&&{pendingPlanVerification:{plan:initialMsg.message.planContent,verificationStarted:!1,verificationCompleted:!1}}}}),fileHistoryEnabled()&&fileHistoryMakeSnapshot(updater=>{setAppState(prev=>({...prev,fileHistory:updater(prev.fileHistory)}))},initialMsg.message.uuid),await awaitPendingHooks();let content=initialMsg.message.message.content;if(typeof content=="string"&&!initialMsg.message.planContent)onSubmit(content,{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")});else{let newAbortController=createAbortController();setAbortController(newAbortController),onQuery([initialMsg.message],newAbortController,!0,[],mainLoopModel)}setTimeout(ref=>{ref.current=!1},100,initialMessageRef)}__name(processInitialMessage,"processInitialMessage"),processInitialMessage(pending)},[initialMessage,isLoading,setMessages,setAppState,onQuery,mainLoopModel,tools]);let onSubmit=(0,import_react347.useCallback)(async(input2,helpers2,speculationAccept,options)=>{repinScroll();let potentialDrop=expandPastedTextRefs(input2,pastedContents).trim();if(potentialDrop)try{let st=await import("fs/promises").then(m3=>m3.stat(potentialDrop).catch(()=>null));if(st?.isFile()||st?.isDirectory()){let{addToInbox:addToInbox2,listInbox:listInbox2}=await Promise.resolve().then(()=>(init_contextInbox(),contextInbox_exports));try{await addToInbox2(potentialDrop);let newCount=(await listInbox2()).length;setInboxCount(newCount),addNotification({key:"context-drop",text:`\u2705 \u5DF2\u6309\u4F60\u7684\u60F3\u6CD5\u653E\u5165\u5DE6\u4E0A\u89D2\u{1F432}\u4FE1\u7BB1: ${potentialDrop.split(/[\\/]/).pop()}\uFF08\u5171 ${newCount} \u9879\uFF09\u3002\u4E0B\u6B21\u53D1\u9001\u6D88\u606F\u65F6\u4F1A\u81EA\u52A8\u8DDF\u968F\u4E0A\u4E0B\u6587\uFF08\u4F1A\u5728 transcript \u91CC\u770B\u5230\u201C\u{1F432} \u4FE1\u7BB1\u4E0A\u4E0B\u6587\u201D\u6E05\u6670\u63D0\u793A\uFF09\u3002`,color:"claude",priority:"immediate",timeoutMs:3500})}catch(e2){addNotification({key:"context-drop-refused",text:`Context Inbox refused dropped path: ${e2.message}`,color:"warning",priority:"immediate",timeoutMs:5e3})}setInputValue(""),helpers2.setCursorOffset(0);return}}catch{}if(!speculationAccept&&input2.trim().startsWith("/")){let trimmedInput=expandPastedTextRefs(input2,pastedContents).trim(),spaceIndex=trimmedInput.indexOf(" "),commandName=spaceIndex===-1?trimmedInput.slice(1):trimmedInput.slice(1,spaceIndex),commandArgs=spaceIndex===-1?"":trimmedInput.slice(spaceIndex+1).trim(),matchingCommand=commands.find(cmd=>isCommandEnabled(cmd)&&(cmd.name===commandName||cmd.aliases?.includes(commandName)||getCommandName(cmd)===commandName));matchingCommand?.name==="clear"&&idleHintShownRef.current&&(logEvent("tengu_idle_return_action",{action:"hint_converted",variant:idleHintShownRef.current,idleMinutes:Math.round((Date.now()-lastQueryCompletionTimeRef.current)/6e4),messageCount:messagesRef.current.length,totalInputTokens:getTotalInputTokens()}),idleHintShownRef.current=!1);let shouldTreatAsImmediate=queryGuard.isActive&&(matchingCommand?.immediate||options?.fromKeybinding);if(matchingCommand&&shouldTreatAsImmediate&&matchingCommand.type==="local-jsx"){input2.trim()===inputValueRef.current.trim()&&(setInputValue(""),helpers2.setCursorOffset(0),helpers2.clearBuffer(),setPastedContents({}));let pastedTextRefs=parseReferences(input2).filter(r2=>pastedContents[r2.id]?.type==="text"),pastedTextCount=pastedTextRefs.length,pastedTextBytes=pastedTextRefs.reduce((sum2,r2)=>sum2+(pastedContents[r2.id]?.content.length??0),0);logEvent("tengu_paste_text",{pastedTextCount,pastedTextBytes}),logEvent("tengu_immediate_command_executed",{commandName:matchingCommand.name,fromKeybinding:options?.fromKeybinding??!1}),__name(async()=>{let doneWasCalled=!1,onDone=__name((result2,doneOptions)=>{doneWasCalled=!0,setToolJSX({jsx:null,shouldHidePromptInput:!1,clearLocalJSX:!0});let newMessages=[];result2&&doneOptions?.display!=="skip"&&(addNotification({key:`immediate-${matchingCommand.name}`,text:result2,priority:"immediate"}),isFullscreenEnvEnabled()||newMessages.push(createCommandInputMessage(formatCommandInputTags(getCommandName(matchingCommand),commandArgs)),createCommandInputMessage(`<${LOCAL_COMMAND_STDOUT_TAG}>${escapeXml(result2)}</${LOCAL_COMMAND_STDOUT_TAG}>`))),doneOptions?.metaMessages?.length&&newMessages.push(...doneOptions.metaMessages.map(content=>createUserMessage({content,isMeta:!0}))),newMessages.length&&setMessages(prev=>[...prev,...newMessages]),stashedPrompt!==void 0&&(setInputValue(stashedPrompt.text),helpers2.setCursorOffset(stashedPrompt.cursorOffset),setPastedContents(stashedPrompt.pastedContents),setStashedPrompt(void 0))},"onDone"),context2=getToolUseContext(messagesRef.current,[],createAbortController(),mainLoopModel),jsx494=await(await matchingCommand.load()).call(onDone,context2,commandArgs);jsx494&&!doneWasCalled&&setToolJSX({jsx:jsx494,shouldHidePromptInput:!1,isLocalJSXCommand:!0})},"executeImmediateCommand")();return}}if(activeRemote.isRemoteMode&&!input2.trim())return;{let willowMode=getFeatureValue_CACHED_MAY_BE_STALE("tengu_willow_mode","off"),idleThresholdMin=Number(process.env.CLAUDE_CODE_IDLE_THRESHOLD_MINUTES??75),tokenThreshold=Number(process.env.CLAUDE_CODE_IDLE_TOKEN_THRESHOLD??1e5);if(willowMode!=="off"&&!getGlobalConfig().idleReturnDismissed&&!skipIdleCheckRef.current&&!speculationAccept&&!input2.trim().startsWith("/")&&lastQueryCompletionTimeRef.current>0&&getTotalInputTokens()>=tokenThreshold){let idleMinutes=(Date.now()-lastQueryCompletionTimeRef.current)/6e4;if(idleMinutes>=idleThresholdMin&&willowMode==="dialog"){setIdleReturnPending({input:input2,idleMinutes}),setInputValue(""),helpers2.setCursorOffset(0),helpers2.clearBuffer();return}}}options?.fromKeybinding||(addToHistory({display:speculationAccept?input2:prependModeCharacterToInput(input2,inputMode),pastedContents:speculationAccept?{}:pastedContents}),inputMode==="bash"&&prependToShellHistoryCache(input2.trim()));let isSlashCommand3=!speculationAccept&&input2.trim().startsWith("/"),submitsNow=!isLoading||speculationAccept;if(stashedPrompt!==void 0&&!isSlashCommand3&&submitsNow?(setInputValue(stashedPrompt.text),helpers2.setCursorOffset(stashedPrompt.cursorOffset),setPastedContents(stashedPrompt.pastedContents),setStashedPrompt(void 0)):submitsNow&&(options?.fromKeybinding||(setInputValue(""),helpers2.setCursorOffset(0)),setPastedContents({})),submitsNow&&(setInputMode("prompt"),setIDESelection(void 0),setSubmitCount(_2=>_2+1),helpers2.clearBuffer(),tipPickedThisTurnRef.current=!1,!isSlashCommand3&&inputMode==="prompt"&&!speculationAccept&&!activeRemote.isRemoteMode&&(setUserInputOnProcessing(input2),resetTimingRefs())),speculationAccept){let{queryRequired}=await handleSpeculationAccept(speculationAccept.state,speculationAccept.speculationSessionTimeSavedMs,speculationAccept.setAppState,input2,{setMessages,readFileState,cwd:getOriginalCwd()});if(queryRequired){let newAbortController=createAbortController();setAbortController(newAbortController),onQuery([],newAbortController,!0,[],mainLoopModel)}return}if(activeRemote.isRemoteMode&&!isExternalLoading&&!(isSlashCommand3&&isLocalJsxCommandInput(input2))){await sendRemoteInput({input:input2.trim(),pastedContents,onFailed:__name(()=>{inputValueRef.current===""&&(setInputValue(input2),helpers2.setCursorOffset(input2.length),setPastedContents(pastedContents))},"onFailed")});return}await awaitPendingHooks(),await handlePromptSubmit({input:input2,helpers:helpers2,queryGuard,isExternalLoading,mode:inputMode,commands,onInputChange:setInputValue,setPastedContents,setToolJSX,getToolUseContext,messages:messagesRef.current,mainLoopModel,pastedContents,ideSelection,setUserInputOnProcessing,setAbortController,abortController,onQuery,setAppState,querySource:getQuerySourceForREPL(),onBeforeQuery,canUseTool,addNotification,setMessages,streamMode:streamModeRef.current,hasInterruptibleToolInProgress:hasInterruptibleToolInProgressRef.current}),(isSlashCommand3||isLoading)&&stashedPrompt!==void 0&&(setInputValue(stashedPrompt.text),helpers2.setCursorOffset(stashedPrompt.cursorOffset),setPastedContents(stashedPrompt.pastedContents),setStashedPrompt(void 0))},[queryGuard,isLoading,isExternalLoading,inputMode,commands,setInputValue,setInputMode,setPastedContents,setSubmitCount,setIDESelection,setToolJSX,getToolUseContext,mainLoopModel,pastedContents,ideSelection,setUserInputOnProcessing,setAbortController,addNotification,onQuery,stashedPrompt,setStashedPrompt,setAppState,onBeforeQuery,canUseTool,remoteSession,setMessages,awaitPendingHooks,repinScroll]),onAgentSubmit=(0,import_react347.useCallback)(async(input2,task,helpers2)=>{isLocalAgentTask(task)?(appendMessageToLocalAgent(task.id,createUserMessage({content:input2}),setAppState),task.status==="running"?queuePendingMessage(task.id,input2,setAppState):resumeAgentBackground({agentId:task.id,prompt:input2,toolUseContext:getToolUseContext(messagesRef.current,[],new AbortController,mainLoopModel),canUseTool}).catch(err2=>{logForDebugging(`resumeAgentBackground failed: ${errorMessage(err2)}`),addNotification({key:`resume-agent-failed-${task.id}`,jsx:(0,import_jsx_runtime480.jsxs)(ThemedText,{color:"error",children:["Failed to resume agent: ",errorMessage(err2)]}),priority:"low"})})):injectUserMessageToTeammate(task.id,input2,setAppState),setInputValue(""),helpers2.setCursorOffset(0),helpers2.clearBuffer()},[setAppState,setInputValue,getToolUseContext,canUseTool,mainLoopModel,addNotification]),handleAutoRunIssue=(0,import_react347.useCallback)(()=>{let command9=autoRunIssueReason?getAutoRunCommand(autoRunIssueReason):"/issue";setAutoRunIssueReason(null),onSubmit(command9,{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")}).catch(err2=>{logForDebugging(`Auto-run ${command9} failed: ${errorMessage(err2)}`)})},[onSubmit,autoRunIssueReason]),handleCancelAutoRunIssue=(0,import_react347.useCallback)(()=>{setAutoRunIssueReason(null)},[]),handleSurveyRequestFeedback=(0,import_react347.useCallback)(()=>{onSubmit("/feedback",{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")}).catch(err2=>{logForDebugging(`Survey feedback request failed: ${err2 instanceof Error?err2.message:String(err2)}`)})},[onSubmit]),onSubmitRef=(0,import_react347.useRef)(onSubmit);onSubmitRef.current=onSubmit;let handleOpenRateLimitOptions=(0,import_react347.useCallback)(()=>{onSubmitRef.current("/rate-limit-options",{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")})},[]),handleExit=(0,import_react347.useCallback)(async()=>{if(setIsExiting(!0),getCurrentWorktreeSession()!==null){setExitFlow((0,import_jsx_runtime480.jsx)(ExitFlow,{showWorktree:!0,onDone:()=>{},onCancel:()=>{setExitFlow(null),setIsExiting(!1)}}));return}let exitFlowResult=await(await exit_default.load()).call(()=>{});setExitFlow(exitFlowResult),exitFlowResult===null&&setIsExiting(!1)},[]),handleShowMessageSelector=(0,import_react347.useCallback)(()=>{setIsMessageSelectorVisible(prev=>!prev)},[]),rewindConversationTo=(0,import_react347.useCallback)(message=>{let prev=messagesRef.current,messageIndex=prev.lastIndexOf(message);if(messageIndex===-1)return;logEvent("tengu_conversation_rewind",{preRewindMessageCount:prev.length,postRewindMessageCount:messageIndex,messagesRemoved:prev.length-messageIndex,rewindToMessageIndex:messageIndex});try{let sessionId=getSessionId(),survivorUuid=(messageIndex>0?prev[messageIndex-1]:null)?.uuid;if(survivorUuid){let previewSource=message.message?.content,preview="";if(typeof previewSource=="string")preview=previewSource;else if(Array.isArray(previewSource)){for(let block of previewSource)if(block?.type==="text"&&typeof block.text=="string"){preview=block.text;break}}let name=preview.replace(/\s+/g," ").trim().slice(0,60)||`rewind ${new Date().toLocaleTimeString()}`,branchId=`rw-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,parentBranchId=getActiveBranch();recordBranch(sessionId,branchId,name,survivorUuid,parentBranchId),setActiveBranch(branchId),recordHead(sessionId,survivorUuid,"rewind",branchId),flushSessionStorage().catch(()=>{})}}catch(err2){logError2(err2)}let rewoundMessages=prev.slice(0,messageIndex);if(setMessages(rewoundMessages),setConversationId(randomUUID60()),resetMicrocompactState(),isBoundaryV2Enabled()){let sessionId=getSessionId();hydrateV2ArchivedFromTextForSession(sessionId,""),(async()=>{try{let projectDir=getSessionProjectDir()??getProjectDir3(getOriginalCwd()),archived=filterV2ArchiveForResumeMessages(await readV2ArchiveForSession(sessionId,projectDir),rewoundMessages);hydrateV2ArchivedFromTextForSession(sessionId,archived)}catch{}})()}setAppState(prev2=>({...prev2,toolPermissionContext:message.permissionMode&&prev2.toolPermissionContext.mode!==message.permissionMode?{...prev2.toolPermissionContext,mode:message.permissionMode}:prev2.toolPermissionContext,promptSuggestion:{text:null,promptId:null,shownAt:0,acceptedAt:0,generationRequestId:null}}))},[setMessages,setAppState]),restoreMessageSync=(0,import_react347.useCallback)(message=>{rewindConversationTo(message);let r2=textForResubmit(message);if(r2&&(setInputValue(r2.text),setInputMode(r2.mode)),Array.isArray(message.message.content)&&message.message.content.some(block=>block.type==="image")){let imageBlocks=message.message.content.filter(block=>block.type==="image");if(imageBlocks.length>0){let newPastedContents={};imageBlocks.forEach((block,index)=>{if(block.source.type==="base64"){let id=message.imagePasteIds?.[index]??index+1;newPastedContents[id]={id,type:"image",content:block.source.data,mediaType:block.source.media_type}}}),setPastedContents(newPastedContents)}}},[rewindConversationTo,setInputValue]);restoreMessageSyncRef.current=restoreMessageSync;let handleRestoreMessage=(0,import_react347.useCallback)(async message=>{setImmediate((restore,message2)=>restore(message2),restoreMessageSync,message)},[restoreMessageSync]),findRawIndex=__name(uuid3=>{let prefix=uuid3.slice(0,24);return messages.findIndex(m3=>m3.uuid.slice(0,24)===prefix)},"findRawIndex"),messageActionCaps={copy:__name(text=>{setClipboard(text).then(raw=>{raw&&process.stdout.write(raw),addNotification({key:"selection-copied",text:"copied",color:"success",priority:"immediate",timeoutMs:2e3})})},"copy"),edit:__name(async msg=>{let rawIdx=findRawIndex(msg.uuid),raw=rawIdx>=0?messages[rawIdx]:void 0;if(!raw||!selectableUserMessagesFilter(raw))return;let noFileChanges=!await fileHistoryHasAnyChanges(fileHistory,raw.uuid),onlySynthetic=messagesAfterAreOnlySynthetic(messages,rawIdx);noFileChanges&&onlySynthetic?(onCancel(),handleRestoreMessage(raw)):(setMessageSelectorPreselect(raw),setIsMessageSelectorVisible(!0))},"edit")},{enter:enterMessageActions,handlers:messageActionHandlers}=useMessageActions(cursor,setCursor,cursorNavRef,messageActionCaps);async function onInit(){reverify();let memoryFiles=await getMemoryFiles();if(memoryFiles.length>0){let fileList=memoryFiles.map(f3=>` [${f3.type}] ${f3.path} (${f3.content.length} chars)${f3.parent?` (included by ${f3.parent})`:""}`).join(`
8520
8520
  `);logForDebugging(`Loaded ${memoryFiles.length} \u0043LAUDE.md/rules files:
8521
8521
  ${fileList}`)}else logForDebugging("No \u0043LAUDE.md/rules files found");for(let file2 of memoryFiles)readFileState.current.set(file2.path,{content:file2.contentDiffersFromDisk?file2.rawContent??file2.content:file2.content,timestamp:Date.now(),offset:void 0,limit:void 0,isPartialView:file2.contentDiffersFromDisk})}__name(onInit,"onInit"),useCostSummary(useFpsMetrics()),useLogMessages(messages,messages.length===initialMessages?.length);let{sendBridgeResult}=useReplBridge(messages,setMessages,abortControllerRef,commands,mainLoopModel);sendBridgeResultRef.current=sendBridgeResult,useAfterFirstRender();let hasCountedQueueUseRef=(0,import_react347.useRef)(!1);(0,import_react347.useEffect)(()=>{if(queuedCommands.length<1){hasCountedQueueUseRef.current=!1;return}hasCountedQueueUseRef.current||(hasCountedQueueUseRef.current=!0,saveGlobalConfig(current=>({...current,promptQueueUseCount:(current.promptQueueUseCount??0)+1})))},[queuedCommands.length]);let executeQueuedInput=(0,import_react347.useCallback)(async queuedCommands2=>{if(activeRemote.isRemoteMode){let remoteCommand=queuedCommands2[0];if(remoteCommand&&!(typeof remoteCommand.value=="string"&&isLocalJsxCommandInput(remoteCommand.value))){await sendRemoteInput({input:remoteCommand.value,pastedContents:remoteCommand.pastedContents,uuid:remoteCommand.uuid,onFailed:__name(()=>{inputValueRef.current===""&&typeof remoteCommand.value=="string"&&setInputValue(remoteCommand.value)},"onFailed")});return}}await handlePromptSubmit({helpers:{setCursorOffset:__name(()=>{},"setCursorOffset"),clearBuffer:__name(()=>{},"clearBuffer"),resetHistory:__name(()=>{},"resetHistory")},queryGuard,commands,onInputChange:__name(()=>{},"onInputChange"),setPastedContents:__name(()=>{},"setPastedContents"),setToolJSX,getToolUseContext,messages,mainLoopModel,ideSelection,setUserInputOnProcessing,setAbortController,onQuery,setAppState,querySource:getQuerySourceForREPL(),onBeforeQuery,canUseTool,addNotification,setMessages,queuedCommands:queuedCommands2})},[queryGuard,commands,setToolJSX,getToolUseContext,messages,mainLoopModel,ideSelection,setUserInputOnProcessing,canUseTool,setAbortController,onQuery,addNotification,setAppState,onBeforeQuery,activeRemote,isLocalJsxCommandInput,sendRemoteInput,setInputValue]);useQueueProcessor({executeQueuedInput,hasActiveLocalJsxUI:isShowingLocalJSXCommand,isExternalLoading,processOneCommandAtATime:activeRemote.isRemoteMode,queryGuard}),(0,import_react347.useEffect)(()=>{activityManager.recordUserActivity(),updateLastInteractionTime(!0)},[inputValue,submitCount]),(0,import_react347.useEffect)(()=>{submitCount===1&&startBackgroundHousekeeping()},[submitCount]),(0,import_react347.useEffect)(()=>{if(isLoading||submitCount===0||lastQueryCompletionTime===0)return;let timer=setTimeout((lastQueryCompletionTime2,isLoading2,toolJSX2,focusedInputDialogRef2,terminal2)=>{if(getLastInteractionTime()>lastQueryCompletionTime2)return;let idleTimeSinceResponse=Date.now()-lastQueryCompletionTime2;!isLoading2&&!toolJSX2&&focusedInputDialogRef2.current===void 0&&idleTimeSinceResponse>=getGlobalConfig().messageIdleNotifThresholdMs&&sendNotification({message:"Clavue is waiting for your input",notificationType:"idle_prompt"},terminal2)},getGlobalConfig().messageIdleNotifThresholdMs,lastQueryCompletionTime,isLoading,toolJSX,focusedInputDialogRef,terminal);return()=>clearTimeout(timer)},[isLoading,toolJSX,submitCount,lastQueryCompletionTime,terminal]),(0,import_react347.useEffect)(()=>{if(lastQueryCompletionTime===0||isLoading)return;let willowMode=getFeatureValue_CACHED_MAY_BE_STALE("tengu_willow_mode","off");if(willowMode!=="hint"&&willowMode!=="hint_v2"||getGlobalConfig().idleReturnDismissed)return;let tokenThreshold=Number(process.env.CLAUDE_CODE_IDLE_TOKEN_THRESHOLD??1e5);if(getTotalInputTokens()<tokenThreshold)return;let idleThresholdMs=Number(process.env.CLAUDE_CODE_IDLE_THRESHOLD_MINUTES??75)*6e4,elapsed=Date.now()-lastQueryCompletionTime,remaining=idleThresholdMs-elapsed,timer=setTimeout((lqct,addNotif,msgsRef,mode,hintRef)=>{if(msgsRef.current.length===0)return;let totalTokens=getTotalInputTokens(),formattedTokens=formatTokens(totalTokens),idleMinutes=(Date.now()-lqct)/6e4;addNotif({key:"idle-return-hint",jsx:mode==="hint_v2"?(0,import_jsx_runtime480.jsxs)(import_jsx_runtime480.Fragment,{children:[(0,import_jsx_runtime480.jsx)(ThemedText,{dimColor:!0,children:"new task? "}),(0,import_jsx_runtime480.jsx)(ThemedText,{color:"suggestion",children:"/clear"}),(0,import_jsx_runtime480.jsx)(ThemedText,{dimColor:!0,children:" to save "}),(0,import_jsx_runtime480.jsxs)(ThemedText,{color:"suggestion",children:[formattedTokens," tokens"]})]}):(0,import_jsx_runtime480.jsxs)(ThemedText,{color:"warning",children:["new task? /clear to save ",formattedTokens," tokens"]}),priority:"medium",timeoutMs:2147483647}),hintRef.current=mode,logEvent("tengu_idle_return_action",{action:"hint_shown",variant:mode,idleMinutes:Math.round(idleMinutes),messageCount:msgsRef.current.length,totalInputTokens:totalTokens})},Math.max(0,remaining),lastQueryCompletionTime,addNotification,messagesRef,willowMode,idleHintShownRef);return()=>{clearTimeout(timer),removeNotification("idle-return-hint"),idleHintShownRef.current=!1}},[lastQueryCompletionTime,isLoading,addNotification,removeNotification]);let handleIncomingPrompt=(0,import_react347.useCallback)((content,options)=>{if(queryGuard.isActive||getCommandQueue().some(cmd=>cmd.agentId===void 0&&(cmd.mode==="prompt"||cmd.mode==="bash")))return!1;let newAbortController=createAbortController();setAbortController(newAbortController);let userMessage=createUserMessage({content,isMeta:options?.isMeta?!0:void 0});return onQuery([userMessage],newAbortController,!0,[],mainLoopModel),!0},[onQuery,mainLoopModel,store]),voice={stripTrailing:__name(()=>0,"stripTrailing"),handleKeyEvent:__name(()=>{},"handleKeyEvent"),resetAnchor:__name(()=>{},"resetAnchor"),interimRange:null};useInboxPoller({enabled:isAgentSwarmsEnabled(),isLoading,focusedInputDialog,onSubmitMessage:handleIncomingPrompt}),useMailboxBridge({isLoading,onSubmitMessage:handleIncomingPrompt}),(0,import_react347.useEffect)(()=>{queuedCommands.some(cmd=>cmd.priority==="now")&&abortControllerRef.current?.abort("interrupt")},[queuedCommands]),(0,import_react347.useEffect)(()=>(onInit(),()=>{diagnosticTracker.shutdown()}),[]);let{internal_eventEmitter}=use_stdin_default(),[remountKey,setRemountKey]=(0,import_react347.useState)(0);(0,import_react347.useEffect)(()=>{let handleSuspend=__name(()=>{process.stdout.write(`
8522
8522
  Clavue has been suspended. Run \`fg\` to bring Clavue back.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clavue",
3
- "version": "9.7.5",
3
+ "version": "9.7.6",
4
4
  "description": "Clavue: execution-first AI coding CLI with direct repo tools, provider routing, native workflows, MCP integration, and long-session recovery",
5
5
  "keywords": [
6
6
  "clavue",