( messages: Message[], model: string, getToolPermissionContext: () => Promise<ToolPermissionContext>, tools: Tools, agentDefinitions: AgentDefinitionsResult, terminalWidth?: number, toolUseContext?: Pick<ToolUseContext, 'options'>, mainThreadAgentDefinition?: AgentDefinition, /** Original messages before microcompact, used to extract API usage */ originalMessages?: Message[], )
| 916 | } |
| 917 | |
| 918 | export async function analyzeContextUsage( |
| 919 | messages: Message[], |
| 920 | model: string, |
| 921 | getToolPermissionContext: () => Promise<ToolPermissionContext>, |
| 922 | tools: Tools, |
| 923 | agentDefinitions: AgentDefinitionsResult, |
| 924 | terminalWidth?: number, |
| 925 | toolUseContext?: Pick<ToolUseContext, 'options'>, |
| 926 | mainThreadAgentDefinition?: AgentDefinition, |
| 927 | /** Original messages before microcompact, used to extract API usage */ |
| 928 | originalMessages?: Message[], |
| 929 | ): Promise<ContextData> { |
| 930 | const runtimeModel = getRuntimeMainLoopModel({ |
| 931 | permissionMode: (await getToolPermissionContext()).mode, |
| 932 | mainLoopModel: model, |
| 933 | }) |
| 934 | // Get context window size |
| 935 | const contextWindow = getContextWindowForModel(runtimeModel, getSdkBetas()) |
| 936 | |
| 937 | // Build the effective system prompt using the shared utility |
| 938 | const defaultSystemPrompt = await getSystemPrompt(tools, runtimeModel) |
| 939 | const effectiveSystemPrompt = buildEffectiveSystemPrompt({ |
| 940 | mainThreadAgentDefinition, |
| 941 | toolUseContext: toolUseContext ?? { |
| 942 | options: {} as ToolUseContext['options'], |
| 943 | }, |
| 944 | customSystemPrompt: toolUseContext?.options.customSystemPrompt, |
| 945 | defaultSystemPrompt, |
| 946 | appendSystemPrompt: toolUseContext?.options.appendSystemPrompt, |
| 947 | }) |
| 948 | |
| 949 | // Critical operations that should not fail due to skills |
| 950 | const [ |
| 951 | { systemPromptTokens, systemPromptSections }, |
| 952 | { claudeMdTokens, memoryFileDetails }, |
| 953 | { |
| 954 | builtInToolTokens, |
| 955 | deferredBuiltinDetails, |
| 956 | deferredBuiltinTokens, |
| 957 | systemToolDetails, |
| 958 | }, |
| 959 | { mcpToolTokens, mcpToolDetails, deferredToolTokens }, |
| 960 | { agentTokens, agentDetails }, |
| 961 | { slashCommandTokens, commandInfo }, |
| 962 | messageBreakdown, |
| 963 | ] = await Promise.all([ |
| 964 | countSystemTokens(effectiveSystemPrompt), |
| 965 | countMemoryFileTokens(), |
| 966 | countBuiltInToolTokens( |
| 967 | tools, |
| 968 | getToolPermissionContext, |
| 969 | agentDefinitions, |
| 970 | runtimeModel, |
| 971 | messages, |
| 972 | ), |
| 973 | countMcpToolTokens( |
| 974 | tools, |
| 975 | getToolPermissionContext, |
no test coverage detected