( 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[], )
| 938 | } |
| 939 | |
| 940 | export async function analyzeContextUsage( |
| 941 | messages: Message[], |
| 942 | model: string, |
| 943 | getToolPermissionContext: () => Promise<ToolPermissionContext>, |
| 944 | tools: Tools, |
| 945 | agentDefinitions: AgentDefinitionsResult, |
| 946 | terminalWidth?: number, |
| 947 | toolUseContext?: Pick<ToolUseContext, 'options'>, |
| 948 | mainThreadAgentDefinition?: AgentDefinition, |
| 949 | /** Original messages before microcompact, used to extract API usage */ |
| 950 | originalMessages?: Message[], |
| 951 | ): Promise<ContextData> { |
| 952 | const runtimeModel = getRuntimeMainLoopModel({ |
| 953 | permissionMode: (await getToolPermissionContext()).mode, |
| 954 | mainLoopModel: model, |
| 955 | }) |
| 956 | // Get context window size |
| 957 | const contextWindow = getContextWindowForModel(runtimeModel, getSdkBetas()) |
| 958 | |
| 959 | // Build the effective system prompt using the shared utility |
| 960 | const defaultSystemPrompt = await getSystemPrompt(tools, runtimeModel) |
| 961 | const effectiveSystemPrompt = buildEffectiveSystemPrompt({ |
| 962 | mainThreadAgentDefinition, |
| 963 | toolUseContext: toolUseContext ?? { |
| 964 | options: {} as ToolUseContext['options'], |
| 965 | }, |
| 966 | customSystemPrompt: toolUseContext?.options.customSystemPrompt, |
| 967 | defaultSystemPrompt, |
| 968 | appendSystemPrompt: toolUseContext?.options.appendSystemPrompt, |
| 969 | }) |
| 970 | |
| 971 | // Critical operations that should not fail due to skills |
| 972 | const [ |
| 973 | { systemPromptTokens, systemPromptSections }, |
| 974 | { claudeMdTokens, memoryFileDetails }, |
| 975 | { |
| 976 | builtInToolTokens, |
| 977 | deferredBuiltinDetails, |
| 978 | deferredBuiltinTokens, |
| 979 | systemToolDetails, |
| 980 | }, |
| 981 | { mcpToolTokens, mcpToolDetails, deferredToolTokens }, |
| 982 | { agentTokens, agentDetails }, |
| 983 | { slashCommandTokens, commandInfo }, |
| 984 | messageBreakdown, |
| 985 | ] = await Promise.all([ |
| 986 | countSystemTokens(effectiveSystemPrompt), |
| 987 | countMemoryFileTokens(), |
| 988 | countBuiltInToolTokens( |
| 989 | tools, |
| 990 | getToolPermissionContext, |
| 991 | agentDefinitions, |
| 992 | runtimeModel, |
| 993 | messages, |
| 994 | ), |
| 995 | countMcpToolTokens( |
| 996 | tools, |
| 997 | getToolPermissionContext, |
no test coverage detected