diff --git a/src/agents/openclaw-tools.sessions.test.ts b/src/agents/openclaw-tools.sessions.test.ts index cb4d95e05e0..172a944e859 100644 --- a/src/agents/openclaw-tools.sessions.test.ts +++ b/src/agents/openclaw-tools.sessions.test.ts @@ -120,6 +120,10 @@ describe("sessions tools", () => { updatedAt: 11, channel: "discord", displayName: "discord:g-dev", + status: "running", + startedAt: 100, + runtimeMs: 42, + childSessions: ["agent:main:subagent:worker"], }, { key: "cron:job-1", @@ -157,6 +161,10 @@ describe("sessions tools", () => { sessions?: Array<{ key?: string; channel?: string; + status?: string; + startedAt?: number; + runtimeMs?: number; + childSessions?: string[]; messages?: Array<{ role?: string }>; }>; }; @@ -166,6 +174,12 @@ describe("sessions tools", () => { expect(main?.messages?.length).toBe(1); expect(main?.messages?.[0]?.role).toBe("assistant"); + const group = details.sessions?.find((s) => s.key === "discord:group:dev"); + expect(group?.status).toBe("running"); + expect(group?.startedAt).toBe(100); + expect(group?.runtimeMs).toBe(42); + expect(group?.childSessions).toEqual(["agent:main:subagent:worker"]); + const cronOnly = await tool.execute("call2", { kinds: ["cron"] }); const cronDetails = cronOnly.details as { sessions?: Array>; diff --git a/src/agents/tools/sessions-list-tool.ts b/src/agents/tools/sessions-list-tool.ts index 0cba87e5653..6423ed3ea42 100644 --- a/src/agents/tools/sessions-list-tool.ts +++ b/src/agents/tools/sessions-list-tool.ts @@ -203,6 +203,21 @@ export function createSessionsListTool(opts?: { model: typeof entry.model === "string" ? entry.model : undefined, contextTokens: typeof entry.contextTokens === "number" ? entry.contextTokens : undefined, totalTokens: typeof entry.totalTokens === "number" ? entry.totalTokens : undefined, + status: typeof entry.status === "string" ? entry.status : undefined, + startedAt: typeof entry.startedAt === "number" ? entry.startedAt : undefined, + endedAt: typeof entry.endedAt === "number" ? entry.endedAt : undefined, + runtimeMs: typeof entry.runtimeMs === "number" ? entry.runtimeMs : undefined, + childSessions: Array.isArray(entry.childSessions) + ? entry.childSessions + .filter((value): value is string => typeof value === "string") + .map((value) => + resolveDisplaySessionKey({ + key: value, + alias, + mainKey, + }), + ) + : undefined, thinkingLevel: typeof entry.thinkingLevel === "string" ? entry.thinkingLevel : undefined, verboseLevel: typeof entry.verboseLevel === "string" ? entry.verboseLevel : undefined, systemSent: typeof entry.systemSent === "boolean" ? entry.systemSent : undefined,