From 4f5466d0867ed3ad65e2473fada1552accf83867 Mon Sep 17 00:00:00 2001 From: Evgeny Shurakov Date: Thu, 26 Mar 2026 21:58:37 +0100 Subject: [PATCH] feat(cli): include parentSessionId in heartbeat session info --- packages/opencode/src/kilo-sessions/kilo-sessions.ts | 1 + .../opencode/src/kilo-sessions/remote-protocol.ts | 1 + .../test/kilo-sessions/remote-protocol.test.ts | 12 ++++++++++++ 3 files changed, 14 insertions(+) diff --git a/packages/opencode/src/kilo-sessions/kilo-sessions.ts b/packages/opencode/src/kilo-sessions/kilo-sessions.ts index 76baddb95ad..28c1f4f94e7 100644 --- a/packages/opencode/src/kilo-sessions/kilo-sessions.ts +++ b/packages/opencode/src/kilo-sessions/kilo-sessions.ts @@ -249,6 +249,7 @@ export namespace KiloSessions { id, status: statuses[id]?.type ?? "idle", title: session.title, + parentSessionId: session.parentID, gitUrl, gitBranch, } diff --git a/packages/opencode/src/kilo-sessions/remote-protocol.ts b/packages/opencode/src/kilo-sessions/remote-protocol.ts index 3d1f1cb29fb..ed8e19348e5 100644 --- a/packages/opencode/src/kilo-sessions/remote-protocol.ts +++ b/packages/opencode/src/kilo-sessions/remote-protocol.ts @@ -7,6 +7,7 @@ export namespace RemoteProtocol { id: z.string(), status: z.string(), title: z.string(), + parentSessionId: z.string().optional(), gitUrl: z.string().optional(), gitBranch: z.string().optional(), }) diff --git a/packages/opencode/test/kilo-sessions/remote-protocol.test.ts b/packages/opencode/test/kilo-sessions/remote-protocol.test.ts index 165b8291778..f61f3f40886 100644 --- a/packages/opencode/test/kilo-sessions/remote-protocol.test.ts +++ b/packages/opencode/test/kilo-sessions/remote-protocol.test.ts @@ -17,6 +17,18 @@ describe("RemoteProtocol", () => { } }) + test("heartbeat with parentSessionId parses", () => { + const msg = { + type: "heartbeat", + sessions: [{ id: "ses_child", status: "busy", title: "Sub task", parentSessionId: "ses_root" }], + } + const result = RemoteProtocol.Heartbeat.safeParse(msg) + expect(result.success).toBe(true) + if (result.success) { + expect(result.data.sessions[0].parentSessionId).toBe("ses_root") + } + }) + test("valid event parses", () => { const msg = { type: "event",