1+ import { TEST_USER_ID } from '@codebuff/common/constants'
12import {
23 clearMockedModules ,
34 mockModule ,
45} from '@codebuff/common/testing/mock-modules'
5- import { TEST_USER_ID } from '@codebuff/common/constants'
6- import {
7- getInitialSessionState ,
8- AgentTemplateTypes ,
9- } from '@codebuff/common/types/session-state'
6+ import { getInitialSessionState } from '@codebuff/common/types/session-state'
107import {
118 spyOn ,
129 beforeEach ,
@@ -18,11 +15,12 @@ import {
1815 it ,
1916 mock ,
2017} from 'bun:test'
21- import { mainPrompt } from '../main-prompt'
22- import * as websocketAction from '../websockets/websocket-action'
18+
2319import * as messageCostTracker from '../llm-apis/message-cost-tracker'
2420import * as aisdk from '../llm-apis/vercel-ai-sdk/ai-sdk'
21+ import { mainPrompt } from '../main-prompt'
2522import * as agentRegistry from '../templates/agent-registry'
23+ import * as websocketAction from '../websockets/websocket-action'
2624
2725import type { ProjectFileContext } from '@codebuff/common/util/file'
2826import type { WebSocket } from 'ws'
@@ -251,6 +249,7 @@ describe('Cost Aggregation Integration Tests', () => {
251249 it ( 'should correctly aggregate costs across the entire main prompt flow' , async ( ) => {
252250 const sessionState = getInitialSessionState ( mockFileContext )
253251 // Set the main agent to use the 'base' type which is defined in our mock templates
252+ sessionState . mainAgentState . stepsRemaining = 10
254253 sessionState . mainAgentState . agentType = 'base'
255254
256255 const action = {
@@ -277,8 +276,7 @@ describe('Cost Aggregation Integration Tests', () => {
277276 // Verify the total cost includes both main agent and subagent costs
278277 const finalCreditsUsed = result . sessionState . mainAgentState . creditsUsed
279278 // The actual cost is higher than expected due to multiple steps in agent execution
280- expect ( finalCreditsUsed ) . toBeGreaterThan ( 100 ) // Should be > 100 credits
281- expect ( finalCreditsUsed ) . toBeLessThan ( 200 ) // Should be < 200 credits
279+ expect ( finalCreditsUsed ) . toEqual ( 73 )
282280
283281 // Verify the cost breakdown makes sense
284282 expect ( finalCreditsUsed ) . toBeGreaterThan ( 0 )
@@ -347,6 +345,7 @@ describe('Cost Aggregation Integration Tests', () => {
347345 )
348346
349347 const sessionState = getInitialSessionState ( mockFileContext )
348+ sessionState . mainAgentState . stepsRemaining = 10
350349 sessionState . mainAgentState . agentType = 'base'
351350
352351 const action = {
@@ -373,8 +372,7 @@ describe('Cost Aggregation Integration Tests', () => {
373372 // Should aggregate costs from all levels: main + sub1 + sub2
374373 const finalCreditsUsed = result . sessionState . mainAgentState . creditsUsed
375374 // Multi-level agents should have higher costs than simple ones
376- expect ( finalCreditsUsed ) . toBeGreaterThan ( 100 ) // Should be > 100 credits due to hierarchy
377- expect ( finalCreditsUsed ) . toBeLessThan ( 150 ) // Should be < 150 credits
375+ expect ( finalCreditsUsed ) . toEqual ( 50 )
378376 } )
379377
380378 it ( 'should maintain cost integrity when subagents fail' , async ( ) => {
@@ -425,7 +423,9 @@ describe('Cost Aggregation Integration Tests', () => {
425423 }
426424
427425 // Check costs - they should be captured even if execution fails
428- const finalCreditsUsed = result ? result . sessionState . mainAgentState . creditsUsed : sessionState . mainAgentState . creditsUsed
426+ const finalCreditsUsed = result
427+ ? result . sessionState . mainAgentState . creditsUsed
428+ : sessionState . mainAgentState . creditsUsed
429429 // Even if the test fails, some cost should be incurred by the main agent
430430 expect ( finalCreditsUsed ) . toBeGreaterThanOrEqual ( 0 ) // At minimum, no negative costs
431431 } )
0 commit comments