diff --git a/src/agents/openclaw-tools.sessions.test.ts b/src/agents/openclaw-tools.sessions.test.ts index d301893067b..4957a657d98 100644 --- a/src/agents/openclaw-tools.sessions.test.ts +++ b/src/agents/openclaw-tools.sessions.test.ts @@ -167,6 +167,13 @@ describe("sessions tools", () => { updatedAt: 12, parentSessionKey: "agent:main:main", }, + { + key: "agent:main:subagent:worker", + kind: "direct", + sessionId: "s-subagent-worker", + updatedAt: 13, + spawnedBy: "agent:main:main", + }, { key: "cron:job-1", kind: "direct", @@ -203,6 +210,7 @@ describe("sessions tools", () => { sessions?: Array<{ key?: string; channel?: string; + spawnedBy?: string; status?: string; startedAt?: number; runtimeMs?: number; @@ -212,7 +220,7 @@ describe("sessions tools", () => { messages?: Array<{ role?: string }>; }>; }; - expect(details.sessions).toHaveLength(4); + expect(details.sessions).toHaveLength(5); const main = details.sessions?.find((s) => s.key === "main"); expect(main?.channel).toBe("whatsapp"); expect(main?.messages?.length).toBe(1); @@ -228,6 +236,9 @@ describe("sessions tools", () => { const dashboardChild = details.sessions?.find((s) => s.key === "agent:main:dashboard:child"); expect(dashboardChild?.parentSessionKey).toBe("agent:main:main"); + const subagentWorker = details.sessions?.find((s) => s.key === "agent:main:subagent:worker"); + expect(subagentWorker?.spawnedBy).toBe("agent:main:main"); + const cronOnly = await tool.execute("call2", { kinds: ["cron"] }); const cronDetails = cronOnly.details as { sessions?: Array>; diff --git a/src/agents/tools/sessions-helpers.ts b/src/agents/tools/sessions-helpers.ts index 4ea24d00b7b..63c87e16884 100644 --- a/src/agents/tools/sessions-helpers.ts +++ b/src/agents/tools/sessions-helpers.ts @@ -52,6 +52,7 @@ export type SessionListRow = { key: string; kind: SessionKind; channel: string; + spawnedBy?: string; label?: string; displayName?: string; parentSessionKey?: string; diff --git a/src/agents/tools/sessions-list-tool.ts b/src/agents/tools/sessions-list-tool.ts index 32a09c2bd5b..cea07e09f1e 100644 --- a/src/agents/tools/sessions-list-tool.ts +++ b/src/agents/tools/sessions-list-tool.ts @@ -193,6 +193,14 @@ export function createSessionsListTool(opts?: { key: displayKey, kind, channel: derivedChannel, + spawnedBy: + typeof entry.spawnedBy === "string" + ? resolveDisplaySessionKey({ + key: entry.spawnedBy, + alias, + mainKey, + }) + : undefined, label: typeof entry.label === "string" ? entry.label : undefined, displayName: typeof entry.displayName === "string" ? entry.displayName : undefined, parentSessionKey: