Skip to content

Commit 43ff486

Browse files
authored
Publish subtask events (#7626)
1 parent bcb71db commit 43ff486

File tree

12 files changed

+253
-222
lines changed

12 files changed

+253
-222
lines changed

packages/cloud/src/bridge/ExtensionChannel.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@ export class ExtensionChannel extends BaseChannel<
175175
{ from: RooCodeEventName.TaskInteractive, to: ExtensionBridgeEventName.TaskInteractive },
176176
{ from: RooCodeEventName.TaskResumable, to: ExtensionBridgeEventName.TaskResumable },
177177
{ from: RooCodeEventName.TaskIdle, to: ExtensionBridgeEventName.TaskIdle },
178+
{ from: RooCodeEventName.TaskPaused, to: ExtensionBridgeEventName.TaskPaused },
179+
{ from: RooCodeEventName.TaskUnpaused, to: ExtensionBridgeEventName.TaskUnpaused },
180+
{ from: RooCodeEventName.TaskSpawned, to: ExtensionBridgeEventName.TaskSpawned },
178181
{ from: RooCodeEventName.TaskUserMessage, to: ExtensionBridgeEventName.TaskUserMessage },
179182
] as const
180183

@@ -223,6 +226,8 @@ export class ExtensionChannel extends BaseChannel<
223226
taskStatus: task.taskStatus,
224227
taskAsk: task?.taskAsk,
225228
queuedMessages: task.queuedMessages,
229+
parentTaskId: task.parentTaskId,
230+
childTaskId: task.childTaskId,
226231
...task.metadata,
227232
}
228233
: { taskId: "", taskStatus: TaskStatus.None },

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ describe("ExtensionChannel", () => {
101101
RooCodeEventName.TaskInteractive,
102102
RooCodeEventName.TaskResumable,
103103
RooCodeEventName.TaskIdle,
104+
RooCodeEventName.TaskPaused,
105+
RooCodeEventName.TaskUnpaused,
106+
RooCodeEventName.TaskSpawned,
104107
RooCodeEventName.TaskUserMessage,
105108
]
106109

@@ -231,8 +234,7 @@ describe("ExtensionChannel", () => {
231234
}
232235

233236
// Listeners should still be the same count (not accumulated)
234-
const expectedEventCount = 11 // Number of events we listen to (including TaskUserMessage)
235-
expect(eventListeners.size).toBe(expectedEventCount)
237+
expect(eventListeners.size).toBe(14)
236238

237239
// Each event should have exactly 1 listener
238240
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.67.0",
3+
"version": "1.69.0",
44
"description": "TypeScript type definitions for Roo Code.",
55
"publishConfig": {
66
"access": "public",

packages/types/src/cloud.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,8 @@ const extensionTaskSchema = z.object({
361361
taskStatus: z.nativeEnum(TaskStatus),
362362
taskAsk: clineMessageSchema.optional(),
363363
queuedMessages: z.array(queuedMessageSchema).optional(),
364+
parentTaskId: z.string().optional(),
365+
childTaskId: z.string().optional(),
364366
...taskMetadataSchema.shape,
365367
})
366368

@@ -404,6 +406,10 @@ export enum ExtensionBridgeEventName {
404406
TaskResumable = RooCodeEventName.TaskResumable,
405407
TaskIdle = RooCodeEventName.TaskIdle,
406408

409+
TaskPaused = RooCodeEventName.TaskPaused,
410+
TaskUnpaused = RooCodeEventName.TaskUnpaused,
411+
TaskSpawned = RooCodeEventName.TaskSpawned,
412+
407413
TaskUserMessage = RooCodeEventName.TaskUserMessage,
408414

409415
ModeChanged = RooCodeEventName.ModeChanged,
@@ -466,6 +472,22 @@ export const extensionBridgeEventSchema = z.discriminatedUnion("type", [
466472
timestamp: z.number(),
467473
}),
468474

475+
z.object({
476+
type: z.literal(ExtensionBridgeEventName.TaskPaused),
477+
instance: extensionInstanceSchema,
478+
timestamp: z.number(),
479+
}),
480+
z.object({
481+
type: z.literal(ExtensionBridgeEventName.TaskUnpaused),
482+
instance: extensionInstanceSchema,
483+
timestamp: z.number(),
484+
}),
485+
z.object({
486+
type: z.literal(ExtensionBridgeEventName.TaskSpawned),
487+
instance: extensionInstanceSchema,
488+
timestamp: z.number(),
489+
}),
490+
469491
z.object({
470492
type: z.literal(ExtensionBridgeEventName.TaskUserMessage),
471493
instance: extensionInstanceSchema,

packages/types/src/history.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { z } from "zod"
66

77
export const historyItemSchema = z.object({
88
id: z.string(),
9+
rootTaskId: z.string().optional(),
10+
parentTaskId: z.string().optional(),
911
number: z.number(),
1012
ts: z.number(),
1113
task: z.string(),

packages/types/src/task.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ export type TaskProviderEvents = {
6868
[RooCodeEventName.TaskInteractive]: [taskId: string]
6969
[RooCodeEventName.TaskResumable]: [taskId: string]
7070
[RooCodeEventName.TaskIdle]: [taskId: string]
71+
72+
[RooCodeEventName.TaskPaused]: [taskId: string]
73+
[RooCodeEventName.TaskUnpaused]: [taskId: string]
7174
[RooCodeEventName.TaskSpawned]: [taskId: string]
7275

7376
[RooCodeEventName.TaskUserMessage]: [taskId: string]
@@ -106,9 +109,10 @@ export type TaskMetadata = z.infer<typeof taskMetadataSchema>
106109

107110
export interface TaskLike {
108111
readonly taskId: string
109-
readonly rootTask?: TaskLike
112+
readonly rootTaskId?: string
113+
readonly parentTaskId?: string
114+
readonly childTaskId?: string
110115
readonly metadata: TaskMetadata
111-
112116
readonly taskStatus: TaskStatus
113117
readonly taskAsk: ClineMessage | undefined
114118
readonly queuedMessages: QueuedMessage[]
@@ -135,8 +139,8 @@ export type TaskEvents = {
135139
[RooCodeEventName.TaskIdle]: [taskId: string]
136140

137141
// Subtask Lifecycle
138-
[RooCodeEventName.TaskPaused]: []
139-
[RooCodeEventName.TaskUnpaused]: []
142+
[RooCodeEventName.TaskPaused]: [taskId: string]
143+
[RooCodeEventName.TaskUnpaused]: [taskId: string]
140144
[RooCodeEventName.TaskSpawned]: [taskId: string]
141145

142146
// Task Execution

src/core/task-persistence/taskMetadata.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,27 @@ import { t } from "../../i18n"
1313
const taskSizeCache = new NodeCache({ stdTTL: 30, checkperiod: 5 * 60 })
1414

1515
export type TaskMetadataOptions = {
16-
messages: ClineMessage[]
1716
taskId: string
17+
rootTaskId?: string
18+
parentTaskId?: string
1819
taskNumber: number
20+
messages: ClineMessage[]
1921
globalStoragePath: string
2022
workspace: string
2123
mode?: string
2224
}
2325

2426
export async function taskMetadata({
25-
messages,
26-
taskId,
27+
taskId: id,
28+
rootTaskId,
29+
parentTaskId,
2730
taskNumber,
31+
messages,
2832
globalStoragePath,
2933
workspace,
3034
mode,
3135
}: TaskMetadataOptions) {
32-
const taskDir = await getTaskDirectoryPath(globalStoragePath, taskId)
36+
const taskDir = await getTaskDirectoryPath(globalStoragePath, id)
3337

3438
// Determine message availability upfront
3539
const hasMessages = messages && messages.length > 0
@@ -79,9 +83,11 @@ export async function taskMetadata({
7983
}
8084
}
8185

82-
// Create historyItem once with pre-calculated values
86+
// Create historyItem once with pre-calculated values.
8387
const historyItem: HistoryItem = {
84-
id: taskId,
88+
id,
89+
rootTaskId,
90+
parentTaskId,
8591
number: taskNumber,
8692
ts: timestamp,
8793
task: hasMessages

0 commit comments

Comments
 (0)