Skip to content

Commit 92a478b

Browse files
ctemtone
authored andcommitted
Publish token usage metrics (RooCodeInc#7637)
1 parent 9940f8d commit 92a478b

File tree

9 files changed

+149
-73
lines changed

9 files changed

+149
-73
lines changed

packages/cloud/src/bridge/ExtensionChannel.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ export class ExtensionChannel extends BaseChannel<
187187
{ from: RooCodeEventName.TaskUnpaused, to: ExtensionBridgeEventName.TaskUnpaused },
188188
{ from: RooCodeEventName.TaskSpawned, to: ExtensionBridgeEventName.TaskSpawned },
189189
{ from: RooCodeEventName.TaskUserMessage, to: ExtensionBridgeEventName.TaskUserMessage },
190+
{ from: RooCodeEventName.TaskTokenUsageUpdated, to: ExtensionBridgeEventName.TaskTokenUsageUpdated },
190191
] as const
191192

192193
eventMapping.forEach(({ from, to }) => {
@@ -229,11 +230,12 @@ export class ExtensionChannel extends BaseChannel<
229230
task: task
230231
? {
231232
taskId: task.taskId,
233+
parentTaskId: task.parentTaskId,
234+
childTaskId: task.childTaskId,
232235
taskStatus: task.taskStatus,
233236
taskAsk: task?.taskAsk,
234237
queuedMessages: task.queuedMessages,
235-
parentTaskId: task.parentTaskId,
236-
childTaskId: task.childTaskId,
238+
tokenUsage: task.tokenUsage,
237239
...task.metadata,
238240
}
239241
: { taskId: "", taskStatus: TaskStatus.None },

packages/cloud/src/bridge/__tests__/ExtensionChannel.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ describe("ExtensionChannel", () => {
120120
RooCodeEventName.TaskUnpaused,
121121
RooCodeEventName.TaskSpawned,
122122
RooCodeEventName.TaskUserMessage,
123+
RooCodeEventName.TaskTokenUsageUpdated,
123124
]
124125

125126
// Check that on() was called for each event
@@ -254,7 +255,7 @@ describe("ExtensionChannel", () => {
254255
}
255256

256257
// Listeners should still be the same count (not accumulated)
257-
expect(eventListeners.size).toBe(14)
258+
expect(eventListeners.size).toBe(15)
258259

259260
// Each event should have exactly 1 listener
260261
eventListeners.forEach((listeners) => {

packages/types/npm/package.metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@roo-code/types",
3-
"version": "1.73.0",
3+
"version": "1.74.0",
44
"description": "TypeScript type definitions for Roo Code.",
55
"publishConfig": {
66
"access": "public",

packages/types/src/cloud.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { TaskStatus, taskMetadataSchema } from "./task.js"
77
import { globalSettingsSchema } from "./global-settings.js"
88
import { providerSettingsWithIdSchema } from "./provider-settings.js"
99
import { mcpMarketplaceItemSchema } from "./marketplace.js"
10-
import { clineMessageSchema, queuedMessageSchema } from "./message.js"
10+
import { clineMessageSchema, queuedMessageSchema, tokenUsageSchema } from "./message.js"
1111
import { staticAppPropertiesSchema, gitPropertiesSchema } from "./telemetry.js"
1212

1313
/**
@@ -363,6 +363,7 @@ const extensionTaskSchema = z.object({
363363
queuedMessages: z.array(queuedMessageSchema).optional(),
364364
parentTaskId: z.string().optional(),
365365
childTaskId: z.string().optional(),
366+
tokenUsage: tokenUsageSchema.optional(),
366367
...taskMetadataSchema.shape,
367368
})
368369

@@ -412,6 +413,8 @@ export enum ExtensionBridgeEventName {
412413

413414
TaskUserMessage = RooCodeEventName.TaskUserMessage,
414415

416+
TaskTokenUsageUpdated = RooCodeEventName.TaskTokenUsageUpdated,
417+
415418
ModeChanged = RooCodeEventName.ModeChanged,
416419
ProviderProfileChanged = RooCodeEventName.ProviderProfileChanged,
417420

@@ -494,6 +497,12 @@ export const extensionBridgeEventSchema = z.discriminatedUnion("type", [
494497
timestamp: z.number(),
495498
}),
496499

500+
z.object({
501+
type: z.literal(ExtensionBridgeEventName.TaskTokenUsageUpdated),
502+
instance: extensionInstanceSchema,
503+
timestamp: z.number(),
504+
}),
505+
497506
z.object({
498507
type: z.literal(ExtensionBridgeEventName.ModeChanged),
499508
instance: extensionInstanceSchema,

packages/types/src/task.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ export type TaskProviderEvents = {
7575

7676
[RooCodeEventName.TaskUserMessage]: [taskId: string]
7777

78+
[RooCodeEventName.TaskTokenUsageUpdated]: [taskId: string, tokenUsage: TokenUsage]
79+
7880
[RooCodeEventName.ModeChanged]: [mode: string]
7981
[RooCodeEventName.ProviderProfileChanged]: [config: { name: string; provider?: string }]
8082
}
@@ -116,6 +118,7 @@ export interface TaskLike {
116118
readonly taskStatus: TaskStatus
117119
readonly taskAsk: ClineMessage | undefined
118120
readonly queuedMessages: QueuedMessage[]
121+
readonly tokenUsage: TokenUsage | undefined
119122

120123
on<K extends keyof TaskEvents>(event: K, listener: (...args: TaskEvents[K]) => void | Promise<void>): this
121124
off<K extends keyof TaskEvents>(event: K, listener: (...args: TaskEvents[K]) => void | Promise<void>): this

0 commit comments

Comments
 (0)